a/ AliTRDCalibTask.cxx .h: one histo more to quantify the event selection if any...
[u/mrichter/AliRoot.git] / TRD / Cal / AliTRDCalDet.cxx
index 082181edd18a8c4af36796defdae44074535fc12..37058dffbad7fb4ca5ad8fad6a1ec176cbc67458 100644 (file)
@@ -171,6 +171,43 @@ Double_t AliTRDCalDet::GetRMS(AliTRDCalDet * const outlierDet) const
   return mean;
 }
 
+//____________________________________________________________________________________________
+Double_t AliTRDCalDet::GetRMSRobust(Double_t robust) const
+{
+  //
+  // Calculate the robust RMS
+  //
+
+  // sorted
+  Int_t *index = new Int_t[kNdet];
+  TMath::Sort((Int_t)kNdet,fData,index);
+  // reject
+  Double_t reject = (Int_t) (kNdet*(1-robust)/2.0);
+  if(reject <= 0.0) reject = 0.0;
+  if(reject >= kNdet) reject = 0.0;
+  //printf("Rejecter %f\n",reject);
+
+  Double_t *ddata = new Double_t[kNdet];
+  Int_t nPoints = 0;
+  for (Int_t i=0;i<kNdet;i++) {
+    Bool_t rej = kFALSE;
+    for(Int_t k = 0; k < reject; k++){
+      if(i==index[k]) rej = kTRUE;
+      if(i==index[kNdet-(k+1)]) rej  = kTRUE;
+    }
+    if(!rej){
+      ddata[nPoints]= fData[i];
+      nPoints++;
+    }
+  }
+  //printf("Number of points %d\n",nPoints);
+  Double_t mean = TMath::RMS(nPoints,ddata);
+  delete [] ddata;
+  delete [] index;
+  return mean;
+}
+
 //______________________________________________________________________________________________
 Double_t AliTRDCalDet::GetLTM(Double_t *sigma
                             , Double_t fraction
@@ -491,3 +528,5 @@ void AliTRDCalDet::Divide(const AliTRDCalDet * calDet)
        }
     }
 }
+
+