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"
15 ClassImp(AliFemtoModelBPLCMSCorrFctn)
18 //____________________________
19 AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(char* title, const int& nbins, const float& QLo, const float& QHi)
21 AliFemtoModelCorrFctn(title, nbins, QLo, QHi),
28 // set up true numerator
29 char tTitNumT[100] = "Num3DTrue";
30 strcat(tTitNumT,title);
31 fNumerator3DTrue = new TH3D(tTitNumT,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
32 // set up fake numerator
33 char tTitNumF[100] = "Num3DFake";
34 strcat(tTitNumF,title);
35 fNumerator3DFake = new TH3D(tTitNumF,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
37 char tTitDen[100] = "Den3D";
38 strcat(tTitDen,title);
39 fDenominator3D = new TH3D(tTitDen,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
41 char tTitQinv[100] = "Qinv";
42 strcat(tTitQinv,title);
43 fQinvHisto = new TH3D(tTitQinv,title,nbins,QLo,QHi,nbins,QLo,QHi,nbins,QLo,QHi);
45 // to enable error bar calculation...
46 fNumerator3DTrue->Sumw2();
47 fNumerator3DFake->Sumw2();
48 fDenominator3D->Sumw2();
51 AliFemtoModelBPLCMSCorrFctn::AliFemtoModelBPLCMSCorrFctn(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn) :
52 AliFemtoModelCorrFctn(aCorrFctn),
60 fNumerator3DTrue = new TH3D(*aCorrFctn.fNumerator3DTrue);
61 fNumerator3DFake = new TH3D(*aCorrFctn.fNumerator3DFake);
62 fDenominator3D = new TH3D(*aCorrFctn.fDenominator3D);
63 fQinvHisto = new TH3D(*aCorrFctn.fQinvHisto);
64 fPairCut = aCorrFctn.fPairCut->Clone();
66 //____________________________
67 AliFemtoModelBPLCMSCorrFctn::~AliFemtoModelBPLCMSCorrFctn()
70 if (fNumeratorTrue) delete fNumeratorTrue;
71 if (fNumeratorFake) delete fNumeratorFake;
72 if (fDenominator) delete fDenominator;
73 delete fNumerator3DTrue;
74 delete fNumerator3DFake;
75 delete fDenominator3D;
77 if (fPairCut) delete fPairCut;
79 //_________________________
80 AliFemtoModelBPLCMSCorrFctn& AliFemtoModelBPLCMSCorrFctn::operator=(const AliFemtoModelBPLCMSCorrFctn& aCorrFctn)
82 // Assignment operator
83 if (this == &aCorrFctn)
85 if (fNumerator3DTrue) delete fNumerator3DTrue;
86 fNumerator3DTrue = new TH3D(*aCorrFctn.fNumerator3DTrue);
87 if (fNumerator3DFake) delete fNumerator3DFake;
88 fNumerator3DFake = new TH3D(*aCorrFctn.fNumerator3DFake);
89 if (fDenominator3D) delete fDenominator3D;
90 fDenominator3D = new TH3D(*aCorrFctn.fDenominator3D);
91 if (fQinvHisto) delete fQinvHisto;
92 fQinvHisto = new TH3D(*aCorrFctn.fQinvHisto);
93 fPairCut = aCorrFctn.fPairCut->Clone();
98 //_________________________
99 void AliFemtoModelBPLCMSCorrFctn::Write(){
100 // Write out data histograms
101 AliFemtoModelCorrFctn::Write();
102 fNumerator3DTrue->Write();
103 fNumerator3DFake->Write();
104 fDenominator3D->Write();
107 //________________________
108 TList* AliFemtoModelBPLCMSCorrFctn::GetOutputList()
110 // Prepare the list of objects to be written to the output
111 TList *tOutputList = AliFemtoModelCorrFctn::GetOutputList();
113 tOutputList->Add(fNumerator3DTrue);
114 tOutputList->Add(fNumerator3DFake);
115 tOutputList->Add(fDenominator3D);
116 tOutputList->Add(fQinvHisto);
121 //_________________________
122 void AliFemtoModelBPLCMSCorrFctn::Finish(){
123 fQinvHisto->Divide(fDenominator);
126 //____________________________
127 AliFemtoString AliFemtoModelBPLCMSCorrFctn::Report(){
128 // Prepare a report from the execution
129 string stemp = "LCMS Frame Bertsch-Pratt 3D Model Correlation Function Report:\n";
131 sprintf(ctemp,"Number of entries in numerator:\t%E\n",fNumeratorTrue->GetEntries());
133 sprintf(ctemp,"Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
137 float radius = fCorrection->GetRadius();
138 sprintf(ctemp,"Coulomb correction used radius of\t%E\n",radius);
142 sprintf(ctemp,"No Coulomb Correction applied to this CorrFctn\n");
148 AliFemtoString returnThis = stemp;
151 //____________________________
152 void AliFemtoModelBPLCMSCorrFctn::AddRealPair( AliFemtoPair* pair)
154 // Store a real pair in numerator
156 if (!(fPairCut->Pass(pair))) return;
159 Double_t weight = fManager->GetWeight(pair);
161 double qOut = fabs(pair->QOutCMS());
162 double qSide = fabs(pair->QSideCMS());
163 double qLong = fabs(pair->QLongCMS());
165 fNumerator3DTrue->Fill(qOut, qSide, qLong, weight);
166 fNumeratorTrue->Fill(pair->QInv(), weight);
168 //____________________________
169 void AliFemtoModelBPLCMSCorrFctn::AddMixedPair( AliFemtoPair* pair){
170 // store mixed pair in denominator
172 if (!(fPairCut->Pass(pair))) return;
175 Double_t weight = fManager->GetWeight(pair);
177 double qOut = fabs(pair->QOutCMS());
178 double qSide = fabs(pair->QSideCMS());
179 double qLong = fabs(pair->QLongCMS());
181 fNumerator3DFake->Fill(qOut, qSide, qLong, weight);
182 fDenominator3D->Fill(qOut, qSide, qLong, 1.0);
183 fNumeratorFake->Fill(pair->QInv(), weight);
184 fDenominator->Fill(pair->QInv(), 1.0);
187 //_______________________
188 AliFemtoModelCorrFctn* AliFemtoModelBPLCMSCorrFctn::Clone()
190 // Clone the correlation function
191 AliFemtoModelBPLCMSCorrFctn *tCopy = new AliFemtoModelBPLCMSCorrFctn(*this);
196 void AliFemtoModelBPLCMSCorrFctn::SetSpecificPairCut(AliFemtoPairCut* aCut)