23 #include "AliAODCaloCluster.h"
24 #include "AliESDCaloCluster.h"
25 #include "AliVCaloCells.h"
26 #include "AliVTrack.h"
27 #include "AliAODPWG4Particle.h"
29 #include "AliVEvent.h"
33 #include "AliEMCALPIDUtils.h"
44 TObject(), fDebug(-1), fParticleFlux(kLow),
46 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
47 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
48 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
49 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
50 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
51 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
52 fPHOSPhotonWeightFormulaExpression(
""),
53 fPHOSPi0WeightFormulaExpression(
""),
55 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
56 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
58 fPHOSDispersionCut(1000), fPHOSRCut(1000),
60 fUseSimpleMassCut(kFALSE),
61 fUseSimpleM02Cut(kFALSE),
62 fUseSplitAsyCut(kFALSE),
63 fUseSplitSSCut(kTRUE),
64 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
65 fMassEtaMin(0), fMassEtaMax(0),
66 fMassPi0Min(0), fMassPi0Max(0),
67 fMassPhoMin(0), fMassPhoMax(0),
68 fM02MaxParamShiftNLMN(0),
69 fSplitWidthSigma(0), fMassShiftHighECell(0)
81 TObject(), fDebug(-1), fParticleFlux(flux),
83 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
84 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
85 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
86 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
87 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
88 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
89 fPHOSPhotonWeightFormulaExpression(
""),
90 fPHOSPi0WeightFormulaExpression(
""),
92 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
93 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
95 fPHOSDispersionCut(1000), fPHOSRCut(1000),
97 fUseSimpleMassCut(kFALSE),
98 fUseSimpleM02Cut(kFALSE),
99 fUseSplitAsyCut(kFALSE),
100 fUseSplitSSCut(kTRUE),
101 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
102 fMassEtaMin(0), fMassEtaMax(0),
103 fMassPi0Min(0), fMassPi0Max(0),
104 fMassPhoMin(0), fMassPhoMax(0),
105 fM02MaxParamShiftNLMN(0),
106 fSplitWidthSigma(0), fMassShiftHighECell(0)
118 TObject(), fDebug(-1), fParticleFlux(kLow),
120 fEMCALPIDUtils((AliEMCALPIDUtils*)emcalpid),
121 fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
122 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
123 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
124 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
125 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
126 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
127 fPHOSPhotonWeightFormulaExpression(
""),
128 fPHOSPi0WeightFormulaExpression(
""),
130 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
131 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
133 fPHOSDispersionCut(1000), fPHOSRCut(1000),
135 fUseSimpleMassCut(kFALSE),
136 fUseSimpleM02Cut(kFALSE),
137 fUseSplitAsyCut(kFALSE),
138 fUseSplitSSCut(kTRUE),
139 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
140 fMassEtaMin(0), fMassEtaMax(0),
141 fMassPi0Min(0), fMassPi0Max(0),
142 fMassPhoMin(0), fMassPhoMax(0),
143 fM02MaxParamShiftNLMN(0),
144 fSplitWidthSigma(0), fMassShiftHighECell(0)
187 AliInfo(
"SetLOWFluxParam");
192 AliInfo(
"SetHighFluxParam");
324 Float_t abasy = TMath::Abs(asy);
340 if(abasy < cut)
return kTRUE;
355 if(mass < fMassPi0Max && mass >
fMassPi0Min)
return kTRUE;
364 if(energy > fMassPi0Param[inlm][2]) meanMass = energy * fMassPi0Param[inlm][4] + fMassPi0Param[inlm][3];
370 Float_t width = 0.009;
373 else if( energy > fWidthPi0Param[inlm][2])
374 width = energy * energy * fWidthPi0Param[inlm][5] + energy * fWidthPi0Param[inlm][4] + fWidthPi0Param[inlm][3];
381 if(energy < 10 && minMass < fMassPi0Param[inlm][5] ) minMass = fMassPi0Param[inlm][5];
386 if(mass < maxMass && mass > minMass)
return kTRUE;
400 if(m02 < maxCut && m02 > minCut)
return kTRUE;
442 if(m02 < maxCut && m02 > minCut)
return kTRUE;
477 Float_t shiftE = energy-20;
478 if(nlm==1) shiftE=energy-28;
498 if(m02 < maxCut && m02 > minCut)
return kTRUE;
518 Float_t minCut = 0.1;
533 if(m02 < maxCut && m02 > minCut)
return kTRUE;
555 Float_t
energy = cluster->E();
556 Float_t lambda0 = cluster->GetM02();
557 Float_t lambda1 = cluster->GetM20();
565 Double_t weights[AliPID::kSPECIESCN];
570 for(Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] =
fEMCALPIDUtils->GetPIDFinal(i);
574 for(Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] = cluster->GetPID()[i];
586 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",
587 cluster->IsEMCAL(),
energy,lambda0,cluster->GetM20(),cluster->GetDispersion(),cluster->GetTOF(),
588 cluster->GetEmcCpvDistance(), cluster->GetDistanceToBadChannel(),cluster->GetNExMax()));
590 if(cluster->IsEMCAL())
614 AliFatal(
"pid pointer not initialized!!!");
640 Float_t chargedHadronWeight = pid[AliVCluster::kProton]+pid[AliVCluster::kKaon]+
641 pid[AliVCluster::kPion]+pid[AliVCluster::kMuon];
642 Float_t neutralHadronWeight = pid[AliVCluster::kNeutron]+pid[AliVCluster::kKaon0];
643 Float_t allChargedWeight = pid[AliVCluster::kElectron]+pid[AliVCluster::kEleCon]+ chargedHadronWeight;
644 Float_t allNeutralWeight = pid[AliVCluster::kPhoton]+pid[AliVCluster::kPi0]+ neutralHadronWeight;
649 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
650 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
651 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
652 else if(pid[AliVCluster::kEleCon] > wE) pdg =
kEleCon ;
655 else if(allChargedWeight > allNeutralWeight)
662 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
663 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
664 else if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg =
kPhoton ;
665 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
666 else if(chargedHadronWeight + neutralHadronWeight > wCh) pdg =
kChargedHadron ;
667 else if(neutralHadronWeight + chargedHadronWeight > wNe) pdg =
kNeutralHadron ;
671 AliDebug(1,Form(
"Final Pdg: %d, cluster energy %2.2f", pdg,energy));
698 AliVCaloCells* cells,
702 Double_t &
mass, Double_t & angle,
703 TLorentzVector & l1, TLorentzVector & l2,
704 Int_t & absId1, Int_t & absId2,
705 Float_t & distbad1, Float_t & distbad2,
706 Bool_t & fidcut1, Bool_t & fidcut2 )
const
708 Float_t eClus = cluster->E();
709 Float_t m02 = cluster->GetM02();
710 const Int_t nc = cluster->GetNCells();
712 Float_t maxEList [nc];
720 AliDebug(2,
"\t pass nCells cut");
725 AliDebug(1,Form(
"Cluster : E %1.1f, M02 %1.2f, NLM %d, N Cells %d",eClus,m02,nMax,nc));
736 absId1 = absIdList[0];
737 absId2 = absIdList[1];
740 Float_t en1 = cells->GetCellAmplitude(absId1);
742 Float_t en2 = cells->GetCellAmplitude(absId2);
746 absId2 = absIdList[0];
747 absId1 = absIdList[1];
753 absId1 = absIdList[0];
758 for(Int_t iDigit = 0 ; iDigit < cluster->GetNCells() ; iDigit++)
760 Int_t absId = cluster->GetCellsAbsId()[iDigit];
761 if( absId == absId1 ) continue ;
762 Float_t endig = cells->GetCellAmplitude(absId);
777 for(Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
779 Float_t endig = maxEList[iDigit];
783 absId1 = absIdList[iDigit];
789 for(Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
791 if(absIdList[iDigit]==absId1)
continue;
792 Float_t endig = maxEList[iDigit];
796 absId2 = absIdList[iDigit];
802 if(absId2<0 || absId1<0)
804 AliDebug(1,Form(
"Bad index for local maxima : N max %d, i1 %d, i2 %d, cluster E %2.2f, ncells %d, m02 %2.2f",
805 nMax,absId1,absId2,eClus,nc,m02));
813 AliAODCaloCluster cluster1(0, 0,NULL,0.,NULL,NULL,1,0);
814 AliAODCaloCluster cluster2(1, 0,NULL,0.,NULL,NULL,1,0);
816 caloutils->
SplitEnergy(absId1,absId2,cluster, cells, &cluster1, &cluster2,nMax);
824 distbad1 = cluster1.GetDistanceToBadChannel();
825 distbad2 = cluster2.GetDistanceToBadChannel();
831 cluster1.GetMomentum(l1,vertex);
832 cluster2.GetMomentum(l2,vertex);
835 angle = l2.Angle(l1.Vect());
836 Float_t e1 = cluster1.E();
837 Float_t e2 = cluster2.E();
840 Float_t splitFracCut = 0;
845 AliDebug(2,
"\t pass Split E frac cut");
851 if(e1 < minECut || e2 < minECut)
857 AliDebug(2,
"\t pass min sub-cluster E cut");
861 if(e1+e2 > 0) asy = (e1-e2) / (e1+e2);
866 AliDebug(2,
"\t pass asymmetry cut");
868 Bool_t pi0OK = kFALSE;
869 Bool_t etaOK = kFALSE;
870 Bool_t conOK = kFALSE;
878 if(nMax > 2) energy = e1+e2;
881 if ( conOK && mass < fMassPhoMax && mass >
fMassPhoMin ) { AliDebug(2,
"\t Split Conv");
return kPhoton ; }
882 else if( etaOK && mass < fMassEtaMax && mass >
fMassEtaMin ) { AliDebug(2,
"\t Split Eta" );
return kEta ; }
894 const Int_t buffersize = 255;
895 char onePar[buffersize] ;
896 snprintf(onePar,buffersize,
"--- AliCaloPID ---") ;
900 snprintf(onePar,buffersize,
"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)",
fEMCALPhotonWeight) ;
902 snprintf(onePar,buffersize,
"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)",
fEMCALPi0Weight) ;
904 snprintf(onePar,buffersize,
"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)",
fEMCALElectronWeight) ;
906 snprintf(onePar,buffersize,
"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)",
fEMCALChargeWeight) ;
908 snprintf(onePar,buffersize,
"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)",
fEMCALNeutralWeight) ;
910 snprintf(onePar,buffersize,
"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)",
fPHOSPhotonWeight) ;
912 snprintf(onePar,buffersize,
"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)",
fPHOSPi0Weight) ;
914 snprintf(onePar,buffersize,
"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)",
fPHOSElectronWeight) ;
916 snprintf(onePar,buffersize,
"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)",
fPHOSChargeWeight) ;
918 snprintf(onePar,buffersize,
"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)",
fPHOSNeutralWeight) ;
931 snprintf(onePar,buffersize,
"EMCAL: fEMCALL0CutMin =%2.2f, fEMCALL0CutMax =%2.2f (Cut on Shower Shape)",
fEMCALL0CutMin,
fEMCALL0CutMax) ;
933 snprintf(onePar,buffersize,
"EMCAL: fEMCALDEtaCut =%2.2f, fEMCALDPhiCut =%2.2f (Cut on track matching)",
fEMCALDEtaCut,
fEMCALDPhiCut) ;
935 snprintf(onePar,buffersize,
"fTOFCut =%e (Cut on TOF, used in PID evaluation)",
fTOFCut) ;
937 snprintf(onePar,buffersize,
"fPHOSRCut =%2.2f, fPHOSDispersionCut =%2.2f (Cut on Shower Shape and CPV)",
fPHOSRCut,
fPHOSDispersionCut) ;
971 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
975 printf(
"PHOS PID weight , photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f \n",
978 printf(
"EMCAL PID weight, photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f\n",
992 printf(
"TOF cut = %e\n",
fTOFCut);
1013 printf(
"AliCaloPID::PrintClusterPIDWeights() \n \t ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f, \n \t \
1014 pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
1015 pid[AliVCluster::kPhoton], pid[AliVCluster::kPi0],
1016 pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
1017 pid[AliVCluster::kPion], pid[AliVCluster::kKaon],
1018 pid[AliVCluster::kProton],
1019 pid[AliVCluster::kNeutron], pid[AliVCluster::kKaon0]);
1031 Double_t l1 = cluster->GetM20() ;
1032 Double_t l0 = cluster->GetM02() ;
1033 Bool_t isDispOK = kTRUE ;
1034 if(cluster->IsPHOS()){
1036 else isDispOK = kFALSE;
1044 ph->SetDispBit(isDispOK) ;
1047 Double_t tof=cluster->GetTOF() ;
1048 ph->SetTOFBit(TMath::Abs(tof)<
fTOFCut) ;
1053 ph->SetChargedBit(isNeutral);
1058 AliDebug(1,Form(
"TOF %e, Lambda0 %2.2f, Lambda1 %2.2f",tof , l0, l1));
1059 AliDebug(1,Form(
"pdg %d, bits: TOF %d, Dispersion %d, Charge %d",
1060 ph->GetIdentifiedParticleType(), ph->GetTOFBit() , ph->GetDispBit() , ph->GetChargedBit()));
1072 AliVEvent* event)
const
1074 Int_t nMatches = cluster->GetNTracksMatched();
1075 AliVTrack * track = 0;
1080 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",cluster->ClassName())))
1082 Int_t iESDtrack = ((AliESDCaloCluster*)cluster)->GetTracksMatched()->At(0);
1084 if(iESDtrack >= 0) track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(iESDtrack));
1089 AliWarning(Form(
"Null matched track in ESD for index %d",iESDtrack));
1095 track =
dynamic_cast<AliVTrack*
> (cluster->GetTrackMatched(0));
1098 AliWarning(
"Null matched track in AOD!");
1103 Float_t dZ = cluster->GetTrackDz();
1104 Float_t dR = cluster->GetTrackDx();
1116 if(cluster->IsPHOS())
1118 Int_t
charge = track->Charge();
1119 Double_t mf =
event->GetMagneticField();
1151 Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ;
1152 Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ;
1153 Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt;
1154 Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt;
1155 Double_t c =-0.35-0.550*TMath::Exp(-0.390730*pt) ;
1156 Double_t r2 = 0.5* (l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma +
1157 0.5* (l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma +
1158 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ;
1162 return TMath::Sqrt(r2) ;
1182 Int_t
charge, Double_t mf)
const
1184 Double_t meanX = 0.;
1185 Double_t meanZ = 0.;
1186 Double_t sx = TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+
1187 6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+
1189 Double_t sz = TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+
1195 meanX = TMath::Min(7.3, 3.89994*1.20679 *1.20679 /(pt*pt+1.20679*1.20679)+
1196 0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ;
1198 meanX =-TMath::Min(7.7, 3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+
1199 1.23114 +4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ;
1204 meanX =-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+
1205 0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ;
1207 meanX = TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-
1208 0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ;
1211 Double_t rz = (dz-meanZ)/sz ;
1212 Double_t rx = (dx-meanX)/sx ;
1214 AliDebug(1,Form(
"PHOS Matching R %f < %f",TMath::Sqrt(rx*rx+rz*rz),
fPHOSRCut));
1216 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 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.
const TString calorimeter
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 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)
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.