1 ////////////////////////////////////////////////////////////////////////////////
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 ///
8 ////////////////////////////////////////////////////////////////////////////////
9 #include "AliFemtoModelBPLCMSCorrFctn.h"
10 #include "AliFemtoPair.h"
11 #include "AliFemtoModelManager.h"
12 #include "AliFemtoKTPairCut.h"
13 #include "AliFemtoAnalysisReactionPlane.h"
17 ClassImp(AliFemtoModelBPLCMSCorrFctn)
20 //____________________________
21 AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi)
23 AliFemtoModelCorrFctn(title, nbins, QLo, QHi),
31 // set up true numerator
32 char tTitNumT[100] = "Num3DTrue";
33 strcat(tTitNumT,title);
34 fNumerator3DTrue = new TH3D(tTitNumT,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
35 // set up fake numerator
36 char tTitNumF[100] = "Num3DFake";
37 strcat(tTitNumF,title);
38 fNumerator3DFake = new TH3D(tTitNumF,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
40 char tTitDen[100] = "Den3D";
41 strcat(tTitDen,title);
42 fDenominator3D = new TH3D(tTitDen,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
44 char tTitQinv[100] = "Qinv";
45 strcat(tTitQinv,title);
46 fQinvHisto = new TH3D(tTitQinv,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
48 // to enable error bar calculation...
49 fNumerator3DTrue->Sumw2();
50 fNumerator3DFake->Sumw2();
51 fDenominator3D->Sumw2();
54 AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn) :
55 AliFemtoModelCorrFctn(aCorrFctn),
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();
70 //____________________________
71 AliFemtoModelBPLCMSCorrFctn::~AliFemtoModelBPLCMSCorrFctn()
74 if (fNumeratorTrue) delete fNumeratorTrue;
75 if (fNumeratorFake) delete fNumeratorFake;
76 if (fDenominator) delete fDenominator;
77 delete fNumerator3DTrue;
78 delete fNumerator3DFake;
79 delete fDenominator3D;
81 if (fPairCut) delete fPairCut;
83 //_________________________
84 AliFemtoModelBPLCMSCorrFctn& AliFemtoModelBPLCMSCorrFctn::operator=(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn)
86 // Assignment operator
87 if (this == &aCorrFctn)
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();
102 //_________________________
103 void AliFemtoModelBPLCMSCorrFctn::Write(){
104 // Write out data histograms
105 AliFemtoModelCorrFctn::Write();
106 fNumerator3DTrue->Write();
107 fNumerator3DFake->Write();
108 fDenominator3D->Write();
111 //________________________
112 TList* AliFemtoModelBPLCMSCorrFctn::GetOutputList()
114 // Prepare the list of objects to be written to the output
115 TList *tOutputList = AliFemtoModelCorrFctn::GetOutputList();
117 tOutputList->Add(fNumerator3DTrue);
118 tOutputList->Add(fNumerator3DFake);
119 tOutputList->Add(fDenominator3D);
120 tOutputList->Add(fQinvHisto);
125 //_________________________
126 void AliFemtoModelBPLCMSCorrFctn::Finish(){
127 fQinvHisto->Divide(fDenominator);
130 //____________________________
131 AliFemtoString AliFemtoModelBPLCMSCorrFctn::Report(){
132 // Prepare a report from the execution
133 string stemp = "LCMS Frame Bertsch-Pratt 3D Model Correlation Function Report:\n";
135 sprintf(ctemp,"Number of entries in numerator:\t%E\n",fNumeratorTrue->GetEntries());
137 sprintf(ctemp,"Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
141 float radius = fCorrection->GetRadius();
142 sprintf(ctemp,"Coulomb correction used radius of\t%E\n",radius);
146 sprintf(ctemp,"No Coulomb Correction applied to this CorrFctn\n");
152 AliFemtoString returnThis = stemp;
155 //____________________________
156 void AliFemtoModelBPLCMSCorrFctn::AddRealPair( AliFemtoPair* pair)
158 // Store a real pair in numerator
160 if (fUseRPSelection) {
161 AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
163 cout << "RP aware cut requested, but not connected to the CF" << endl;
164 if (!(fPairCut->Pass(pair))) return;
167 AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
169 cout << "RP aware cut requested, but not connected to the CF" << endl;
170 if (!(fPairCut->Pass(pair))) return;
172 if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
176 if (!(fPairCut->Pass(pair))) return;
179 // if (!(fPairCut->Pass(pair))) return;
182 Double_t weight = fManager->GetWeight(pair);
184 double qOut = (pair->QOutCMS());
185 double qSide = (pair->QSideCMS());
186 double qLong = (pair->QLongCMS());
188 fNumerator3DTrue->Fill(qOut, qSide, qLong, weight);
189 fNumeratorTrue->Fill(pair->QInv(), weight);
191 //____________________________
192 void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
193 // store mixed pair in denominator
195 if (fUseRPSelection) {
196 AliFemtoKTPairCut *ktc = dynamic_cast<AliFemtoKTPairCut *>(fPairCut);
198 cout << "RP aware cut requested, but not connected to the CF" << endl;
199 if (!(fPairCut->Pass(pair))) return;
202 AliFemtoAnalysisReactionPlane *arp = dynamic_cast<AliFemtoAnalysisReactionPlane *> (HbtAnalysis());
204 cout << "RP aware cut requested, but not connected to the CF" << endl;
205 if (!(fPairCut->Pass(pair))) return;
207 if (!(ktc->Pass(pair, arp->GetCurrentReactionPlane()))) return;
211 if (!(fPairCut->Pass(pair))) return;
214 // if (!(fPairCut->Pass(pair))) return;
217 Double_t weight = fManager->GetWeight(pair);
219 double qOut = (pair->QOutCMS());
220 double qSide = (pair->QSideCMS());
221 double qLong = (pair->QLongCMS());
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);
229 //_______________________
230 AliFemtoModelCorrFctn* AliFemtoModelBPLCMSCorrFctn::Clone()
232 // Clone the correlation function
233 AliFemtoModelBPLCMSCorrFctn *tCopy = new AliFemtoModelBPLCMSCorrFctn(*this);
238 void AliFemtoModelBPLCMSCorrFctn::SetSpecificPairCut(AliFemtoPairCut* aCut)
243 void AliFemtoModelBPLCMSCorrFctn::SetUseRPSelection(unsigned short aRPSel)
245 fUseRPSelection = aRPSel;