+Float_t AliMathBase::GetCOG(Short_t *arr, Int_t nBins, Float_t xMin, Float_t xMax, Float_t *rms, Float_t *sum)
+{
+ //
+ // calculate center of gravity rms and sum for array 'arr' with nBins an a x range xMin to xMax
+ // return COG; in case of failure return xMin
+ //
+ Float_t meanCOG = 0;
+ Float_t rms2COG = 0;
+ Float_t sumCOG = 0;
+ Int_t npoints = 0;
+
+ Float_t binWidth = (xMax-xMin)/(Float_t)nBins;
+
+ for (Int_t ibin=0; ibin<nBins; ibin++){
+ Float_t entriesI = (Float_t)arr[ibin];
+ Double_t xcenter = xMin+(ibin+0.5)*binWidth;
+ if ( entriesI>0 ){
+ meanCOG += xcenter*entriesI;
+ rms2COG += xcenter*entriesI*xcenter;
+ sumCOG += entriesI;
+ npoints++;
+ }
+ }
+ if ( sumCOG == 0 ) return xMin;
+ meanCOG/=sumCOG;
+
+ if ( rms ){
+ rms2COG /=sumCOG;
+ (*rms) = TMath::Sqrt(TMath::Abs(meanCOG*meanCOG-rms2COG));
+ if ( npoints == 1 ) (*rms) = binWidth/TMath::Sqrt(12);
+ }
+
+ if ( sum )
+ (*sum) = sumCOG;
+
+ return meanCOG;
+}
+
+