]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoModelCorrFctn.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoModelCorrFctn.cxx
1 ////////////////////////////////////////////////////////////////////////////////
2 ///                                                                          ///
3 /// AliFemtoModelCorrFctn - the base class for correlation function which    ///
4 /// uses the model framework and weight generation                           ///
5 ///                                                                          ///
6 ////////////////////////////////////////////////////////////////////////////////
7 #ifdef __ROOT__
8 ClassImp(AliFemtoModelCorrFctn, 1)
9 #endif
10
11 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
12 #include "AliFemtoModelHiddenInfo.h"
13 #include "AliFemtoModelCorrFctn.h"
14 #include "AliFemtoPair.h"
15 #include "AliFemtoModelManager.h"
16 #include <TH1D.h>
17 #include <TH2D.h>
18
19 //_______________________
20 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn():
21 AliFemtoCorrFctn(),
22   fManager(0),
23   fNumeratorTrue(0),
24   fNumeratorFake(0),
25   fDenominator(0),
26   fNumeratorTrueIdeal(0),
27   fNumeratorFakeIdeal(0),
28   fDenominatorIdeal(0),
29   fQgenQrec(0)
30 {
31   // Default constructor
32   fNumeratorTrue = new TH1D("ModelNumTrue","ModelNumTrue",50,0.0,0.5);
33   fNumeratorFake = new TH1D("ModelNumFake","ModelNumFake",50,0.0,0.5);
34   fDenominator = new TH1D("ModelDen","ModelDen",50,0.0,0.5);
35
36   fNumeratorTrueIdeal = new TH1D("ModelNumTrueIdeal","ModelNumTrueIdeal",50,0.0,0.5);
37   fNumeratorFakeIdeal = new TH1D("ModelNumFakeIdeal","ModelNumFakeIdeal",50,0.0,0.5);
38   fDenominatorIdeal = new TH1D("ModelDenIdeal","ModelDenIdeal",50,0.0,0.5);
39
40   fQgenQrec = new TH2D("QgenQrec","QgenQrec",50,0.0,0.5,50,0.0,0.5);
41
42   fNumeratorTrue->Sumw2();
43   fNumeratorFake->Sumw2();
44   fDenominator->Sumw2();
45
46   fNumeratorTrueIdeal->Sumw2();
47   fNumeratorFakeIdeal->Sumw2();
48   fDenominatorIdeal->Sumw2();
49
50   fQgenQrec->Sumw2();
51
52 }
53 //_______________________
54 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi):
55   AliFemtoCorrFctn(),
56   fManager(0),
57   fNumeratorTrue(0),
58   fNumeratorFake(0),
59   fDenominator(0),
60   fNumeratorTrueIdeal(0),
61   fNumeratorFakeIdeal(0),
62   fDenominatorIdeal(0),
63   fQgenQrec(0)
64 {
65   // Normal constructor
66   char buf[100];
67   snprintf(buf , 100,  "NumTrue%s", title);
68   fNumeratorTrue = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
69   snprintf(buf , 100,  "NumFake%s", title);
70   fNumeratorFake = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
71   snprintf(buf , 100,  "Den%s", title);
72   fDenominator = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
73
74   snprintf(buf , 100,  "NumTrueIdeal%s", title);
75   fNumeratorTrueIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
76   snprintf(buf , 100,  "NumFakeIdeal%s", title);
77   fNumeratorFakeIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
78   snprintf(buf , 100,  "DenIdeal%s", title);
79   fDenominatorIdeal = new TH1D(buf,buf,aNbins,aQinvLo,aQinvHi);
80
81   snprintf(buf , 100,  "QgenQrec%s", title);
82   fQgenQrec = new TH2D(buf,buf,aNbins,aQinvLo,aQinvHi,aNbins,aQinvLo,aQinvHi);
83
84   fNumeratorTrue->Sumw2();
85   fNumeratorFake->Sumw2();
86   fDenominator->Sumw2();
87
88   fNumeratorTrueIdeal->Sumw2();
89   fNumeratorFakeIdeal->Sumw2();
90   fDenominatorIdeal->Sumw2();
91
92   fQgenQrec->Sumw2();
93 }
94 //_______________________
95 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn) :
96   AliFemtoCorrFctn(),
97   fManager(0),
98   fNumeratorTrue(0),
99   fNumeratorFake(0),
100   fDenominator(0),
101   fNumeratorTrueIdeal(0),
102   fNumeratorFakeIdeal(0),
103   fDenominatorIdeal(0),
104   fQgenQrec(0)
105 {
106   // Copy constructor
107   if (aCorrFctn.fNumeratorTrue)
108     fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue));
109   if (aCorrFctn.fNumeratorFake)
110     fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake));
111   if (aCorrFctn.fDenominator)
112     fDenominator = new TH1D(*(aCorrFctn.fDenominator));
113
114   if (aCorrFctn.fNumeratorTrueIdeal)
115     fNumeratorTrueIdeal = new TH1D(*(aCorrFctn.fNumeratorTrueIdeal));
116   if (aCorrFctn.fNumeratorFakeIdeal)
117     fNumeratorFakeIdeal = new TH1D(*(aCorrFctn.fNumeratorFakeIdeal));
118   if (aCorrFctn.fDenominatorIdeal)
119     fDenominatorIdeal = new TH1D(*(aCorrFctn.fDenominatorIdeal));
120
121   if (aCorrFctn.fQgenQrec)
122     fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec));
123
124   fManager = aCorrFctn.fManager;
125 }
126 //_______________________
127 AliFemtoModelCorrFctn::~AliFemtoModelCorrFctn()
128 {
129   // Destructor
130   if (fNumeratorTrue) delete fNumeratorTrue;
131   if (fNumeratorFake) delete fNumeratorFake;
132   if (fDenominator) delete fDenominator;
133
134   if (fNumeratorTrueIdeal) delete fNumeratorTrueIdeal;
135   if (fNumeratorFakeIdeal) delete fNumeratorFakeIdeal;
136   if (fDenominatorIdeal) delete fDenominatorIdeal;
137
138   if (fQgenQrec) delete fQgenQrec;
139
140 }
141 //_______________________
142 AliFemtoModelCorrFctn& AliFemtoModelCorrFctn::operator=(const AliFemtoModelCorrFctn& aCorrFctn)
143 {
144   // Assignment operator
145   if (this == &aCorrFctn)
146     return *this;
147
148   if (aCorrFctn.fNumeratorTrue)
149     fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue));
150   else
151     fNumeratorTrue = 0;
152   if (aCorrFctn.fNumeratorFake)
153     fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake));
154   else
155     fNumeratorFake = 0;
156   if (aCorrFctn.fDenominator)
157     fDenominator = new TH1D(*(aCorrFctn.fDenominator));
158   else
159     fDenominator = 0;
160
161   if (aCorrFctn.fQgenQrec)
162     fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec));
163   else
164     fQgenQrec = 0;
165
166   fManager = aCorrFctn.fManager;
167
168
169   if (aCorrFctn.fNumeratorTrueIdeal)
170     fNumeratorTrueIdeal = new TH1D(*(aCorrFctn.fNumeratorTrueIdeal));
171   else
172     fNumeratorTrueIdeal = 0;
173   if (aCorrFctn.fNumeratorFakeIdeal)
174     fNumeratorFakeIdeal = new TH1D(*(aCorrFctn.fNumeratorFakeIdeal));
175   else
176     fNumeratorFake = 0;
177   if (aCorrFctn.fDenominatorIdeal)
178     fDenominatorIdeal = new TH1D(*(aCorrFctn.fDenominatorIdeal));
179   else
180     fDenominatorIdeal = 0;
181
182   fManager = aCorrFctn.fManager;
183
184   return *this;
185 }
186 //_______________________
187 void AliFemtoModelCorrFctn::ConnectToManager(AliFemtoModelManager *aManager)
188 {
189   fManager = aManager;
190 }
191
192 //_______________________
193 AliFemtoString AliFemtoModelCorrFctn::Report()
194 {
195   // Prepare report
196   AliFemtoString tStr = "AliFemtoModelCorrFctn report";
197
198   return tStr;
199 }
200
201 //_______________________
202 void AliFemtoModelCorrFctn::AddRealPair(AliFemtoPair* aPair)
203 {
204   Double_t weight = fManager->GetWeight(aPair);
205   fNumeratorTrue->Fill(aPair->QInv(), weight);
206
207   Double_t tQinvTrue = GetQinvTrue(aPair);
208
209   fNumeratorTrueIdeal->Fill(tQinvTrue, weight);
210 }
211 //_______________________
212 void AliFemtoModelCorrFctn::AddMixedPair(AliFemtoPair* aPair)
213 {
214   Double_t weight = fManager->GetWeight(aPair);
215   fNumeratorFake->Fill(aPair->QInv(), weight);
216   fDenominator->Fill(aPair->QInv(), 1.0);
217
218   Double_t tQinvTrue = GetQinvTrue(aPair);
219
220   fNumeratorFakeIdeal->Fill(tQinvTrue, weight);
221   fDenominatorIdeal->Fill(tQinvTrue, 1.0);
222
223   fQgenQrec->Fill(tQinvTrue,aPair->QInv());
224 }
225
226 //_______________________
227 Double_t AliFemtoModelCorrFctn::GetQinvTrue(AliFemtoPair* aPair)
228 {
229   AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
230   AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();
231
232   AliFemtoLorentzVector fm1;
233   AliFemtoThreeVector* temp = inf1->GetTrueMomentum();
234   fm1.SetVect(*temp);
235   double ener = TMath::Sqrt(temp->Mag2()+(aPair->Track1()->Track()->GetMass())*(aPair->Track1()->Track()->GetMass()));
236   fm1.SetE(ener);
237
238   AliFemtoLorentzVector fm2;
239   AliFemtoThreeVector* temp2 = inf2->GetTrueMomentum();
240   fm2.SetVect(*temp2);
241   ener = TMath::Sqrt(temp2->Mag2()+(aPair->Track2()->Track()->GetMass())*(aPair->Track2()->Track()->GetMass()));
242   fm2.SetE(ener);
243
244   AliFemtoLorentzVector tQinvTrueVec = (fm1-fm2);
245   Double_t tQinvTrue = -1.* tQinvTrueVec.m();
246
247   return tQinvTrue;
248 }
249
250 //_______________________
251 void AliFemtoModelCorrFctn::EventBegin(const AliFemtoEvent* /* aEvent */)
252 {
253   /* Do nothing */
254 }
255 //_______________________
256 void AliFemtoModelCorrFctn::EventEnd(const AliFemtoEvent* /* aEvent */)
257 {
258   /* Do nothing */
259 }
260 //_______________________
261 void AliFemtoModelCorrFctn::Finish()
262 {
263   /* Do nothing */
264 }
265 //_______________________
266 void AliFemtoModelCorrFctn::Write()
267 {
268   // Write out data histos
269
270   fQgenQrec->Write();
271
272   fNumeratorTrue->Write();
273   fNumeratorFake->Write();
274   fDenominator->Write();
275
276   fNumeratorTrueIdeal->Write();
277   fNumeratorFakeIdeal->Write();
278   fDenominatorIdeal->Write();
279
280
281 }
282 //_______________________
283 AliFemtoModelCorrFctn* AliFemtoModelCorrFctn::Clone()
284 {
285   // Create clone
286   AliFemtoModelCorrFctn *tCopy = new AliFemtoModelCorrFctn(*this);
287
288   return tCopy;
289 }
290 //_________________________
291 TList* AliFemtoModelCorrFctn::GetOutputList()
292 {
293   // Prepare the list of objects to be written to the output
294   TList *tOutputList = new TList();
295
296   tOutputList->Add(fNumeratorTrue);
297   tOutputList->Add(fNumeratorFake);
298   tOutputList->Add(fDenominator);
299
300   tOutputList->Add(fNumeratorTrueIdeal);
301   tOutputList->Add(fNumeratorFakeIdeal);
302   tOutputList->Add(fDenominatorIdeal);
303   tOutputList->Add(fQgenQrec);
304
305
306   return tOutputList;
307 }