]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCorrFctn3DLCMSSym.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemto / AliFemtoCorrFctn3DLCMSSym.cxx
1 ///////////////////////////////////////////////////////////////////////////
2 //                                                                       //
3 // AliFemtoCorrFctn3DLCMSSym: a class to calculate 3D correlation        //
4 // for pairs of identical particles.                                     //
5 // In analysis the function should be first created in a macro, then     //
6 // added to the analysis, and at the end of the macro the procedure to   //
7 // write out histograms should be called.                                //
8 //                                                                       //
9 ///////////////////////////////////////////////////////////////////////////
10
11 #include "AliFemtoCorrFctn3DLCMSSym.h"
12
13 #include <cstdio>
14
15 #ifdef __ROOT__
16 ClassImp(AliFemtoCorrFctn3DLCMSSym)
17 #endif
18
19 //____________________________
20 AliFemtoCorrFctn3DLCMSSym::AliFemtoCorrFctn3DLCMSSym(char* title, const int& nbins, const float& QHi)
21 :
22 AliFemtoCorrFctn(),
23   fNumerator(0),
24   fDenominator(0),
25   fNumeratorW(0),
26   fDenominatorW(0),
27   fUseLCMS(1)
28 {
29   // Basic constructor
30
31   // set up numerator
32   char tTitNum[101] = "Num";
33   strncat(tTitNum,title, 100);
34   fNumerator = new TH3F(tTitNum,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins,-QHi,QHi);
35   // set up denominator
36   char tTitDen[101] = "Den";
37   strncat(tTitDen,title, 100);
38   fDenominator = new TH3F(tTitDen,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins,-QHi,QHi);
39 //Weighted by qinv histos
40   // set up numerator
41   char tTitNumW[101] = "NumWqinv";
42   strncat(tTitNumW,title, 100);
43   fNumeratorW = new TH3F(tTitNumW,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins,-QHi,QHi);
44   // set up denominator
45   char tTitDenW[101] = "DenWqinv";
46   strncat(tTitDenW,title, 100);
47   fDenominatorW = new TH3F(tTitDenW,title,nbins,-QHi,QHi,nbins,-QHi,QHi,nbins,-QHi,QHi);
48
49   // to enable error bar calculation...
50   fNumerator->Sumw2();
51   fDenominator->Sumw2();
52   fNumeratorW->Sumw2();
53   fDenominatorW->Sumw2();
54 }
55
56 AliFemtoCorrFctn3DLCMSSym::AliFemtoCorrFctn3DLCMSSym(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn) :
57   AliFemtoCorrFctn(aCorrFctn),
58   fNumerator(0),
59   fDenominator(0),
60   fNumeratorW(0),
61   fDenominatorW(0),
62   fUseLCMS(1)
63 {
64   // Copy constructor
65   fNumerator = new TH3F(*aCorrFctn.fNumerator);
66   fDenominator = new TH3F(*aCorrFctn.fDenominator);
67   fNumeratorW = new TH3F(*aCorrFctn.fNumeratorW);
68   fDenominatorW = new TH3F(*aCorrFctn.fDenominatorW);
69   fUseLCMS = aCorrFctn.fUseLCMS;
70 }
71 //____________________________
72 AliFemtoCorrFctn3DLCMSSym::~AliFemtoCorrFctn3DLCMSSym(){
73   // Destructor
74   delete fNumerator;
75   delete fDenominator;
76   delete fNumeratorW;
77   delete fDenominatorW;
78 }
79 //_________________________
80 AliFemtoCorrFctn3DLCMSSym& AliFemtoCorrFctn3DLCMSSym::operator=(const AliFemtoCorrFctn3DLCMSSym& aCorrFctn)
81 {
82   // assignment operator
83   if (this == &aCorrFctn)
84     return *this;
85
86   if (fNumerator) delete fNumerator;
87   fNumerator = new TH3F(*aCorrFctn.fNumerator);
88   if (fDenominator) delete fDenominator;
89   fDenominator = new TH3F(*aCorrFctn.fDenominator);
90   if (fNumeratorW) delete fNumeratorW;
91   fNumeratorW = new TH3F(*aCorrFctn.fNumeratorW);
92   if (fDenominatorW) delete fDenominatorW;
93   fDenominatorW = new TH3F(*aCorrFctn.fDenominatorW);
94   fUseLCMS = aCorrFctn.fUseLCMS;
95   return *this;
96 }
97
98 //_________________________
99 void AliFemtoCorrFctn3DLCMSSym::WriteOutHistos(){
100   // Write out all histograms to file
101   fNumerator->Write();
102   fDenominator->Write();
103   fNumeratorW->Write();
104   fDenominatorW->Write();
105 }
106 //______________________________
107 TList* AliFemtoCorrFctn3DLCMSSym::GetOutputList()
108 {
109   // Prepare the list of objects to be written to the output
110   TList *tOutputList = new TList();
111
112   tOutputList->Add(fNumerator);
113   tOutputList->Add(fDenominator);
114   tOutputList->Add(fNumeratorW);
115   tOutputList->Add(fDenominatorW);
116
117   return tOutputList;
118 }
119
120 //_________________________
121 void AliFemtoCorrFctn3DLCMSSym::Finish(){
122   // here is where we should normalize, fit, etc...
123
124 }
125
126 //____________________________
127 AliFemtoString AliFemtoCorrFctn3DLCMSSym::Report(){
128   // Construct the report
129   string stemp = "LCMS Frame Bertsch-Pratt 3D Correlation Function Report:\n";
130   char ctemp[100];
131   snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fNumerator->GetEntries());
132   stemp += ctemp;
133   snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDenominator->GetEntries());
134   stemp += ctemp;
135
136   if (fPairCut){
137     snprintf(ctemp , 100, "Here is the PairCut specific to this CorrFctn\n");
138     stemp += ctemp;
139     stemp += fPairCut->Report();
140   }
141   else{
142     snprintf(ctemp , 100, "No PairCut specific to this CorrFctn\n");
143     stemp += ctemp;
144   }
145
146   //
147   AliFemtoString returnThis = stemp;
148   return returnThis;
149 }
150 //____________________________
151 void AliFemtoCorrFctn3DLCMSSym::AddRealPair( AliFemtoPair* pair){
152   // perform operations on real pairs
153   if (fPairCut){
154     if (!(fPairCut->Pass(pair))) return;
155   }
156
157   if (fUseLCMS) {
158     fNumerator->Fill(pair->QOutCMS(),pair->QSideCMS(),pair->QLongCMS());
159     fNumeratorW->Fill(pair->QOutCMS(),pair->QSideCMS(),pair->QLongCMS(),pair->QInv());
160   }
161   else {
162     fNumerator->Fill(pair->QOutPf(),pair->QSidePf(),pair->QLongPf());
163     fNumeratorW->Fill(pair->QOutPf(),pair->QSidePf(),pair->QLongPf(),pair->QInv());
164   }
165 }
166 //____________________________
167 void AliFemtoCorrFctn3DLCMSSym::AddMixedPair( AliFemtoPair* pair){
168   // perform operations on mixed pairs
169   if (fPairCut){
170     if (!(fPairCut->Pass(pair))) return;
171   }
172
173   if (fUseLCMS) {
174     fDenominator->Fill(pair->QOutCMS(),pair->QSideCMS(),pair->QLongCMS(),1.0);
175     fDenominatorW->Fill(pair->QOutCMS(),pair->QSideCMS(),pair->QLongCMS(),pair->QInv());
176   }
177   else {
178     fDenominator->Fill(pair->QOutPf(),pair->QSidePf(),pair->QLongPf(),1.0);
179     fDenominatorW->Fill(pair->QOutPf(),pair->QSidePf(),pair->QLongPf(),pair->QInv());
180   }
181
182
183
184 }
185
186 void AliFemtoCorrFctn3DLCMSSym::SetUseLCMS(int aUseLCMS)
187 {
188   fUseLCMS = aUseLCMS;
189 }
190
191 int  AliFemtoCorrFctn3DLCMSSym::GetUseLCMS()
192 {
193   return fUseLCMS;
194 }