]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGDQ/dielectron/AliDielectronMC.h
including switch to set on/off iso-track core removal, cleaning and bug fix
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronMC.h
CommitLineData
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
18class AliESDEvent;
19class AliHFEpid;
20class AliStack;
21class AliMCEvent;
22class AliESDtrack;
fb7d2d99 23class AliAODTrack;
b2a297fa 24class TParticle;
25class AliMCParticle;
26class AliAODMCParticle;
4533e78e 27class AliAODMCHeader;
b2a297fa 28
ba15fdfb 29#include "AliDielectronSignalMC.h"
b2a297fa 30#include "AliDielectronPair.h"
31
32class AliDielectronMC : public TObject{
33
34public:
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
108private:
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//
138inline 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//___________________________________________________________
143inline Bool_t AliDielectronMC::IsMotherPdg(const AliVParticle *particle1, const AliVParticle *particle2, Int_t pdgMother){
144 return GetLabelMotherWithPdg(particle1,particle2,pdgMother)>=0;
145}
146//___________________________________________________________
147inline 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