From d7aee360d80aa97a5453b03e298207ec9cb0da75 Mon Sep 17 00:00:00 2001 From: abercuci Date: Wed, 15 Sep 2010 07:34:07 +0000 Subject: [PATCH] streamline electron efficiency code --- TRD/AliTRDpidUtil.cxx | 59 ++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/TRD/AliTRDpidUtil.cxx b/TRD/AliTRDpidUtil.cxx index 7a58d9ecf06..ffd3ff9fdd9 100644 --- a/TRD/AliTRDpidUtil.cxx +++ b/TRD/AliTRDpidUtil.cxx @@ -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; } -- 2.39.3