1 #ifndef ALIMCANALYSISUTILS_H
2 #define ALIMCANALYSISUTILS_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * See cxx source for full Copyright notice */
6 //_________________________________________________________________________
7 // Class for analysis utils for MC data
8 // stored in stack or event header.
10 // - method to check the origin of a given track/cluster
11 // - method to obtain the generated jets
13 //*-- Author: Gustavo Conesa (INFN-LNF)
15 // --- ROOT system ---
18 #include <TLorentzVector.h>
22 //--- AliRoot system ---
23 class AliCaloTrackReader ;
26 class AliMCAnalysisUtils : public TObject {
29 AliMCAnalysisUtils() ; // ctor
30 virtual ~AliMCAnalysisUtils() ;//virtual dtor
32 //--------------------------------------
33 //Enum with tag for origin of particles
34 //--------------------------------------
36 //"Mostly" photon parent types on line 1,
38 //then "mostly" electron parent types on line 3, (e.g. electrons can
39 //come from pi0 decay)
40 //then charged particles on line 4,
41 //followed by other and unknown on line 5
42 enum mcTypes { kMCPhoton, kMCPrompt, kMCFragmentation, kMCISR,
43 kMCPi0Decay, kMCEtaDecay, kMCOtherDecay,
44 kMCDecayPairLost, kMCDecayPairInCalo,
45 kMCDecayDalitz,kMCConversion, kMCElectron,
46 kMCEFromCFromB,kMCEFromC, kMCEFromB, kMCZDecay, kMCWDecay,
47 kMCMuon, kMCPion, kMCPi0, kMCKaon, kMCEta, kMCProton,
48 kMCAntiProton, kMCNeutron, kMCAntiNeutron,
49 kMCUnknown, kMCBadLabel } ;
51 //--------------------------------------
52 // Methods to check origin of clusters
53 //--------------------------------------
55 Int_t CheckCommonAncestor(Int_t index1, Int_t index2, const AliCaloTrackReader* reader,
56 Int_t & ancPDG, Int_t & ancStatus, TLorentzVector & momentum, TVector3 & v) ;
58 Int_t CheckOrigin(Int_t label, const AliCaloTrackReader * reader, Int_t calorimeter) ;
60 //Check the label of the most significant particle but do checks on the rest of the contributing labels
61 Int_t CheckOrigin (const Int_t *label, Int_t nlabels, const AliCaloTrackReader * reader, Int_t calorimeter) ;
62 Int_t CheckOriginInStack(const Int_t *labels, Int_t nlabels, AliStack * stack , const TObjArray *arrayCluster) ; // ESD
63 Int_t CheckOriginInAOD (const Int_t *labels, Int_t nlabels, const TClonesArray* mcparticles, const TObjArray *arrayCluster) ; // AOD
65 void CheckOverlapped2GammaDecay(const Int_t *labels, Int_t nlabels, Int_t mesonIndex, AliStack * stack, Int_t & tag); // ESD
66 void CheckOverlapped2GammaDecay(const Int_t *labels, Int_t nlabels, Int_t mesonIndex, const TClonesArray* mcparticles, Int_t & tag); // AOD
68 void CheckLostDecayPair(const TObjArray *arrayCluster, Int_t iMom, Int_t iParent, AliStack* stack, Int_t & tag); // ESD
69 void CheckLostDecayPair(const TObjArray *arrayCluster, Int_t iMom, Int_t iParent, const TClonesArray* mcparticles, Int_t & tag); // AOD
71 TLorentzVector GetMother (Int_t label,const AliCaloTrackReader* reader, Bool_t & ok);
72 TLorentzVector GetMother (Int_t label,const AliCaloTrackReader* reader, Int_t & pdg, Int_t & status, Bool_t & ok);
73 TLorentzVector GetMother (Int_t label,const AliCaloTrackReader* reader, Int_t & pdg, Int_t & status, Bool_t & ok, Int_t & momLabel);
74 TLorentzVector GetGrandMother(Int_t label,const AliCaloTrackReader* reader,
75 Int_t & pdg, Int_t & status, Bool_t & ok, Int_t & grandMomLabel, Int_t & greatMomLabel);
77 TLorentzVector GetMotherWithPDG(Int_t label, Int_t pdg,const AliCaloTrackReader* reader, Bool_t & ok, Int_t & momLabel);
79 void GetMCDecayAsymmetryAngleForPDG(Int_t label, Int_t pdg,const AliCaloTrackReader* reader,
80 Float_t & asy, Float_t & angle, Bool_t & ok);
82 Int_t GetNDaughters(Int_t label,const AliCaloTrackReader* reader, Bool_t & ok);
83 TLorentzVector GetDaughter (Int_t daughter, Int_t label,const AliCaloTrackReader* reader,
84 Int_t & pdg, Int_t & status, Bool_t & ok, Int_t & daugLabel);
86 Int_t GetNOverlaps(const Int_t * label, UInt_t nlabels,
87 Int_t mctag, Int_t mesonLabel,
88 AliCaloTrackReader * reader,Int_t *overpdg);
90 //Check or set the bits produced in the above methods
91 void SetTagBit(Int_t &tag, UInt_t set) const {
92 // Set bit of type set (mcTypes) in tag
96 Bool_t CheckTagBit(Int_t tag, UInt_t test) const {
97 // Check if in tag the bit test (mcTypes) is set.
98 if (tag & (1<<test) ) return kTRUE ;
102 //--------------------------------------
104 //--------------------------------------
106 // Method to recover MC jets stored in generator
107 TList * GetJets(const AliCaloTrackReader * reader) ;
109 void SetDebug(Int_t deb) { fDebug=deb ; }
110 Int_t GetDebug() const { return fDebug ; }
112 enum generator {kPythia = 0, kHerwig = 1, kHijing = 2, kBoxLike = 3 } ;
113 void SetMCGenerator(Int_t mcgen) ;
114 void SetMCGenerator(TString mcgen) ;
115 Int_t GetMCGenerator() const { return fMCGenerator ; }
116 TString GetMCGeneratorString() const { return fMCGeneratorString ; }
118 void Print(const Option_t * opt) const;
119 void PrintMCTag(Int_t tag) const;
122 Int_t fCurrentEvent; // Current Event
123 Int_t fDebug; // Debug level
124 TList * fJetsList; // List of jets
125 Int_t fMCGenerator; // MC generator used to generate data in simulation
126 TString fMCGeneratorString; // MC generator used to generate data in simulation
128 TLorentzVector fDaughMom; //! particle momentum
129 TLorentzVector fDaughMom2; //! particle momentum
130 TLorentzVector fMotherMom; //! particle momentum
131 TLorentzVector fGMotherMom; //! particle momentum
133 AliMCAnalysisUtils & operator = (const AliMCAnalysisUtils & mcu) ; // cpy assignment
134 AliMCAnalysisUtils( const AliMCAnalysisUtils & mcu) ; // cpy ctor
136 ClassDef(AliMCAnalysisUtils,6)
140 #endif //ALIMCANALYSISUTILS_H