17 #include <TParticle.h>
18 #include <TDatabasePDG.h>
21 #include "TParticle.h"
25 #include "AliGenEventHeader.h"
27 #include "AliVCluster.h"
28 #include "AliAODTrack.h"
29 #include "AliAODEvent.h"
43 fNeutralParticlesArray(0x0), fChargedParticlesArray(0x0),
44 fStatusArray(0x0), fKeepAllStatus(0),
45 fCheckOverlap(0), fEMCALOverlapAngle(0),fPHOSOverlapAngle(0),
46 fIndex2ndPhoton(0), fOnlyGeneratorParticles(kTRUE),
47 fMomentum(), fPi0Momentum(),
48 fGamDecayMom1(), fGamDecayMom2()
115 Int_t & iPrimary, Int_t & index, Int_t & pdg)
127 TParticle *meson =
GetStack()->Particle(imom);
128 Int_t mepdg = meson->GetPdgCode();
129 Int_t idaug1 = meson->GetFirstDaughter();
130 if((mepdg == 111 || mepdg == 221 ) && meson->GetNDaughters() == 2)
132 TParticle * d1 =
GetStack()->Particle(idaug1);
133 TParticle * d2 =
GetStack()->Particle(idaug1+1);
134 if(d1->GetPdgCode() == 22 && d2->GetPdgCode() == 22 )
147 if(iPrimary == idaug1) iPrimary++;
152 if(iPrimary == idaug1)
168 Float_t overAngleLimit = 100;
174 ttype = AliVCluster::kPHOSNeutral;
181 ttype= AliVCluster::kEMCALClusterv1;
187 Int_t index = iParticle ;
188 Int_t pdg = TMath::Abs(particle->GetPdgCode());
190 CheckOverlap(overAngleLimit,particle->GetFirstMother(),index, iParticle, pdg);
192 Int_t labels[] = {index};
196 AliAODCaloCluster *calo =
new AliAODCaloCluster(index,1,labels,
fMomentum.E(), x, NULL, ttype, 0);
200 AliDebug(3,Form(
"PHOS %d?, EMCAL %d? : Selected cluster pdg %d, E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
227 Int_t iParticle = 0 ;
229 Int_t nparticles =
GetStack()->GetNtrack() ;
233 for (iParticle = 0 ; iParticle < nparticles ; iParticle++)
235 TParticle * particle =
GetStack()->Particle(iParticle);
238 Int_t pdg = particle->GetPdgCode();
246 charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
248 Float_t en = particle->Energy();
249 Float_t pt = particle->Pt();
250 Float_t eta = particle->Eta();
251 Float_t phi = particle->Phi();
263 if(TMath::Abs(pdg) == 11 &&
GetStack()->Particle(particle->GetFirstMother())->GetPdgCode()==22)
continue ;
265 AliDebug(2,Form(
"CTS : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
266 en,pt,phi*TMath::RadToDeg(),eta));
268 x[0] = particle->Vx(); x[1] = particle->Vy(); x[2] = particle->Vz();
269 p[0] = particle->Px(); p[1] = particle->Py(); p[2] = particle->Pz();
271 AliAODTrack *aodTrack =
new AliAODTrack(0, iParticle, p, kTRUE, x, kFALSE,NULL, 0, 0,
276 AliAODTrack::kPrimary,
295 AliDebug(2,Form(
"Calo : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
296 en,pt,phi*TMath::RadToDeg(),eta));
324 AliDebug(2,Form(
"Calo : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f",
325 en,pt,phi*TMath::RadToDeg(),eta));
379 printf(
"**** Print **** %s %s ****\n", GetName(), GetTitle() ) ;
390 printf(
"Skip neutral particles in calo : ");
395 printf(
"Keep charged particles in calo : ");
409 Double_t mPi0 = TDatabasePDG::Instance()->GetParticle(111)->Mass();
413 Double_t phi = TMath::TwoPi() * gRandom->Rndm();
414 Double_t cosThe = 2 * gRandom->Rndm() - 1;
415 Double_t cosPhi = TMath::Cos(phi);
416 Double_t sinPhi = TMath::Sin(phi);
417 Double_t sinThe = TMath::Sqrt(1-cosThe*cosThe);
418 Double_t ePi0 = mPi0/2.;
472 AliAODTrack *track)
const
474 Float_t pid[10] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
480 pid[AliAODTrack::kUnknown] = 1.;
485 track->SetCharge(-1);
486 pid[AliAODTrack::kElectron] = 1.;
491 track->SetCharge(+1);
492 pid[AliAODTrack::kElectron] = 1.;
497 track->SetCharge(-1);
498 pid[AliAODTrack::kMuon] = 1.;
503 track->SetCharge(+1);
504 pid[AliAODTrack::kMuon] = 1.;
510 pid[AliAODTrack::kUnknown] = 1.;
515 track->SetCharge(+1);
516 pid[AliAODTrack::kPion] = 1.;
521 track->SetCharge(-1);
522 pid[AliAODTrack::kPion] = 1.;
528 pid[AliAODTrack::kUnknown] = 1.;
533 track->SetCharge(+1);
534 pid[AliAODTrack::kKaon] = 1.;
539 track->SetCharge(-1);
540 pid[AliAODTrack::kKaon] = 1.;
546 pid[AliAODTrack::kUnknown] = 1.;
551 track->SetCharge(+1);
552 pid[AliAODTrack::kProton] = 1.;
557 track->SetCharge(-1);
558 pid[AliAODTrack::kProton] = 1.;
564 pid[AliAODTrack::kUnknown] = 1.;
570 pid[AliAODTrack::kUnknown] = 1.;
576 pid[AliAODTrack::kUnknown] = 1.;
582 pid[AliAODTrack::kUnknown] = 1.;
588 pid[AliAODTrack::kUnknown] = 1.;
593 track->SetCharge(+1);
594 pid[AliAODTrack::kUnknown] = 1.;
599 track->SetCharge(-1);
600 pid[AliAODTrack::kUnknown] = 1.;
605 track->SetCharge(-1);
606 pid[AliAODTrack::kUnknown] = 1.;
612 pid[AliAODTrack::kUnknown] = 1.;
617 track->SetCharge(-1);
618 pid[AliAODTrack::kUnknown] = 1.;
623 track->SetCharge(-1);
624 pid[AliAODTrack::kUnknown] = 1.;
630 pid[AliAODTrack::kUnknown] = 1.;
636 pid[AliAODTrack::kUnknown] = 1.;
641 track->SetCharge(-1);
642 pid[AliAODTrack::kUnknown] = 1.;
648 pid[AliAODTrack::kUnknown] = 1.;
653 track->SetCharge(+1);
654 pid[AliAODTrack::kUnknown] = 1.;
660 pid[AliAODTrack::kUnknown] = 1.;
665 track->SetCharge(+1);
669 track->SetCharge(+1);
670 pid[AliAODTrack::kUnknown] = 1.;
675 track->SetCharge(+1);
676 pid[AliAODTrack::kUnknown] = 1.;
681 track->SetCharge(-1);
682 pid[AliAODTrack::kUnknown] = 1.;
688 pid[AliAODTrack::kUnknown] = 1.;
694 pid[AliAODTrack::kUnknown] = 1.;
699 track->SetCharge(-99);
700 pid[AliAODTrack::kUnknown] = 1.;
713 AliVCluster *calo)
const
715 Float_t pid[13] = {0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.};
720 pid[AliVCluster::kPhoton] = 1.;
725 pid[AliVCluster::kElectron] = 1.;
730 pid[AliVCluster::kElectron] = 1.;
735 pid[AliVCluster::kCharged] = 1.;
740 pid[AliVCluster::kCharged] = 1.;
745 pid[AliVCluster::kPi0] = 1.;
750 pid[AliVCluster::kCharged] = 1.;
755 pid[AliVCluster::kCharged] = 1.;
760 pid[AliVCluster::kKaon0] = 1.;
761 pid[AliVCluster::kNeutral] = 1;
766 pid[AliVCluster::kCharged] = 1.;
771 pid[AliVCluster::kCharged] = 1.;
776 pid[AliVCluster::kNeutron] = 1.;
777 pid[AliVCluster::kNeutral] = 1.;
782 pid[AliVCluster::kCharged] = 1.;
787 pid[AliVCluster::kCharged] = 1.;
792 pid[AliVCluster::kKaon0] = 1.;
793 pid[AliVCluster::kNeutral] = 1.;
798 pid[AliVCluster::kKaon0] = 1.;
799 pid[AliVCluster::kNeutral] = 1.;
804 pid[AliVCluster::kKaon0] = 1.;
805 pid[AliVCluster::kNeutral] = 1.;
810 pid[AliVCluster::kNeutral] = 1.;
815 pid[AliVCluster::kUnknown] = 1.;
820 pid[AliVCluster::kUnknown] = 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::kNeutron] = 1.;
851 pid[AliVCluster::kNeutral] = 1.;
856 pid[AliVCluster::kUnknown] = 1.;
861 pid[AliVCluster::kUnknown] = 1.;
866 pid[AliVCluster::kUnknown] = 1.;
871 pid[AliVCluster::kUnknown] = 1.;
876 pid[AliVCluster::kUnknown] = 1.;
881 pid[AliVCluster::kUnknown] = 1.;
886 pid[AliVCluster::kUnknown] = 1.;
891 pid[AliVCluster::kUnknown] = 1.;
896 pid[AliVCluster::kUnknown] = 1.;
901 pid[AliVCluster::kUnknown] = 1.;
906 pid[AliVCluster::kUnknown] = 1.;
911 pid[AliVCluster::kUnknown] = 1.;
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
TLorentzVector fGamDecayMom2
! Gamma decay 2 momentum
Bool_t fReadAODMCParticles
Access kine information from filtered AOD MC particles.
virtual ~AliCaloTrackMCReader()
Destructor.
TObjArray * fPHOSClusters
Temporal array with PHOS CaloClusters.
void InitParameters()
Initialize the parameters of the analysis.
void SetCaloClusterPID(Int_t pdgCode, AliVCluster *calo) const
Give a PID weight for CaloClusters equal to 1 depending on the particle type.
virtual void SetMC(AliMCEvent *const mc)
TLorentzVector fGamDecayMom1
! Gamma decay 1 momentum
void FillCalorimeters(Int_t &iParticle, TParticle *particle)
Fill CaloClusters or TParticles lists of PHOS or EMCAL.
Bool_t fOnlyGeneratorParticles
Use particles only generated by PYTHIA/HERWIG/... and not by the MC tranport G3/G4/FLUKA ...
void CheckOverlap(Float_t anglethres, Int_t imom, Int_t &iPrimary, Int_t &index, Int_t &pdg)
Check overlap of decay photons.
void SetInputOutputMCEvent(AliVEvent *esd, AliAODEvent *aod, AliMCEvent *mc)
Connect the input data pointer.
Float_t fEMCALPtMin
pT Threshold on emcal clusters.
Bool_t SkipNeutralParticles(Int_t pdg) const
Bool_t fDecayPi0
If not decayed, decay pi0 by hand.
virtual AliGenEventHeader * GetGenEventHeader() const
Bool_t fFillCTS
Use data from CTS.
AliCaloTrackMCReader()
Default constructor. Initialize parameters.
Float_t fPHOSPtMin
pT Threshold on phos clusters.
TLorentzVector fMomentum
! Momentum
Int_t fEventNumber
Event number.
TLorentzVector fPi0Momentum
! Pi0 momentum
Float_t fPHOSOverlapAngle
Aperture angle of photons from decay that is not resolved by PHOS, in radians.
Int_t fIndex2ndPhoton
Check overlap of first decay photon already done, internal use.
Bool_t FillInputEvent(Int_t iEntry, const char *currentFileName)
Fill the event counter and input lists that are needed, called by AliAnaCaloTrackCorrMaker.
TObjArray * fEMCALClusters
Temporal array with EMCAL CaloClusters.
virtual void SetOutputEvent(AliAODEvent *aod)
Class for filtering generated MC particles and prepare them as input for the analysis.
virtual Bool_t ComparePtHardAndJetPt()
Bool_t IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
Float_t fTrackMultEtaCut
Track multiplicity eta cut.
Base class for event, clusters and tracks filtering and preparation for the analysis.
Bool_t KeepParticleWithStatus(Int_t status) const
void SetTrackChargeAndPID(Int_t pdgCode, AliAODTrack *track) const
Give a PID weight for tracks equal to 1 depending on the particle type.
TArrayI * fNeutralParticlesArray
Do not keep neutral particles of this list in calorimeter.
void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Float_t fEMCALOverlapAngle
Aperture angle of photons from decay that is not resolved by EMCAL, in radians.
virtual void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Bool_t fCheckFidCut
Do analysis for clusters in defined region.
Bool_t fComparePtHardAndJetPt
In MonteCarlo, jet events, reject fake events with wrong jet energy.
AliFiducialCut * fFiducialCut
Acceptance cuts.
TArrayI * fChargedParticlesArray
Keep charged particles of this list in calorimeter.
Bool_t fCheckOverlap
Check of overlapped photons from pi0 enter the calorimeter.
Bool_t fFillEMCAL
Use data from EMCAL.
Bool_t fFillPHOS
Use data from PHOS.
Float_t fCTSPtMin
pT Threshold on charged particles.
virtual AliStack * GetStack() const
void GetVertex(Double_t v[3]) const
Bool_t fKeepAllStatus
Do or do not select particles depending on their status code.
Int_t fTrackMult
Track multiplicity.
TArrayI * fStatusArray
Keep particles with status of the list.
Bool_t fReadStack
Access kine information from stack.
virtual void FillVertexArray()
TObjArray * fCTSTracks
Temporal array with tracks.
Bool_t KeepChargedParticles(Int_t pdg) const
Int_t fDataType
Select MC: Kinematics, Data: ESD/AOD, MCData: Both.