0b7de667 |
1 | #ifndef ALIFMDMCHITENERGYFITTER_H |
2 | #define ALIFMDMCHITENERGYFITTER_H |
3 | #include "AliFMDEnergyFitter.h" |
4 | #include "AliFMDFloatMap.h" |
5 | #include "TArrayF.h" |
6 | class AliMCAuxHandler; |
7 | class AliMCEvent; |
8 | class AliESDEvent; |
9 | class TNtuple; |
10 | class TClonesArray; |
11 | |
671df6c9 |
12 | /** |
13 | * Class to fit the simulated energy loss in the FMD |
14 | * |
15 | * @ingroup pwglf_forward_mc |
16 | * @ingroup pwglf_forward_eloss |
17 | */ |
0b7de667 |
18 | class AliFMDMCHitEnergyFitter : public AliFMDEnergyFitter |
19 | { |
20 | public: |
21 | /** |
22 | * Constructor - do not use |
23 | */ |
24 | AliFMDMCHitEnergyFitter(); |
25 | /** |
26 | * Constructor |
27 | * |
28 | * @param title Title of object - not significant |
29 | * @param useTuple If true, also make an NTuple of hits on output 3 |
30 | */ |
31 | AliFMDMCHitEnergyFitter(const char* title, Bool_t useTuple=false); |
32 | /** |
33 | * Destructor |
34 | */ |
35 | virtual ~AliFMDMCHitEnergyFitter(); |
36 | |
37 | /** |
38 | * Define the output histograms. These are put in a sub list of the |
39 | * passed list. The histograms are merged before the parent task calls |
40 | * AliAnalysisTaskSE::Terminate |
41 | * |
42 | * @param dir Directory to add to |
43 | */ |
44 | virtual void CreateOutputObjects(TList* dir); |
45 | /** |
46 | * Set-up before processing an event |
47 | * |
48 | * @param mcInput MC input |
49 | * |
50 | * @return true |
51 | */ |
52 | virtual Bool_t PreEvent(const AliMCEvent& mcInput); |
53 | /** |
54 | * Process a single event |
55 | * |
56 | * @param esdInput ESD input |
57 | * @param mcInput MC input |
671df6c9 |
58 | * @param handler Handler of additional input |
0b7de667 |
59 | * |
60 | * @return true |
61 | */ |
62 | virtual Bool_t Event(const AliESDEvent& esdInput, |
63 | const AliMCEvent& mcInput, |
64 | AliMCAuxHandler& handler); |
65 | /** |
66 | * Accumulate signals from MC hits |
67 | * |
68 | * @param mcInput MC input event |
69 | * @param hits Clones array of hits |
70 | * |
71 | * @return |
72 | */ |
73 | virtual Bool_t AccumulateHits(const AliMCEvent& mcInput, |
74 | const TClonesArray& hits); |
75 | /** |
76 | * Post-process accumulated signals |
77 | * |
78 | * @param esdInput ESD event |
79 | * |
80 | * @return true |
81 | */ |
82 | virtual Bool_t PostEvent(const AliESDEvent& esdInput); |
83 | |
84 | TNtuple* GetTuple() { return fTuple; } |
85 | protected: |
86 | /** |
87 | * copy constructor - not implemented |
88 | */ |
89 | AliFMDMCHitEnergyFitter(const AliFMDMCHitEnergyFitter&); |
90 | /** |
91 | * Assignment operator - not implemented |
92 | * |
93 | */ |
94 | AliFMDMCHitEnergyFitter& operator=(const AliFMDMCHitEnergyFitter&); |
95 | |
96 | /** |
97 | * Container of ring histograms |
98 | * |
99 | */ |
100 | struct RingHistos : public AliFMDEnergyFitter::RingHistos |
101 | { |
102 | /** |
103 | * Default CTOR - do not use |
104 | */ |
105 | RingHistos(); |
106 | /** |
107 | * User CTOR |
108 | * |
109 | * @param d Detector number |
110 | * @param r Ring identifier |
111 | */ |
112 | RingHistos(UShort_t d, Char_t r); |
113 | /** |
114 | * DTOR |
115 | */ |
116 | ~RingHistos() {} |
117 | /** |
118 | * Copy constructor - not defined |
119 | * |
120 | * @param o Object to copy from |
121 | */ |
122 | RingHistos(const RingHistos& o); |
123 | /** |
124 | * Assignment operator - not defined |
125 | * |
126 | * @param o Object to assign from |
127 | * |
128 | * @return Reference to this |
129 | */ |
130 | RingHistos& operator=(const RingHistos& o); |
131 | /** |
132 | * Create a bin array of increasing bins. This overload uses the |
133 | * service AliFMDEncodedEdx::Spec::FillBinArray. |
134 | * |
135 | * @param nBins Number of bins - ignored |
136 | * @param low Low cut - ignored |
137 | * @param high High cut - ignored |
138 | * |
139 | * @return Array of bin boundaries |
140 | */ |
141 | TArrayD MakeIncreasingAxis(Int_t nBins, |
142 | Double_t low, |
143 | Double_t high) const; |
144 | /** |
145 | * Initialise object |
146 | * |
147 | * @param eAxis Eta axis |
148 | * @param cAxis Centrality axis |
149 | * @param maxDE Max energy loss to consider |
150 | * @param nDEbins Number of bins |
151 | * @param useIncrBin Whether to use an increasing bin size |
152 | */ |
153 | virtual void SetupForData(const TAxis& eAxis, |
154 | const TAxis& cAxis, |
155 | Double_t maxDE=10, |
156 | Int_t nDEbins=300, |
157 | Bool_t useIncrBin=true); |
158 | /** |
159 | * Fill in observation |
160 | * |
161 | * @param flag 0 - fill all, 1 - primary, 2 - secondary |
162 | * @param eta Eta of particle observations |
163 | * @param mult Scaled energy loss |
164 | */ |
165 | virtual void FillMC(UShort_t flag, Double_t eta, Double_t mult); |
166 | /** |
167 | * Fit the final distributions - called via Terminate |
168 | * |
169 | * @param dir Containing directory |
170 | * @param lowCut Lower cut on @f$\Delta/\Delta_{mip}@f$ |
171 | * @param nParticles Max. number of particle peaks to fit |
172 | * @param minEntries Least number of entries required before fitting |
173 | * @param minusBins Number of bins below the 1st peak we start fitting |
174 | * @param relErrorCut Largest relative error on paramters |
175 | * @param chi2nuCut Largest value of the @f$\chi^2/\nu@f$ |
176 | * @param minWeight Least weight to consider |
177 | * @param regCut When to regalurize |
178 | * @param residuals How to do residuals - if at all |
179 | * |
180 | * @return List of histograms of parameters |
181 | */ |
182 | TObjArray* Fit(TList* dir, |
183 | Double_t lowCut, |
184 | UShort_t nParticles, |
185 | UShort_t minEntries, |
186 | UShort_t minusBins, |
187 | Double_t relErrorCut, |
188 | Double_t chi2nuCut, |
189 | Double_t minWeight, |
190 | Double_t regCut, |
191 | EResidualMethod residuals) const; |
192 | |
193 | TH2* fPrimary; // @f$\Delta@f$ vs @f$\eta@f$ for primaries |
194 | TH2* fSecondary; // @f$\Delta@f$ vs @f$\eta@f$ for second. |
195 | TH2* fKind; // Particle kind |
196 | ClassDef(RingHistos,1); // Cache of histograms per ring |
197 | }; |
198 | /** |
199 | * Create a container of histograms for a single ring |
200 | * |
201 | * @param d Detector |
202 | * @param r Ring |
203 | * |
204 | * @return Newly allocated container |
205 | */ |
206 | AliFMDEnergyFitter::RingHistos* CreateRingHistos(UShort_t d, Char_t r) const; |
207 | /** Cache of per-strip energy loss of primaries */ |
208 | AliFMDFloatMap fSumPrimary; |
209 | /** Cache of per-strip energy loss of secondaries */ |
210 | AliFMDFloatMap fSumSecondary; |
211 | /** Cache of current MC IP */ |
212 | TArrayF fIp; |
213 | /** Cache of number of tracks */ |
214 | Int_t fNTrack; |
215 | /** Cache of numbr of primaries */ |
216 | Int_t fNPrimary; |
217 | /** Output nTuple of per-hit information */ |
218 | TNtuple* fTuple; |
219 | |
220 | ClassDef(AliFMDMCHitEnergyFitter,1); |
221 | }; |
222 | |
223 | #endif |
224 | // Local Variables: |
225 | // mode: C++ |
226 | // End: |