23 #include "AliAODCaloCluster.h"
24 #include "AliVCaloCells.h"
25 #include "AliVTrack.h"
26 #include "AliAODPWG4Particle.h"
28 #include "AliVEvent.h"
32 #include "AliEMCALPIDUtils.h"
43 TObject(), fDebug(-1), fParticleFlux(kLow),
45 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
46 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
47 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
48 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
49 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
50 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
51 fPHOSPhotonWeightFormulaExpression(
""),
52 fPHOSPi0WeightFormulaExpression(
""),
54 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
55 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
57 fPHOSDispersionCut(1000), fPHOSRCut(1000),
59 fUseSimpleMassCut(kFALSE),
60 fUseSimpleM02Cut(kFALSE),
61 fUseSplitAsyCut(kFALSE),
62 fUseSplitSSCut(kTRUE),
63 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
64 fMassEtaMin(0), fMassEtaMax(0),
65 fMassPi0Min(0), fMassPi0Max(0),
66 fMassPhoMin(0), fMassPhoMax(0),
67 fM02MaxParamShiftNLMN(0),
68 fSplitWidthSigma(0), fMassShiftHighECell(0)
80 TObject(), fDebug(-1), fParticleFlux(flux),
82 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
83 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
84 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
85 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
86 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
87 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
88 fPHOSPhotonWeightFormulaExpression(
""),
89 fPHOSPi0WeightFormulaExpression(
""),
91 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
92 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
94 fPHOSDispersionCut(1000), fPHOSRCut(1000),
96 fUseSimpleMassCut(kFALSE),
97 fUseSimpleM02Cut(kFALSE),
98 fUseSplitAsyCut(kFALSE),
99 fUseSplitSSCut(kTRUE),
100 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
101 fMassEtaMin(0), fMassEtaMax(0),
102 fMassPi0Min(0), fMassPi0Max(0),
103 fMassPhoMin(0), fMassPhoMax(0),
104 fM02MaxParamShiftNLMN(0),
105 fSplitWidthSigma(0), fMassShiftHighECell(0)
117 TObject(), fDebug(-1), fParticleFlux(kLow),
119 fEMCALPIDUtils((AliEMCALPIDUtils*)emcalpid),
120 fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
121 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
122 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
123 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
124 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
125 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
126 fPHOSPhotonWeightFormulaExpression(
""),
127 fPHOSPi0WeightFormulaExpression(
""),
129 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
130 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
132 fPHOSDispersionCut(1000), fPHOSRCut(1000),
134 fUseSimpleMassCut(kFALSE),
135 fUseSimpleM02Cut(kFALSE),
136 fUseSplitAsyCut(kFALSE),
137 fUseSplitSSCut(kTRUE),
138 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
139 fMassEtaMin(0), fMassEtaMax(0),
140 fMassPi0Min(0), fMassPi0Max(0),
141 fMassPhoMin(0), fMassPhoMax(0),
142 fM02MaxParamShiftNLMN(0),
143 fSplitWidthSigma(0), fMassShiftHighECell(0)
186 AliInfo(
"SetLOWFluxParam");
191 AliInfo(
"SetHighFluxParam");
323 Float_t abasy = TMath::Abs(asy);
339 if(abasy < cut)
return kTRUE;
354 if(mass < fMassPi0Max && mass >
fMassPi0Min)
return kTRUE;
363 if(energy > fMassPi0Param[inlm][2]) meanMass = energy * fMassPi0Param[inlm][4] + fMassPi0Param[inlm][3];
369 Float_t width = 0.009;
372 else if( energy > fWidthPi0Param[inlm][2])
373 width = energy * energy * fWidthPi0Param[inlm][5] + energy * fWidthPi0Param[inlm][4] + fWidthPi0Param[inlm][3];
380 if(energy < 10 && minMass < fMassPi0Param[inlm][5] ) minMass = fMassPi0Param[inlm][5];
385 if(mass < maxMass && mass > minMass)
return kTRUE;
399 if(m02 < maxCut && m02 > minCut)
return kTRUE;
441 if(m02 < maxCut && m02 > minCut)
return kTRUE;
476 Float_t shiftE = energy-20;
477 if(nlm==1) shiftE=energy-28;
497 if(m02 < maxCut && m02 > minCut)
return kTRUE;
517 Float_t minCut = 0.1;
532 if(m02 < maxCut && m02 > minCut)
return kTRUE;
554 Float_t energy = cluster->E();
555 Float_t lambda0 = cluster->GetM02();
556 Float_t lambda1 = cluster->GetM20();
564 Double_t weights[AliPID::kSPECIESCN];
569 for(Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] =
fEMCALPIDUtils->GetPIDFinal(i);
573 for(Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] = cluster->GetPID()[i];
585 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",
586 cluster->IsEMCAL(),energy,lambda0,cluster->GetM20(),cluster->GetDispersion(),cluster->GetTOF(),
587 cluster->GetEmcCpvDistance(), cluster->GetDistanceToBadChannel(),cluster->GetNExMax()));
589 if(cluster->IsEMCAL())
613 AliFatal(
"pid pointer not initialized!!!");
639 Float_t chargedHadronWeight = pid[AliVCluster::kProton]+pid[AliVCluster::kKaon]+
640 pid[AliVCluster::kPion]+pid[AliVCluster::kMuon];
641 Float_t neutralHadronWeight = pid[AliVCluster::kNeutron]+pid[AliVCluster::kKaon0];
642 Float_t allChargedWeight = pid[AliVCluster::kElectron]+pid[AliVCluster::kEleCon]+ chargedHadronWeight;
643 Float_t allNeutralWeight = pid[AliVCluster::kPhoton]+pid[AliVCluster::kPi0]+ neutralHadronWeight;
648 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
649 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
650 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
651 else if(pid[AliVCluster::kEleCon] > wE) pdg =
kEleCon ;
654 else if(allChargedWeight > allNeutralWeight)
661 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
662 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
663 else if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg =
kPhoton ;
664 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
665 else if(chargedHadronWeight + neutralHadronWeight > wCh) pdg =
kChargedHadron ;
666 else if(neutralHadronWeight + chargedHadronWeight > wNe) pdg =
kNeutralHadron ;
670 AliDebug(1,Form(
"Final Pdg: %d, cluster energy %2.2f", pdg,energy));
697 AliVCaloCells* cells,
701 Double_t & mass, Double_t & angle,
702 TLorentzVector & l1, TLorentzVector & l2,
703 Int_t & absId1, Int_t & absId2,
704 Float_t & distbad1, Float_t & distbad2,
705 Bool_t & fidcut1, Bool_t & fidcut2 )
const
707 Float_t eClus = cluster->E();
708 Float_t m02 = cluster->GetM02();
709 const Int_t nc = cluster->GetNCells();
711 Float_t maxEList [nc];
719 AliDebug(2,
"\t pass nCells cut");
724 AliDebug(1,Form(
"Cluster : E %1.1f, M02 %1.2f, NLM %d, N Cells %d",eClus,m02,nMax,nc));
735 absId1 = absIdList[0];
736 absId2 = absIdList[1];
739 Float_t en1 = cells->GetCellAmplitude(absId1);
741 Float_t en2 = cells->GetCellAmplitude(absId2);
745 absId2 = absIdList[0];
746 absId1 = absIdList[1];
752 absId1 = absIdList[0];
757 for(Int_t iDigit = 0 ; iDigit < cluster->GetNCells() ; iDigit++)
759 Int_t absId = cluster->GetCellsAbsId()[iDigit];
760 if( absId == absId1 ) continue ;
761 Float_t endig = cells->GetCellAmplitude(absId);
776 for(Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
778 Float_t endig = maxEList[iDigit];
782 absId1 = absIdList[iDigit];
788 for(Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
790 if(absIdList[iDigit]==absId1)
continue;
791 Float_t endig = maxEList[iDigit];
795 absId2 = absIdList[iDigit];
801 if(absId2<0 || absId1<0)
803 AliDebug(1,Form(
"Bad index for local maxima : N max %d, i1 %d, i2 %d, cluster E %2.2f, ncells %d, m02 %2.2f",
804 nMax,absId1,absId2,eClus,nc,m02));
812 AliAODCaloCluster cluster1(0, 0,NULL,0.,NULL,NULL,1,0);
813 AliAODCaloCluster cluster2(1, 0,NULL,0.,NULL,NULL,1,0);
815 caloutils->
SplitEnergy(absId1,absId2,cluster, cells, &cluster1, &cluster2,nMax);
823 distbad1 = cluster1.GetDistanceToBadChannel();
824 distbad2 = cluster2.GetDistanceToBadChannel();
830 cluster1.GetMomentum(l1,vertex);
831 cluster2.GetMomentum(l2,vertex);
834 angle = l2.Angle(l1.Vect());
835 Float_t e1 = cluster1.E();
836 Float_t e2 = cluster2.E();
839 Float_t splitFracCut = 0;
844 AliDebug(2,
"\t pass Split E frac cut");
850 if(e1 < minECut || e2 < minECut)
856 AliDebug(2,
"\t pass min sub-cluster E cut");
860 if(e1+e2 > 0) asy = (e1-e2) / (e1+e2);
865 AliDebug(2,
"\t pass asymmetry cut");
867 Bool_t pi0OK = kFALSE;
868 Bool_t etaOK = kFALSE;
869 Bool_t conOK = kFALSE;
876 Float_t energy = eClus;
877 if(nMax > 2) energy = e1+e2;
880 if ( conOK && mass < fMassPhoMax && mass >
fMassPhoMin ) { AliDebug(2,
"\t Split Conv");
return kPhoton ; }
881 else if( etaOK && mass < fMassEtaMax && mass >
fMassEtaMin ) { AliDebug(2,
"\t Split Eta" );
return kEta ; }
893 const Int_t buffersize = 255;
894 char onePar[buffersize] ;
895 snprintf(onePar,buffersize,
"--- AliCaloPID ---") ;
899 snprintf(onePar,buffersize,
"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)",
fEMCALPhotonWeight) ;
901 snprintf(onePar,buffersize,
"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)",
fEMCALPi0Weight) ;
903 snprintf(onePar,buffersize,
"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)",
fEMCALElectronWeight) ;
905 snprintf(onePar,buffersize,
"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)",
fEMCALChargeWeight) ;
907 snprintf(onePar,buffersize,
"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)",
fEMCALNeutralWeight) ;
909 snprintf(onePar,buffersize,
"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)",
fPHOSPhotonWeight) ;
911 snprintf(onePar,buffersize,
"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)",
fPHOSPi0Weight) ;
913 snprintf(onePar,buffersize,
"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)",
fPHOSElectronWeight) ;
915 snprintf(onePar,buffersize,
"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)",
fPHOSChargeWeight) ;
917 snprintf(onePar,buffersize,
"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)",
fPHOSNeutralWeight) ;
930 snprintf(onePar,buffersize,
"EMCAL: fEMCALL0CutMin =%2.2f, fEMCALL0CutMax =%2.2f (Cut on Shower Shape)",
fEMCALL0CutMin,
fEMCALL0CutMax) ;
932 snprintf(onePar,buffersize,
"EMCAL: fEMCALDEtaCut =%2.2f, fEMCALDPhiCut =%2.2f (Cut on track matching)",
fEMCALDEtaCut,
fEMCALDPhiCut) ;
934 snprintf(onePar,buffersize,
"fTOFCut =%e (Cut on TOF, used in PID evaluation)",
fTOFCut) ;
936 snprintf(onePar,buffersize,
"fPHOSRCut =%2.2f, fPHOSDispersionCut =%2.2f (Cut on Shower Shape and CPV)",
fPHOSRCut,
fPHOSDispersionCut) ;
970 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
974 printf(
"PHOS PID weight , photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f \n",
977 printf(
"EMCAL PID weight, photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f\n",
991 printf(
"TOF cut = %e\n",
fTOFCut);
1012 printf(
"AliCaloPID::PrintClusterPIDWeights() \n \t ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f, \n \t \
1013 pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
1014 pid[AliVCluster::kPhoton], pid[AliVCluster::kPi0],
1015 pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
1016 pid[AliVCluster::kPion], pid[AliVCluster::kKaon],
1017 pid[AliVCluster::kProton],
1018 pid[AliVCluster::kNeutron], pid[AliVCluster::kKaon0]);
1030 Double_t l1 = cluster->GetM20() ;
1031 Double_t l0 = cluster->GetM02() ;
1032 Bool_t isDispOK = kTRUE ;
1033 if(cluster->IsPHOS()){
1035 else isDispOK = kFALSE;
1043 ph->SetDispBit(isDispOK) ;
1046 Double_t tof=cluster->GetTOF() ;
1047 ph->SetTOFBit(TMath::Abs(tof)<
fTOFCut) ;
1052 ph->SetChargedBit(isNeutral);
1057 AliDebug(1,Form(
"TOF %e, Lambda0 %2.2f, Lambda1 %2.2f",tof , l0, l1));
1058 AliDebug(1,Form(
"pdg %d, bits: TOF %d, Dispersion %d, Charge %d",
1059 ph->GetIdentifiedParticleType(), ph->GetTOFBit() , ph->GetDispBit() , ph->GetChargedBit()));
1071 AliVEvent* event)
const
1073 Int_t nMatches = cluster->GetNTracksMatched();
1074 AliVTrack * track = 0;
1079 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",cluster->ClassName())))
1081 Int_t iESDtrack = cluster->GetTrackMatchedIndex();
1082 if(iESDtrack >= 0) track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(iESDtrack));
1087 AliWarning(
"Null matched track in ESD when index is OK!");
1093 track =
dynamic_cast<AliVTrack*
> (cluster->GetTrackMatched(0));
1096 AliWarning(
"Null matched track in AOD!");
1101 Float_t dZ = cluster->GetTrackDz();
1102 Float_t dR = cluster->GetTrackDx();
1107 dR = 2000., dZ = 2000.;
1111 if(cluster->IsPHOS())
1113 Int_t
charge = track->Charge();
1114 Double_t mf =
event->GetMagneticField();
1146 Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ;
1147 Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ;
1148 Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt;
1149 Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt;
1150 Double_t c =-0.35-0.550*TMath::Exp(-0.390730*pt) ;
1151 Double_t r2 = 0.5* (l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma +
1152 0.5* (l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma +
1153 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ;
1157 return TMath::Sqrt(r2) ;
1177 Int_t
charge, Double_t mf)
const
1179 Double_t meanX = 0.;
1180 Double_t meanZ = 0.;
1181 Double_t sx = TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+
1182 6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+
1184 Double_t sz = TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+
1190 meanX = TMath::Min(7.3, 3.89994*1.20679 *1.20679 /(pt*pt+1.20679*1.20679)+
1191 0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ;
1193 meanX =-TMath::Min(7.7, 3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+
1194 1.23114 +4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ;
1199 meanX =-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+
1200 0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ;
1202 meanX = TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-
1203 0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ;
1206 Double_t rz = (dz-meanZ)/sz ;
1207 Double_t rx = (dx-meanX)/sx ;
1209 AliDebug(1,Form(
"PHOS Matching R %f < %f",TMath::Sqrt(rx*rx+rz*rz),
fPHOSRCut));
1211 return TMath::Sqrt(rx*rx+rz*rz) ;
TString fPHOSPhotonWeightFormulaExpression
Photon weight formula in string.
Bool_t IsInEtaM02Range(Float_t energy, Float_t m02, Int_t nlm) const
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Float_t fTOFCut
Cut on TOF, used in PID evaluation.
Float_t fMassPhoMin
Min Photon mass.
TFormula * GetPHOSPi0WeightFormula()
Float_t fPHOSNeutralWeight
Bayesian PID weight for neutral hadrons in PHOS.
Bool_t fUseBayesianWeights
Select clusters based on weights calculated in reconstruction.
Bool_t IsRecalculationOfClusterTrackMatchingOn() const
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.
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.
Float_t fMassEtaMax
Max Eta mass.
TString fPHOSPi0WeightFormulaExpression
Pi0 weight formula in string.
TFormula * GetPHOSPhotonWeightFormula()
Float_t fEMCALDEtaCut
Track matching cut on Dz.
Float_t fMassPi0Min
Min Pi0 mass, simple cut case.
Float_t fPHOSChargeWeight
Bayesian PID weight for charged hadrons in PHOS.
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?
AliEMCALGeometry * GetEMCALGeometry() const
Float_t fSplitWidthSigma
Cut on mass+-width*fSplitWidthSigma.
Bool_t IsInPi0M02Range(Float_t energy, Float_t m02, Int_t nlm) const
Float_t fSplitM02MaxCut
Study clusters with l0 smaller than cut.
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
void SetPIDBits(AliVCluster *cluster, AliAODPWG4Particle *aodph, AliCalorimeterUtils *cu, AliVEvent *event)
Set Bits for PID selection.
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)
Bool_t fUseSplitSSCut
Remove splitted clusters out of shower shape band.
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 cut on Dx.
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
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.
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.
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)
Bool_t IsTrackMatched(AliVCluster *cluster, AliCalorimeterUtils *cu, AliVEvent *event) const
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.