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 **************************************************************************/
16 //_________________________________________________________________________
17 // Class for reading data (Kinematics) in order to do prompt gamma
18 // or other particle identification and correlations
19 // Separates generated particles into charged (CTS)
20 // and neutral (PHOS or EMCAL acceptance)
21 // Now, it only works with data stored in Kinematics.root and
22 // not in filtered Kinematics branch in AODs
24 //*-- Author: Gustavo Conesa (LNF-INFN)
25 //////////////////////////////////////////////////////////////////////////////
28 // --- ROOT system ---
30 #include <TParticle.h>
31 #include <TDatabasePDG.h>
34 #include "TParticle.h"
36 //---- ANALYSIS system ----
37 #include "AliCaloTrackMCReader.h"
38 #include "AliGenEventHeader.h"
40 #include "AliVCluster.h"
41 #include "AliAODTrack.h"
42 #include "AliAODEvent.h"
43 #include "AliFiducialCut.h"
44 #include "AliMCAnalysisUtils.h"
47 ClassImp(AliCaloTrackMCReader)
49 //____________________________________________
50 AliCaloTrackMCReader::AliCaloTrackMCReader() :
51 AliCaloTrackReader(), fDecayPi0(0),
52 fNeutralParticlesArray(0x0), fChargedParticlesArray(0x0),
53 fStatusArray(0x0), fKeepAllStatus(0),
54 fCheckOverlap(0), fEMCALOverlapAngle(0),fPHOSOverlapAngle(0),
55 fIndex2ndPhoton(0), fOnlyGeneratorParticles(kTRUE),
56 fMomentum(), fPi0Momentum(),
57 fGamDecayMom1(), fGamDecayMom2()
61 //Initialize parameters
64 //___________________________________________
65 AliCaloTrackMCReader::~AliCaloTrackMCReader()
69 if(fChargedParticlesArray) delete fChargedParticlesArray ;
70 if(fNeutralParticlesArray) delete fNeutralParticlesArray ;
71 if(fStatusArray) delete fStatusArray ;
75 //________________________________________________________
76 void AliCaloTrackMCReader::GetVertex(Double_t v[3]) const
78 //Return vertex position
81 GetGenEventHeader()->PrimaryVertex(pv);
88 //_________________________________________
89 void AliCaloTrackMCReader::InitParameters()
92 //Initialize the parameters of the analysis.
96 fChargedParticlesArray = new TArrayI(1);
97 fChargedParticlesArray->SetAt(11,0);
98 //Int_t pdgarray[]={12,14,16};// skip neutrinos
99 //fNeutralParticlesArray = new TArrayI(3, pdgarray);
100 fNeutralParticlesArray = new TArrayI(3);
101 fNeutralParticlesArray->SetAt(12,0); fNeutralParticlesArray->SetAt(14,1); fNeutralParticlesArray->SetAt(16,2);
102 fStatusArray = new TArrayI(1);
103 fStatusArray->SetAt(1,0);
105 fOnlyGeneratorParticles = kTRUE;
106 fKeepAllStatus = kTRUE;
108 fCheckOverlap = kFALSE;
109 fEMCALOverlapAngle = 2.5 * TMath::DegToRad();
110 fPHOSOverlapAngle = 0.5 * TMath::DegToRad();
111 fIndex2ndPhoton = -1;
115 fReadAODMCParticles = kFALSE; //This class only works with Kinematics.root input.
117 //For this reader we own the objects of the arrays
118 fCTSTracks ->SetOwner(kTRUE);
119 fEMCALClusters->SetOwner(kTRUE);
120 fPHOSClusters ->SetOwner(kTRUE);
124 //____________________________________________________________________________________
125 void AliCaloTrackMCReader::CheckOverlap(Float_t anglethres, Int_t imom,
126 Int_t & iPrimary, Int_t & index, Int_t & pdg)
128 //Check overlap of decay photons
129 if( fIndex2ndPhoton==iPrimary )
139 TParticle *meson = GetStack()->Particle(imom);
140 Int_t mepdg = meson->GetPdgCode();
141 Int_t idaug1 = meson->GetFirstDaughter();
142 if((mepdg == 111 || mepdg == 221 ) && meson->GetNDaughters() == 2)
143 { //Check only decay in 2 photons
144 TParticle * d1 = GetStack()->Particle(idaug1);
145 TParticle * d2 = GetStack()->Particle(idaug1+1);
146 if(d1->GetPdgCode() == 22 && d2->GetPdgCode() == 22 )
148 d1->Momentum(fGamDecayMom1);
149 d2->Momentum(fGamDecayMom2);
150 //printf("angle %2.2f\n",ph1.Angle(ph2.Vect()));
152 if(anglethres > fGamDecayMom1.Angle(fGamDecayMom2.Vect()))
157 meson->Momentum(fMomentum);
158 //printf("Overlap:: pt %2.2f, phi %2.2f, eta %2.2f\n",mom.Pt(),mom.Phi(),mom.Eta());
159 if(iPrimary == idaug1) iPrimary++; //skip next photon in list
163 //Do not check overlapping for next decay photon from same meson
164 if(iPrimary == idaug1)
166 fIndex2ndPhoton = idaug1+1;
171 }//Meson Decay with 2 photon daughters
174 //__________________________________________________________________________________
175 void AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* particle)
177 //Fill AODCaloClusters or TParticles lists of PHOS or EMCAL
179 Float_t overAngleLimit = 100;
183 if( particle->Pt() < fPHOSPtMin ) return;
184 if( fCheckFidCut && !fFiducialCut->IsInFiducialCut(particle->Eta(),particle->Phi(),kPHOS )) return;
185 ttype = AliVCluster::kPHOSNeutral;
186 overAngleLimit = fPHOSOverlapAngle;
190 if( particle->Pt() < fEMCALPtMin ) return;
191 if( fCheckFidCut && !fFiducialCut->IsInFiducialCut(particle->Eta(),particle->Phi(),kEMCAL)) return;
192 ttype= AliVCluster::kEMCALClusterv1;
193 overAngleLimit = fEMCALOverlapAngle;
196 particle->Momentum(fMomentum);
198 Int_t index = iParticle ;
199 Int_t pdg = TMath::Abs(particle->GetPdgCode());
201 CheckOverlap(overAngleLimit,particle->GetFirstMother(),index, iParticle, pdg);
203 Int_t labels[] = {index};
204 Double_t x[] = {fMomentum.X(), fMomentum.Y(), fMomentum.Z()};
206 //Create object and write it to file
207 AliAODCaloCluster *calo = new AliAODCaloCluster(index,1,labels,fMomentum.E(), x, NULL, ttype, 0);
209 SetCaloClusterPID(pdg,calo) ;
211 AliDebug(3,Form("PHOS %d?, EMCAL %d? : Selected cluster pdg %d, E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
212 fFillPHOS, fFillEMCAL, pdg,fMomentum.E(), fMomentum.Pt(), fMomentum.Phi()*TMath::RadToDeg(),fMomentum.Eta()));
214 //reference the selected object to the list
215 if(fFillPHOS)fPHOSClusters ->Add(calo);
216 else fEMCALClusters->Add(calo);
220 //___________________________________________________________________________
221 Bool_t AliCaloTrackMCReader::FillInputEvent(Int_t iEntry,
222 const char * /*currentFileName*/)
224 //Fill the event counter and input lists that are needed, called by the analysis maker.
226 fEventNumber = iEntry;
227 //fCurrentFileName = TString(currentFileName);
230 //In case of analysis of events with jets, skip those with jet pt > 5 pt hard
231 if(fComparePtHardAndJetPt && GetStack())
233 if(!ComparePtHardAndJetPt()) return kFALSE ;
239 Int_t iParticle = 0 ;
240 Double_t charge = 0.;
241 Int_t nparticles = GetStack()->GetNtrack() ;
243 if(fOnlyGeneratorParticles) nparticles=GetStack()->GetNprimary();
245 for (iParticle = 0 ; iParticle < nparticles ; iParticle++)
247 TParticle * particle = GetStack()->Particle(iParticle);
250 Int_t pdg = particle->GetPdgCode();
252 //Keep particles with a given status
253 if(KeepParticleWithStatus(particle->GetStatusCode()) && (particle->Pt() > 0) )
255 //Skip bizarre particles, they crash when charge is calculated
256 // if(TMath::Abs(pdg) == 3124 || TMath::Abs(pdg) > 10000000) continue ;
258 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
260 Float_t en = particle->Energy();
261 Float_t pt = particle->Pt();
262 Float_t eta = particle->Eta();
263 Float_t phi = particle->Phi();
264 //---------- Charged particles ----------------------
267 if(TMath::Abs(eta)< fTrackMultEtaCut) fTrackMult++;
269 if(fFillCTS && (pt > fCTSPtMin))
271 //Particles in CTS acceptance
273 if(fCheckFidCut && !fFiducialCut->IsInFiducialCut(eta,phi,kCTS)) continue;
275 if(TMath::Abs(pdg) == 11 && GetStack()->Particle(particle->GetFirstMother())->GetPdgCode()==22) continue ;
277 AliDebug(2,Form("CTS : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
278 en,pt,phi*TMath::RadToDeg(),eta));
280 x[0] = particle->Vx(); x[1] = particle->Vy(); x[2] = particle->Vz();
281 p[0] = particle->Px(); p[1] = particle->Py(); p[2] = particle->Pz();
282 //Create object and write it to file
283 AliAODTrack *aodTrack = new AliAODTrack(0, iParticle, p, kTRUE, x, kFALSE,NULL, 0, 0,
286 kFALSE, // No fit performed
287 kFALSE, // No fit performed
288 AliAODTrack::kPrimary,
290 SetTrackChargeAndPID(pdg, aodTrack);
291 fCTSTracks->Add(aodTrack);//reference the selected object to the list
293 //Keep some charged particles in calorimeters lists
294 if((fFillPHOS || fFillEMCAL) && KeepChargedParticles(pdg)) FillCalorimeters(iParticle, particle);
298 //-------------Neutral particles ----------------------
299 else if(charge == 0 && (fFillPHOS || fFillEMCAL))
301 //Skip neutrinos or other neutral particles
302 //if(SkipNeutralParticles(pdg) || particle->IsPrimary()) continue ; // protection added (MG)
303 if(SkipNeutralParticles(pdg)) continue ;
304 //Fill particle/calocluster arrays
307 AliDebug(2,Form("Calo : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
308 en,pt,phi*TMath::RadToDeg(),eta));
309 FillCalorimeters(iParticle, particle);
313 //Sometimes pi0 are stable for the generator, if needed decay it by hand
316 if(pt > fPHOSPtMin || pt > fEMCALPtMin)
319 //Double_t angle = 0;
320 particle->Momentum(fPi0Momentum);
322 MakePi0Decay();//,angle);
324 //Check if Pi0 is in the acceptance of the calorimeters, if aperture angle is small, keep it
325 TParticle * pPhoton1 = new TParticle(22,1,iParticle,0,0,0,fGamDecayMom1.Px(),fGamDecayMom1.Py(),
326 fGamDecayMom1.Pz(),fGamDecayMom1.E(),0,0,0,0);
327 TParticle * pPhoton2 = new TParticle(22,1,iParticle,0,0,0,fGamDecayMom2.Px(),fGamDecayMom2.Py(),
328 fGamDecayMom2.Pz(),fGamDecayMom2.E(),0,0,0,0);
329 //Fill particle/calocluster arrays
330 FillCalorimeters(iParticle,pPhoton1);
331 FillCalorimeters(iParticle,pPhoton2);
336 AliDebug(2,Form("Calo : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
337 en,pt,phi*TMath::RadToDeg(),eta));
338 FillCalorimeters(iParticle,particle); //Add the rest
342 } //particle with correct status
345 fIndex2ndPhoton = -1; //In case of overlapping studies, reset for each event
351 //_____________________________________________________________________
352 Bool_t AliCaloTrackMCReader::KeepParticleWithStatus(Int_t status) const
354 //Check if status is equal to one of the list
355 //These particles will be used in analysis.
358 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
359 if(status == fStatusArray->At(i)) return kTRUE ;
367 //________________________________________________________________
368 Bool_t AliCaloTrackMCReader::KeepChargedParticles(Int_t pdg) const
370 //Check if pdg is equal to one of the charged particles list
371 //These particles will be added to the calorimeters lists.
373 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
374 if(TMath::Abs(pdg) == fChargedParticlesArray->At(i)) return kTRUE ;
380 //__________________________________________________________
381 void AliCaloTrackMCReader::Print(const Option_t * opt) const
383 //Print some relevant parameters set for the analysis
387 AliCaloTrackReader::Print(opt);
389 printf("**** Print **** %s %s ****\n", GetName(), GetTitle() ) ;
391 printf("Decay Pi0? : %d\n", fDecayPi0) ;
392 printf("Check Overlap in Calo? : %d\n", fCheckOverlap) ;
393 printf("Keep all status? : %d\n", fKeepAllStatus) ;
395 if(!fKeepAllStatus) printf("Keep particles with status : ");
396 for(Int_t i= 0; i < fStatusArray->GetSize(); i++)
397 printf(" %d ; ", fStatusArray->At(i));
400 printf("Skip neutral particles in calo : ");
401 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
402 printf(" %d ; ", fNeutralParticlesArray->At(i));
405 printf("Keep charged particles in calo : ");
406 for(Int_t i= 0; i < fChargedParticlesArray->GetSize(); i++)
407 printf(" %d ; ", fChargedParticlesArray->At(i));
412 //_______________________________________
413 void AliCaloTrackMCReader::MakePi0Decay()
416 // Perform isotropic decay pi0 -> 2 photons
417 // fPi0Momentum is pi0 4-momentum (ipnut)
418 // fGamDecayMom1 and fGamDecayMom2 are photon 4-momenta (output)
420 // cout<<"Boost vector"<<endl;
421 Double_t mPi0 = TDatabasePDG::Instance()->GetParticle(111)->Mass();
422 TVector3 b = fPi0Momentum.BoostVector();
423 //cout<<"Parameters"<<endl;
424 //Double_t mPi0 = fPi0Momentum.M();
425 Double_t phi = TMath::TwoPi() * gRandom->Rndm();
426 Double_t cosThe = 2 * gRandom->Rndm() - 1;
427 Double_t cosPhi = TMath::Cos(phi);
428 Double_t sinPhi = TMath::Sin(phi);
429 Double_t sinThe = TMath::Sqrt(1-cosThe*cosThe);
430 Double_t ePi0 = mPi0/2.;
431 //cout<<"ePi0 "<<ePi0<<endl;
432 //cout<<"Components"<<endl;
433 fGamDecayMom1.SetPx(+ePi0*cosPhi*sinThe);
434 fGamDecayMom1.SetPy(+ePi0*sinPhi*sinThe);
435 fGamDecayMom1.SetPz(+ePi0*cosThe);
436 fGamDecayMom1.SetE(ePi0);
437 //cout<<"fGamDecayMom1: "<<fGamDecayMom1.Px()<<" "<<fGamDecayMom1.Py()<<" "<<fGamDecayMom1.Pz()<<" "<<fGamDecayMom1.E()<<endl;
438 //cout<<"fGamDecayMom1 Mass: "<<fGamDecayMom1.Px()*fGamDecayMom1.Px()+fGamDecayMom1.Py()*fGamDecayMom1.Py()+fGamDecayMom1.Pz()*fGamDecayMom1.Pz()-fGamDecayMom1.E()*fGamDecayMom1.E()<<endl;
439 fGamDecayMom2.SetPx(-ePi0*cosPhi*sinThe);
440 fGamDecayMom2.SetPy(-ePi0*sinPhi*sinThe);
441 fGamDecayMom2.SetPz(-ePi0*cosThe);
442 fGamDecayMom2.SetE(ePi0);
443 //cout<<"fGamDecayMom2: "<<fGamDecayMom2.Px()<<" "<<fGamDecayMom2.Py()<<" "<<fGamDecayMom2.Pz()<<" "<<fGamDecayMom2.E()<<endl;
444 //cout<<"fGamDecayMom2 Mass: "<<fGamDecayMom2.Px()*fGamDecayMom2.Px()+fGamDecayMom2.Py()*fGamDecayMom2.Py()+fGamDecayMom2.Pz()*fGamDecayMom2.Pz()-fGamDecayMom2.E()*fGamDecayMom2.E()<<endl;
445 //cout<<"Boost "<<b.X()<<" "<<b.Y()<<" "<<b.Z()<<endl;
446 fGamDecayMom1.Boost(b);
447 //cout<<"fGamDecayMom1: "<<fGamDecayMom1.Px()<<" "<<fGamDecayMom1.Py()<<" "<<fGamDecayMom1.Pz()<<" "<<fGamDecayMom1.E()<<endl;
448 fGamDecayMom2.Boost(b);
449 //cout<<"fGamDecayMom2: "<<fGamDecayMom2.Px()<<" "<<fGamDecayMom2.Py()<<" "<<fGamDecayMom2.Pz()<<" "<<fGamDecayMom2.E()<<endl;
450 //cout<<"angle"<<endl;
451 //angle = fGamDecayMom1.Angle(fGamDecayMom2.Vect());
455 //__________________________________________________________________
456 void AliCaloTrackMCReader::SetInputOutputMCEvent(AliVEvent* /*esd*/,
460 // Connect the data pointer
465 //________________________________________________________________
466 Bool_t AliCaloTrackMCReader::SkipNeutralParticles(Int_t pdg) const
468 //Check if pdg is equal to one of the neutral particles list
469 //These particles will be skipped from analysis.
471 for(Int_t i= 0; i < fNeutralParticlesArray->GetSize(); i++)
472 if(TMath::Abs(pdg) == fNeutralParticlesArray->At(i)) return kTRUE ;
478 //_______________________________________________________________________
479 void AliCaloTrackMCReader::SetTrackChargeAndPID(Int_t pdgCode,
480 AliAODTrack *track) const
482 //Give a PID weight for tracks equal to 1 depending on the particle type
484 Float_t pid[10] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
490 pid[AliAODTrack::kUnknown] = 1.;
495 track->SetCharge(-1);
496 pid[AliAODTrack::kElectron] = 1.;
501 track->SetCharge(+1);
502 pid[AliAODTrack::kElectron] = 1.;
507 track->SetCharge(-1);
508 pid[AliAODTrack::kMuon] = 1.;
513 track->SetCharge(+1);
514 pid[AliAODTrack::kMuon] = 1.;
520 pid[AliAODTrack::kUnknown] = 1.;
525 track->SetCharge(+1);
526 pid[AliAODTrack::kPion] = 1.;
531 track->SetCharge(-1);
532 pid[AliAODTrack::kPion] = 1.;
538 pid[AliAODTrack::kUnknown] = 1.;
543 track->SetCharge(+1);
544 pid[AliAODTrack::kKaon] = 1.;
549 track->SetCharge(-1);
550 pid[AliAODTrack::kKaon] = 1.;
556 pid[AliAODTrack::kUnknown] = 1.;
561 track->SetCharge(+1);
562 pid[AliAODTrack::kProton] = 1.;
566 case -2212: // anti-p
567 track->SetCharge(-1);
568 pid[AliAODTrack::kProton] = 1.;
574 pid[AliAODTrack::kUnknown] = 1.;
580 pid[AliAODTrack::kUnknown] = 1.;
584 case -311: // anti-K0
586 pid[AliAODTrack::kUnknown] = 1.;
592 pid[AliAODTrack::kUnknown] = 1.;
598 pid[AliAODTrack::kUnknown] = 1.;
603 track->SetCharge(+1);
604 pid[AliAODTrack::kUnknown] = 1.;
609 track->SetCharge(-1);
610 pid[AliAODTrack::kUnknown] = 1.;
615 track->SetCharge(-1);
616 pid[AliAODTrack::kUnknown] = 1.;
622 pid[AliAODTrack::kUnknown] = 1.;
627 track->SetCharge(-1);
628 pid[AliAODTrack::kUnknown] = 1.;
633 track->SetCharge(-1);
634 pid[AliAODTrack::kUnknown] = 1.;
640 pid[AliAODTrack::kUnknown] = 1.;
644 case -3122: // anti-Lambda
646 pid[AliAODTrack::kUnknown] = 1.;
650 case -3222: // anti-Sigma-
651 track->SetCharge(-1);
652 pid[AliAODTrack::kUnknown] = 1.;
656 case -3212: // anti-Sigma0
658 pid[AliAODTrack::kUnknown] = 1.;
662 case -3112: // anti-Sigma+
663 track->SetCharge(+1);
664 pid[AliAODTrack::kUnknown] = 1.;
668 case -3322: // anti-Xi0
670 pid[AliAODTrack::kUnknown] = 1.;
674 case -3312: // anti-Xi+
675 track->SetCharge(+1);
678 case -3334: // anti-Omega+
679 track->SetCharge(+1);
680 pid[AliAODTrack::kUnknown] = 1.;
685 track->SetCharge(+1);
686 pid[AliAODTrack::kUnknown] = 1.;
691 track->SetCharge(-1);
692 pid[AliAODTrack::kUnknown] = 1.;
698 pid[AliAODTrack::kUnknown] = 1.;
702 case -421: // anti-D0
704 pid[AliAODTrack::kUnknown] = 1.;
709 track->SetCharge(-99);
710 pid[AliAODTrack::kUnknown] = 1.;
719 //____________________________________________________________________
720 void AliCaloTrackMCReader::SetCaloClusterPID(const Int_t pdgCode,
721 AliVCluster *calo) const
723 //Give a PID weight for CaloClusters equal to 1 depending on the particle type
725 Float_t pid[13] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
730 pid[AliVCluster::kPhoton] = 1.;
735 pid[AliVCluster::kElectron] = 1.;
740 pid[AliVCluster::kElectron] = 1.;
745 pid[AliVCluster::kCharged] = 1.;
750 pid[AliVCluster::kCharged] = 1.;
755 pid[AliVCluster::kPi0] = 1.;
760 pid[AliVCluster::kCharged] = 1.;
765 pid[AliVCluster::kCharged] = 1.;
770 pid[AliVCluster::kKaon0] = 1.;
771 pid[AliVCluster::kNeutral] = 1;
776 pid[AliVCluster::kCharged] = 1.;
781 pid[AliVCluster::kCharged] = 1.;
786 pid[AliVCluster::kNeutron] = 1.;
787 pid[AliVCluster::kNeutral] = 1.;
792 pid[AliVCluster::kCharged] = 1.;
796 case -2212: // anti-p
797 pid[AliVCluster::kCharged] = 1.;
802 pid[AliVCluster::kKaon0] = 1.;
803 pid[AliVCluster::kNeutral] = 1.;
808 pid[AliVCluster::kKaon0] = 1.;
809 pid[AliVCluster::kNeutral] = 1.;
813 case -311: // anti-K0
814 pid[AliVCluster::kKaon0] = 1.;
815 pid[AliVCluster::kNeutral] = 1.;
820 pid[AliVCluster::kNeutral] = 1.;
825 pid[AliVCluster::kUnknown] = 1.;
830 pid[AliVCluster::kUnknown] = 1.;
835 pid[AliVCluster::kUnknown] = 1.;
840 pid[AliVCluster::kUnknown] = 1.;
845 pid[AliVCluster::kUnknown] = 1.;
850 pid[AliVCluster::kUnknown] = 1.;
855 pid[AliVCluster::kUnknown] = 1.;
860 pid[AliVCluster::kNeutron] = 1.;
861 pid[AliVCluster::kNeutral] = 1.;
865 case -3122: // anti-Lambda
866 pid[AliVCluster::kUnknown] = 1.;
870 case -3222: // anti-Sigma-
871 pid[AliVCluster::kUnknown] = 1.;
875 case -3212: // anti-Sigma0
876 pid[AliVCluster::kUnknown] = 1.;
880 case -3112: // anti-Sigma+
881 pid[AliVCluster::kUnknown] = 1.;
885 case -3322: // anti-Xi0
886 pid[AliVCluster::kUnknown] = 1.;
890 case -3312: // anti-Xi+
891 pid[AliVCluster::kUnknown] = 1.;
895 case -3334: // anti-Omega+
896 pid[AliVCluster::kUnknown] = 1.;
901 pid[AliVCluster::kUnknown] = 1.;
906 pid[AliVCluster::kUnknown] = 1.;
911 pid[AliVCluster::kUnknown] = 1.;
915 case -421: // anti-D0
916 pid[AliVCluster::kUnknown] = 1.;
921 pid[AliVCluster::kUnknown] = 1.;