1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
17 //_________________________________________________________________________
18 // Class for reading data (Kinematics) in order to do prompt gamma
19 // or other particle identification and correlations
20 // Separates generated particles into charged (CTS)
21 // and neutral (PHOS or EMCAL acceptance)
23 //*-- Author: Gustavo Conesa (LNF-INFN)
24 //////////////////////////////////////////////////////////////////////////////
27 // --- ROOT system ---
29 #include <TParticle.h>
30 #include <TDatabasePDG.h>
33 #include "TParticle.h"
34 //#include "Riostream.h"
36 //---- ANALYSIS system ----
37 #include "AliCaloTrackMCReader.h"
38 #include "AliGenEventHeader.h"
40 #include "AliAODCaloCluster.h"
41 #include "AliAODTrack.h"
42 #include "AliAODEvent.h"
43 #include "AliFidutialCut.h"
44 #include "AliMCAnalysisUtils.h"
46 ClassImp(AliCaloTrackMCReader)
48 //____________________________________________________________________________
49 AliCaloTrackMCReader::AliCaloTrackMCReader() :
50 AliCaloTrackReader(), fDecayPi0(0),
51 fNeutralParticlesArray(0x0), fChargedParticlesArray(0x0),
52 fStatusArray(0x0), fKeepAllStatus(0), fCheckOverlap(0),
53 fEMCALOverlapAngle(0),fPHOSOverlapAngle(0), fIndex2ndPhoton(0)
57 //Initialize parameters
61 fReadAODMCParticles = kFALSE;
65 //____________________________________________________________________________
66 AliCaloTrackMCReader::AliCaloTrackMCReader(const AliCaloTrackMCReader & g) :
67 AliCaloTrackReader(g), fDecayPi0(g.fDecayPi0),
68 fNeutralParticlesArray(g.fNeutralParticlesArray?new TArrayI(*g.fNeutralParticlesArray):0x0),
69 fChargedParticlesArray(g.fChargedParticlesArray?new TArrayI(*g.fChargedParticlesArray):0x0),
70 fStatusArray(g.fStatusArray?new TArrayI(*g.fStatusArray):0x0),
71 fKeepAllStatus(g.fKeepAllStatus), fCheckOverlap(g.fCheckOverlap),
72 fEMCALOverlapAngle( g.fEMCALOverlapAngle), fPHOSOverlapAngle(g.fPHOSOverlapAngle),
73 fIndex2ndPhoton(g.fIndex2ndPhoton)
78 //_________________________________________________________________________
79 AliCaloTrackMCReader & AliCaloTrackMCReader::operator = (const AliCaloTrackMCReader & source)
81 // assignment operator
83 if(&source == this) return *this;
85 fDecayPi0 = source.fDecayPi0;
87 delete fChargedParticlesArray;
88 fChargedParticlesArray = source.fChargedParticlesArray?new TArrayI(*source.fChargedParticlesArray):0x0;
90 delete fNeutralParticlesArray;
91 fNeutralParticlesArray = source.fNeutralParticlesArray?new TArrayI(*source.fNeutralParticlesArray):0x0;
94 fStatusArray = source.fStatusArray?new TArrayI(*source.fStatusArray):0x0;
96 fKeepAllStatus = source.fKeepAllStatus ;
102 //_________________________________
103 AliCaloTrackMCReader::~AliCaloTrackMCReader() {
106 if(fChargedParticlesArray) delete fChargedParticlesArray ;
107 if(fNeutralParticlesArray) delete fNeutralParticlesArray ;
108 if(fStatusArray) delete fStatusArray ;
112 //____________________________________________________________________________
113 void AliCaloTrackMCReader::GetVertex(Double_t v[3]) const {
114 //Return vertex position
117 GetGenEventHeader()->PrimaryVertex(pv);
125 //_______________________________________________________________
126 void AliCaloTrackMCReader::InitParameters()
129 //Initialize the parameters of the analysis.
133 fChargedParticlesArray = new TArrayI(1);
134 fChargedParticlesArray->SetAt(11,0);
135 //Int_t pdgarray[]={12,14,16};// skip neutrinos
136 //fNeutralParticlesArray = new TArrayI(3, pdgarray);
137 fNeutralParticlesArray = new TArrayI(3);
138 fNeutralParticlesArray->SetAt(12,0); fNeutralParticlesArray->SetAt(14,1); fNeutralParticlesArray->SetAt(16,2);
139 fStatusArray = new TArrayI(1);
140 fStatusArray->SetAt(1,0);
142 fKeepAllStatus = kTRUE;
144 fCheckOverlap = kFALSE;
145 fEMCALOverlapAngle = 2.5 * TMath::DegToRad();
146 fPHOSOverlapAngle = 0.5 * TMath::DegToRad();
147 fIndex2ndPhoton = -1;
149 //____________________________________________________________________________
150 void AliCaloTrackMCReader::CheckOverlap(const Float_t anglethres, const Int_t imom, Int_t & iPrimary, Int_t & index, TLorentzVector & mom, Int_t & pdg) {
151 //Check overlap of decay photons
152 if( fIndex2ndPhoton==iPrimary ){
156 else fIndex2ndPhoton=-1;
161 TLorentzVector ph1, ph2;
162 TParticle *meson = GetStack()->Particle(imom);
163 Int_t mepdg = meson->GetPdgCode();
164 Int_t idaug1 = meson->GetFirstDaughter();
165 if((mepdg == 111 || mepdg == 221 ) && meson->GetNDaughters() == 2){ //Check only decay in 2 photons
166 TParticle * d1 = GetStack()->Particle(idaug1);
167 TParticle *d2 = GetStack()->Particle(idaug1+1);
168 if(d1->GetPdgCode() == 22 && d2->GetPdgCode() == 22 ){
171 //printf("angle %2.2f\n",ph1.Angle(ph2.Vect()));
173 if(anglethres > ph1.Angle(ph2.Vect())){
177 meson->Momentum(mom);
178 //printf("Overlap:: pt %2.2f, phi %2.2f, eta %2.2f\n",mom.Pt(),mom.Phi(),mom.Eta());
179 if(iPrimary == idaug1) iPrimary++; //skip next photon in list
182 //Do not check overlapping for next decay photon from same meson
183 if(iPrimary == idaug1) {fIndex2ndPhoton = idaug1+1;
188 }//Meson Decay with 2 photon daughters
191 //____________________________________________________________________________
192 void AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* particle, TLorentzVector momentum,
194 //Fill AODCaloClusters or TParticles lists of PHOS or EMCAL
196 if(fFillPHOS && momentum.Pt() > fPHOSPtMin){
198 if(!fFidutialCut->IsInFidutialCut(momentum,"PHOS")) return;
200 Int_t index = iParticle ;
201 Int_t pdg = TMath::Abs(particle->GetPdgCode());
203 CheckOverlap(fPHOSOverlapAngle,particle->GetFirstMother(),index, iParticle, momentum, pdg);
205 Char_t ttype= AliAODCluster::kPHOSNeutral;
206 Int_t labels[] = {index};
207 Float_t x[] = {momentum.X(), momentum.Y(), momentum.Z()};
208 //Create object and write it to file
209 AliAODCaloCluster *calo = new((*(fOutputEvent->GetCaloClusters()))[ncalo++])
210 AliAODCaloCluster(index,1,labels,momentum.E(), x, NULL, ttype, 0);
212 SetCaloClusterPID(pdg,calo) ;
213 if(fDebug > 3 && momentum.Pt() > 0.2)
214 printf("AliCaloTrackMCReader::FillCalorimeters() - PHOS : Selected cluster %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
215 particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
216 fAODPHOS->Add(calo);//reference the selected object to the list
220 if(fFillEMCAL && momentum.Pt() > fEMCALPtMin){
222 if(!fFidutialCut->IsInFidutialCut(momentum,"EMCAL")) return;
224 Int_t index = iParticle ;
225 Int_t pdg = TMath::Abs(particle->GetPdgCode());
228 CheckOverlap(fEMCALOverlapAngle,particle->GetFirstMother(),iParticle, index, momentum, pdg);
230 Char_t ttype= AliAODCluster::kEMCALClusterv1;
231 Int_t labels[] = {index};
232 Float_t x[] = {momentum.X(), momentum.Y(), momentum.Z()};
233 //Create object and write it to file
234 AliAODCaloCluster *calo = new((*(fOutputEvent->GetCaloClusters()))[ncalo++])
235 AliAODCaloCluster(iParticle,1,labels,momentum.E(), x, NULL, ttype, 0);
237 SetCaloClusterPID(pdg,calo) ;
238 if(fDebug > 3 && momentum.Pt() > 0.2)
239 printf("AliCaloTrackMCReader::FillCalorimeters() - EMCAL : Selected cluster %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
240 particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
241 fAODEMCAL->Add(calo);//reference the selected object to the list
245 //____________________________________________________________________________
246 Bool_t AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * currentFileName){
247 //Fill the event counter and input lists that are needed, called by the analysis maker.
249 fEventNumber = iEntry;
250 fCurrentFileName = TString(currentFileName);
252 //In case of analysis of events with jets, skip those with jet pt > 5 pt hard
253 if(fComparePtHardAndJetPt && GetStack()) {
254 if(!ComparePtHardAndJetPt()) return kFALSE ;
257 Int_t iParticle = 0 ;
258 Double_t charge = 0.;
259 Int_t ncalo = (fOutputEvent->GetCaloClusters())->GetEntriesFast();
260 Int_t ntrack = (fOutputEvent->GetTracks())->GetEntriesFast();
262 for (iParticle = 0 ; iParticle < GetStack()->GetNtrack() ; iParticle++) {
263 TParticle * particle = GetStack()->Particle(iParticle);
264 TLorentzVector momentum;
267 Int_t pdg = particle->GetPdgCode();
269 //Keep particles with a given status
270 if(KeepParticleWithStatus(particle->GetStatusCode()) && (particle->Pt() > 0) ){
272 //Skip bizarre particles, they crash when charge is calculated
273 // if(TMath::Abs(pdg) == 3124 || TMath::Abs(pdg) > 10000000) continue ;
275 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
276 particle->Momentum(momentum);
277 //---------- Charged particles ----------------------
279 if(fFillCTS && (momentum.Pt() > fCTSPtMin)){
280 //Particles in CTS acceptance
282 if(!fFidutialCut->IsInFidutialCut(momentum,"CTS")) continue;
284 if(fDebug > 3 && momentum.Pt() > 0.2)
285 printf("AliCaloTrackMCReader::FillInputEvent() - CTS : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
286 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
288 x[0] = particle->Vx(); x[1] = particle->Vy(); x[2] = particle->Vz();
289 p[0] = particle->Px(); p[1] = particle->Py(); p[2] = particle->Pz();
290 //Create object and write it to file
291 AliAODTrack *aodTrack = new((*(fOutputEvent->GetTracks()))[ntrack++])
292 AliAODTrack(0, iParticle, p, kTRUE, x, kFALSE,NULL, 0, 0,
295 kFALSE, // No fit performed
296 kFALSE, // No fit performed
297 AliAODTrack::kPrimary,
299 SetTrackChargeAndPID(pdg, aodTrack);
300 fAODCTS->Add(aodTrack);//reference the selected object to the list
302 //Keep some charged particles in calorimeters lists
303 if((fFillPHOS || fFillEMCAL) && KeepChargedParticles(pdg)) FillCalorimeters(iParticle, particle, momentum, ncalo);
307 //-------------Neutral particles ----------------------
308 else if(charge == 0 && (fFillPHOS || fFillEMCAL)){
309 //Skip neutrinos or other neutral particles
310 //if(SkipNeutralParticles(pdg) || particle->IsPrimary()) continue ; // protection added (MG)
311 if(SkipNeutralParticles(pdg)) continue ;
312 //Fill particle/calocluster arrays
314 FillCalorimeters(iParticle, particle, momentum, ncalo);
317 //Sometimes pi0 are stable for the generator, if needed decay it by hand
319 if(momentum.Pt() > fPHOSPtMin || momentum.Pt() > fEMCALPtMin){
320 TLorentzVector lvGamma1, lvGamma2 ;
321 //Double_t angle = 0;
324 MakePi0Decay(momentum,lvGamma1,lvGamma2);//,angle);
326 //Check if Pi0 is in the acceptance of the calorimeters, if aperture angle is small, keep it
327 TParticle * pPhoton1 = new TParticle(22,1,iParticle,0,0,0,lvGamma1.Px(),lvGamma1.Py(),
328 lvGamma1.Pz(),lvGamma1.E(),0,0,0,0);
329 TParticle * pPhoton2 = new TParticle(22,1,iParticle,0,0,0,lvGamma2.Px(),lvGamma2.Py(),
330 lvGamma2.Pz(),lvGamma2.E(),0,0,0,0);
331 //Fill particle/calocluster arrays
332 FillCalorimeters(iParticle,pPhoton1,lvGamma1, ncalo);
333 FillCalorimeters(iParticle,pPhoton2,lvGamma2, ncalo);
336 else FillCalorimeters(iParticle,particle, momentum, ncalo); //Add the rest
339 } //particle with correct status
342 fIndex2ndPhoton = -1; //In case of overlapping studies, reset for each event
348 //________________________________________________________________
349 Bool_t AliCaloTrackMCReader::KeepParticleWithStatus(Int_t status) const {
350 //Check if status is equal to one of the list
351 //These particles will be used in analysis.
353 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
354 if(status == fStatusArray->At(i)) return kTRUE ;
363 //________________________________________________________________
364 Bool_t AliCaloTrackMCReader::KeepChargedParticles(Int_t pdg) const {
365 //Check if pdg is equal to one of the charged particles list
366 //These particles will be added to the calorimeters lists.
368 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
369 if(TMath::Abs(pdg) == fChargedParticlesArray->At(i)) return kTRUE ;
375 //________________________________________________________________
376 void AliCaloTrackMCReader::Print(const Option_t * opt) const
378 //Print some relevant parameters set for the analysis
382 printf("**** Print **** %s %s ****\n", GetName(), GetTitle() ) ;
384 printf("Decay Pi0? : %d\n", fDecayPi0) ;
385 printf("Check Overlap in Calo? : %d\n", fCheckOverlap) ;
386 printf("Keep all status? : %d\n", fKeepAllStatus) ;
388 if(!fKeepAllStatus) printf("Keep particles with status : ");
389 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
390 printf(" %d ; ", fStatusArray->At(i));
393 printf("Skip neutral particles in calo : ");
394 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
395 printf(" %d ; ", fNeutralParticlesArray->At(i));
398 printf("Keep charged particles in calo : ");
399 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
400 printf(" %d ; ", fChargedParticlesArray->At(i));
405 //____________________________________________________________________________
406 void AliCaloTrackMCReader::MakePi0Decay(TLorentzVector &p0, TLorentzVector &p1,
407 TLorentzVector &p2) const {//, Double_t &angle) {
408 // Perform isotropic decay pi0 -> 2 photons
409 // p0 is pi0 4-momentum (inut)
410 // p1 and p2 are photon 4-momenta (output)
411 // cout<<"Boost vector"<<endl;
412 Double_t mPi0 = TDatabasePDG::Instance()->GetParticle(111)->Mass();
413 TVector3 b = p0.BoostVector();
414 //cout<<"Parameters"<<endl;
415 //Double_t mPi0 = p0.M();
416 Double_t phi = TMath::TwoPi() * gRandom->Rndm();
417 Double_t cosThe = 2 * gRandom->Rndm() - 1;
418 Double_t cosPhi = TMath::Cos(phi);
419 Double_t sinPhi = TMath::Sin(phi);
420 Double_t sinThe = TMath::Sqrt(1-cosThe*cosThe);
421 Double_t ePi0 = mPi0/2.;
422 //cout<<"ePi0 "<<ePi0<<endl;
423 //cout<<"Components"<<endl;
424 p1.SetPx(+ePi0*cosPhi*sinThe);
425 p1.SetPy(+ePi0*sinPhi*sinThe);
426 p1.SetPz(+ePi0*cosThe);
428 //cout<<"p1: "<<p1.Px()<<" "<<p1.Py()<<" "<<p1.Pz()<<" "<<p1.E()<<endl;
429 //cout<<"p1 Mass: "<<p1.Px()*p1.Px()+p1.Py()*p1.Py()+p1.Pz()*p1.Pz()-p1.E()*p1.E()<<endl;
430 p2.SetPx(-ePi0*cosPhi*sinThe);
431 p2.SetPy(-ePi0*sinPhi*sinThe);
432 p2.SetPz(-ePi0*cosThe);
434 //cout<<"p2: "<<p2.Px()<<" "<<p2.Py()<<" "<<p2.Pz()<<" "<<p2.E()<<endl;
435 //cout<<"p2 Mass: "<<p2.Px()*p2.Px()+p2.Py()*p2.Py()+p2.Pz()*p2.Pz()-p2.E()*p2.E()<<endl;
436 //cout<<"Boost "<<b.X()<<" "<<b.Y()<<" "<<b.Z()<<endl;
438 //cout<<"p1: "<<p1.Px()<<" "<<p1.Py()<<" "<<p1.Pz()<<" "<<p1.E()<<endl;
440 //cout<<"p2: "<<p2.Px()<<" "<<p2.Py()<<" "<<p2.Pz()<<" "<<p2.E()<<endl;
441 //cout<<"angle"<<endl;
442 //angle = p1.Angle(p2.Vect());
446 //____________________________________________________________________________
447 void AliCaloTrackMCReader::SetInputOutputMCEvent(AliVEvent* /*esd*/, AliAODEvent* aod, AliMCEvent* mc) {
448 // Connect the data pointer
454 //________________________________________________________________
455 Bool_t AliCaloTrackMCReader::SkipNeutralParticles(Int_t pdg) const {
456 //Check if pdg is equal to one of the neutral particles list
457 //These particles will be skipped from analysis.
459 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
460 if(TMath::Abs(pdg) == fNeutralParticlesArray->At(i)) return kTRUE ;
467 //____________________________________________________________________
468 void AliCaloTrackMCReader::SetTrackChargeAndPID(const Int_t pdgCode, AliAODTrack *track) const {
469 //Give a PID weight for tracks equal to 1 depending on the particle type
471 Float_t pid[10] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
477 pid[AliAODTrack::kUnknown] = 1.;
482 track->SetCharge(-1);
483 pid[AliAODTrack::kElectron] = 1.;
488 track->SetCharge(+1);
489 pid[AliAODTrack::kElectron] = 1.;
494 track->SetCharge(-1);
495 pid[AliAODTrack::kMuon] = 1.;
500 track->SetCharge(+1);
501 pid[AliAODTrack::kMuon] = 1.;
507 pid[AliAODTrack::kUnknown] = 1.;
512 track->SetCharge(+1);
513 pid[AliAODTrack::kPion] = 1.;
518 track->SetCharge(-1);
519 pid[AliAODTrack::kPion] = 1.;
525 pid[AliAODTrack::kUnknown] = 1.;
530 track->SetCharge(+1);
531 pid[AliAODTrack::kKaon] = 1.;
536 track->SetCharge(-1);
537 pid[AliAODTrack::kKaon] = 1.;
543 pid[AliAODTrack::kUnknown] = 1.;
548 track->SetCharge(+1);
549 pid[AliAODTrack::kProton] = 1.;
553 case -2212: // anti-p
554 track->SetCharge(-1);
555 pid[AliAODTrack::kProton] = 1.;
561 pid[AliAODTrack::kUnknown] = 1.;
567 pid[AliAODTrack::kUnknown] = 1.;
571 case -311: // anti-K0
573 pid[AliAODTrack::kUnknown] = 1.;
579 pid[AliAODTrack::kUnknown] = 1.;
585 pid[AliAODTrack::kUnknown] = 1.;
590 track->SetCharge(+1);
591 pid[AliAODTrack::kUnknown] = 1.;
596 track->SetCharge(-1);
597 pid[AliAODTrack::kUnknown] = 1.;
602 track->SetCharge(-1);
603 pid[AliAODTrack::kUnknown] = 1.;
609 pid[AliAODTrack::kUnknown] = 1.;
614 track->SetCharge(-1);
615 pid[AliAODTrack::kUnknown] = 1.;
620 track->SetCharge(-1);
621 pid[AliAODTrack::kUnknown] = 1.;
627 pid[AliAODTrack::kUnknown] = 1.;
631 case -3122: // anti-Lambda
633 pid[AliAODTrack::kUnknown] = 1.;
637 case -3222: // anti-Sigma-
638 track->SetCharge(-1);
639 pid[AliAODTrack::kUnknown] = 1.;
643 case -3212: // anti-Sigma0
645 pid[AliAODTrack::kUnknown] = 1.;
649 case -3112: // anti-Sigma+
650 track->SetCharge(+1);
651 pid[AliAODTrack::kUnknown] = 1.;
655 case -3322: // anti-Xi0
657 pid[AliAODTrack::kUnknown] = 1.;
661 case -3312: // anti-Xi+
662 track->SetCharge(+1);
665 case -3334: // anti-Omega+
666 track->SetCharge(+1);
667 pid[AliAODTrack::kUnknown] = 1.;
672 track->SetCharge(+1);
673 pid[AliAODTrack::kUnknown] = 1.;
678 track->SetCharge(-1);
679 pid[AliAODTrack::kUnknown] = 1.;
685 pid[AliAODTrack::kUnknown] = 1.;
689 case -421: // anti-D0
691 pid[AliAODTrack::kUnknown] = 1.;
696 track->SetCharge(-99);
697 pid[AliAODTrack::kUnknown] = 1.;
706 //____________________________________________________________________
707 void AliCaloTrackMCReader::SetCaloClusterPID(const Int_t pdgCode, AliAODCaloCluster *calo) const {
708 //Give a PID weight for CaloClusters equal to 1 depending on the particle type
710 Float_t pid[13] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
715 pid[AliAODCaloCluster::kPhoton] = 1.;
720 pid[AliAODCaloCluster::kElectron] = 1.;
725 pid[AliAODCaloCluster::kElectron] = 1.;
730 pid[AliAODCaloCluster::kCharged] = 1.;
735 pid[AliAODCaloCluster::kCharged] = 1.;
740 pid[AliAODCaloCluster::kPi0] = 1.;
745 pid[AliAODCaloCluster::kCharged] = 1.;
750 pid[AliAODCaloCluster::kCharged] = 1.;
755 pid[AliAODCaloCluster::kKaon0] = 1.;
756 pid[AliAODCaloCluster::kNeutral] = 1;
761 pid[AliAODCaloCluster::kCharged] = 1.;
766 pid[AliAODCaloCluster::kCharged] = 1.;
771 pid[AliAODCaloCluster::kNeutron] = 1.;
772 pid[AliAODCaloCluster::kNeutral] = 1.;
777 pid[AliAODCaloCluster::kCharged] = 1.;
781 case -2212: // anti-p
782 pid[AliAODCaloCluster::kCharged] = 1.;
787 pid[AliAODCaloCluster::kKaon0] = 1.;
788 pid[AliAODCaloCluster::kNeutral] = 1.;
793 pid[AliAODCaloCluster::kKaon0] = 1.;
794 pid[AliAODCaloCluster::kNeutral] = 1.;
798 case -311: // anti-K0
799 pid[AliAODCaloCluster::kKaon0] = 1.;
800 pid[AliAODCaloCluster::kNeutral] = 1.;
805 pid[AliAODCaloCluster::kNeutral] = 1.;
810 pid[AliAODCaloCluster::kUnknown] = 1.;
815 pid[AliAODCaloCluster::kUnknown] = 1.;
820 pid[AliAODCaloCluster::kUnknown] = 1.;
825 pid[AliAODCaloCluster::kUnknown] = 1.;
830 pid[AliAODCaloCluster::kUnknown] = 1.;
835 pid[AliAODCaloCluster::kUnknown] = 1.;
840 pid[AliAODCaloCluster::kUnknown] = 1.;
845 pid[AliAODCaloCluster::kNeutron] = 1.;
846 pid[AliAODCaloCluster::kNeutral] = 1.;
850 case -3122: // anti-Lambda
851 pid[AliAODCaloCluster::kUnknown] = 1.;
855 case -3222: // anti-Sigma-
856 pid[AliAODCaloCluster::kUnknown] = 1.;
860 case -3212: // anti-Sigma0
861 pid[AliAODCaloCluster::kUnknown] = 1.;
865 case -3112: // anti-Sigma+
866 pid[AliAODCaloCluster::kUnknown] = 1.;
870 case -3322: // anti-Xi0
871 pid[AliAODCaloCluster::kUnknown] = 1.;
875 case -3312: // anti-Xi+
876 pid[AliAODCaloCluster::kUnknown] = 1.;
880 case -3334: // anti-Omega+
881 pid[AliAODCaloCluster::kUnknown] = 1.;
886 pid[AliAODCaloCluster::kUnknown] = 1.;
891 pid[AliAODCaloCluster::kUnknown] = 1.;
896 pid[AliAODCaloCluster::kUnknown] = 1.;
900 case -421: // anti-D0
901 pid[AliAODCaloCluster::kUnknown] = 1.;
906 pid[AliAODCaloCluster::kUnknown] = 1.;