BOOL Get_Stats( double *array, long num_samples, const filter_option, long var_limit, PTEST_STATS stats) { double Averagetmp; double StdDevtmp; long NumSamplestmp; if(!GetAverage(array, num_samples, &Averagetmp)) return FALSE; SortUp(array, num_samples); if(!GetStdDev(array, Averagetmp, num_samples, &StdDevtmp)) return FALSE; stats->Minimum_Result = array[0]; stats->Maximum_Result = array[num_samples - 1]; if(filter_option == NO_FILTER) { stats->Average = Averagetmp; stats->StdDev = StdDevtmp; stats->NumSamplesValid = num_samples; return TRUE; } NumSamplestmp = num_samples; if(!FilterResults(array,&Averagetmp,&StdDevtmp,&NumSamplestmp,var_limit,filter_option)) return FALSE; stats->Average = Averagetmp; stats->StdDev = StdDevtmp; stats->NumSamplesValid = NumSamplestmp; return TRUE; }
JBoolean JPlotLinearFit::GetGoodnessOfFit ( JFloat* value ) const { const JPlotDataBase* data = GetDataToFit(); const JSize count = data->GetElementCount(); if (data->HasXErrors() || data->HasYErrors()) { *value = itsChi2/(itsRealCount - 2); } else { *value = GetStdDev(); } return kJTrue; }
BOOL FilterResults( double Sorted_Array[], double *tmpAverage, double *tmpSD, long *tmpNumSamples, long limit, const filter_option) { switch (filter_option) { case HI_FILTER: { while(*tmpSD > (double)limit) { if(*tmpNumSamples <= 2)return FALSE; (*tmpAverage) *= (*tmpNumSamples); (*tmpAverage) -= Sorted_Array[(*tmpNumSamples) - 1]; (*tmpNumSamples)--; (*tmpAverage) /= (*tmpNumSamples); GetStdDev(Sorted_Array, *tmpAverage, *tmpNumSamples, &(*tmpSD)); } if(*tmpSD < 0)return FALSE; } break; case LO_FILTER: { while(*tmpSD > (double)limit) { if(*tmpNumSamples <= 2)return FALSE; (*tmpAverage) *= (*tmpNumSamples); (*tmpAverage) -= (*Sorted_Array); Sorted_Array++; (*tmpNumSamples)--; (*tmpAverage) /= (*tmpNumSamples); GetStdDev(Sorted_Array, *tmpAverage, *tmpNumSamples, &(*tmpSD)); } if(*tmpSD < 0)return FALSE; } break; case HI_LO_FILTER: { while(*tmpSD > (double)limit) { if(*tmpNumSamples <= 2)return FALSE; if(fabs((*Sorted_Array) - (*tmpAverage)) > fabs(Sorted_Array[*tmpNumSamples - 1] - *tmpAverage)) { (*tmpAverage) *= (*tmpNumSamples); (*tmpAverage) -= (*Sorted_Array); Sorted_Array++; } else { (*tmpAverage) *= (*tmpNumSamples); (*tmpAverage) -= Sorted_Array[(*tmpNumSamples) - 1]; } (*tmpNumSamples)--; (*tmpAverage) /= (*tmpNumSamples); GetStdDev(Sorted_Array, *tmpAverage, *tmpNumSamples, &(*tmpSD)); } if(*tmpSD < 0)return FALSE; } break; default: return FALSE; } //switch filter_option return TRUE; }
/* ********************************************************************** */ void Print_Me(){ printf("Min:%1.4f, Max:%1.4f, Avg:%1.4f, StdDev:%1.4f ", Min, Max, Avg, GetStdDev()); }