Various fixes, and possibility to set trigger efficiency
[u/mrichter/AliRoot.git] / PWGLF / FORWARD / analysis2 / AliFMDMCEventInspector.h
1 // 
2 // This class inspects the event 
3 //
4 #ifndef ALIFMDMCEVENTINSPECTOR_H
5 #define ALIFMDMCEVENTINSPECTOR_H
6 /**
7  * @file   AliFMDMCEventInspector.h
8  * @author Christian Holm Christensen <cholm@dalsgaard.hehi.nbi.dk>
9  * @date   Wed Mar 23 14:03:40 2011
10  * 
11  * @brief  
12  * 
13  * 
14  * @ingroup pwglf_forward_aod
15  */
16 #include "AliFMDEventInspector.h"
17 class AliMCEvent;
18 class TH2F;
19 class AliStack;
20
21 /** 
22  * This class inspects the event 
23  *
24  * @par Input:
25  *   - AliESDFMD object possibly corrected for sharing
26  *
27  * @par Output:
28  *   - A histogram of v_z of events with triggers. 
29  *   - A histogram of v_z of events with vertex and triggers 
30  *   - A histogram of trigger counters 
31  * 
32  * Note, that these are added to the master output list 
33  *
34  * @par Corrections used: 
35  *   - None
36  *
37  * @ingroup pwglf_forward_algo 
38  * @ingroup pwglf_forward_mc
39  * @ingroup pwglf_forward_aod
40  */
41 class AliFMDMCEventInspector : public AliFMDEventInspector
42 {
43 public:
44   /** 
45    * Constructor 
46    */
47   AliFMDMCEventInspector();
48   /** 
49    * Constructor 
50    * 
51    * @param name Name of object
52    */
53   AliFMDMCEventInspector(const char* name);
54   /** 
55    * Copy constructor 
56    * 
57    * @param o Object to copy from 
58    */
59   AliFMDMCEventInspector(const AliFMDMCEventInspector& o);
60   /** 
61    * Destructor 
62    */
63   virtual ~AliFMDMCEventInspector();
64   /** 
65    * Assignement operator
66    * 
67    * @param o Object to assign from 
68    * 
69    * @return Reference to this object
70    */
71   AliFMDMCEventInspector& operator=(const AliFMDMCEventInspector&);
72
73   /** 
74    * Initialize the object 
75    * 
76    * @param vtxAxis Vertex axis in use 
77    */
78   void Init(const TAxis& vtxAxis);
79   /** 
80    * Process MC truth event.  Note, returned values are the MC truth
81    * values
82    * 
83    * @param event     Input event 
84    * @param triggers  On return, the triggers fired 
85    * @param ivz       On return, the found vertex bin (1-based).  A zero
86    *                  means outside of the defined vertex range
87    * @param vz        On return, the z position of the interaction
88    * @param b         On return, impact parameter [fm] (if available)
89    * @param c         On return, centrality estimate [%] (if available)
90    * @param npart     On return, number of participants (if available)
91    * @param nbin      On return, number of binary collisions (if available)
92    * @param phiR      On return, reaction plane angle (if available)
93    * 
94    * @return 0 (or kOk) on success, otherwise a bit mask of error codes 
95    */
96   UInt_t ProcessMC(AliMCEvent*       event, 
97                    UInt_t&           triggers,
98                    UShort_t&         ivz, 
99                    Double_t&         vz,
100                    Double_t&         b,
101                    Double_t&         c,
102                    Int_t&            npart, 
103                    Int_t&            nbin,
104                    Double_t&         phiR);
105   /** 
106    * Compare the result of analysing the ESD for 
107    * the inclusive charged particle density to analysing 
108    * MC truth 
109    * 
110    * @param vz       Found @f$ v_z@f$
111    * @param trueVz   True  @f$ v_z@f$
112    * @param cent     Centrality
113    * @param b        Impact parameter (if available)
114    * @param npart    Number of participants (if available)
115    * @param nbin     Number of binary collisions (if available)
116    * 
117    * @return true
118    */
119   virtual Bool_t CompareResults(Double_t vz,    Double_t trueVz, 
120                                 Double_t cent,  Double_t b,
121                                 Int_t    npart, Int_t    nbin);
122   /** 
123    * Store information about running conditions in output list 
124    * 
125    * The 3 TNamed objects from AliFMDEventInspector::StoreInformation
126    * are defined.  In addition, a fourth TNamed object is defined.
127    * The presence of this indicate MC data.
128    *
129    * - mc    Nothing special, and unique id is 1
130    * 
131    * @param runNo Run number 
132    */
133   virtual void StoreInformation(Int_t runNo);
134   /** 
135    * Read the production details 
136    * 
137    * @param event MC event
138    */
139   virtual void ReadProductionDetails(AliMCEvent* event);
140 protected:
141   /** 
142    * Check if the event is single diffractive 
143    * 
144    * @param stack  Stack of MC particles 
145    * @param xiMin  Lower cut off
146    * @param xiMax  Upper cut off 
147    * 
148    * @return 
149    */
150   Bool_t IsSingleDiffractive(AliStack* stack,
151                              Double_t xiMin=0, 
152                              Double_t xiMax=1./81) const;
153   virtual Bool_t CheckFastPartition(bool) const { return false; }
154
155   TH1F* fHVertex;  // Histogram of vertex 
156   TH1F* fHPhiR;    // Histogram of event plane 
157   TH1F* fHB;       // Histogram of impact parameter 
158   TH2F* fHBvsPart; // Impact parameter vs # participants 
159   TH2F* fHBvsBin;  // Impact parameter vs # participants 
160   TH2F* fHBvsCent; // Impact parameter vs centrality
161   TH2F* fHVzComp;  // True vs reconstructed vz
162   TH2F* fHCentVsPart; // Centrality versus # participants 
163   TH2F* fHCentVsBin;  // Centrality versus # binary collisions 
164   TString fProduction; // Production information 
165   ClassDef(AliFMDMCEventInspector,3); // Inspect the event 
166 };
167
168 #endif
169 // Local Variables:
170 //   mode: C++
171 // End:
172
173
174