001/*- 002 ******************************************************************************* 003 * Copyright (c) 2017 Diamond Light Source Ltd. 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the Eclipse Public License v1.0 006 * which accompanies this distribution, and is available at 007 * http://www.eclipse.org/legal/epl-v10.html 008 * 009 * Contributors: 010 * Peter Chang - initial API and implementation and/or initial documentation 011 *******************************************************************************/ 012 013package org.eclipse.january.metadata; 014 015import java.util.List; 016 017import org.eclipse.january.dataset.Dataset; 018 019/** 020 * Store standard statistics 021 * @param <T> is either a Number or a double array 022 * @since 2.0 023 */ 024public interface StatisticsMetadata<T> extends MetadataType { 025 026 /** 027 * 028 * @param dataset 029 */ 030 public void initialize(Dataset dataset); 031 032 /** 033 * Call to indicate dataset has been modified so statistics are not up-to-date 034 */ 035 public void setDirty(); 036 037 /** 038 * @return true if dataset has been modified 039 */ 040 public boolean isDirty(); 041 042 /** 043 * @param dataset dataset whose statistics is stored by this metadata 044 * @return true if dataset has been modified 045 * @since 2.2 046 */ 047 public boolean isDirty(Dataset dataset); 048 049 /** 050 * @param hash the hash to set 051 */ 052 public void setHash(int hash); 053 054 /** 055 * @param shape 056 * @return the hash 057 */ 058 public int getHash(int[] shape); 059 060 /** 061 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 062 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 063 * ignore infinities separately. 064 * @return the maximum 065 */ 066 public T getMaximum(boolean... ignoreInvalids); 067 068 /** 069 * @param maximum the maximum to set 070 * @param minimum the minimum to set 071 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 072 */ 073 @Deprecated 074 public void setMaximumMinimum(T maximum, T minimum, boolean... ignoreInvalids); 075 076 /** 077 * @param maximum the maximum to set 078 * @param minimum the minimum to set 079 * @param sum the sum to set 080 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 081 * @since 2.1 082 */ 083 public void setMaximumMinimumSum(T maximum, T minimum, T sum, boolean... ignoreInvalids); 084 085 /** 086 * @param maximumPositions the maximum positions to set 087 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 088 */ 089 public void setMaximumPositions(List<int[]> maximumPositions, boolean... ignoreInvalids); 090 091 /** 092 * @param minimumPositions the minimum positions to set 093 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 094 */ 095 public void setMinimumPositions(List<int[]> minimumPositions, boolean... ignoreInvalids); 096 097 /** 098 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 099 * @return the maximum positions 100 */ 101 public List<int[]> getMaximumPositions(boolean... ignoreInvalids); 102 103 /** 104 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 105 * @return the minimum 106 */ 107 public T getMinimum(boolean... ignoreInvalids); 108 109 /** 110 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 111 * @return the minimum positions 112 */ 113 public List<int[]> getMinimumPositions(boolean... ignoreInvalids); 114 115 /** 116 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 117 * @return the number of samples 118 */ 119 public long getCount(boolean... ignoreInvalids); 120 121 /** 122 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 123 * @return the mean of samples 124 */ 125 public T getMean(boolean... ignoreInvalids); 126 127 /** 128 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 129 * @return the sum of samples 130 */ 131 public T getSum(boolean... ignoreInvalids); 132 133 /** 134 * @param isWholePopulation 135 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 136 * @return the variance of samples 137 */ 138 public double getVariance(boolean isWholePopulation, boolean... ignoreInvalids); 139 140 /** 141 * @param axis 142 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 143 * @return the argument at which the maximum first occurs 144 */ 145 public Dataset getArgMaximum(int axis, boolean... ignoreInvalids); 146 147 /** 148 * @param axis 149 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 150 * @return the argument at which the minimum first occurs 151 */ 152 public Dataset getArgMinimum(int axis, boolean... ignoreInvalids); 153 154 /** 155 * @param axis 156 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 157 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 158 * ignore infinities separately. 159 * @return the maximum 160 */ 161 public Dataset getMaximum(int axis, boolean... ignoreInvalids); 162 163 /** 164 * @param axis 165 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 166 * @return the minimum 167 */ 168 public Dataset getMinimum(int axis, boolean... ignoreInvalids); 169 170 /** 171 * @param axis 172 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 173 * @return the number of samples 174 */ 175 public Dataset getCount(int axis, boolean... ignoreInvalids); 176 177 /** 178 * @param axis 179 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 180 * @return the mean of samples 181 */ 182 public Dataset getMean(int axis, boolean... ignoreInvalids); 183 184 /** 185 * @param axis 186 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 187 * @return the sum of samples 188 */ 189 public Dataset getSum(int axis, boolean... ignoreInvalids); 190 191 /** 192 * @param axis 193 * @param isWholePopulation 194 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 195 * @return the variance of samples 196 */ 197 public Dataset getVariance(int axis, boolean isWholePopulation, boolean... ignoreInvalids); 198 199 /** 200 * @param axes 201 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 202 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 203 * ignore infinities separately. 204 * @return the maximum 205 * @since 2.2 206 */ 207 public Dataset getMaximum(int[] axes, boolean... ignoreInvalids); 208 209 /** 210 * @param axes 211 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 212 * @return the minimum 213 * @since 2.2 214 */ 215 public Dataset getMinimum(int[] axes, boolean... ignoreInvalids); 216 217 /** 218 * @param axes 219 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 220 * @return the number of samples 221 * @since 2.2 222 */ 223 public Dataset getCount(int[] axes, boolean... ignoreInvalids); 224 225 /** 226 * @param axes 227 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 228 * @return the mean of samples 229 * @since 2.2 230 */ 231 public Dataset getMean(int[] axes, boolean... ignoreInvalids); 232 233 /** 234 * @param axes 235 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 236 * @return the sum of samples 237 * @since 2.2 238 */ 239 public Dataset getSum(int[] axes, boolean... ignoreInvalids); 240 241 /** 242 * @param axes 243 * @param isWholePopulation 244 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 245 * @return the variance of samples 246 * @since 2.2 247 */ 248 public Dataset getVariance(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids); 249}