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