]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
streamline electron efficiency code
authorabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 15 Sep 2010 07:34:07 +0000 (07:34 +0000)
committerabercuci <abercuci@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 15 Sep 2010 07:34:07 +0000 (07:34 +0000)
TRD/AliTRDpidUtil.cxx

index 7a58d9ecf06705c5dfa2d1e0893475d41faa3137..ffd3ff9fdd9c86b7ca4798d978778ea429c30cf4 100644 (file)
@@ -53,51 +53,48 @@ Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
 
   histo1 -> SetLineColor(kRed);
   histo2 -> SetLineColor(kBlue); 
-  if(!histo1 -> GetEntries() || !histo2 -> GetEntries()){
-    AliWarning("Histo with no entries !");
+  if(!histo1->GetEntries() || !histo2 -> GetEntries()){
+    AliError("Probability histos empty !");
+    return kFALSE;
+  }
+  if(histo1->GetNbinsX() != histo2->GetNbinsX()){
+    AliError(Form("Electron probability discretized differently from pions [%d %d] !", histo1->GetNbinsX(), histo2->GetNbinsX()));
     return kFALSE;
   }
   histo1 -> Scale(1./histo1->GetEntries());
   histo2 -> Scale(1./histo2->GetEntries());
 
-  Int_t abinE, bbinE, cbinE = -1;                    
-  Double_t aBinSumE, bBinSumE;                  // content of a single bin
-  Bool_t bFirst = 1;                            // checks if threshold is crossed for the first time
-  Double_t sumElecE[kBins+2], sumPionsE[kBins+2];  // array of the integrated sum in each bin
+  // array of the integrated sum in each bin
+  Double_t sumElecE[kBins+2], sumPionsE[kBins+2];  
   memset(sumElecE, 0, (kBins+2)*sizeof(Double_t));
   memset(sumPionsE, 0, (kBins+2)*sizeof(Double_t));
 
-
-  // calculate electron efficiency of each bin
-  for (abinE = (histo1 -> GetNbinsX()); abinE >= 0; abinE--){  
-   aBinSumE = 0;
-    aBinSumE = histo1 -> GetBinContent(abinE);
-    
-    sumElecE[abinE] = sumElecE[abinE+1] + aBinSumE;
-
-    if((sumElecE[abinE] >= fgEleEffi) && (bFirst == 1)){
-      bFirst = 0;
+  Int_t nbinE(histo1->GetNbinsX()),
+        abinE(nbinE),
+        bbinE(nbinE),
+        cbinE(-1);
+  // calculate electron efficiency for each bin
+  // and also integral distribution
+  for(Bool_t bFirst(kTRUE); abinE--;){
+    sumElecE[abinE] = sumElecE[abinE+1] + histo1->GetBinContent(abinE+1);
+    if((sumElecE[abinE] >= fgEleEffi) && bFirst){
       cbinE = abinE;
-      fCalcEleEffi = (sumElecE[cbinE]); 
+      fCalcEleEffi = sumElecE[cbinE];
+      bFirst = kFALSE;
     }
   }
-  
-  fThreshold = histo1 -> GetBinCenter(cbinE);
+  fThreshold = histo1->GetBinCenter(cbinE);
 
   // calculate pion efficiency of each bin
-  for (bbinE = (histo2 -> GetNbinsX()); bbinE > abinE; bbinE--){
-    bBinSumE = 0;
-    bBinSumE = histo2 -> GetBinContent(bbinE);
-
-    sumPionsE[bbinE] = sumPionsE[bbinE+1] + bBinSumE;
-    if(bbinE == cbinE){
-      fPionEffi = (sumPionsE[cbinE]);
-    }
+  // and also integral distribution
+  for (;bbinE--;){
+    sumPionsE[bbinE] = sumPionsE[bbinE+1] + histo2->GetBinContent(bbinE+1);
+    if(bbinE == cbinE) fPionEffi = sumPionsE[cbinE];
   }
   
 
   // pion efficiency vs electron efficiency
-  TGraph gEffis(kBins, sumElecE, sumPionsE);
+  TGraph gEffis(nbinE, sumElecE, sumPionsE);
 
   // use fit function to get derivate of the TGraph for error calculation
   TF1 f1("f1","[0]*x*x+[1]*x+[2]", fgEleEffi-.05, fgEleEffi+.05);
@@ -105,13 +102,13 @@ Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
   
   // return the error of the pion efficiency
   if(((1.-fPionEffi) < 0) || ((1.-fCalcEleEffi) < 0)){
-    AliWarning(" EleEffi or PioEffi > 1. Error can not be calculated. Please increase statistics or check your simulation!");
+    AliError(" EleEffi or PioEffi > 1. Error can not be calculated. Please increase statistics or check your simulation!");
     return kFALSE;
   }
   fError = sqrt(((1/histo2 -> GetEntries())*fPionEffi*(1-fPionEffi))+((f1.Derivative(fgEleEffi))*(f1.Derivative(fgEleEffi))*(1/histo1 -> GetEntries())*fCalcEleEffi*(1-fCalcEleEffi)));
 
-//   AliInfo(Form("Pion Effi at [%f] : [%f +/- %f], Threshold[%f]", fCalcEleEffi, fPionEffi, fError, fThreshold));
-//   AliInfo(Form("Derivative at %4.2f : %f\n", fgEleEffi, f1.Derivative(fgEleEffi)));
+  AliDebug(2, Form("Pion Effi at [%f] : [%f +/- %f], Threshold[%f]", fCalcEleEffi, fPionEffi, fError, fThreshold));
+  AliDebug(2, Form("Derivative at %4.2f : %f\n", fgEleEffi, f1.Derivative(fgEleEffi)));
   return kTRUE;
 }