1 ////////////////////////////////////////////////////////////////////////////////
3 /// AliFemtoChi2CorrFctn - A correlation function that saves the correlation ///
4 /// function as a function of single track quality (chi2/ndof) for its and ///
6 /// Authors: Adam Kisiel kisiel@mps.ohio-state.edu ///
8 ////////////////////////////////////////////////////////////////////////////////
10 #include "AliFemtoChi2CorrFctn.h"
11 //#include "AliFemtoHisto.hh"
15 ClassImp(AliFemtoChi2CorrFctn)
18 //____________________________
19 AliFemtoChi2CorrFctn::AliFemtoChi2CorrFctn(char* title, const int& nbins, const float& QinvLo, const float& QinvHi):
21 fChi2ITSSUMNumerator(0),
22 fChi2ITSSUMDenominator(0),
23 fChi2TPCSUMNumerator(0),
24 fChi2TPCSUMDenominator(0),
25 fChi2ITSONENumerator(0),
26 fChi2ITSONEDenominator(0),
27 fChi2TPCONENumerator(0),
28 fChi2TPCONEDenominator(0),
29 fSigmaToVertexNumerator(0),
30 fSigmaToVertexDenominator(0)
33 char tTitNum[100] = "NumChi2ITSSUM";
34 strcat(tTitNum,title);
35 fChi2ITSSUMNumerator = new TH2D(tTitNum,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
37 char tTitDen[100] = "DenChi2ITSSUM";
38 strcat(tTitDen,title);
39 fChi2ITSSUMDenominator = new TH2D(tTitDen,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
42 char tTit2Num[100] = "NumChi2TPCSUM";
43 strcat(tTit2Num,title);
44 fChi2TPCSUMNumerator = new TH2D(tTit2Num,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
46 char tTit2Den[100] = "DenChi2TPCSUM";
47 strcat(tTit2Den,title);
48 fChi2TPCSUMDenominator = new TH2D(tTit2Den,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
50 // to enable error bar calculation...
51 fChi2ITSSUMNumerator->Sumw2();
52 fChi2ITSSUMDenominator->Sumw2();
54 fChi2TPCSUMNumerator->Sumw2();
55 fChi2TPCSUMDenominator->Sumw2();
57 sprintf(tTitNum,"%s%s","NumChi2ITSONE",title);
58 fChi2ITSONENumerator = new TH2D(tTitNum,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
60 sprintf(tTitDen,"%s%s", "DenChi2ITSONE", title);
61 fChi2ITSONEDenominator = new TH2D(tTitDen,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
64 sprintf(tTit2Num,"%s%s","NumChi2TPCONE",title);
65 fChi2TPCONENumerator = new TH2D(tTit2Num,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
67 sprintf(tTit2Den,"%s%s", "DenChi2TPCONE", title);
68 fChi2TPCONEDenominator = new TH2D(tTit2Den,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
71 sprintf(tTit2Num,"%s%s","NumSigmaToVertex",title);
72 fSigmaToVertexNumerator = new TH2D(tTit2Num,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
74 sprintf(tTit2Den,"%s%s", "DenSigmaToVertex", title);
75 fSigmaToVertexDenominator = new TH2D(tTit2Den,title,nbins,QinvLo,QinvHi,200,0.0,6.0);
77 // to enable error bar calculation...
78 fChi2ITSONENumerator->Sumw2();
79 fChi2ITSONEDenominator->Sumw2();
81 fChi2TPCONENumerator->Sumw2();
82 fChi2TPCONEDenominator->Sumw2();
85 //____________________________
86 AliFemtoChi2CorrFctn::AliFemtoChi2CorrFctn(const AliFemtoChi2CorrFctn& aCorrFctn) :
88 fChi2ITSSUMNumerator(0),
89 fChi2ITSSUMDenominator(0),
90 fChi2TPCSUMNumerator(0),
91 fChi2TPCSUMDenominator(0),
92 fChi2ITSONENumerator(0),
93 fChi2ITSONEDenominator(0),
94 fChi2TPCONENumerator(0),
95 fChi2TPCONEDenominator(0),
96 fSigmaToVertexNumerator(0),
97 fSigmaToVertexDenominator(0)
100 if (aCorrFctn.fChi2ITSSUMNumerator)
101 fChi2ITSSUMNumerator = new TH2D(*aCorrFctn.fChi2ITSSUMNumerator);
102 if (aCorrFctn.fChi2ITSSUMDenominator)
103 fChi2ITSSUMDenominator = new TH2D(*aCorrFctn.fChi2ITSSUMDenominator);
104 if (aCorrFctn.fChi2TPCSUMNumerator)
105 fChi2TPCSUMNumerator = new TH2D(*aCorrFctn.fChi2TPCSUMNumerator);
106 if (aCorrFctn.fChi2TPCSUMDenominator)
107 fChi2TPCSUMDenominator = new TH2D(*aCorrFctn.fChi2TPCSUMDenominator);
108 if (aCorrFctn.fChi2ITSONENumerator)
109 fChi2ITSONENumerator = new TH2D(*aCorrFctn.fChi2ITSONENumerator);
110 if (aCorrFctn.fChi2ITSONEDenominator)
111 fChi2ITSONEDenominator = new TH2D(*aCorrFctn.fChi2ITSONEDenominator);
112 if (aCorrFctn.fChi2TPCONENumerator)
113 fChi2TPCONENumerator = new TH2D(*aCorrFctn.fChi2TPCONENumerator);
114 if (aCorrFctn.fChi2TPCONEDenominator)
115 fChi2TPCONEDenominator = new TH2D(*aCorrFctn.fChi2TPCONEDenominator);
116 if (aCorrFctn.fSigmaToVertexNumerator)
117 fSigmaToVertexNumerator = new TH2D(*aCorrFctn.fSigmaToVertexNumerator);
118 if (aCorrFctn.fSigmaToVertexDenominator)
119 fSigmaToVertexDenominator = new TH2D(*aCorrFctn.fSigmaToVertexDenominator);
121 //____________________________
122 AliFemtoChi2CorrFctn::~AliFemtoChi2CorrFctn(){
124 delete fChi2ITSSUMNumerator;
125 delete fChi2ITSSUMDenominator;
126 delete fChi2TPCSUMNumerator;
127 delete fChi2TPCSUMDenominator;
128 delete fChi2ITSONENumerator;
129 delete fChi2ITSONEDenominator;
130 delete fChi2TPCONENumerator;
131 delete fChi2TPCONEDenominator;
132 delete fSigmaToVertexNumerator;
133 delete fSigmaToVertexDenominator;
135 //_________________________
136 AliFemtoChi2CorrFctn& AliFemtoChi2CorrFctn::operator=(const AliFemtoChi2CorrFctn& aCorrFctn)
138 // assignment operator
139 if (this == &aCorrFctn)
142 if (aCorrFctn.fChi2ITSSUMNumerator)
143 fChi2ITSSUMNumerator = new TH2D(*aCorrFctn.fChi2ITSSUMNumerator);
145 fChi2ITSSUMNumerator = 0;
146 if (aCorrFctn.fChi2ITSSUMDenominator)
147 fChi2ITSSUMDenominator = new TH2D(*aCorrFctn.fChi2ITSSUMDenominator);
149 fChi2ITSSUMDenominator = 0;
150 if (aCorrFctn.fChi2TPCSUMNumerator)
151 fChi2TPCSUMNumerator = new TH2D(*aCorrFctn.fChi2TPCSUMNumerator);
153 fChi2TPCSUMNumerator = 0;
154 if (aCorrFctn.fChi2TPCSUMDenominator)
155 fChi2TPCSUMDenominator = new TH2D(*aCorrFctn.fChi2TPCSUMDenominator);
157 fChi2TPCSUMDenominator = 0;
158 if (aCorrFctn.fChi2ITSONENumerator)
159 fChi2ITSONENumerator = new TH2D(*aCorrFctn.fChi2ITSONENumerator);
161 fChi2ITSONENumerator = 0;
162 if (aCorrFctn.fChi2ITSONEDenominator)
163 fChi2ITSONEDenominator = new TH2D(*aCorrFctn.fChi2ITSONEDenominator);
165 fChi2ITSONEDenominator = 0;
166 if (aCorrFctn.fChi2TPCONENumerator)
167 fChi2TPCONENumerator = new TH2D(*aCorrFctn.fChi2TPCONENumerator);
169 fChi2TPCONENumerator = 0;
170 if (aCorrFctn.fChi2TPCONEDenominator)
171 fChi2TPCONEDenominator = new TH2D(*aCorrFctn.fChi2TPCONEDenominator);
173 fChi2TPCONEDenominator = 0;
174 if (aCorrFctn.fSigmaToVertexNumerator)
175 fSigmaToVertexNumerator = new TH2D(*aCorrFctn.fSigmaToVertexNumerator);
177 fSigmaToVertexNumerator = 0;
178 if (aCorrFctn.fSigmaToVertexDenominator)
179 fSigmaToVertexDenominator = new TH2D(*aCorrFctn.fSigmaToVertexDenominator);
181 fSigmaToVertexDenominator = 0;
185 //_________________________
186 void AliFemtoChi2CorrFctn::Finish(){
187 // here is where we should normalize, fit, etc...
188 // we should NOT Draw() the histos (as I had done it below),
189 // since we want to insulate ourselves from root at this level
190 // of the code. Do it instead at root command line with browser.
191 // mShareNumerator->Draw();
192 //mShareDenominator->Draw();
197 //____________________________
198 AliFemtoString AliFemtoChi2CorrFctn::Report(){
200 string stemp = "ITS and TPC quality Correlation Function Report:\n";
202 sprintf(ctemp,"Number of entries in numerator:\t%E\n",fChi2ITSSUMNumerator->GetEntries());
204 sprintf(ctemp,"Number of entries in denominator:\t%E\n",fChi2ITSSUMDenominator->GetEntries());
206 // stemp += mCoulombWeight->Report();
207 AliFemtoString returnThis = stemp;
210 //____________________________
211 void AliFemtoChi2CorrFctn::AddRealPair( AliFemtoPair* pair){
212 // add real (effect) pair
213 double tQinv = fabs(pair->QInv()); // note - qInv() will be negative for identical pairs...
215 fChi2ITSSUMNumerator->Fill(tQinv,
216 (pair->Track1()->Track()->ITSchi2() +
217 pair->Track2()->Track()->ITSchi2())/
218 (pair->Track1()->Track()->ITSncls() +
219 pair->Track2()->Track()->ITSncls()));
220 fChi2TPCSUMNumerator->Fill(tQinv,
221 (pair->Track1()->Track()->TPCchi2() +
222 pair->Track2()->Track()->TPCchi2())/
223 (pair->Track1()->Track()->TPCncls() +
224 pair->Track2()->Track()->TPCncls()));
225 if ((pair->Track1()->Track()->ITSchi2()/pair->Track1()->Track()->ITSncls()) > (pair->Track2()->Track()->ITSchi2()/pair->Track2()->Track()->ITSncls())) {
226 fChi2ITSONENumerator->Fill(tQinv,
227 (pair->Track1()->Track()->ITSchi2()/
228 pair->Track1()->Track()->ITSncls()));
231 fChi2ITSONENumerator->Fill(tQinv,
232 (pair->Track2()->Track()->ITSchi2()/
233 pair->Track2()->Track()->ITSncls()));
235 if ((pair->Track1()->Track()->TPCchi2()/pair->Track1()->Track()->TPCncls()) > (pair->Track2()->Track()->TPCchi2()/pair->Track2()->Track()->TPCncls())) {
236 fChi2TPCONENumerator->Fill(tQinv,
237 (pair->Track1()->Track()->TPCchi2()/
238 pair->Track1()->Track()->TPCncls()));
241 fChi2TPCONENumerator->Fill(tQinv,
242 (pair->Track2()->Track()->TPCchi2()/
243 pair->Track2()->Track()->TPCncls()));
245 if (pair->Track1()->Track()->SigmaToVertex() > pair->Track2()->Track()->SigmaToVertex()) {
246 fSigmaToVertexNumerator->Fill(tQinv,
247 pair->Track1()->Track()->SigmaToVertex());
250 fSigmaToVertexNumerator->Fill(tQinv,
251 pair->Track2()->Track()->SigmaToVertex());
254 //____________________________
255 void AliFemtoChi2CorrFctn::AddMixedPair( AliFemtoPair* pair){
256 // add mixed (background) pair
257 double tQinv = fabs(pair->QInv()); // note - qInv() will be negative for identical pairs...
259 fChi2ITSSUMDenominator->Fill(tQinv,
260 (pair->Track1()->Track()->ITSchi2() +
261 pair->Track2()->Track()->ITSchi2())/
262 (pair->Track1()->Track()->ITSncls() +
263 pair->Track2()->Track()->ITSncls()));
264 fChi2TPCSUMDenominator->Fill(tQinv,
265 (pair->Track1()->Track()->TPCchi2() +
266 pair->Track2()->Track()->TPCchi2())/
267 (pair->Track1()->Track()->TPCncls() +
268 pair->Track2()->Track()->TPCncls()));
269 if ((pair->Track1()->Track()->ITSchi2()/pair->Track1()->Track()->ITSncls()) > (pair->Track2()->Track()->ITSchi2()/pair->Track2()->Track()->ITSncls())) {
270 fChi2ITSONEDenominator->Fill(tQinv,
271 (pair->Track1()->Track()->ITSchi2()/
272 pair->Track1()->Track()->ITSncls()));
275 fChi2ITSONEDenominator->Fill(tQinv,
276 (pair->Track2()->Track()->ITSchi2()/
277 pair->Track2()->Track()->ITSncls()));
279 if ((pair->Track1()->Track()->TPCchi2()/pair->Track1()->Track()->TPCncls()) > (pair->Track2()->Track()->TPCchi2()/pair->Track2()->Track()->TPCncls())) {
280 fChi2TPCONEDenominator->Fill(tQinv,
281 (pair->Track1()->Track()->TPCchi2()/
282 pair->Track1()->Track()->TPCncls()));
285 fChi2TPCONEDenominator->Fill(tQinv,
286 (pair->Track2()->Track()->TPCchi2()/
287 pair->Track2()->Track()->TPCncls()));
289 if (pair->Track1()->Track()->SigmaToVertex() > pair->Track2()->Track()->SigmaToVertex()) {
290 fSigmaToVertexDenominator->Fill(tQinv,
291 pair->Track1()->Track()->SigmaToVertex());
294 fSigmaToVertexDenominator->Fill(tQinv,
295 pair->Track2()->Track()->SigmaToVertex());
300 void AliFemtoChi2CorrFctn::WriteHistos()
302 // Write out result histograms
303 fChi2ITSSUMNumerator->Write();
304 fChi2ITSSUMDenominator->Write();
305 fChi2TPCSUMNumerator->Write();
306 fChi2TPCSUMDenominator->Write();
307 fChi2ITSONENumerator->Write();
308 fChi2ITSONEDenominator->Write();
309 fChi2TPCONENumerator->Write();
310 fChi2TPCONEDenominator->Write();
311 fSigmaToVertexNumerator->Write();
312 fSigmaToVertexDenominator->Write();
316 TList* AliFemtoChi2CorrFctn::GetOutputList()
318 // Prepare the list of objects to be written to the output
319 TList *tOutputList = new TList();
321 tOutputList->Add(fChi2ITSSUMNumerator);
322 tOutputList->Add(fChi2ITSSUMDenominator);
323 tOutputList->Add(fChi2TPCSUMNumerator);
324 tOutputList->Add(fChi2TPCSUMDenominator);
325 tOutputList->Add(fChi2ITSONENumerator);
326 tOutputList->Add(fChi2ITSONEDenominator);
327 tOutputList->Add(fChi2TPCONENumerator);
328 tOutputList->Add(fChi2TPCONEDenominator);
329 tOutputList->Add(fSigmaToVertexNumerator);
330 tOutputList->Add(fSigmaToVertexDenominator);