]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoModelBPLCMSCorrFctn.cxx
PWGCFfemtoscopyUser converted to native cmake
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemtoUser / AliFemtoModelBPLCMSCorrFctn.cxx
CommitLineData
76ce4b5b 1////////////////////////////////////////////////////////////////////////////////
2/// ///
3/// AliFemtoModelBPLCMSCorrFctn - the class for correlation function which ///
4/// uses the model framework and weight generation and calculated the 3D ///
5/// correlation function in the Bertsh-Pratt LCMS system ///
6/// Authors: Adam Kisiel, kisiel@mps.ohio-state.edu ///
7/// ///
8////////////////////////////////////////////////////////////////////////////////
9#include "AliFemtoModelBPLCMSCorrFctn.h"
10#include "AliFemtoPair.h"
11#include "AliFemtoModelManager.h"
12#include "AliFemtoKTPairCut.h"
13#include "AliFemtoAnalysisReactionPlane.h"
14#include <cstdio>
15
6f24ad05 16#ifdef __ROOT__
76ce4b5b 17ClassImp(AliFemtoModelBPLCMSCorrFctn)
18#endif
19
20//____________________________
21AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi)
22 :
23 AliFemtoModelCorrFctn(title, nbins, QLo, QHi),
24 fNumerator3DTrue(0),
25 fNumerator3DFake(0),
26 fDenominator3D(0),
27 fQinvHisto(0),
28 fPairCut(0),
29 fUseRPSelection(0)
30{
31 // set up true numerator
32 char tTitNumT[101] = "Num3DTrue";
33 strncat(tTitNumT,title, 100);
34 fNumerator3DTrue = new TH3D(tTitNumT,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
35 // set up fake numerator
36 char tTitNumF[101] = "Num3DFake";
37 strncat(tTitNumF,title, 100);
38 fNumerator3DFake = new TH3D(tTitNumF,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
39 // set up denominator
40 char tTitDen[101] = "Den3D";
41 strncat(tTitDen,title, 100);
42 fDenominator3D = new TH3D(tTitDen,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
43 // set up ave qInv
44 char tTitQinv[101] = "Qinv";
45 strncat(tTitQinv,title, 100);
46 fQinvHisto = new TH3D(tTitQinv,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
47
48 // to enable error bar calculation...
49 fNumerator3DTrue->Sumw2();
50 fNumerator3DFake->Sumw2();
51 fDenominator3D->Sumw2();
52}
53
54AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn) :
55 AliFemtoModelCorrFctn(aCorrFctn),
56 fNumerator3DTrue(0),
57 fNumerator3DFake(0),
58 fDenominator3D(0),
59 fQinvHisto(0),
60 fPairCut(0),
61 fUseRPSelection(0)
62{
63 // Copy constructor
64 fNumerator3DTrue = new TH3D(*aCorrFctn.fNumerator3DTrue);
65 fNumerator3DFake = new TH3D(*aCorrFctn.fNumerator3DFake);
66 fDenominator3D = new TH3D(*aCorrFctn.fDenominator3D);
67 fQinvHisto = new TH3D(*aCorrFctn.fQinvHisto);
68 fPairCut = aCorrFctn.fPairCut->Clone();
69}
70//____________________________
71AliFemtoModelBPLCMSCorrFctn::~AliFemtoModelBPLCMSCorrFctn()
72{
73 // destructor
74 if (fNumeratorTrue) delete fNumeratorTrue;
75 if (fNumeratorFake) delete fNumeratorFake;
76 if (fDenominator) delete fDenominator;
77 delete fNumerator3DTrue;
78 delete fNumerator3DFake;
79 delete fDenominator3D;
80 delete fQinvHisto;
81 if (fPairCut) delete fPairCut;
82}
83//_________________________
84AliFemtoModelBPLCMSCorrFctn& AliFemtoModelBPLCMSCorrFctn::operator=(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn)
85{
86 // Assignment operator
87 if (this == &aCorrFctn)
88 return *this;
89 if (fNumerator3DTrue) delete fNumerator3DTrue;
90 fNumerator3DTrue = new TH3D(*aCorrFctn.fNumerator3DTrue);
91 if (fNumerator3DFake) delete fNumerator3DFake;
92 fNumerator3DFake = new TH3D(*aCorrFctn.fNumerator3DFake);
93 if (fDenominator3D) delete fDenominator3D;
94 fDenominator3D = new TH3D(*aCorrFctn.fDenominator3D);
95 if (fQinvHisto) delete fQinvHisto;
96 fQinvHisto = new TH3D(*aCorrFctn.fQinvHisto);
97 fPairCut = aCorrFctn.fPairCut->Clone();
98
99 return *this;
100}
101
102//_________________________
103void AliFemtoModelBPLCMSCorrFctn::Write(){
104 // Write out data histograms
105 AliFemtoModelCorrFctn::Write();
106 fNumerator3DTrue->Write();
107 fNumerator3DFake->Write();
108 fDenominator3D->Write();
109 fQinvHisto->Write();
110}
111//________________________
112TList* AliFemtoModelBPLCMSCorrFctn::GetOutputList()
113{
114 // Prepare the list of objects to be written to the output
115 TList *tOutputList = AliFemtoModelCorrFctn::GetOutputList();
116
6f24ad05 117 tOutputList->Add(fNumerator3DTrue);
118 tOutputList->Add(fNumerator3DFake);
119 tOutputList->Add(fDenominator3D);
120 tOutputList->Add(fQinvHisto);
76ce4b5b 121
122 return tOutputList;
123}
124
125//_________________________
126void AliFemtoModelBPLCMSCorrFctn::Finish(){
109b4bb5 127 //fQinvHisto->Divide(fDenominator);
76ce4b5b 128}
129
130//____________________________
131AliFemtoString AliFemtoModelBPLCMSCorrFctn::Report(){
132 // Prepare a report from the execution
133 string stemp = "LCMS Frame Bertsch-Pratt 3D Model Correlation Function Report:\n";
134 char ctemp[100];
135 snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fNumeratorTrue->GetEntries());
136 stemp += ctemp;
137 snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
138 stemp += ctemp;
139 /* if (fCorrection)
140 {
141 float radius = fCorrection->GetRadius();
142 snprintf(ctemp , 100, "Coulomb correction used radius of\t%E\n",radius);
143 }
144 else
145 {
146 snprintf(ctemp , 100, "No Coulomb Correction applied to this CorrFctn\n");
147 }
148 stemp += ctemp;
149 */
150
6f24ad05 151 //
76ce4b5b 152 AliFemtoString returnThis = stemp;
153 return returnThis;
154}
155//____________________________
156void AliFemtoModelBPLCMSCorrFctn::AddRealPair( AliFemtoPair* pair)
157{
158 // Store a real pair in numerator
159 if (fPairCut){
160 if (fUseRPSelection) {
161 AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
6f24ad05 162 if (!ktc) {
76ce4b5b 163 cout << "RP aware cut requested, but not connected to the CF" << endl;
164 if (!(fPairCut->Pass(pair))) return;
165 }
166 else {
167 AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
168 if (!arp) {
169 cout << "RP aware cut requested, but not connected to the CF" << endl;
170 if (!(fPairCut->Pass(pair))) return;
171 }
172 else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
173 }
174 }
175 else
176 if (!(fPairCut->Pass(pair))) return;
177 }
178// if (fPairCut){
179// if (!(fPairCut->Pass(pair))) return;
180// }
6f24ad05 181
76ce4b5b 182 Double_t weight = fManager->GetWeight(pair);
183
184 double qOut = (pair->QOutCMS());
185 double qSide = (pair->QSideCMS());
186 double qLong = (pair->QLongCMS());
187
188 fNumerator3DTrue->Fill(qOut, qSide, qLong, weight);
189 fNumeratorTrue->Fill(pair->QInv(), weight);
190}
191//____________________________
192void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
193 // store mixed pair in denominator
194 if (fPairCut){
195 if (fUseRPSelection) {
196 AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
6f24ad05 197 if (!ktc) {
109b4bb5 198 cout << "RP aware cut requested, but not connected to the CF" << endl;
199 if (!(fPairCut->Pass(pair))) return;
76ce4b5b 200 }
201 else {
109b4bb5 202 AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
203 if (!arp) {
204 cout << "RP aware cut requested, but not connected to the CF" << endl;
205 if (!(fPairCut->Pass(pair))) return;
206 }
207 else if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
76ce4b5b 208 }
209 }
210 else
211 if (!(fPairCut->Pass(pair))) return;
212 }
213// if (fPairCut){
214// if (!(fPairCut->Pass(pair))) return;
215// }
216
217 Double_t weight = fManager->GetWeight(pair);
218
219 double qOut = (pair->QOutCMS());
220 double qSide = (pair->QSideCMS());
221 double qLong = (pair->QLongCMS());
222
223 fNumerator3DFake->Fill(qOut, qSide, qLong, weight);
224 fDenominator3D->Fill(qOut, qSide, qLong, 1.0);
225 fNumeratorFake->Fill(pair->QInv(), weight);
226 fDenominator->Fill(pair->QInv(), 1.0);
109b4bb5 227 fQinvHisto->Fill(qOut, qSide, qLong, pair->QInv() );
76ce4b5b 228}
229//_______________________
230AliFemtoModelCorrFctn* AliFemtoModelBPLCMSCorrFctn::Clone()
231{
232 // Clone the correlation function
233 AliFemtoModelBPLCMSCorrFctn *tCopy = new AliFemtoModelBPLCMSCorrFctn(*this);
6f24ad05 234
76ce4b5b 235 return tCopy;
236}
237
238void AliFemtoModelBPLCMSCorrFctn::SetSpecificPairCut(AliFemtoPairCut* aCut)
239{
240 fPairCut = aCut;
241}
242
243void AliFemtoModelBPLCMSCorrFctn::SetUseRPSelection(unsigned short aRPSel)
244{
245 fUseRPSelection = aRPSel;
246}