#include #include #include #include template T absval(T value) { if( value > 0) return value; else return 0-value; } //-------------------------------------------------------------------- template void findMinMax(const T *array, const int size, T &min, T &max) { min = max = array[0]; for(int i=1;imax) max=array[i]; } } template void findMinMax(const int *array, const int size, int &min, int &max); template void findMinMax(const float *array, const int size, float &min, float &max); //-------------------------------------------------------------------- template float findMean(T *array, int size) { float mean = array[0]; for(int i=1;i(int *array, int size); template float findMean(float *array, int size); //-------------------------------------------------------------------- template float findStddev(T *array, int size) { float mean = findMean(array,size); float stddev = (array[0]-mean) * (array[0]-mean); for(int i=1;i(int *array, int size); template float findStddev(float *array, int size); //-------------------------------------------------------------------- template T findMedian(T *array, int size) { // NOTE: madfm = median absolute deviation from median T *newarray = new T[size]; T median; for(int i=0;i(int *array, int size); template float findMedian(float *array, int size); //-------------------------------------------------------------------- template T findMADFM(T *array, int size) { // NOTE: madfm = median absolute deviation from median T *newarray = new T[size]; T median = findMedian(array,size); T madfm; for(int i=0;i(int *array, int size); template float findMADFM(float *array, int size); //-------------------------------------------------------------------- template void findMedianStats(T *array, int size, T &median, T &madfm) { // NOTE: madfm = median absolute deviation from median if(size==0){ std::cerr << "Error in findMedianStats: zero sized array!\n"; return; } T *newarray = new T[size]; for(int i=0;i(int *array, int size, int &median, int &madfm); template void findMedianStats(long *array, int size, long &median, long &madfm); template void findMedianStats(float *array, int size, float &median, float &madfm); template void findMedianStats(double *array, int size, double &median, double &madfm); //-------------------------------------------------------------------- template void findMedianStats(T *array, int size, bool *isGood, T &median, T &madfm) { // NOTE: madfm = median absolute deviation from median int goodSize=0; for(int i=0;i(int *array, int size, bool *isGood, int &median, int &madfm); template void findMedianStats(long *array, int size, bool *isGood, long &median, long &madfm); template void findMedianStats(float *array, int size, bool *isGood, float &median, float &madfm); template void findMedianStats(double *array, int size, bool *isGood, double &median, double &madfm); //-------------------------------------------------------------------- template void findNormalStats(T *array, int size, float &mean, float &stddev) { if(size==0){ std::cerr << "Error in findNormalStats: zero sized array!\n"; return; } mean = array[0]; for(int i=1;i(int *array, int size, float &mean, float &stddev); template void findNormalStats(long *array, int size, float &mean, float &stddev); template void findNormalStats(float *array, int size, float &mean, float &stddev); template void findNormalStats(double *array, int size, float &mean, float &stddev); //-------------------------------------------------------------------- template void findNormalStats(T *array, int size, bool *isGood, float &mean, float &stddev) { int goodSize=0; for(int i=0;i(int *array, int size, bool *isGood, float &mean, float &stddev); template void findNormalStats(long *array, int size, bool *isGood, float &mean, float &stddev); template void findNormalStats(float *array, int size, bool *isGood, float &mean, float &stddev); template void findNormalStats(double *array, int size, bool *isGood, float &mean, float &stddev); //-------------------------------------------------------------------- void findTrimmedHistStatsOLD(float *array, const int size, float &tmean, float &tsigma) { const int nbin = 100; float *num = new float[nbin]; bool *keep = new bool[nbin]; // HOW MANY VALUES IN EACH BIN? float min,max; findMinMax(array,size,min,max); for(int i=0; i=0)&&(binnum[binmax]) binmax = i; for(int i=0; i=num[binmax]/2); float *newarray = new float[size]; int newsize = 0; for(int i=0; i=0)&&(binnum[binmax]) binmax = i; for(int i=0; i=num[binmax]/2); float *newarray = new float[size]; int newsize = 0; for(int i=0; i=size-width/2) end=size-1; else end=i+width/2; if(linear_regression(size,sorted,cumul,beg,end,slope,eSlope,inter,eInter,r)==0) angle[i] = atan( fabs(slope) ) * 180. / M_PI; else angle[i] = 90.; } // int start = 0; // while(angle[start] < 45.) start++; // int finish = size-1; // while(angle[finish] < 45.) finish--; int maxpt = 0; for(int i = 1; iangle[maxpt]) maxpt=i; int start = maxpt; while((start>0)&&(angle[start]>45.)) start--; int finish = maxpt; while((finish < size-1)&&(angle[finish]>45.)) finish++; // std::cerr << "npts = " << size << ", start = " << start << ", finish = " << finish << std::endl; int trimSize=0; float *newarray = new float[finish-start+1]; for(int i=0;i