23 #include "AliAODCaloCluster.h"
24 #include "AliESDCaloCluster.h"
25 #include "AliVCaloCells.h"
26 #include "AliVTrack.h"
27 #include "AliAODPWG4Particle.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.),
59 fPHOSDispersionCut(1000), fPHOSRCut(1000),
61 fUseSimpleMassCut(kFALSE),
62 fUseSimpleM02Cut(kFALSE),
63 fUseSplitAsyCut(kFALSE),
64 fUseSplitSSCut(kTRUE),
65 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
66 fMassEtaMin(0), fMassEtaMax(0),
67 fMassPi0Min(0), fMassPi0Max(0),
68 fMassPhoMin(0), fMassPhoMax(0),
69 fM02MaxParamShiftNLMN(0),
70 fSplitWidthSigma(0), fMassShiftHighECell(0)
82 TObject(), fDebug(-1), fParticleFlux(flux),
84 fEMCALPIDUtils(), fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
85 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
86 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
87 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
88 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
89 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
90 fPHOSPhotonWeightFormulaExpression(
""),
91 fPHOSPi0WeightFormulaExpression(
""),
93 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
94 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
96 fPHOSDispersionCut(1000), fPHOSRCut(1000),
98 fUseSimpleMassCut(kFALSE),
99 fUseSimpleM02Cut(kFALSE),
100 fUseSplitAsyCut(kFALSE),
101 fUseSplitSSCut(kTRUE),
102 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
103 fMassEtaMin(0), fMassEtaMax(0),
104 fMassPi0Min(0), fMassPi0Max(0),
105 fMassPhoMin(0), fMassPhoMax(0),
106 fM02MaxParamShiftNLMN(0),
107 fSplitWidthSigma(0), fMassShiftHighECell(0)
119 TObject(), fDebug(-1), fParticleFlux(kLow),
121 fEMCALPIDUtils((AliEMCALPIDUtils*)emcalpid),
122 fUseBayesianWeights(kFALSE), fRecalculateBayesian(kFALSE),
123 fEMCALPhotonWeight(0.), fEMCALPi0Weight(0.),
124 fEMCALElectronWeight(0.), fEMCALChargeWeight(0.), fEMCALNeutralWeight(0.),
125 fPHOSPhotonWeight(0.), fPHOSPi0Weight(0.),
126 fPHOSElectronWeight(0.), fPHOSChargeWeight(0.) , fPHOSNeutralWeight(0.),
127 fPHOSWeightFormula(0), fPHOSPhotonWeightFormula(0), fPHOSPi0WeightFormula(0),
128 fPHOSPhotonWeightFormulaExpression(
""),
129 fPHOSPi0WeightFormulaExpression(
""),
131 fEMCALL0CutMax(100.), fEMCALL0CutMin(0),
132 fEMCALDEtaCut(2000.), fEMCALDPhiCut(2000.),
134 fPHOSDispersionCut(1000), fPHOSRCut(1000),
136 fUseSimpleMassCut(kFALSE),
137 fUseSimpleM02Cut(kFALSE),
138 fUseSplitAsyCut(kFALSE),
139 fUseSplitSSCut(kTRUE),
140 fSplitM02MaxCut(0), fSplitM02MinCut(0), fSplitMinNCells(0),
141 fMassEtaMin(0), fMassEtaMax(0),
142 fMassPi0Min(0), fMassPi0Max(0),
143 fMassPhoMin(0), fMassPhoMax(0),
144 fM02MaxParamShiftNLMN(0),
145 fSplitWidthSigma(0), fMassShiftHighECell(0)
188 AliInfo(
"SetLOWFluxParam");
193 AliInfo(
"SetHighFluxParam");
325 Float_t abasy = TMath::Abs(asy);
341 if(abasy < cut)
return kTRUE;
356 if(mass < fMassPi0Max && mass >
fMassPi0Min)
return kTRUE;
365 if(energy > fMassPi0Param[inlm][2]) meanMass = energy * fMassPi0Param[inlm][4] + fMassPi0Param[inlm][3];
374 else if( energy > fWidthPi0Param[inlm][2])
375 width = energy * energy * fWidthPi0Param[inlm][5] + energy * fWidthPi0Param[inlm][4] + fWidthPi0Param[inlm][3];
382 if(energy < 10 && minMass < fMassPi0Param[inlm][5] ) minMass = fMassPi0Param[inlm][5];
387 if(mass < maxMass && mass > minMass)
return kTRUE;
401 if(m02 < maxCut && m02 > minCut)
return kTRUE;
443 if(m02 < maxCut && m02 > minCut)
return kTRUE;
479 if(nlm==1) shiftE=energy-28;
499 if(m02 < maxCut && m02 > minCut)
return kTRUE;
534 if(m02 < maxCut && m02 > minCut)
return kTRUE;
557 Float_t lambda0 = cluster->GetM02();
558 Float_t lambda1 = cluster->GetM20();
566 Double_t weights[AliPID::kSPECIESCN];
575 for(
Int_t i = 0; i < AliPID::kSPECIESCN; i++) weights[i] = cluster->GetPID()[i];
587 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",
588 cluster->IsEMCAL(),
energy,lambda0,cluster->GetM20(),cluster->GetDispersion(),cluster->GetTOF(),
589 cluster->GetEmcCpvDistance(), cluster->GetDistanceToBadChannel(),cluster->GetNExMax()));
591 if(cluster->IsEMCAL())
615 AliFatal(
"pid pointer not initialized!!!");
642 pid[AliVCluster::kPion]+pid[AliVCluster::kMuon];
644 Float_t allChargedWeight = pid[AliVCluster::kElectron]+pid[AliVCluster::kEleCon]+ chargedHadronWeight;
645 Float_t allNeutralWeight = pid[AliVCluster::kPhoton]+pid[AliVCluster::kPi0]+ neutralHadronWeight;
650 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
651 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
652 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
653 else if(pid[AliVCluster::kEleCon] > wE) pdg =
kEleCon ;
656 else if(allChargedWeight > allNeutralWeight)
663 if(pid[AliVCluster::kPhoton] > wPh) pdg =
kPhoton ;
664 else if(pid[AliVCluster::kElectron] > wE) pdg =
kElectron ;
665 else if(pid[AliVCluster::kPhoton]+pid[AliVCluster::kElectron] > wPh) pdg =
kPhoton ;
666 else if(pid[AliVCluster::kPi0] > wPi0) pdg =
kPi0 ;
667 else if(chargedHadronWeight + neutralHadronWeight > wCh) pdg =
kChargedHadron ;
668 else if(neutralHadronWeight + chargedHadronWeight > wNe) pdg =
kNeutralHadron ;
672 AliDebug(1,Form(
"Final Pdg: %d, cluster energy %2.2f", pdg,energy));
699 AliVCaloCells* cells,
704 TLorentzVector & l1, TLorentzVector & l2,
710 Float_t m02 = cluster->GetM02();
711 const Int_t nc = cluster->GetNCells();
721 AliDebug(2,
"\t pass nCells cut");
726 AliDebug(1,Form(
"Cluster : E %1.1f, M02 %1.2f, NLM %d, N Cells %d",eClus,m02,nMax,nc));
737 absId1 = absIdList[0];
738 absId2 = absIdList[1];
741 Float_t en1 = cells->GetCellAmplitude(absId1);
743 Float_t en2 = cells->GetCellAmplitude(absId2);
747 absId2 = absIdList[0];
748 absId1 = absIdList[1];
754 absId1 = absIdList[0];
759 for(
Int_t iDigit = 0 ; iDigit < cluster->GetNCells() ; iDigit++)
761 Int_t absId = cluster->GetCellsAbsId()[iDigit];
762 if( absId == absId1 ) continue ;
763 Float_t endig = cells->GetCellAmplitude(absId);
778 for(
Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
780 Float_t endig = maxEList[iDigit];
784 absId1 = absIdList[iDigit];
790 for(
Int_t iDigit = 0 ; iDigit < nMax ; iDigit++)
792 if(absIdList[iDigit]==absId1)
continue;
793 Float_t endig = maxEList[iDigit];
797 absId2 = absIdList[iDigit];
803 if(absId2<0 || absId1<0)
805 AliDebug(1,Form(
"Bad index for local maxima : N max %d, i1 %d, i2 %d, cluster E %2.2f, ncells %d, m02 %2.2f",
806 nMax,absId1,absId2,eClus,nc,m02));
814 AliAODCaloCluster cluster1(0, 0,NULL,0.,NULL,NULL,1,0);
815 AliAODCaloCluster cluster2(1, 0,NULL,0.,NULL,NULL,1,0);
817 caloutils->
SplitEnergy(absId1,absId2,cluster, cells, &cluster1, &cluster2,nMax);
825 distbad1 = cluster1.GetDistanceToBadChannel();
826 distbad2 = cluster2.GetDistanceToBadChannel();
832 cluster1.GetMomentum(l1,vertex);
833 cluster2.GetMomentum(l2,vertex);
836 angle = l2.Angle(l1.Vect());
846 AliDebug(2,
"\t pass Split E frac cut");
852 if(e1 < minECut || e2 < minECut)
858 AliDebug(2,
"\t pass min sub-cluster E cut");
862 if(e1+e2 > 0) asy = (e1-e2) / (e1+e2);
867 AliDebug(2,
"\t pass asymmetry cut");
879 if(nMax > 2) energy = e1+e2;
882 if ( conOK && mass < fMassPhoMax && mass >
fMassPhoMin ) { AliDebug(2,
"\t Split Conv");
return kPhoton ; }
883 else if( etaOK && mass < fMassEtaMax && mass >
fMassEtaMin ) { AliDebug(2,
"\t Split Eta" );
return kEta ; }
895 const Int_t buffersize = 255;
896 char onePar[buffersize] ;
897 snprintf(onePar,buffersize,
"--- AliCaloPID ---") ;
901 snprintf(onePar,buffersize,
"fEMCALPhotonWeight =%2.2f (EMCAL bayesian weight for photons)",
fEMCALPhotonWeight) ;
903 snprintf(onePar,buffersize,
"fEMCALPi0Weight =%2.2f (EMCAL bayesian weight for pi0)",
fEMCALPi0Weight) ;
905 snprintf(onePar,buffersize,
"fEMCALElectronWeight =%2.2f(EMCAL bayesian weight for electrons)",
fEMCALElectronWeight) ;
907 snprintf(onePar,buffersize,
"fEMCALChargeWeight =%2.2f (EMCAL bayesian weight for charged hadrons)",
fEMCALChargeWeight) ;
909 snprintf(onePar,buffersize,
"fEMCALNeutralWeight =%2.2f (EMCAL bayesian weight for neutral hadrons)",
fEMCALNeutralWeight) ;
911 snprintf(onePar,buffersize,
"fPHOSPhotonWeight =%2.2f (PHOS bayesian weight for photons)",
fPHOSPhotonWeight) ;
913 snprintf(onePar,buffersize,
"fPHOSPi0Weight =%2.2f (PHOS bayesian weight for pi0)",
fPHOSPi0Weight) ;
915 snprintf(onePar,buffersize,
"fPHOSElectronWeight =%2.2f(PHOS bayesian weight for electrons)",
fPHOSElectronWeight) ;
917 snprintf(onePar,buffersize,
"fPHOSChargeWeight =%2.2f (PHOS bayesian weight for charged hadrons)",
fPHOSChargeWeight) ;
919 snprintf(onePar,buffersize,
"fPHOSNeutralWeight =%2.2f (PHOS bayesian weight for neutral hadrons)",
fPHOSNeutralWeight) ;
932 snprintf(onePar,buffersize,
"EMCAL: fEMCALL0CutMin =%2.2f, fEMCALL0CutMax =%2.2f (Cut on Shower Shape)",
fEMCALL0CutMin,
fEMCALL0CutMax) ;
934 snprintf(onePar,buffersize,
"EMCAL: fEMCALDEtaCut =%2.2f, fEMCALDPhiCut =%2.2f (Cut on track matching)",
fEMCALDEtaCut,
fEMCALDPhiCut) ;
936 snprintf(onePar,buffersize,
"fTOFCut =%e (Cut on TOF, used in PID evaluation)",
fTOFCut) ;
938 snprintf(onePar,buffersize,
"fPHOSRCut =%2.2f, fPHOSDispersionCut =%2.2f (Cut on Shower Shape and CPV)",
fPHOSRCut,
fPHOSDispersionCut) ;
972 printf(
"***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
976 printf(
"PHOS PID weight , photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f \n",
979 printf(
"EMCAL PID weight, photon %0.2f, pi0 %0.2f, e %0.2f, charge %0.2f, neutral %0.2f\n",
993 printf(
"TOF cut = %e\n",
fTOFCut);
1014 printf(
"AliCaloPID::PrintClusterPIDWeights() \n \t ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f, \n \t \
1015 pion %0.2f, kaon %0.2f, proton %0.2f , neutron %0.2f, kaon %0.2f \n",
1016 pid[AliVCluster::kPhoton], pid[AliVCluster::kPi0],
1017 pid[AliVCluster::kElectron], pid[AliVCluster::kEleCon],
1018 pid[AliVCluster::kPion], pid[AliVCluster::kKaon],
1034 Bool_t isDispOK = kTRUE ;
1035 if(cluster->IsPHOS()){
1037 else isDispOK = kFALSE;
1045 ph->SetDispBit(isDispOK) ;
1049 ph->SetTOFBit(TMath::Abs(tof)<
fTOFCut) ;
1054 ph->SetChargedBit(isNeutral);
1059 AliDebug(1,Form(
"TOF %e, Lambda0 %2.2f, Lambda1 %2.2f",tof , l0, l1));
1060 AliDebug(1,Form(
"pdg %d, bits: TOF %d, Dispersion %d, Charge %d",
1061 ph->GetIdentifiedParticleType(), ph->GetTOFBit() , ph->GetDispBit() , ph->GetChargedBit()));
1073 AliVEvent* event)
const
1075 Int_t nMatches = cluster->GetNTracksMatched();
1076 AliVTrack * track = 0;
1080 if(nMatches <= 0)
return kFALSE;
1087 if(!strcmp(
"AliESDCaloCluster",Form(
"%s",cluster->ClassName())))
1089 Int_t iESDtrack = ((AliESDCaloCluster*)cluster)->GetTracksMatched()->At(0);
1091 if(iESDtrack >= 0) track =
dynamic_cast<AliVTrack*
> (
event->GetTrack(iESDtrack));
1096 AliWarning(Form(
"Null matched track in ESD for index %d",iESDtrack));
1102 track =
dynamic_cast<AliVTrack*
> (cluster->GetTrackMatched(0));
1105 AliWarning(
"Null matched track in AOD!");
1110 Float_t dZ = cluster->GetTrackDz();
1111 Float_t dR = cluster->GetTrackDx();
1123 if(cluster->IsPHOS())
1126 Double_t mf =
event->GetMagneticField();
1152 Double_t l2Mean = 1.53126+9.50835e+06/(1.+1.08728e+07*pt+1.73420e+06*pt*pt) ;
1153 Double_t l1Mean = 1.12365+0.123770*TMath::Exp(-pt*0.246551)+5.30000e-03*pt ;
1154 Double_t l2Sigma = 6.48260e-02+7.60261e+10/(1.+1.53012e+11*pt+5.01265e+05*pt*pt)+9.00000e-03*pt;
1155 Double_t l1Sigma = 4.44719e-04+6.99839e-01/(1.+1.22497e+00*pt+6.78604e-07*pt*pt)+9.00000e-03*pt;
1156 Double_t c =-0.35-0.550*TMath::Exp(-0.390730*pt) ;
1157 Double_t r2 = 0.5* (l1-l1Mean)*(l1-l1Mean)/l1Sigma/l1Sigma +
1158 0.5* (l2-l2Mean)*(l2-l2Mean)/l2Sigma/l2Sigma +
1159 0.5*c*(l1-l1Mean)*(l2-l2Mean)/l1Sigma/l2Sigma ;
1163 return TMath::Sqrt(r2) ;
1187 Double_t sx = TMath::Min(5.4,2.59719e+02*TMath::Exp(-pt/1.02053e-01)+
1188 6.58365e-01*5.91917e-01*5.91917e-01/((pt-9.61306e-01)*(pt-9.61306e-01)+5.91917e-01*5.91917e-01)+
1190 Double_t sz = TMath::Min(2.75,4.90341e+02*1.91456e-02*1.91456e-02/(pt*pt+1.91456e-02*1.91456e-02)+
1196 meanX = TMath::Min(7.3, 3.89994*1.20679 *1.20679 /(pt*pt+1.20679*1.20679)+
1197 0.249029+2.49088e+07*TMath::Exp(-pt*3.33650e+01)) ;
1199 meanX =-TMath::Min(7.7, 3.86040*0.912499*0.912499/(pt*pt+0.912499*0.912499)+
1200 1.23114 +4.48277e+05*TMath::Exp(-pt*2.57070e+01)) ;
1205 meanX =-TMath::Min(8.0,3.86040*1.31357*1.31357/(pt*pt+1.31357*1.31357)+
1206 0.880579+7.56199e+06*TMath::Exp(-pt*3.08451e+01)) ;
1208 meanX = TMath::Min(6.85, 3.89994*1.16240*1.16240/(pt*pt+1.16240*1.16240)-
1209 0.120787+2.20275e+05*TMath::Exp(-pt*2.40913e+01)) ;
1215 AliDebug(1,Form(
"PHOS Matching R %f < %f",TMath::Sqrt(rx*rx+rz*rz),
fPHOSRCut));
1217 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
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.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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.