23 #include "AliAODCaloCluster.h" 24 #include "AliESDCaloCluster.h" 25 #include "AliVCaloCells.h" 26 #include "AliVTrack.h" 30 #include "AliVEvent.h" 34 #include "AliEMCALPIDUtils.h" 45 TObject(), fDebug(-1), fParticleFlux(kLow),
47 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
48 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
49 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
50 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
51 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
52 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
53 fPHOSPhotonWeightFormulaExpression(
""),
54 fPHOSPi0WeightFormulaExpression(
""),
56 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
57 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
58 fEMCALUseTrackPtDepMatchingCut(0),
59 fEMCALFuncTrackPtDepDEta(0), fEMCALFuncTrackPtDepDPhi(0),
60 fEMCALFuncTrackPtDepDEtaString(
""), fEMCALFuncTrackPtDepDPhiString(
""),
61 fEMCALFuncTrackPtDepDEtaNParam(0) , fEMCALFuncTrackPtDepDPhiNParam(0),
62 fEMCALFuncTrackPtDepDEtaParam (0) , fEMCALFuncTrackPtDepDPhiParam (0),
64 fPHOSDispersionCut(1000), fPHOSRCut(1000),
66 fUseSimpleMassCut(kFALSE),
67 fUseSimpleM02Cut(kFALSE),
68 fUseSplitAsyCut(kFALSE),
69 fUseSplitSSCut(kTRUE),
70 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
71 fMassEtaMin(0), fMassEtaMax(0),
72 fMassPi0Min(0), fMassPi0Max(0),
73 fMassPhoMin(0), fMassPhoMax(0),
74 fM02MaxParamShiftNLMN(0),
75 fSplitWidthSigma(0), fMassShiftHighECell(0)
206 AliInfo(
"SetLOWFluxParam");
211 AliInfo(
"SetHighFluxParam");
376 Float_t abasy = TMath::Abs(asy);
392 if(abasy < cut)
return kTRUE;
407 if(mass < fMassPi0Max && mass >
fMassPi0Min)
return kTRUE;
416 if(energy > fMassPi0Param[inlm][2]) meanMass = energy * fMassPi0Param[inlm][4] + fMassPi0Param[inlm][3];
425 else if( energy > fWidthPi0Param[inlm][2])
426 width = energy * energy * fWidthPi0Param[inlm][5] + energy * fWidthPi0Param[inlm][4] + fWidthPi0Param[inlm][3];
433 if(energy < 10 && minMass < fMassPi0Param[inlm][5] ) minMass = fMassPi0Param[inlm][5];
438 if(mass < maxMass && mass > minMass)
return kTRUE;
452 if(m02 < maxCut && m02 > minCut)
return kTRUE;
494 if(m02 < maxCut && m02 > minCut)
return kTRUE;
530 if(nlm==1) shiftE=energy-28;
550 if(m02 < maxCut && m02 > minCut)
return kTRUE;
585 if(m02 < maxCut && m02 > minCut)
return kTRUE;
608 Float_t lambda0 = cluster->GetM02();
609 Float_t lambda1 = cluster->GetM20();
617 Double_t weights[AliPID::kSPECIESCN];
626 for(
Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] = cluster->GetPID()[i];
638 AliDebug(1,Form(
"EMCAL %d?, E %3.2f, l0 %3.2f, l1 %3.2f, disp %3.2f, tof %1.11f, distCPV %3.2f, distToBC %1.1f, NMax %d",
639 cluster->IsEMCAL(),
energy,lambda0,cluster->GetM20(),cluster->GetDispersion(),cluster->GetTOF(),
640 cluster->GetEmcCpvDistance(), cluster->GetDistanceToBadChannel(),cluster->GetNExMax()));
642 if(cluster->IsEMCAL())
666 AliFatal(
"pid pointer not initialized!!!");
693 pid[AliVCluster::kPion]+pid[AliVCluster::kMuon];
695 Float_t allChargedWeight = pid[AliVCluster::kElectron]+pid[AliVCluster::kEleCon]+ chargedHadronWeight;
696 Float_t allNeutralWeight = pid[AliVCluster::kPhoton]+pid[AliVCluster::kPi0]+ neutralHadronWeight;
701 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
702 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
703 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
704 else if(pid[AliVCluster::kEleCon] > wE) pdg =
kEleCon ;
707 else if(allChargedWeight > allNeutralWeight)
714 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
715 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
716 else if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg =
kPhoton ;
717 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
718 else if(chargedHadronWeight + neutralHadronWeight > wCh) pdg =
kChargedHadron ;
719 else if(neutralHadronWeight + chargedHadronWeight > wNe) pdg =
kNeutralHadron ;
723 AliDebug(1,Form(
"Final Pdg: %d, cluster energy %2.2f", pdg,energy));
750 AliVCaloCells* cells,
755 TLorentzVector & l1, TLorentzVector & l2,
761 Float_t m02 = cluster->GetM02();
762 const Int_t nc = cluster->GetNCells();
772 AliDebug(2,
"\t pass nCells cut");
777 AliDebug(1,Form(
"Cluster : E %1.1f, M02 %1.2f, NLM %d, N Cells %d",eClus,m02,nMax,nc));
788 absId1 = absIdList[0];
789 absId2 = absIdList[1];
792 Float_t en1 = cells->GetCellAmplitude(absId1);
794 Float_t en2 = cells->GetCellAmplitude(absId2);
798 absId2 = absIdList[0];
799 absId1 = absIdList[1];
805 absId1 = absIdList[0];
810 for(
Int_t iDigit = 0 ; iDigit < cluster->GetNCells() ; iDigit++)
812 Int_t absId = cluster->GetCellsAbsId()[iDigit];
813 if( absId == absId1 ) continue ;
814 Float_t endig = cells->GetCellAmplitude(absId);
829 for(
Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
831 Float_t endig = maxEList[iDigit];
835 absId1 = absIdList[iDigit];
841 for(
Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
843 if(absIdList[iDigit]==absId1)
continue;
844 Float_t endig = maxEList[iDigit];
848 absId2 = absIdList[iDigit];
854 if(absId2<0 || absId1<0)
856 AliDebug(1,Form(
"Bad index for local maxima : N max %d, i1 %d, i2 %d, cluster E %2.2f, ncells %d, m02 %2.2f",
857 nMax,absId1,absId2,eClus,nc,m02));
865 AliAODCaloCluster cluster1(0, 0,NULL,0.,NULL,NULL,1,0);
866 AliAODCaloCluster cluster2(1, 0,NULL,0.,NULL,NULL,1,0);
868 caloutils->
SplitEnergy(absId1,absId2,cluster, cells, &cluster1, &cluster2,nMax);
876 distbad1 = cluster1.GetDistanceToBadChannel();
877 distbad2 = cluster2.GetDistanceToBadChannel();
883 cluster1.GetMomentum(l1,vertex);
884 cluster2.GetMomentum(l2,vertex);
887 angle = l2.Angle(l1.Vect());
897 AliDebug(2,
"\t pass Split E frac cut");
903 if(e1 < minECut || e2 < minECut)
909 AliDebug(2,
"\t pass min sub-cluster E cut");
913 if(e1+e2 > 0) asy = (e1-e2) / (e1+e2);
918 AliDebug(2,
"\t pass asymmetry cut");
930 if(nMax > 2) energy = e1+e2;
933 if ( conOK && mass < fMassPhoMax && mass >
fMassPhoMin ) { AliDebug(2,
"\t Split Conv");
return kPhoton ; }
934 else if( etaOK && mass < fMassEtaMax && mass >
fMassEtaMin ) { AliDebug(2,
"\t Split Eta" );
return kEta ; }
946 const Int_t buffersize = 255;
947 char onePar[buffersize] ;
948 snprintf(onePar,buffersize,
"--- AliCaloPID ---") ;
952 snprintf(onePar,buffersize,
"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)",
fEMCALPhotonWeight) ;
954 snprintf(onePar,buffersize,
"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)",
fEMCALPi0Weight) ;
956 snprintf(onePar,buffersize,
"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)",
fEMCALElectronWeight) ;
958 snprintf(onePar,buffersize,
"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)",
fEMCALChargeWeight) ;
960 snprintf(onePar,buffersize,
"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)",
fEMCALNeutralWeight) ;
962 snprintf(onePar,buffersize,
"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)",
fPHOSPhotonWeight) ;
964 snprintf(onePar,buffersize,
"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)",
fPHOSPi0Weight) ;
966 snprintf(onePar,buffersize,
"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)",
fPHOSElectronWeight) ;
968 snprintf(onePar,buffersize,
"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)",
fPHOSChargeWeight) ;
970 snprintf(onePar,buffersize,
"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)",
fPHOSNeutralWeight) ;
983 snprintf(onePar,buffersize,
"EMCAL: fEMCALL0CutMin =%2.2f, fEMCALL0CutMax =%2.2f (Cut on Shower Shape)",
fEMCALL0CutMin,
fEMCALL0CutMax) ;
985 snprintf(onePar,buffersize,
"EMCAL: fEMCALDEtaCut =%2.2f, fEMCALDPhiCut =%2.2f (Cut on track matching)",
fEMCALDEtaCut,
fEMCALDPhiCut) ;
987 snprintf(onePar,buffersize,
"fTOFCut =%e (Cut on TOF, used in PID evaluation)",
fTOFCut) ;
989 snprintf(onePar,buffersize,
"fPHOSRCut =%2.2f, fPHOSDispersionCut =%2.2f (Cut on Shower Shape and CPV)",
fPHOSRCut,
fPHOSDispersionCut) ;
1023 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
1027 printf(
"PHOS PID weight , photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f \n",
1030 printf(
"EMCAL PID weight, photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f\n",
1044 printf(
"TOF cut = %e\n",
fTOFCut);
1065 printf(
"AliCaloPID::PrintClusterPIDWeights() \n \t ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f, \n \t \ 1066 pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
1067 pid[AliVCluster::kPhoton], pid[AliVCluster::kPi0],
1068 pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
1069 pid[AliVCluster::kPion], pid[AliVCluster::kKaon],
1085 Bool_t isDispOK = kTRUE ;
1086 if(cluster->IsPHOS()){
1088 else isDispOK = kFALSE;
1110 AliDebug(1,Form(
"TOF %e, Lambda0 %2.2f, Lambda1 %2.2f",tof , l0, l1));
1111 AliDebug(1,Form(
"pdg %d, bits: TOF %d, Dispersion %d, Charge %d",
1168 Int_t nMatches = cluster->GetNTracksMatched();
1169 AliVTrack * track = 0;
1173 if(nMatches <= 0)
return kFALSE;
1180 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",cluster->ClassName())))
1182 Int_t iESDtrack = ((AliESDCaloCluster*)cluster)->GetTracksMatched()->At(0);
1184 if(iESDtrack >= 0) track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(iESDtrack));
1189 AliWarning(Form(
"Null matched track in ESD for index %d",iESDtrack));
1195 track =
dynamic_cast<AliVTrack*
> (cluster->GetTrackMatched(0));
1198 AliWarning(
"Null matched track in AOD!");
1203 Float_t dEta = cluster->GetTrackDz();
1204 Float_t dPhi = cluster->GetTrackDx();
1216 if(cluster->IsPHOS())
1219 Double_t mf =
event->GetMagneticField();
1238 Float_t trackPt = track->Pt();
1240 Bool_t matchDEta = kFALSE;
1246 Bool_t matchDPhi = kFALSE;
1257 if(matchDPhi && matchDEta)
return kTRUE ;
1275 Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ;
1276 Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ;
1277 Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt;
1278 Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt;
1279 Double_t c =-0.35-0.550*TMath::Exp(-0.390730*pt) ;
1280 Double_t r2 = 0.5* (l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma +
1281 0.5* (l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma +
1282 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ;
1286 return TMath::Sqrt(r2) ;
1310 Double_t sx = TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+
1311 6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+
1313 Double_t sz = TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+
1319 meanX = TMath::Min(7.3, 3.89994*1.20679 *1.20679 /(pt*pt+1.20679*1.20679)+
1320 0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ;
1322 meanX =-TMath::Min(7.7, 3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+
1323 1.23114 +4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ;
1328 meanX =-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+
1329 0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ;
1331 meanX = TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-
1332 0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ;
1338 AliDebug(1,Form(
"PHOS Matching R %f < %f",TMath::Sqrt(rx*rx+rz*rz),
fPHOSRCut));
1340 return TMath::Sqrt(rx*rx+rz*rz) ;
void InitParamTrackMatchPtDependent()
virtual void SetTOFBit(Bool_t tof)
TString fPHOSPhotonWeightFormulaExpression
Photon weight formula in string.
Bool_t IsInEtaM02Range(Float_t energy, Float_t m02, Int_t nlm) const
virtual Double_t Pt() const
Float_t fTOFCut
Cut on TOF, used in PID evaluation.
Float_t fMassPhoMin
Min Photon mass.
void SetPIDBits(AliVCluster *cluster, AliCaloTrackParticle *aodph, AliCalorimeterUtils *cu, AliVEvent *event)
Set Bits for PID selection.
TFormula * GetPHOSPi0WeightFormula()
Int_t fEMCALFuncTrackPtDepDEtaNParam
number of formula parameters for matching eta residual pT track dependent
Float_t fPHOSNeutralWeight
Bayesian PID weight for neutral hadrons in PHOS.
Bool_t fUseBayesianWeights
Select clusters based on weights calculated in reconstruction.
Bool_t IsInPi0SplitAsymmetryRange(Float_t energy, Float_t asy, Int_t nlm) const
Float_t fMassPhoMax
Min Photon mass.
Float_t fMassPi0Max
Min Pi0 mass, simple cut case.
Float_t fEMCALElectronWeight
Bayesian PID weight for electrons in EMCAL.
AliEMCALRecoUtils * GetEMCALRecoUtils() const
Float_t fPHOSPhotonWeight
Bayesian PID weight for photons in PHOS.
Float_t fSplitEFracMin[3]
Float_t fM02MaxParamShiftNLMN
shift of max M02 for NLM>2.
Float_t fWidthPi0Param[2][6]
Width param, 2 regions in energy.
Bool_t fUseSplitAsyCut
Remove splitted clusters with too large asymmetry.
TF1 * fEMCALFuncTrackPtDepDEta
TF1 for track pT dependent cut in matching eta residual.
Float_t fEMCALPi0Weight
Bayesian PID weight for pi0 in EMCAL.
Float_t fEMCALPhotonWeight
Bayesian PID weight for photons in EMCAL.
Float_t fSubClusterEMin[3]
Do not use sub-clusters with too low energy depeding on NLM.
Bool_t IsTrackMatched(AliVCluster *cluster, AliCalorimeterUtils *cu, AliVEvent *event)
Float_t fMassEtaMax
Max Eta mass.
TString fEMCALFuncTrackPtDepDPhiString
TF1 for track pT dependent cut in matching phi residual, formula string.
TString fPHOSPi0WeightFormulaExpression
Pi0 weight formula in string.
TFormula * GetPHOSPhotonWeightFormula()
Float_t fEMCALDEtaCut
Track matching fixed cut on eta residual.
const TString calorimeter
virtual void SetIdentifiedParticleType(Int_t pdg)
Float_t fMassPi0Min
Min Pi0 mass, simple cut case.
Float_t fPHOSChargeWeight
Bayesian PID weight for charged hadrons in PHOS.
virtual Bool_t GetDispBit() const
Float_t fMassPi0Param[2][6]
Mean mass param, 2 regions in energy.
TString GetPIDParametersList()
Put data member values in string to keep in output container.
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Float_t fM02MaxParam[2][5]
5 param for expo + pol fit on M02 maximum for pi0 selection.
Bool_t fRecalculateBayesian
Recalculate PID bayesian or use simple PID?
TF1 * GetEMCALFuncTrackPtDepDEta()
virtual Bool_t GetChargedBit() const
AliEMCALGeometry * GetEMCALGeometry() const
Float_t fSplitWidthSigma
Cut on mass+-width*fSplitWidthSigma.
Container for input particle information on CaloTrackCorr package.
Bool_t IsInPi0M02Range(Float_t energy, Float_t m02, Int_t nlm) const
Int_t fEMCALFuncTrackPtDepDPhiNParam
number of formula parameters for matching eta residual pT track dependent
Float_t fSplitM02MaxCut
Study clusters with l0 smaller than cut.
Float_t * fEMCALFuncTrackPtDepDPhiParam
Formula parameters for track matching eta residual pT track dependent.
Float_t TestPHOSDispersion(Double_t pt, Double_t m20, Double_t m02) const
Bool_t fPHOSWeightFormula
Use parametrized weight threshold, function of energy.
Float_t TestPHOSChargedVeto(Double_t dx, Double_t dz, Double_t ptTrack, Int_t chargeTrack, Double_t mf) const
Float_t fEMCALNeutralWeight
Bayesian PID weight for neutral hadrons in EMCAL.
Int_t GetNumberOfLocalMaxima(AliVCluster *cluster, AliVCaloCells *cells)
Find the number of local maxima in cluster.
Float_t fPHOSRCut
Track-Cluster distance cut for track matching in PHOS.
Int_t GetIdentifiedParticleType(AliVCluster *cluster)
virtual void SetChargedBit(Bool_t ch)
TF1 * GetEMCALFuncTrackPtDepDPhi()
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TString fEMCALFuncTrackPtDepDEtaString
TF1 for track pT dependent cut in matching eta residual, formula string.
Bool_t fUseSplitSSCut
Remove splitted clusters out of shower shape band.
Bool_t fEMCALUseTrackPtDepMatchingCut
Activate the matching selection, pT dependent.
Float_t fMassShiftHighECell
Shift cuts 5 MeV for Ecell > 150 MeV, default Ecell > 50 MeV.
Bool_t IsInPi0SplitMassRange(Float_t energy, Float_t mass, Int_t nlm) const
Float_t fPHOSElectronWeight
Bayesian PID weight for electrons in PHOS.
Float_t fEMCALDPhiCut
Track matching fixed cut on phi residual.
virtual Bool_t GetTOFBit() const
Float_t fEMCALL0CutMax
Max Cut on shower shape lambda0, used in PID evaluation, only EMCAL.
Int_t GetIdentifiedParticleTypeFromClusterSplitting(AliVCluster *cluster, AliVCaloCells *cells, AliCalorimeterUtils *caloutils, Double_t vertex[3], Int_t &nLocMax, Double_t &mass, Double_t &angle, TLorentzVector &l1, TLorentzVector &l2, Int_t &absId1, Int_t &absId2, Float_t &distbad1, Float_t &distbad2, Bool_t &fidcut1, Bool_t &fidcut2) const
Float_t * fEMCALFuncTrackPtDepDEtaParam
Formula parameters for track matching eta residual pT track dependent.
TFormula * fPHOSPhotonWeightFormula
Formula for photon weight.
Bool_t IsInConM02Range(Float_t energy, Float_t m02, Int_t nlm) const
Float_t fPHOSDispersionCut
Shower shape elipse radious cut.
Int_t GetIdentifiedParticleTypeFromBayesWeights(Bool_t isEMCAL, Double_t *pid, Float_t energy)
void RecalibrateCellAmplitude(Float_t &, Int_t calo, Int_t absId) const
Recalculate cell energy if recalibration factor.
virtual void SetDispBit(Bool_t disp)
Bool_t fUseSimpleM02Cut
Use simple min-max M02 cut.
Class for PID selection with calorimeters.
Float_t fEMCALL0CutMin
Min Cut on shower shape lambda0, used in PID evaluation, only EMCAL.
AliEMCALPIDUtils * GetEMCALPIDUtils()
Float_t fMassEtaMin
Min Eta mass.
Class with utils specific to calorimeter clusters/cells.
Float_t fEMCALChargeWeight
Bayesian PID weight for charged hadrons in EMCAL.
AliEMCALPIDUtils * fEMCALPIDUtils
Pointer to EMCALPID to redo the PID Bayesian calculation.
Int_t fParticleFlux
Particle flux for setting PID parameters.
Float_t fM02MinParam[2][5]
5 param for expo + pol fit on M02 minimum for pi0 selection (maximum for conversions).
void PrintClusterPIDWeights(const Double_t *pid) const
Bool_t fUseSimpleMassCut
Use simple min-max pi0 mass cut.
Float_t fPHOSPi0Weight
Bayesian PID weight for pi0 in PHOS.
virtual Int_t GetIdentifiedParticleType() const
TFormula * fPHOSPi0WeightFormula
Formula for pi0 weight.
Bool_t IsInM02Range(Float_t m02) const
Int_t fSplitMinNCells
Study clusters with ncells larger than cut.
void SplitEnergy(Int_t absId1, Int_t absId2, AliVCluster *cluster, AliVCaloCells *cells, AliAODCaloCluster *cluster1, AliAODCaloCluster *cluster2, Int_t nMax, Int_t eventNumber=0)
Float_t fSplitM02MinCut
Study clusters with l0 larger than cut, simple case.
Float_t fAsyMinParam[2][4]
4 param for fit on asymmetry minimum, for 2 cases, NLM=1 and NLM>=2.
TF1 * fEMCALFuncTrackPtDepDPhi
TF1 for track pT dependent cut in matching phi residual.