making the container name parameterized
[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 class TList ;
19 class TVector3;
20
21 //--- AliRoot system ---
22 class AliCaloTrackReader ;
23 class AliStack ;
24
25 class AliMCAnalysisUtils : public TObject {
26         
27  public: 
28   AliMCAnalysisUtils() ; // ctor
29   virtual ~AliMCAnalysisUtils() ;//virtual dtor
30     
31   //--------------------------------------
32   //Enum with tag for origin of particles
33   //--------------------------------------
34   
35   //"Mostly" photon parent types on line 1,
36   //                                                  
37   //then "mostly" electron parent types on line 3, (e.g. electrons can
38   //come from pi0 decay)                              
39   //then charged particles on line 4,                                                                                    
40   //followed by other and unknown on line 5                                                                              
41   enum mcTypes { kMCPhoton,     kMCPrompt,      kMCFragmentation, kMCISR,    
42                  kMCPi0Decay,   kMCEtaDecay,    kMCOtherDecay,    kMCConversion,
43                  kMCElectron,   kMCEFromCFromB, kMCEFromC,        kMCEFromB, kMCZDecay,   kMCWDecay,
44                  kMCMuon,       kMCPion,        kMCPi0,           kMCKaon,   kMCEta,      kMCProton,   
45                  kMCAntiProton, kMCNeutron,     kMCAntiNeutron,
46                  kMCOther,      kMCUnknown,     kMCBadLabel                                                                                         } ;
47   
48   //--------------------------------------
49   // Methods to check origin of clusters
50   //--------------------------------------
51   
52   Int_t   CheckCommonAncestor(const Int_t index1, const Int_t index2, const AliCaloTrackReader* reader, 
53                               Int_t & ancPDG, Int_t & ancStatus, TLorentzVector & momentum, TVector3 & v) ;
54   
55   Int_t   CheckOrigin(const Int_t label, const AliCaloTrackReader * reader, const Int_t input) ;
56   
57   //Check the label of the most significant particle but do checks on the rest of the contributing labels
58   Int_t   CheckOrigin       (const Int_t *label,  const Int_t nlabels, const AliCaloTrackReader * reader, const Int_t input) ;
59   Int_t   CheckOriginInStack(const Int_t *labels, const Int_t nlabels, AliStack * stack)                ; // ESD
60   Int_t   CheckOriginInAOD  (const Int_t *labels, const Int_t nlabels, const TClonesArray* mcparticles) ; // AOD
61   
62   void    CheckOverlapped2GammaDecay(const Int_t *labels, const Int_t nlabels, const Int_t mesonIndex, AliStack * stack, Int_t & tag); // ESD
63   void    CheckOverlapped2GammaDecay(const Int_t *labels, const Int_t nlabels, const Int_t mesonIndex, const TClonesArray* mcparticles, Int_t & tag); // AOD
64   
65   TLorentzVector GetMother(const Int_t label,const AliCaloTrackReader* reader, Bool_t & ok);
66   TLorentzVector GetMother(const Int_t label,const AliCaloTrackReader* reader, Int_t & pdg, Int_t & status, Bool_t & ok);
67   TLorentzVector GetMotherWithPDG(const Int_t label, const Int_t pdg,const AliCaloTrackReader* reader, Bool_t & ok);
68   
69   Float_t        GetMCDecayAsymmetryForPDG(const Int_t label, const Int_t pdg,const AliCaloTrackReader* reader, Bool_t & ok);
70
71   //Check or set the bits produced in the above methods
72   void    SetTagBit(Int_t &tag, const UInt_t set) const {
73     // Set bit of type set (mcTypes) in tag
74     tag |= (1<<set) ; 
75   } 
76   
77   Bool_t  CheckTagBit(const Int_t tag, const UInt_t test) const {
78     // Check if in tag the bit test (mcTypes) is set.
79     if (tag & (1<<test) ) return  kTRUE ;    
80     else return kFALSE ;
81   }
82   
83   //--------------------------------------
84   // Other methods
85   //--------------------------------------
86   
87   // Method to recover MC jets stored in generator
88   TList * GetJets(const AliCaloTrackReader * reader) ;
89   
90   void    SetDebug(Int_t deb)           { fDebug=deb           ; }
91   Int_t   GetDebug()              const { return fDebug        ; }      
92   
93   void    SetMCGenerator(TString mcgen) { fMCGenerator = mcgen ; }
94   TString GetMCGenerator()        const { return fMCGenerator  ; }      
95   
96   void    Print(const Option_t * opt) const;
97   void    PrintMCTag(const Int_t tag) const;
98
99  private:
100   Int_t   fCurrentEvent;        // Current Event
101   Int_t   fDebug;               // Debug level
102   TList * fJetsList;            // List of jets
103   TString fMCGenerator;         // MC geneator used to generate data in simulation
104   
105   AliMCAnalysisUtils & operator = (const AliMCAnalysisUtils & mcu) ; // cpy assignment
106   AliMCAnalysisUtils(              const AliMCAnalysisUtils & mcu) ; // cpy ctor
107   
108   ClassDef(AliMCAnalysisUtils,4)
109
110 } ;
111
112 #endif //ALIMCANALYSISUTILS_H
113
114
115