]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDpidUtil.cxx
Coding rules
[u/mrichter/AliRoot.git] / TRD / AliTRDpidUtil.cxx
index fa2668fcc9022670435727929b70a23a0f7dc567..277b9a492b5e375633dce0ccd2bb70f491a9e73f 100644 (file)
@@ -1,3 +1,13 @@
+/***********************************************************************************************************
+ *                                                                                                         *
+ * Helper class for TRD PID efficiency calculation Calculation of the hadron efficiency depenedent on      *
+ * momentum and of the errors implemented in function CalculatePionEff. The pion efficiency is based on a  * 
+ * predefined electron efficiency. The default is 90%. To change the, one has to call the function         *
+ * SetElectronEfficiency.                                                                                  *
+ * Other Helper functions decide based on 90% electron efficiency whether a certain track is accepted      *
+ * as Electron Track. The reference data is stored in the TRD OCDB.                                        *
+ *                                                                                                         *
+ ***********************************************************************************************************/
 #include "TObject.h"
 #include "TObjArray.h"
 #include "TMath.h"
@@ -18,7 +28,7 @@
 ClassImp(AliTRDpidUtil)
 
 
-Float_t AliTRDpidUtil::fEleEffi = 0.9;
+Float_t AliTRDpidUtil::fgEleEffi = 0.9;
 
 //________________________________________________________________________
 AliTRDpidUtil::AliTRDpidUtil() 
@@ -33,8 +43,6 @@ AliTRDpidUtil::AliTRDpidUtil()
   //
 }
 
-
-
 //________________________________________________________________________
 Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
 // Double_t  AliTRDpidUtil::GetError()
@@ -55,9 +63,9 @@ Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
   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 SumElecsE[kBins+2], SumPionsE[kBins+2];  // array of the integrated sum in each bin
-  memset(SumElecsE, 0, (kBins+2)*sizeof(Double_t));
-  memset(SumPionsE, 0, (kBins+2)*sizeof(Double_t));
+  Double_t sumElecE[kBins+2], sumPionsE[kBins+2];  // array of the integrated sum in each bin
+  memset(sumElecE, 0, (kBins+2)*sizeof(Double_t));
+  memset(sumPionsE, 0, (kBins+2)*sizeof(Double_t));
 
 
   // calculate electron efficiency of each bin
@@ -65,12 +73,12 @@ Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
    aBinSumE = 0;
     aBinSumE = histo1 -> GetBinContent(abinE);
     
-    SumElecsE[abinE] = SumElecsE[abinE+1] + aBinSumE;
+    sumElecE[abinE] = sumElecE[abinE+1] + aBinSumE;
 
-    if((SumElecsE[abinE] >= fEleEffi) && (bFirst == 1)){
+    if((sumElecE[abinE] >= fgEleEffi) && (bFirst == 1)){
       bFirst = 0;
       cbinE = abinE;
-      fCalcEleEffi = (SumElecsE[cbinE]); 
+      fCalcEleEffi = (sumElecE[cbinE]); 
     }
   }
   
@@ -81,29 +89,29 @@ Bool_t  AliTRDpidUtil::CalculatePionEffi(TH1* histo1, TH1* histo2)
     bBinSumE = 0;
     bBinSumE = histo2 -> GetBinContent(bbinE);
 
-    SumPionsE[bbinE] = SumPionsE[bbinE+1] + bBinSumE;
+    sumPionsE[bbinE] = sumPionsE[bbinE+1] + bBinSumE;
     if(bbinE == cbinE){
-      fPionEffi = (SumPionsE[cbinE]);
+      fPionEffi = (sumPionsE[cbinE]);
     }
   }
   
 
   // pion efficiency vs electron efficiency
-  TGraph gEffis(kBins, SumElecsE, SumPionsE);
+  TGraph gEffis(kBins, sumElecE, sumPionsE);
 
   // use fit function to get derivate of the TGraph for error calculation
-  TF1 f1("f1","[0]*x*x+[1]*x+[2]", fEleEffi-.05, fEleEffi+.05);
-  gEffis.Fit(&f1, "Q", "", fEleEffi-.05, fEleEffi+.05);
+  TF1 f1("f1","[0]*x*x+[1]*x+[2]", fgEleEffi-.05, fgEleEffi+.05);
+  gEffis.Fit(&f1, "Q", "", fgEleEffi-.05, fgEleEffi+.05);
   
   // 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!");
     return kFALSE;
   }
-  fError = sqrt(((1/histo2 -> GetEntries())*fPionEffi*(1-fPionEffi))+((f1.Derivative(fEleEffi))*(f1.Derivative(fEleEffi))*(1/histo1 -> GetEntries())*fCalcEleEffi*(1-fCalcEleEffi)));
+  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", fEleEffi, f1.Derivative(fEleEffi)));
+//   AliInfo(Form("Derivative at %4.2f : %f\n", fgEleEffi, f1.Derivative(fgEleEffi)));
   return kTRUE;
 }
 
@@ -154,10 +162,10 @@ Bool_t AliTRDpidUtil::IsElectron(const AliESDtrack *track, ETRDPIDMethod method)
   if(method == kESD) method = kNN;
   TString histname[2] = {"fHistThreshLQ", "fHistThreshNN"};
   AliCDBManager *cdb = AliCDBManager::Instance(); 
-  AliCDBEntry *cdb_thresholds = cdb->Get("TRD/Calib/PIDThresholds");
-  TObjArray *histos = dynamic_cast<TObjArray *>(cdb_thresholds->GetObject());
-  TH1 * threshold_hist = dynamic_cast<TH1F *>(histos->FindObject(histname[method].Data()));
-  Double_t threshold = threshold_hist->GetBinContent(GetMomentumBin(track->P()) + 1);
+  AliCDBEntry *cdbThresholds = cdb->Get("TRD/Calib/PIDThresholds");
+  TObjArray *histos = dynamic_cast<TObjArray *>(cdbThresholds->GetObject());
+  TH1 * thresholdHist = dynamic_cast<TH1F *>(histos->FindObject(histname[method].Data()));
+  Double_t threshold = thresholdHist->GetBinContent(GetMomentumBin(track->P()) + 1);
   
   // Do Decision
   Double_t pid_probs[5];
@@ -176,10 +184,10 @@ Double_t AliTRDpidUtil::GetSystematicError(const AliESDtrack *track, ETRDPIDMeth
   if(method == kESD) method = kNN;
   TString histname[2] = {"fHistPionEffLQ", "fHistPionEffNN"};
   AliCDBManager *cdb = AliCDBManager::Instance(); 
-  AliCDBEntry *cdb_thresholds = cdb->Get("TRD/Calib/PIDThresholds");
-  TObjArray *histos = dynamic_cast<TObjArray *>(cdb_thresholds->GetObject());
-  TH1 * threshold_hist = dynamic_cast<TH1F *>(histos->FindObject(histname[method].Data()));
-  return threshold_hist->GetBinContent(GetMomentumBin(track->P()) + 1);
+  AliCDBEntry *cdbThresholds = cdb->Get("TRD/Calib/PIDThresholds");
+  TObjArray *histos = dynamic_cast<TObjArray *>(cdbThresholds->GetObject());
+  TH1 * thresholdHist = dynamic_cast<TH1F *>(histos->FindObject(histname[method].Data()));
+  return thresholdHist->GetBinContent(GetMomentumBin(track->P()) + 1);
 }
 
 //________________________________________________________________________