1 ////////////////////////////////////////////////////////////////////////////////
3 /// AliFemtoModelCorrFctn - the base class for correlation function which ///
4 /// uses the model framework and weight generation ///
6 ////////////////////////////////////////////////////////////////////////////////
8 ClassImp(AliFemtoModelCorrFctn, 1)
11 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
12 #include "AliFemtoModelHiddenInfo.h"
13 #include "AliFemtoModelCorrFctn.h"
14 #include "AliFemtoPair.h"
15 #include "AliFemtoModelManager.h"
19 //_______________________
20 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn():
26 fNumeratorTrueIdeal(0),
27 fNumeratorFakeIdeal(0),
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);
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);
40 fQgenQrec = new TH2D("QgenQrec","QgenQrec",50,0.0,0.5,50,0.0,0.5);
42 fNumeratorTrue->Sumw2();
43 fNumeratorFake->Sumw2();
44 fDenominator->Sumw2();
46 fNumeratorTrueIdeal->Sumw2();
47 fNumeratorFakeIdeal->Sumw2();
48 fDenominatorIdeal->Sumw2();
53 //_______________________
54 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const char *title, Int_t aNbins, Double_t aQinvLo, Double_t aQinvHi):
60 fNumeratorTrueIdeal(0),
61 fNumeratorFakeIdeal(0),
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);
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);
81 snprintf(buf , 100, "QgenQrec%s", title);
82 fQgenQrec = new TH2D(buf,buf,aNbins,aQinvLo,aQinvHi,aNbins,aQinvLo,aQinvHi);
84 fNumeratorTrue->Sumw2();
85 fNumeratorFake->Sumw2();
86 fDenominator->Sumw2();
88 fNumeratorTrueIdeal->Sumw2();
89 fNumeratorFakeIdeal->Sumw2();
90 fDenominatorIdeal->Sumw2();
94 //_______________________
95 AliFemtoModelCorrFctn::AliFemtoModelCorrFctn(const AliFemtoModelCorrFctn& aCorrFctn) :
101 fNumeratorTrueIdeal(0),
102 fNumeratorFakeIdeal(0),
103 fDenominatorIdeal(0),
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));
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));
121 if (aCorrFctn.fQgenQrec)
122 fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec));
124 fManager = aCorrFctn.fManager;
126 //_______________________
127 AliFemtoModelCorrFctn::~AliFemtoModelCorrFctn()
130 if (fNumeratorTrue) delete fNumeratorTrue;
131 if (fNumeratorFake) delete fNumeratorFake;
132 if (fDenominator) delete fDenominator;
134 if (fNumeratorTrueIdeal) delete fNumeratorTrueIdeal;
135 if (fNumeratorFakeIdeal) delete fNumeratorFakeIdeal;
136 if (fDenominatorIdeal) delete fDenominatorIdeal;
138 if (fQgenQrec) delete fQgenQrec;
141 //_______________________
142 AliFemtoModelCorrFctn& AliFemtoModelCorrFctn::operator=(const AliFemtoModelCorrFctn& aCorrFctn)
144 // Assignment operator
145 if (this == &aCorrFctn)
148 if (aCorrFctn.fNumeratorTrue)
149 fNumeratorTrue = new TH1D(*(aCorrFctn.fNumeratorTrue));
152 if (aCorrFctn.fNumeratorFake)
153 fNumeratorFake = new TH1D(*(aCorrFctn.fNumeratorFake));
156 if (aCorrFctn.fDenominator)
157 fDenominator = new TH1D(*(aCorrFctn.fDenominator));
161 if (aCorrFctn.fQgenQrec)
162 fQgenQrec = new TH2D(*(aCorrFctn.fQgenQrec));
166 fManager = aCorrFctn.fManager;
169 if (aCorrFctn.fNumeratorTrueIdeal)
170 fNumeratorTrueIdeal = new TH1D(*(aCorrFctn.fNumeratorTrueIdeal));
172 fNumeratorTrueIdeal = 0;
173 if (aCorrFctn.fNumeratorFakeIdeal)
174 fNumeratorFakeIdeal = new TH1D(*(aCorrFctn.fNumeratorFakeIdeal));
177 if (aCorrFctn.fDenominatorIdeal)
178 fDenominatorIdeal = new TH1D(*(aCorrFctn.fDenominatorIdeal));
180 fDenominatorIdeal = 0;
182 fManager = aCorrFctn.fManager;
186 //_______________________
187 void AliFemtoModelCorrFctn::ConnectToManager(AliFemtoModelManager *aManager)
192 //_______________________
193 AliFemtoString AliFemtoModelCorrFctn::Report()
196 AliFemtoString tStr = "AliFemtoModelCorrFctn report";
201 //_______________________
202 void AliFemtoModelCorrFctn::AddRealPair(AliFemtoPair* aPair)
204 Double_t weight = fManager->GetWeight(aPair);
205 fNumeratorTrue->Fill(aPair->QInv(), weight);
207 Double_t tQinvTrue = GetQinvTrue(aPair);
209 fNumeratorTrueIdeal->Fill(tQinvTrue, weight);
211 //_______________________
212 void AliFemtoModelCorrFctn::AddMixedPair(AliFemtoPair* aPair)
214 Double_t weight = fManager->GetWeight(aPair);
215 fNumeratorFake->Fill(aPair->QInv(), weight);
216 fDenominator->Fill(aPair->QInv(), 1.0);
218 Double_t tQinvTrue = GetQinvTrue(aPair);
220 fNumeratorFakeIdeal->Fill(tQinvTrue, weight);
221 fDenominatorIdeal->Fill(tQinvTrue, 1.0);
223 fQgenQrec->Fill(tQinvTrue,aPair->QInv());
226 //_______________________
227 Double_t AliFemtoModelCorrFctn::GetQinvTrue(AliFemtoPair* aPair)
229 AliFemtoTrack *inf1 = (AliFemtoTrack *) aPair->Track1()->Track();
230 AliFemtoTrack *inf2 = (AliFemtoTrack *) aPair->Track2()->Track();
232 AliFemtoLorentzVector fm1;
233 AliFemtoThreeVector* temp = inf1->GetTrueMomentum();
235 double ener = TMath::Sqrt(temp->Mag2()+(aPair->Track1()->Track()->GetMass())*(aPair->Track1()->Track()->GetMass()));
238 AliFemtoLorentzVector fm2;
239 AliFemtoThreeVector* temp2 = inf2->GetTrueMomentum();
241 ener = TMath::Sqrt(temp2->Mag2()+(aPair->Track2()->Track()->GetMass())*(aPair->Track2()->Track()->GetMass()));
244 AliFemtoLorentzVector tQinvTrueVec = (fm1-fm2);
245 Double_t tQinvTrue = -1.* tQinvTrueVec.m();
250 //_______________________
251 void AliFemtoModelCorrFctn::EventBegin(const AliFemtoEvent* /* aEvent */)
255 //_______________________
256 void AliFemtoModelCorrFctn::EventEnd(const AliFemtoEvent* /* aEvent */)
260 //_______________________
261 void AliFemtoModelCorrFctn::Finish()
265 //_______________________
266 void AliFemtoModelCorrFctn::Write()
268 // Write out data histos
272 fNumeratorTrue->Write();
273 fNumeratorFake->Write();
274 fDenominator->Write();
276 fNumeratorTrueIdeal->Write();
277 fNumeratorFakeIdeal->Write();
278 fDenominatorIdeal->Write();
282 //_______________________
283 AliFemtoModelCorrFctn* AliFemtoModelCorrFctn::Clone()
286 AliFemtoModelCorrFctn *tCopy = new AliFemtoModelCorrFctn(*this);
290 //_________________________
291 TList* AliFemtoModelCorrFctn::GetOutputList()
293 // Prepare the list of objects to be written to the output
294 TList *tOutputList = new TList();
296 tOutputList->Add(fNumeratorTrue);
297 tOutputList->Add(fNumeratorFake);
298 tOutputList->Add(fDenominator);
300 tOutputList->Add(fNumeratorTrueIdeal);
301 tOutputList->Add(fNumeratorFakeIdeal);
302 tOutputList->Add(fDenominatorIdeal);
303 tOutputList->Add(fQgenQrec);