avoid generator name string comparisons, change to int; avoid TLorentzVectors declara...
[u/mrichter/AliRoot.git] / PWG / CaloTrackCorrBase / AliMCAnalysisUtils.h
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     */
5
6 //_________________________________________________________________________
7 // Class for analysis utils for MC data
8 // stored in stack or event header.
9 // Contains:
10 //  - method to check the origin of a given track/cluster
11 //  - method to obtain the generated jets
12 //
13 //*-- Author: Gustavo Conesa (INFN-LNF)
14
15 // --- ROOT system ---
16 #include <TObject.h>
17 #include <TString.h>
18 #include <TLorentzVector.h>
19 class TList ;
20 class TVector3;
21
22 //--- AliRoot system ---
23 class AliCaloTrackReader ;
24 class AliStack ;
25
26 class AliMCAnalysisUtils : public TObject {
27         
28  public: 
29   AliMCAnalysisUtils() ; // ctor
30   virtual ~AliMCAnalysisUtils() ;//virtual dtor
31     
32   //--------------------------------------
33   //Enum with tag for origin of particles
34   //--------------------------------------
35   
36   //"Mostly" photon parent types on line 1,
37   //                                                  
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                                                         } ;
50   
51   //--------------------------------------
52   // Methods to check origin of clusters
53   //--------------------------------------
54   
55   Int_t   CheckCommonAncestor(Int_t index1, Int_t index2, const AliCaloTrackReader* reader, 
56                               Int_t & ancPDG, Int_t & ancStatus, TLorentzVector & momentum, TVector3 & v) ;
57   
58   Int_t   CheckOrigin(Int_t label, const AliCaloTrackReader * reader, TString calorimeter) ;
59   
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, TString 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
64   
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
67   
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
70   
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);
76
77   TLorentzVector GetMotherWithPDG(Int_t label, Int_t pdg,const AliCaloTrackReader* reader, Bool_t & ok, Int_t & momLabel);
78   
79   void GetMCDecayAsymmetryAngleForPDG(Int_t label, Int_t pdg,const AliCaloTrackReader* reader,
80                                       Float_t & asy, Float_t & angle, Bool_t & ok);
81
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);
85
86   Int_t          GetNOverlaps(const Int_t * label, UInt_t nlabels,
87                               Int_t mctag, Int_t mesonLabel,
88                               AliCaloTrackReader * reader,Int_t *overpdg);
89   
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
93     tag |= (1<<set) ; 
94   } 
95   
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 ;    
99     else return kFALSE ;
100   }
101   
102   //--------------------------------------
103   // Other methods
104   //--------------------------------------
105     
106   // Method to recover MC jets stored in generator
107   TList * GetJets(const AliCaloTrackReader * reader) ;
108   
109   void    SetDebug(Int_t deb)           { fDebug=deb           ; }
110   Int_t   GetDebug()              const { return fDebug        ; }      
111   
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 ; }
117   
118   void    Print(const Option_t * opt) const;
119   void    PrintMCTag(Int_t tag) const;
120
121  private:
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
127   
128   TLorentzVector fDaughMom;     //! particle momentum
129   TLorentzVector fDaughMom2;    //! particle momentum
130   TLorentzVector fMotherMom;    //! particle momentum
131   TLorentzVector fGMotherMom;   //! particle momentum
132   
133   AliMCAnalysisUtils & operator = (const AliMCAnalysisUtils & mcu) ; // cpy assignment
134   AliMCAnalysisUtils(              const AliMCAnalysisUtils & mcu) ; // cpy ctor
135   
136   ClassDef(AliMCAnalysisUtils,6)
137
138 } ;
139
140 #endif //ALIMCANALYSISUTILS_H
141
142
143