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
21 //*-- Author: Gustavo Conesa (LNF-INFN)
22 //////////////////////////////////////////////////////////////////////////////
25 // --- ROOT system ---
27 #include <TParticle.h>
30 //#include "Riostream.h"
32 //---- ANALYSIS system ----
33 #include "AliCaloTrackMCReader.h"
34 #include "AliGenEventHeader.h"
36 #include "AliAODCaloCluster.h"
37 #include "AliAODTrack.h"
38 #include "AliFidutialCut.h"
39 #include "AliAODEvent.h"
40 #include "TParticle.h"
42 ClassImp(AliCaloTrackMCReader)
44 //____________________________________________________________________________
45 AliCaloTrackMCReader::AliCaloTrackMCReader() :
46 AliCaloTrackReader(), fDecayPi0(0),
47 fNeutralParticlesArray(0x0), fChargedParticlesArray(0x0),
48 fStatusArray(0x0), fKeepAllStatus(0), fCheckOverlap(0),
49 fEMCALOverlapAngle(0),fPHOSOverlapAngle(0), fIndex2ndPhoton(0)
53 //Initialize parameters
59 //____________________________________________________________________________
60 AliCaloTrackMCReader::AliCaloTrackMCReader(const AliCaloTrackMCReader & g) :
61 AliCaloTrackReader(g), fDecayPi0(g.fDecayPi0),
62 fNeutralParticlesArray(g.fNeutralParticlesArray?new TArrayI(*g.fNeutralParticlesArray):0x0),
63 fChargedParticlesArray(g.fChargedParticlesArray?new TArrayI(*g.fChargedParticlesArray):0x0),
64 fStatusArray(g.fStatusArray?new TArrayI(*g.fStatusArray):0x0),
65 fKeepAllStatus(g.fKeepAllStatus), fCheckOverlap(g.fCheckOverlap),
66 fEMCALOverlapAngle( g.fEMCALOverlapAngle), fPHOSOverlapAngle(g.fPHOSOverlapAngle),
67 fIndex2ndPhoton(g.fIndex2ndPhoton)
72 //_________________________________________________________________________
73 AliCaloTrackMCReader & AliCaloTrackMCReader::operator = (const AliCaloTrackMCReader & source)
75 // assignment operator
77 if(&source == this) return *this;
79 fDecayPi0 = source.fDecayPi0;
81 delete fChargedParticlesArray;
82 fChargedParticlesArray = source.fChargedParticlesArray?new TArrayI(*source.fChargedParticlesArray):0x0;
84 delete fNeutralParticlesArray;
85 fNeutralParticlesArray = source.fNeutralParticlesArray?new TArrayI(*source.fNeutralParticlesArray):0x0;
88 fStatusArray = source.fStatusArray?new TArrayI(*source.fStatusArray):0x0;
90 fKeepAllStatus = source.fKeepAllStatus ;
96 //_________________________________
97 AliCaloTrackMCReader::~AliCaloTrackMCReader() {
100 if(fChargedParticlesArray) delete fChargedParticlesArray ;
101 if(fNeutralParticlesArray) delete fNeutralParticlesArray ;
102 if(fStatusArray) delete fStatusArray ;
106 //____________________________________________________________________________
107 void AliCaloTrackMCReader::GetVertex(Double_t v[3]) const {
108 //Return vertex position
111 GetGenEventHeader()->PrimaryVertex(pv);
119 //_______________________________________________________________
120 void AliCaloTrackMCReader::InitParameters()
123 //Initialize the parameters of the analysis.
127 fChargedParticlesArray = new TArrayI(1);
128 fChargedParticlesArray->SetAt(11,0);
129 //Int_t pdgarray[]={12,14,16};// skip neutrinos
130 //fNeutralParticlesArray = new TArrayI(3, pdgarray);
131 fNeutralParticlesArray = new TArrayI(3);
132 fNeutralParticlesArray->SetAt(12,0); fNeutralParticlesArray->SetAt(14,1); fNeutralParticlesArray->SetAt(16,2);
133 fStatusArray = new TArrayI(1);
134 fStatusArray->SetAt(1,0);
136 fKeepAllStatus = kTRUE;
138 fCheckOverlap = kFALSE;
139 fEMCALOverlapAngle = 2.5 * TMath::DegToRad();
140 fPHOSOverlapAngle = 0.5 * TMath::DegToRad();
141 fIndex2ndPhoton = -1;
143 //____________________________________________________________________________
144 void AliCaloTrackMCReader::CheckOverlap(const Float_t anglethres, const Int_t imom, Int_t & iPrimary, Int_t & index, TLorentzVector & mom, Int_t & pdg) {
145 //Check overlap of decay photons
146 if( fIndex2ndPhoton==iPrimary ){
150 else fIndex2ndPhoton=-1;
155 TLorentzVector ph1, ph2;
156 TParticle *meson = GetStack()->Particle(imom);
157 Int_t mepdg = meson->GetPdgCode();
158 Int_t idaug1 = meson->GetFirstDaughter();
159 if((mepdg == 111 || mepdg == 221 ) && meson->GetNDaughters() == 2){ //Check only decay in 2 photons
160 TParticle * d1 = GetStack()->Particle(idaug1);
161 TParticle *d2 = GetStack()->Particle(idaug1+1);
162 if(d1->GetPdgCode() == 22 && d2->GetPdgCode() == 22 ){
165 //printf("angle %2.2f\n",ph1.Angle(ph2.Vect()));
167 if(anglethres > ph1.Angle(ph2.Vect())){
171 meson->Momentum(mom);
172 //printf("Overlap:: pt %2.2f, phi %2.2f, eta %2.2f\n",mom.Pt(),mom.Phi(),mom.Eta());
173 if(iPrimary == idaug1) iPrimary++; //skip next photon in list
176 //Do not check overlapping for next decay photon from same meson
177 if(iPrimary == idaug1) {fIndex2ndPhoton = idaug1+1;
182 }//Meson Decay with 2 photon daughters
185 //____________________________________________________________________________
186 void AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* particle, TLorentzVector momentum,
188 //Fill AODCaloClusters or TParticles lists of PHOS or EMCAL
190 if(fFillPHOS && fFidutialCut->IsInFidutialCut(momentum,"PHOS") && momentum.Pt() > fPHOSPtMin){
191 Int_t index = iParticle ;
192 Int_t pdg = TMath::Abs(particle->GetPdgCode());
194 CheckOverlap(fPHOSOverlapAngle,particle->GetFirstMother(),index, iParticle, momentum, pdg);
196 Char_t ttype= AliAODCluster::kPHOSNeutral;
197 Int_t labels[] = {index};
198 Float_t x[] = {momentum.X(), momentum.Y(), momentum.Z()};
199 //Create object and write it to file
200 AliAODCaloCluster *calo = new((*(fOutputEvent->GetCaloClusters()))[ncalo++])
201 AliAODCaloCluster(index,1,labels,momentum.E(), x, NULL, ttype, 0);
203 SetCaloClusterPID(pdg,calo) ;
204 if(fDebug > 3 && momentum.Pt() > 0.2)
205 printf("Fill MC PHOS :: Selected tracks %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
206 particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
207 fAODPHOS->Add(calo);//reference the selected object to the list
210 else if(fFillEMCAL && fFidutialCut->IsInFidutialCut(momentum,"EMCAL") && momentum.Pt() > fEMCALPtMin){
211 Int_t index = iParticle ;
212 Int_t pdg = TMath::Abs(particle->GetPdgCode());
215 CheckOverlap(fEMCALOverlapAngle,particle->GetFirstMother(),iParticle, index, momentum, pdg);
217 Char_t ttype= AliAODCluster::kEMCALClusterv1;
218 Int_t labels[] = {index};
219 Float_t x[] = {momentum.X(), momentum.Y(), momentum.Z()};
220 //Create object and write it to file
221 AliAODCaloCluster *calo = new((*(fOutputEvent->GetCaloClusters()))[ncalo++])
222 AliAODCaloCluster(iParticle,1,labels,momentum.E(), x, NULL, ttype, 0);
224 SetCaloClusterPID(pdg,calo) ;
225 if(fDebug > 3 && momentum.Pt() > 0.2)
226 printf("Fill MC EMCAL :: Selected tracks %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
227 particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
228 fAODEMCAL->Add(calo);//reference the selected object to the list
232 //____________________________________________________________________________
233 void AliCaloTrackMCReader::FillInputEvent(Int_t iEntry){
234 //Fill the event counter and input lists that are needed, called by the analysis maker.
236 fEventNumber = iEntry;
237 Int_t iParticle = 0 ;
238 Double_t charge = 0.;
239 Int_t ncalo = (fOutputEvent->GetCaloClusters())->GetEntriesFast();
240 Int_t ntrack = (fOutputEvent->GetTracks())->GetEntriesFast();
242 for (iParticle = 0 ; iParticle < GetStack()->GetNtrack() ; iParticle++) {
243 TParticle * particle = GetStack()->Particle(iParticle);
244 TLorentzVector momentum;
247 Int_t pdg = particle->GetPdgCode();
249 //Keep particles with a given status
250 if(KeepParticleWithStatus(particle->GetStatusCode()) && (particle->Pt() > 0) ){
252 //Skip bizarre particles, they crash when charge is calculated
253 // if(TMath::Abs(pdg) == 3124 || TMath::Abs(pdg) > 10000000) continue ;
255 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
256 particle->Momentum(momentum);
257 //---------- Charged particles ----------------------
258 if((charge != 0) && (momentum.Pt() > fCTSPtMin) && (fFidutialCut->IsInFidutialCut(momentum,"CTS"))){
260 //Particles in CTS acceptance
261 if(fDebug > 3 && momentum.Pt() > 0.2)
262 printf("Fill MC CTS :: Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
263 momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
265 x[0] = particle->Vx(); x[1] = particle->Vy(); x[2] = particle->Vz();
266 p[0] = particle->Px(); p[1] = particle->Py(); p[2] = particle->Pz();
267 //Create object and write it to file
268 AliAODTrack *aodTrack = new((*(fOutputEvent->GetTracks()))[ntrack++])
269 AliAODTrack(0, iParticle, p, kTRUE, x, kFALSE,NULL, 0, 0,
272 kFALSE, // No fit performed
273 kFALSE, // No fit performed
274 AliAODTrack::kPrimary,
276 SetTrackChargeAndPID(pdg, aodTrack);
277 fAODCTS->Add(aodTrack);//reference the selected object to the list
279 //Keep some charged particles in calorimeters lists
280 if((fFillPHOS || fFillEMCAL) && KeepChargedParticles(pdg)) FillCalorimeters(iParticle, particle, momentum, ncalo);
284 //-------------Neutral particles ----------------------
285 else if(charge == 0 && (fFillPHOS || fFillEMCAL)){
286 //Skip neutrinos or other neutral particles
287 //if(SkipNeutralParticles(pdg) || particle->IsPrimary()) continue ; // protection added (MG)
288 if(SkipNeutralParticles(pdg)) continue ;
289 //Fill particle/calocluster arrays
291 FillCalorimeters(iParticle, particle, momentum, ncalo);
294 //Sometimes pi0 are stable for the generator, if needed decay it by hand
296 if(momentum.Pt() > fPHOSPtMin || momentum.Pt() > fEMCALPtMin){
297 TLorentzVector lvGamma1, lvGamma2 ;
298 //Double_t angle = 0;
301 MakePi0Decay(momentum,lvGamma1,lvGamma2);//,angle);
303 //Check if Pi0 is in the acceptance of the calorimeters, if aperture angle is small, keep it
304 TParticle * pPhoton1 = new TParticle(22,1,iParticle,0,0,0,lvGamma1.Px(),lvGamma1.Py(),
305 lvGamma1.Pz(),lvGamma1.E(),0,0,0,0);
306 TParticle * pPhoton2 = new TParticle(22,1,iParticle,0,0,0,lvGamma2.Px(),lvGamma2.Py(),
307 lvGamma2.Pz(),lvGamma2.E(),0,0,0,0);
308 //Fill particle/calocluster arrays
309 FillCalorimeters(iParticle,pPhoton1,lvGamma1, ncalo);
310 FillCalorimeters(iParticle,pPhoton2,lvGamma2, ncalo);
313 else FillCalorimeters(iParticle,particle, momentum, ncalo); //Add the rest
316 } //particle with correct status
319 fIndex2ndPhoton = -1; //In case of overlapping studies, reset for each event
322 //________________________________________________________________
323 Bool_t AliCaloTrackMCReader::KeepParticleWithStatus(Int_t status) const {
324 //Check if status is equal to one of the list
325 //These particles will be used in analysis.
327 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
328 if(status == fStatusArray->At(i)) return kTRUE ;
337 //________________________________________________________________
338 Bool_t AliCaloTrackMCReader::KeepChargedParticles(Int_t pdg) const {
339 //Check if pdg is equal to one of the charged particles list
340 //These particles will be added to the calorimeters lists.
342 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
343 if(TMath::Abs(pdg) == fChargedParticlesArray->At(i)) return kTRUE ;
349 //________________________________________________________________
350 void AliCaloTrackMCReader::Print(const Option_t * opt) const
352 //Print some relevant parameters set for the analysis
356 Info("**** Print **** ", "%s %s", GetName(), GetTitle() ) ;
358 printf("Decay Pi0? : %d\n", fDecayPi0) ;
359 printf("Check Overlap in Calo? : %d\n", fCheckOverlap) ;
360 printf("Keep all status? : %d\n", fKeepAllStatus) ;
362 if(!fKeepAllStatus) printf("Keep particles with status : ");
363 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
364 printf(" %d ; ", fStatusArray->At(i));
367 printf("Skip neutral particles in calo : ");
368 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
369 printf(" %d ; ", fNeutralParticlesArray->At(i));
372 printf("Keep charged particles in calo : ");
373 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
374 printf(" %d ; ", fChargedParticlesArray->At(i));
379 //____________________________________________________________________________
380 void AliCaloTrackMCReader::MakePi0Decay(TLorentzVector &p0, TLorentzVector &p1,
381 TLorentzVector &p2) const {//, Double_t &angle) {
382 // Perform isotropic decay pi0 -> 2 photons
383 // p0 is pi0 4-momentum (inut)
384 // p1 and p2 are photon 4-momenta (output)
385 // cout<<"Boost vector"<<endl;
386 Double_t mPi0 = TDatabasePDG::Instance()->GetParticle(111)->Mass();
387 TVector3 b = p0.BoostVector();
388 //cout<<"Parameters"<<endl;
389 //Double_t mPi0 = p0.M();
390 Double_t phi = TMath::TwoPi() * gRandom->Rndm();
391 Double_t cosThe = 2 * gRandom->Rndm() - 1;
392 Double_t cosPhi = TMath::Cos(phi);
393 Double_t sinPhi = TMath::Sin(phi);
394 Double_t sinThe = TMath::Sqrt(1-cosThe*cosThe);
395 Double_t ePi0 = mPi0/2.;
396 //cout<<"ePi0 "<<ePi0<<endl;
397 //cout<<"Components"<<endl;
398 p1.SetPx(+ePi0*cosPhi*sinThe);
399 p1.SetPy(+ePi0*sinPhi*sinThe);
400 p1.SetPz(+ePi0*cosThe);
402 //cout<<"p1: "<<p1.Px()<<" "<<p1.Py()<<" "<<p1.Pz()<<" "<<p1.E()<<endl;
403 //cout<<"p1 Mass: "<<p1.Px()*p1.Px()+p1.Py()*p1.Py()+p1.Pz()*p1.Pz()-p1.E()*p1.E()<<endl;
404 p2.SetPx(-ePi0*cosPhi*sinThe);
405 p2.SetPy(-ePi0*sinPhi*sinThe);
406 p2.SetPz(-ePi0*cosThe);
408 //cout<<"p2: "<<p2.Px()<<" "<<p2.Py()<<" "<<p2.Pz()<<" "<<p2.E()<<endl;
409 //cout<<"p2 Mass: "<<p2.Px()*p2.Px()+p2.Py()*p2.Py()+p2.Pz()*p2.Pz()-p2.E()*p2.E()<<endl;
410 //cout<<"Boost "<<b.X()<<" "<<b.Y()<<" "<<b.Z()<<endl;
412 //cout<<"p1: "<<p1.Px()<<" "<<p1.Py()<<" "<<p1.Pz()<<" "<<p1.E()<<endl;
414 //cout<<"p2: "<<p2.Px()<<" "<<p2.Py()<<" "<<p2.Pz()<<" "<<p2.E()<<endl;
415 //cout<<"angle"<<endl;
416 //angle = p1.Angle(p2.Vect());
420 //____________________________________________________________________________
421 void AliCaloTrackMCReader::SetInputOutputMCEvent(AliVEvent* /*esd*/, AliAODEvent* aod, AliMCEvent* mc) {
422 // Connect the data pointer
428 //________________________________________________________________
429 Bool_t AliCaloTrackMCReader::SkipNeutralParticles(Int_t pdg) const {
430 //Check if pdg is equal to one of the neutral particles list
431 //These particles will be skipped from analysis.
433 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
434 if(TMath::Abs(pdg) == fNeutralParticlesArray->At(i)) return kTRUE ;
441 //____________________________________________________________________
442 void AliCaloTrackMCReader::SetTrackChargeAndPID(const Int_t pdgCode, AliAODTrack *track) const {
443 //Give a PID weight for tracks equal to 1 depending on the particle type
445 Float_t pid[10] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
451 pid[AliAODTrack::kUnknown] = 1.;
456 track->SetCharge(-1);
457 pid[AliAODTrack::kElectron] = 1.;
462 track->SetCharge(+1);
463 pid[AliAODTrack::kElectron] = 1.;
468 track->SetCharge(-1);
469 pid[AliAODTrack::kMuon] = 1.;
474 track->SetCharge(+1);
475 pid[AliAODTrack::kMuon] = 1.;
481 pid[AliAODTrack::kUnknown] = 1.;
486 track->SetCharge(+1);
487 pid[AliAODTrack::kPion] = 1.;
492 track->SetCharge(-1);
493 pid[AliAODTrack::kPion] = 1.;
499 pid[AliAODTrack::kUnknown] = 1.;
504 track->SetCharge(+1);
505 pid[AliAODTrack::kKaon] = 1.;
510 track->SetCharge(-1);
511 pid[AliAODTrack::kKaon] = 1.;
517 pid[AliAODTrack::kUnknown] = 1.;
522 track->SetCharge(+1);
523 pid[AliAODTrack::kProton] = 1.;
527 case -2212: // anti-p
528 track->SetCharge(-1);
529 pid[AliAODTrack::kProton] = 1.;
535 pid[AliAODTrack::kUnknown] = 1.;
541 pid[AliAODTrack::kUnknown] = 1.;
545 case -311: // anti-K0
547 pid[AliAODTrack::kUnknown] = 1.;
553 pid[AliAODTrack::kUnknown] = 1.;
559 pid[AliAODTrack::kUnknown] = 1.;
564 track->SetCharge(+1);
565 pid[AliAODTrack::kUnknown] = 1.;
570 track->SetCharge(-1);
571 pid[AliAODTrack::kUnknown] = 1.;
576 track->SetCharge(-1);
577 pid[AliAODTrack::kUnknown] = 1.;
583 pid[AliAODTrack::kUnknown] = 1.;
588 track->SetCharge(-1);
589 pid[AliAODTrack::kUnknown] = 1.;
594 track->SetCharge(-1);
595 pid[AliAODTrack::kUnknown] = 1.;
601 pid[AliAODTrack::kUnknown] = 1.;
605 case -3122: // anti-Lambda
607 pid[AliAODTrack::kUnknown] = 1.;
611 case -3222: // anti-Sigma-
612 track->SetCharge(-1);
613 pid[AliAODTrack::kUnknown] = 1.;
617 case -3212: // anti-Sigma0
619 pid[AliAODTrack::kUnknown] = 1.;
623 case -3112: // anti-Sigma+
624 track->SetCharge(+1);
625 pid[AliAODTrack::kUnknown] = 1.;
629 case -3322: // anti-Xi0
631 pid[AliAODTrack::kUnknown] = 1.;
635 case -3312: // anti-Xi+
636 track->SetCharge(+1);
639 case -3334: // anti-Omega+
640 track->SetCharge(+1);
641 pid[AliAODTrack::kUnknown] = 1.;
646 track->SetCharge(+1);
647 pid[AliAODTrack::kUnknown] = 1.;
652 track->SetCharge(-1);
653 pid[AliAODTrack::kUnknown] = 1.;
659 pid[AliAODTrack::kUnknown] = 1.;
663 case -421: // anti-D0
665 pid[AliAODTrack::kUnknown] = 1.;
670 track->SetCharge(-99);
671 pid[AliAODTrack::kUnknown] = 1.;
680 //____________________________________________________________________
681 void AliCaloTrackMCReader::SetCaloClusterPID(const Int_t pdgCode, AliAODCaloCluster *calo) const {
682 //Give a PID weight for CaloClusters equal to 1 depending on the particle type
684 Float_t pid[13] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
689 pid[AliAODCaloCluster::kPhoton] = 1.;
694 pid[AliAODCaloCluster::kElectron] = 1.;
699 pid[AliAODCaloCluster::kElectron] = 1.;
704 pid[AliAODCaloCluster::kCharged] = 1.;
709 pid[AliAODCaloCluster::kCharged] = 1.;
714 pid[AliAODCaloCluster::kPi0] = 1.;
719 pid[AliAODCaloCluster::kCharged] = 1.;
724 pid[AliAODCaloCluster::kCharged] = 1.;
729 pid[AliAODCaloCluster::kKaon0] = 1.;
730 pid[AliAODCaloCluster::kNeutral] = 1;
735 pid[AliAODCaloCluster::kCharged] = 1.;
740 pid[AliAODCaloCluster::kCharged] = 1.;
745 pid[AliAODCaloCluster::kNeutron] = 1.;
746 pid[AliAODCaloCluster::kNeutral] = 1.;
751 pid[AliAODCaloCluster::kCharged] = 1.;
755 case -2212: // anti-p
756 pid[AliAODCaloCluster::kCharged] = 1.;
761 pid[AliAODCaloCluster::kKaon0] = 1.;
762 pid[AliAODCaloCluster::kNeutral] = 1.;
767 pid[AliAODCaloCluster::kKaon0] = 1.;
768 pid[AliAODCaloCluster::kNeutral] = 1.;
772 case -311: // anti-K0
773 pid[AliAODCaloCluster::kKaon0] = 1.;
774 pid[AliAODCaloCluster::kNeutral] = 1.;
779 pid[AliAODCaloCluster::kNeutral] = 1.;
784 pid[AliAODCaloCluster::kUnknown] = 1.;
789 pid[AliAODCaloCluster::kUnknown] = 1.;
794 pid[AliAODCaloCluster::kUnknown] = 1.;
799 pid[AliAODCaloCluster::kUnknown] = 1.;
804 pid[AliAODCaloCluster::kUnknown] = 1.;
809 pid[AliAODCaloCluster::kUnknown] = 1.;
814 pid[AliAODCaloCluster::kUnknown] = 1.;
819 pid[AliAODCaloCluster::kNeutron] = 1.;
820 pid[AliAODCaloCluster::kNeutral] = 1.;
824 case -3122: // anti-Lambda
825 pid[AliAODCaloCluster::kUnknown] = 1.;
829 case -3222: // anti-Sigma-
830 pid[AliAODCaloCluster::kUnknown] = 1.;
834 case -3212: // anti-Sigma0
835 pid[AliAODCaloCluster::kUnknown] = 1.;
839 case -3112: // anti-Sigma+
840 pid[AliAODCaloCluster::kUnknown] = 1.;
844 case -3322: // anti-Xi0
845 pid[AliAODCaloCluster::kUnknown] = 1.;
849 case -3312: // anti-Xi+
850 pid[AliAODCaloCluster::kUnknown] = 1.;
854 case -3334: // anti-Omega+
855 pid[AliAODCaloCluster::kUnknown] = 1.;
860 pid[AliAODCaloCluster::kUnknown] = 1.;
865 pid[AliAODCaloCluster::kUnknown] = 1.;
870 pid[AliAODCaloCluster::kUnknown] = 1.;
874 case -421: // anti-D0
875 pid[AliAODCaloCluster::kUnknown] = 1.;
880 pid[AliAODCaloCluster::kUnknown] = 1.;