]>
Commit | Line | Data |
---|---|---|
b2a297fa | 1 | #ifndef ALIDIELECTRONMC_H |
2 | #define ALIDIELECTRONMC_H | |
3 | /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | //##################################################### | |
7 | //# # | |
8 | //# Class AliDielectronMC # | |
9 | //# Cut Class for Jpsi->e+e- analysis # | |
10 | //# # | |
11 | //# by WooJin J. Park, GSI / W.J.Park@gsi.de # | |
12 | //# # | |
13 | //##################################################### | |
14 | ||
15 | #ifndef ROOT_TObject | |
16 | #include <TObject.h> | |
17 | #endif | |
18 | class AliESDEvent; | |
19 | class AliHFEpid; | |
20 | class AliStack; | |
21 | class AliMCEvent; | |
22 | class AliESDtrack; | |
fb7d2d99 | 23 | class AliAODTrack; |
b2a297fa | 24 | class TParticle; |
25 | class AliMCParticle; | |
26 | class AliAODMCParticle; | |
4533e78e | 27 | class AliAODMCHeader; |
b2a297fa | 28 | |
ba15fdfb | 29 | #include "AliDielectronSignalMC.h" |
b2a297fa | 30 | #include "AliDielectronPair.h" |
31 | ||
32 | class AliDielectronMC : public TObject{ | |
33 | ||
34 | public: | |
35 | enum AnalysisType {kUNSET=0, kESD, kAOD}; | |
36 | ||
37 | AliDielectronMC(AnalysisType type=kUNSET); | |
38 | virtual ~AliDielectronMC(); | |
39 | ||
572b0139 | 40 | void SetHasMC(Bool_t hasMC) { fHasMC=hasMC; } |
41 | Bool_t HasMC() const { return fHasMC; } | |
42 | ||
b2a297fa | 43 | static AliDielectronMC* Instance(); |
44 | ||
45 | void Initialize(); // initialization | |
46 | Int_t GetNMCTracks(); // return number of generated tracks | |
47 | Int_t GetNMCTracksFromStack(); // return number of generated tracks from stack | |
c8f0f810 | 48 | Int_t GetNPrimary() const; // return number of primary tracks |
2a14a7b1 | 49 | Int_t GetNPrimaryFromStack(); // return number of primary tracks from stack |
8df8e382 | 50 | Int_t GetMCPID(const AliESDtrack* _track); // return MC PID |
fb7d2d99 | 51 | Int_t GetMCPID(const AliAODTrack* _track); // return MC PID for AODtrack |
8df8e382 | 52 | Int_t GetMCPIDFromStack(const AliESDtrack* _track); // return MC PID |
53 | Int_t GetMotherPDG(const AliESDtrack* _track); // return mother PID from the MC stack | |
fb7d2d99 | 54 | Int_t GetMotherPDG(const AliAODTrack* _track); // return mother PID from the MC stack |
d191916c | 55 | Int_t GetMotherPDG(const AliMCParticle* _track); // return mother PID from the MC stack |
56 | Int_t GetMotherPDG(const AliAODMCParticle* _track); // return mother PID from the MC stack | |
8df8e382 | 57 | Int_t GetMotherPDGFromStack(const AliESDtrack* _track); // return mother PID from the MC stack |
58 | Int_t GetMCProcess(const AliESDtrack* _track); // return process number | |
59 | Int_t GetMCProcessFromStack(const AliESDtrack* _track); // return process number | |
60 | Int_t GetMCProcessMother(const AliESDtrack* _track); // return process number of the mother track | |
61 | Int_t GetMCProcessMotherFromStack(const AliESDtrack* _track); // return process number of the mother track | |
b2a297fa | 62 | |
63 | Bool_t ConnectMCEvent(); | |
64 | Bool_t UpdateStack(); | |
65 | ||
a655b716 | 66 | Bool_t IsMotherPdg(const AliDielectronPair* pair, Int_t pdgMother); |
b2a297fa | 67 | Bool_t IsMotherPdg(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother); |
68 | Bool_t IsMCMotherToEE(const AliVParticle *particle, Int_t pdgMother); | |
c8f0f810 | 69 | Bool_t IsMCTruth(const AliDielectronPair* pair, const AliDielectronSignalMC* signalMC) const; |
d191916c | 70 | Bool_t IsMCTruth(Int_t label, AliDielectronSignalMC* signalMC, Int_t branch) const; |
c8f0f810 | 71 | Int_t GetMothersLabel(Int_t daughterLabel) const; |
72 | Int_t GetPdgFromLabel(Int_t label) const; | |
8df8e382 | 73 | |
5720c765 | 74 | Bool_t IsPhysicalPrimary(Int_t label) const; // checks if a particle is physical primary |
ad4edb42 | 75 | Bool_t IsSecondaryFromWeakDecay(Int_t label) const; |
76 | Bool_t IsSecondaryFromMaterial(Int_t label) const; | |
5720c765 | 77 | |
c8f0f810 | 78 | Bool_t HaveSameMother(const AliDielectronPair *pair) const; |
b2a297fa | 79 | |
a655b716 | 80 | Int_t GetLabelMotherWithPdg(const AliDielectronPair* pair, Int_t pdgMother); |
81 | Int_t GetLabelMotherWithPdg(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother); | |
82 | ||
5720c765 | 83 | // AliVParticle* GetMCTrackFromMCEvent(const AliVParticle *track); // return MC track directly from MC event |
d191916c | 84 | AliVParticle* GetMCTrackFromMCEvent(Int_t label) const; // return MC track directly from MC event |
8df8e382 | 85 | TParticle* GetMCTrackFromStack(const AliESDtrack* _track); // return MC track from stack |
86 | AliMCParticle* GetMCTrack(const AliESDtrack* _track); // return MC track associated with reco track | |
fb7d2d99 | 87 | AliAODMCParticle* GetMCTrack( const AliAODTrack* _track); // return MC track associated with reco AOD track |
8df8e382 | 88 | |
89 | TParticle* GetMCTrackMotherFromStack(const AliESDtrack* _track); // return MC mother track from stack | |
90 | AliMCParticle* GetMCTrackMother(const AliESDtrack* _track); // return MC mother track from stack | |
fb7d2d99 | 91 | AliAODMCParticle* GetMCTrackMother(const AliAODTrack* _track); // return MC mother fot track AODTrack |
8df8e382 | 92 | AliMCParticle* GetMCTrackMother(const AliMCParticle* _particle); // return MC mother track from stack |
93 | AliAODMCParticle* GetMCTrackMother(const AliAODMCParticle* _particle); // return MC mother track from stack | |
94 | ||
95 | Int_t NumberOfDaughters(const AliESDtrack* track); // return number of daughters | |
fb7d2d99 | 96 | Int_t NumberOfDaughters(const AliAODTrack* track); // return number of daughters for AOD track |
8df8e382 | 97 | Int_t NumberOfDaughters(const AliMCParticle* particle); // return number of daughters |
98 | Int_t NumberOfDaughters(const AliAODMCParticle* particle); // return number of daughters | |
6551594b | 99 | |
100 | void GetDaughters(const TObject *mother, AliVParticle* &d1, AliVParticle* &d2); | |
fb7d2d99 | 101 | Int_t IsJpsiPrimary(const AliDielectronPair * pair); |
102 | Int_t IsJpsiPrimary(const AliVParticle * pair); | |
1bb1fef1 | 103 | Bool_t CheckParticleSource(Int_t label, AliDielectronSignalMC::ESource source) const; |
4533e78e | 104 | Bool_t GetPrimaryVertex(Double_t &primVtxX, Double_t &primVtxY, Double_t &primVtxZ); |
ba15fdfb | 105 | |
106 | AliMCEvent* GetMCEvent() { return fMCEvent; } // return the AliMCEvent | |
b2a297fa | 107 | |
108 | private: | |
109 | AliMCEvent *fMCEvent; // MC event object | |
110 | AliStack *fStack; // MC stack | |
111 | ||
112 | AnalysisType fAnaType; // Analysis type | |
572b0139 | 113 | Bool_t fHasMC; // Do we have an MC handler? |
b2a297fa | 114 | |
115 | static AliDielectronMC* fgInstance; //! singleton pointer | |
fb7d2d99 | 116 | TClonesArray* fMcArray; //mcArray for AOD MC particles |
117 | ||
118 | ||
b2a297fa | 119 | AliDielectronMC(const AliDielectronMC &c); |
120 | AliDielectronMC &operator=(const AliDielectronMC &c); | |
121 | ||
122 | Bool_t IsMCMotherToEEesd(const AliMCParticle *particle, Int_t pdgMother); | |
123 | Bool_t IsMCMotherToEEaod(const AliAODMCParticle *particle, Int_t pdgMother); | |
124 | ||
a655b716 | 125 | Int_t GetLabelMotherWithPdgESD(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother); |
126 | Int_t GetLabelMotherWithPdgAOD(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother); | |
b2a297fa | 127 | |
5720c765 | 128 | Bool_t ComparePDG(Int_t particlePDG, Int_t requiredPDG, Bool_t pdgExclusion, Bool_t checkBothCharges) const; |
ee877a49 | 129 | Bool_t CheckIsRadiative(Int_t label) const; |
130 | Bool_t CheckRadiativeDecision(Int_t mLabel, const AliDielectronSignalMC * const signalMC) const; | |
131 | ||
b2a297fa | 132 | ClassDef(AliDielectronMC, 0) |
133 | }; | |
134 | ||
a655b716 | 135 | // |
136 | // inline functions | |
137 | // | |
138 | inline Bool_t AliDielectronMC::IsMotherPdg(const AliDielectronPair* pair, Int_t pdgMother) | |
b2a297fa | 139 | { |
54ce9dc4 | 140 | return IsMotherPdg(pair->GetFirstDaughterP(),pair->GetSecondDaughterP(),pdgMother); |
b2a297fa | 141 | } |
a655b716 | 142 | //___________________________________________________________ |
143 | inline Bool_t AliDielectronMC::IsMotherPdg(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother){ | |
144 | return GetLabelMotherWithPdg(particle1,particle2,pdgMother)>=0; | |
145 | } | |
146 | //___________________________________________________________ | |
147 | inline Int_t AliDielectronMC::GetLabelMotherWithPdg(const AliDielectronPair* pair, Int_t pdgMother){ | |
54ce9dc4 | 148 | return GetLabelMotherWithPdg(pair->GetFirstDaughterP(),pair->GetSecondDaughterP(),pdgMother); |
a655b716 | 149 | } |
b2a297fa | 150 | |
fb7d2d99 | 151 | #endif |
152 |