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 * @param dataset to use 028 */ 029 public void initialize(Dataset dataset); 030 031 /** 032 * Call to indicate dataset has been modified so statistics are not up-to-date 033 */ 034 public void setDirty(); 035 036 /** 037 * @return true if dataset has been modified 038 */ 039 public boolean isDirty(); 040 041 /** 042 * @param dataset dataset whose statistics is stored by this metadata 043 * @return true if dataset has been modified 044 * @since 2.2 045 */ 046 public boolean isDirty(Dataset dataset); 047 048 /** 049 * @param hash the hash to set 050 */ 051 public void setHash(int hash); 052 053 /** 054 * @param shape to hash with data 055 * @return the hash 056 */ 057 public int getHash(int[] shape); 058 059 /** 060 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 061 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 062 * ignore infinities separately. 063 * @return the maximum 064 */ 065 public T getMaximum(boolean... ignoreInvalids); 066 067 /** 068 * @param maximum the maximum to set 069 * @param minimum the minimum to set 070 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 071 */ 072 @Deprecated 073 public void setMaximumMinimum(T maximum, T minimum, boolean... ignoreInvalids); 074 075 /** 076 * @param maximum the maximum to set 077 * @param minimum the minimum to set 078 * @param sum the sum to set 079 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 080 * @since 2.1 081 */ 082 public void setMaximumMinimumSum(T maximum, T minimum, T sum, boolean... ignoreInvalids); 083 084 /** 085 * @param maximumPositions the maximum positions to set 086 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 087 */ 088 public void setMaximumPositions(List<int[]> maximumPositions, boolean... ignoreInvalids); 089 090 /** 091 * @param minimumPositions the minimum positions to set 092 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 093 */ 094 public void setMinimumPositions(List<int[]> minimumPositions, boolean... ignoreInvalids); 095 096 /** 097 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 098 * @return the maximum positions 099 */ 100 public List<int[]> getMaximumPositions(boolean... ignoreInvalids); 101 102 /** 103 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 104 * @return the minimum 105 */ 106 public T getMinimum(boolean... ignoreInvalids); 107 108 /** 109 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 110 * @return the minimum positions 111 */ 112 public List<int[]> getMinimumPositions(boolean... ignoreInvalids); 113 114 /** 115 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 116 * @return the number of samples 117 */ 118 public long getCount(boolean... ignoreInvalids); 119 120 /** 121 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 122 * @return the mean of samples 123 */ 124 public T getMean(boolean... ignoreInvalids); 125 126 /** 127 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 128 * @return the sum of samples 129 */ 130 public T getSum(boolean... ignoreInvalids); 131 132 /** 133 * @param isWholePopulation if false, consider as sample of population 134 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 135 * @return the variance of samples 136 */ 137 public double getVariance(boolean isWholePopulation, boolean... ignoreInvalids); 138 139 /** 140 * @param axis to reduce along 141 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 142 * @return the argument at which the maximum first occurs 143 */ 144 public Dataset getArgMaximum(int axis, boolean... ignoreInvalids); 145 146 /** 147 * @param axis to reduce along 148 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 149 * @return the argument at which the minimum first occurs 150 */ 151 public Dataset getArgMinimum(int axis, boolean... ignoreInvalids); 152 153 /** 154 * @param axis to reduce along 155 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 156 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 157 * ignore infinities separately. 158 * @return the maximum 159 */ 160 public Dataset getMaximum(int axis, boolean... ignoreInvalids); 161 162 /** 163 * @param axis to reduce along 164 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 165 * @return the minimum 166 */ 167 public Dataset getMinimum(int axis, boolean... ignoreInvalids); 168 169 /** 170 * @param axis to reduce along 171 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 172 * @return the number of samples 173 */ 174 public Dataset getCount(int axis, boolean... ignoreInvalids); 175 176 /** 177 * @param axis to reduce along 178 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 179 * @return the mean of samples 180 */ 181 public Dataset getMean(int axis, boolean... ignoreInvalids); 182 183 /** 184 * @param axis to reduce along 185 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 186 * @return the sum of samples 187 */ 188 public Dataset getSum(int axis, boolean... ignoreInvalids); 189 190 /** 191 * @param axis to reduce along 192 * @param isWholePopulation if false, consider as sample of population 193 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 194 * @return the variance of samples 195 */ 196 public Dataset getVariance(int axis, boolean isWholePopulation, boolean... ignoreInvalids); 197 198 /** 199 * @param axes to reduce along 200 * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If 201 * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to 202 * ignore infinities separately. 203 * @return the maximum 204 * @since 2.2 205 */ 206 public Dataset getMaximum(int[] axes, boolean... ignoreInvalids); 207 208 /** 209 * @param axes to reduce over 210 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 211 * @return the minimum 212 * @since 2.2 213 */ 214 public Dataset getMinimum(int[] axes, boolean... ignoreInvalids); 215 216 /** 217 * @param axes to reduce over 218 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 219 * @return the number of samples 220 * @since 2.2 221 */ 222 public Dataset getCount(int[] axes, boolean... ignoreInvalids); 223 224 /** 225 * @param axes to reduce over 226 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 227 * @return the mean of samples 228 * @since 2.2 229 */ 230 public Dataset getMean(int[] axes, boolean... ignoreInvalids); 231 232 /** 233 * @param axes to reduce over 234 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 235 * @return the sum of samples 236 * @since 2.2 237 */ 238 public Dataset getSum(int[] axes, boolean... ignoreInvalids); 239 240 /** 241 * @param axes to reduce along 242 * @param isWholePopulation if false, consider as sample of population 243 * @param ignoreInvalids see {@link #getMaximum(boolean...)} for explanation 244 * @return the variance of samples 245 * @since 2.2 246 */ 247 public Dataset getVariance(int[] axes, boolean isWholePopulation, boolean... ignoreInvalids); 248}