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 hash the hash to set
044         */
045        public void setHash(int hash);
046
047        /**
048         * @param shape
049         * @return the hash
050         */
051        public int getHash(int[] shape);
052
053        /**
054         * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If
055         * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to
056         * ignore infinities separately.
057         * @return the maximum
058         */
059        public T getMaximum(boolean... ignoreInvalids);
060
061        /**
062         * @param maximum the maximum to set
063         * @param minimum the minimum to set
064         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
065         */
066        public void setMaximumMinimum(T maximum, T minimum, boolean... ignoreInvalids);
067
068        /**
069         * @param maximumPositions the maximum positions to set
070         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
071         */
072        public void setMaximumPositions(List<int[]> maximumPositions, boolean... ignoreInvalids);
073
074        /**
075         * @param minimumPositions the minimum positions to set
076         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
077         */
078        public void setMinimumPositions(List<int[]> minimumPositions, boolean... ignoreInvalids);
079
080        /**
081         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
082         * @return the maximum positions
083         */
084        public List<int[]> getMaximumPositions(boolean... ignoreInvalids);
085
086        /**
087         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
088         * @return the minimum
089         */
090        public T getMinimum(boolean... ignoreInvalids);
091
092        /**
093         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
094         * @return the minimum positions
095         */
096        public List<int[]> getMinimumPositions(boolean... ignoreInvalids);
097
098        /**
099         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
100         * @return the number of samples
101         */
102        public long getCount(boolean... ignoreInvalids);
103
104        /**
105         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
106         * @return the mean of samples
107         */
108        public T getMean(boolean... ignoreInvalids);
109
110        /**
111         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
112         * @return the sum of samples
113         */
114        public T getSum(boolean... ignoreInvalids);
115
116        /**
117         * @param isWholePopulation
118         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
119         * @return the variance of samples
120         */
121        public double getVariance(boolean isWholePopulation, boolean... ignoreInvalids);
122
123        /**
124         * @param ignoreInvalids - Can be null, one boolean, or two booleans. By default, both are false. If
125         * the first boolean is true, will ignore NaNs and ignore infinities. Use the second boolean to
126         * ignore infinities separately.
127         * @return the maximum
128         */
129        public Dataset getMaximum(int axis, boolean... ignoreInvalids);
130
131        /**
132         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
133         * @return the minimum
134         */
135        public Dataset getMinimum(int axis, boolean... ignoreInvalids);
136
137        /**
138         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
139         * @return the argument at which the maximum first occurs
140         */
141        public Dataset getArgMaximum(int axis, boolean... ignoreInvalids);
142
143        /**
144         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
145         * @return the argument at which the minimum first occurs
146         */
147        public Dataset getArgMinimum(int axis, boolean... ignoreInvalids);
148
149        // TODO LongDataset
150        /**
151         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
152         * @return the number of samples
153         */
154        public Dataset getCount(int axis, boolean... ignoreInvalids);
155
156        /**
157         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
158         * @return the mean of samples
159         */
160        public Dataset getMean(int axis, boolean... ignoreInvalids);
161
162        /**
163         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
164         * @return the sum of samples
165         */
166        public Dataset getSum(int axis, boolean... ignoreInvalids);
167
168        /**
169         * @param isWholePopulation
170         * @param ignoreInvalids @see {@link #getMaximum(boolean...)} for explanation
171         * @return the variance of samples
172         */
173        public Dataset getVariance(int axis, boolean isWholePopulation, boolean... ignoreInvalids);
174}