]>
Commit | Line | Data |
---|---|---|
6c178944 | 1 | /************************************************************************** |
2 | * Author: Panos Christakoglou. * | |
3 | * Contributors are mentioned in the code where appropriate. * | |
4 | * * | |
5 | * Permission to use, copy, modify and distribute this software and its * | |
6 | * documentation strictly for non-commercial purposes is hereby granted * | |
7 | * without fee, provided that the above copyright notice appears in all * | |
8 | * copies and that both the copyright notice and this permission notice * | |
9 | * appear in the supporting documentation. The authors make no claims * | |
10 | * about the suitability of this software for any purpose. It is * | |
11 | * provided "as is" without express or implied warranty. * | |
12 | **************************************************************************/ | |
13 | ||
14 | /* $Id$ */ | |
15 | ||
16 | //----------------------------------------------------------------- | |
17 | // Balance Function class | |
18 | // This is the class to deal with the Balance Function analysis | |
19 | // Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch | |
20 | //----------------------------------------------------------------- | |
21 | ||
22 | ||
23 | //ROOT | |
24 | #include <Riostream.h> | |
25 | #include <TMath.h> | |
d560b581 | 26 | #include <TAxis.h> |
74b04dd4 | 27 | #include <TH2D.h> |
6c178944 | 28 | #include <TLorentzVector.h> |
5c33329d | 29 | #include <TObjArray.h> |
6c178944 | 30 | #include <TGraphErrors.h> |
9d1f0df5 | 31 | #include <TString.h> |
6c178944 | 32 | |
cd54a838 | 33 | #include "AliVParticle.h" |
34 | #include "AliMCParticle.h" | |
5c33329d | 35 | #include "AliESDtrack.h" |
cd54a838 | 36 | #include "AliAODTrack.h" |
37 | ||
6c178944 | 38 | #include "AliBalance.h" |
39 | ||
40 | ClassImp(AliBalance) | |
41 | ||
7f0257ea | 42 | //____________________________________________________________________// |
5d534bd4 | 43 | AliBalance::AliBalance() : |
44 | TObject(), | |
6432ac6a | 45 | bShuffle(kFALSE), |
3feee083 | 46 | fAnalysisLevel("ESD"), |
6a3f819e | 47 | fAnalyzedEvents(0) , |
74b04dd4 | 48 | fCentralityId(0) , |
49 | fCentStart(0.), | |
50 | fCentStop(0.) | |
51 | { | |
6c178944 | 52 | // Default constructor |
3feee083 | 53 | |
b966652f | 54 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
55 | if(i == 6) { | |
56 | fNumberOfBins[i] = 180; | |
6432ac6a | 57 | fP1Start[i] = -360.0; |
b966652f | 58 | fP1Stop[i] = 360.0; |
59 | fP2Start[i] = -360.0; | |
60 | fP2Stop[i] = 360.0; | |
61 | fP2Step[i] = 0.1; | |
62 | } | |
63 | else { | |
64 | fNumberOfBins[i] = 20; | |
65 | fP1Start[i] = -1.0; | |
66 | fP1Stop[i] = 1.0; | |
67 | fP2Start[i] = 0.0; | |
68 | fP2Stop[i] = 2.0; | |
69 | } | |
70 | fP2Step[i] = TMath::Abs(fP2Start - fP2Stop) / (Double_t)fNumberOfBins[i]; | |
74b04dd4 | 71 | fCentStart = 0.; |
72 | fCentStop = 0.; | |
73 | ||
b966652f | 74 | fNn[i] = 0.0; |
75 | fNp[i] = 0.0; | |
3feee083 | 76 | |
77 | for(Int_t j = 0; j < MAXIMUM_NUMBER_OF_STEPS; j++) { | |
78 | fNpp[i][j] = .0; | |
79 | fNnn[i][j] = .0; | |
80 | fNpn[i][j] = .0; | |
6432ac6a | 81 | fNnp[i][j] = .0; |
3feee083 | 82 | fB[i][j] = 0.0; |
83 | ferror[i][j] = 0.0; | |
6432ac6a | 84 | } |
b966652f | 85 | |
6432ac6a | 86 | fHistP[i] = NULL; |
87 | fHistN[i] = NULL; | |
88 | fHistPP[i] = NULL; | |
89 | fHistPN[i] = NULL; | |
90 | fHistNP[i] = NULL; | |
91 | fHistNN[i] = NULL; | |
b966652f | 92 | |
93 | } | |
6c178944 | 94 | } |
95 | ||
6c178944 | 96 | |
7f0257ea | 97 | //____________________________________________________________________// |
98 | AliBalance::AliBalance(const AliBalance& balance): | |
6a3f819e | 99 | TObject(balance), bShuffle(balance.bShuffle), |
100 | fAnalysisLevel(balance.fAnalysisLevel), | |
101 | fAnalyzedEvents(balance.fAnalyzedEvents), | |
74b04dd4 | 102 | fCentralityId(balance.fCentralityId), |
103 | fCentStart(balance.fCentStart), | |
104 | fCentStop(balance.fCentStop) { | |
7f0257ea | 105 | //copy constructor |
b966652f | 106 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
107 | fNn[i] = balance.fNn[i]; | |
108 | fNp[i] = balance.fNp[i]; | |
3feee083 | 109 | |
b966652f | 110 | fP1Start[i] = balance.fP1Start[i]; |
111 | fP1Stop[i] = balance.fP1Stop[i]; | |
3feee083 | 112 | fNumberOfBins[i] = balance.fNumberOfBins[i]; |
113 | fP2Start[i] = balance.fP2Start[i]; | |
114 | fP2Stop[i] = balance.fP2Stop[i]; | |
115 | fP2Step[i] = balance.fP2Step[i]; | |
74b04dd4 | 116 | fCentStart = balance.fCentStart; |
117 | fCentStop = balance.fCentStop; | |
3feee083 | 118 | |
b966652f | 119 | fHistP[i] = balance.fHistP[i]; |
120 | fHistN[i] = balance.fHistN[i]; | |
121 | fHistPN[i] = balance.fHistPN[i]; | |
122 | fHistNP[i] = balance.fHistNP[i]; | |
123 | fHistPP[i] = balance.fHistPP[i]; | |
124 | fHistNN[i] = balance.fHistNN[i]; | |
125 | ||
3feee083 | 126 | for(Int_t j = 0; j < MAXIMUM_NUMBER_OF_STEPS; j++) { |
127 | fNpp[i][j] = .0; | |
128 | fNnn[i][j] = .0; | |
129 | fNpn[i][j] = .0; | |
6432ac6a | 130 | fNnp[i][j] = .0; |
3feee083 | 131 | fB[i][j] = 0.0; |
132 | ferror[i][j] = 0.0; | |
133 | } | |
134 | } | |
135 | } | |
136 | ||
7f0257ea | 137 | |
138 | //____________________________________________________________________// | |
139 | AliBalance::~AliBalance() { | |
6c178944 | 140 | // Destructor |
6c178944 | 141 | |
6432ac6a | 142 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
143 | ||
144 | delete fHistP[i]; | |
145 | delete fHistN[i]; | |
146 | delete fHistPN[i]; | |
147 | delete fHistNP[i]; | |
148 | delete fHistPP[i]; | |
149 | delete fHistNN[i]; | |
150 | ||
151 | } | |
7f0257ea | 152 | } |
153 | ||
7f0257ea | 154 | //____________________________________________________________________// |
6432ac6a | 155 | void AliBalance::SetInterval(Int_t iAnalysisType, |
156 | Double_t p1Start, Double_t p1Stop, | |
157 | Int_t ibins, Double_t p2Start, Double_t p2Stop) { | |
6c178944 | 158 | // Sets the analyzed interval. |
3feee083 | 159 | // Set the same Information for all analyses |
6432ac6a | 160 | |
161 | if(iAnalysisType == -1){ | |
b966652f | 162 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
163 | fP1Start[i] = p1Start; | |
164 | fP1Stop[i] = p1Stop; | |
6432ac6a | 165 | fNumberOfBins[i] = ibins; |
3feee083 | 166 | fP2Start[i] = p2Start; |
167 | fP2Stop[i] = p2Stop; | |
168 | fP2Step[i] = TMath::Abs(p2Start - p2Stop) / (Double_t)fNumberOfBins[i]; | |
169 | } | |
7f0257ea | 170 | } |
3feee083 | 171 | // Set the Information for one analysis |
6432ac6a | 172 | else if((iAnalysisType > -1) && (iAnalysisType < ANALYSIS_TYPES)) { |
173 | fP1Start[iAnalysisType] = p1Start; | |
174 | fP1Stop[iAnalysisType] = p1Stop; | |
175 | fNumberOfBins[iAnalysisType] = ibins; | |
176 | fP2Start[iAnalysisType] = p2Start; | |
177 | fP2Stop[iAnalysisType] = p2Stop; | |
178 | fP2Step[iAnalysisType] = TMath::Abs(p2Start - p2Stop) / (Double_t)fNumberOfBins[iAnalysisType]; | |
7f0257ea | 179 | } |
6432ac6a | 180 | else { |
3feee083 | 181 | AliError("Wrong ANALYSIS number!"); |
7f0257ea | 182 | } |
6c178944 | 183 | } |
184 | ||
6432ac6a | 185 | //____________________________________________________________________// |
186 | void AliBalance::InitHistograms() { | |
6a3f819e | 187 | //Initialize the histograms |
6432ac6a | 188 | TString histName; |
189 | for(Int_t iAnalysisType = 0; iAnalysisType < ANALYSIS_TYPES; iAnalysisType++) { | |
6a3f819e | 190 | histName = "fHistP"; histName += gBFAnalysisType[iAnalysisType]; |
191 | if(bShuffle) histName.Append("_shuffle"); | |
192 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 193 | fHistP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,100,fP1Start[iAnalysisType],fP1Stop[iAnalysisType]); |
6a3f819e | 194 | |
195 | histName = "fHistN"; histName += gBFAnalysisType[iAnalysisType]; | |
196 | if(bShuffle) histName.Append("_shuffle"); | |
197 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 198 | fHistN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,100,fP1Start[iAnalysisType],fP1Stop[iAnalysisType]); |
6432ac6a | 199 | |
6a3f819e | 200 | histName = "fHistPN"; histName += gBFAnalysisType[iAnalysisType]; |
201 | if(bShuffle) histName.Append("_shuffle"); | |
202 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 203 | fHistPN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 204 | |
205 | histName = "fHistNP"; histName += gBFAnalysisType[iAnalysisType]; | |
206 | if(bShuffle) histName.Append("_shuffle"); | |
207 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 208 | fHistNP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 209 | |
210 | histName = "fHistPP"; histName += gBFAnalysisType[iAnalysisType]; | |
211 | if(bShuffle) histName.Append("_shuffle"); | |
212 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 213 | fHistPP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 214 | |
215 | histName = "fHistNN"; histName += gBFAnalysisType[iAnalysisType]; | |
216 | if(bShuffle) histName.Append("_shuffle"); | |
217 | if(fCentralityId) histName += fCentralityId.Data(); | |
74b04dd4 | 218 | fHistNN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6432ac6a | 219 | } |
220 | } | |
3feee083 | 221 | |
898d5b28 | 222 | //____________________________________________________________________// |
09bb7bf4 | 223 | void AliBalance::PrintAnalysisSettings() { |
09bb7bf4 | 224 | |
225 | Printf("======================================"); | |
226 | Printf("Analysis level: %s",fAnalysisLevel.Data()); | |
3feee083 | 227 | Printf("======================================"); |
b966652f | 228 | for(Int_t ibin = 0; ibin < ANALYSIS_TYPES; ibin++){ |
3feee083 | 229 | Printf("Interval info for variable %d",ibin); |
230 | Printf("Analyzed interval (min.): %lf",fP2Start[ibin]); | |
231 | Printf("Analyzed interval (max.): %lf",fP2Stop[ibin]); | |
232 | Printf("Number of bins: %d",fNumberOfBins[ibin]); | |
233 | Printf("Step: %lf",fP2Step[ibin]); | |
234 | Printf(" "); | |
235 | } | |
09bb7bf4 | 236 | Printf("======================================"); |
898d5b28 | 237 | } |
238 | ||
7f0257ea | 239 | //____________________________________________________________________// |
74b04dd4 | 240 | void AliBalance::CalculateBalance(Float_t fCentrality,vector<Double_t> **chargeVector) { |
6c178944 | 241 | // Calculates the balance function |
242 | fAnalyzedEvents++; | |
243 | Int_t i = 0 , j = 0; | |
3feee083 | 244 | Int_t iBin = 0; |
5c33329d | 245 | |
6432ac6a | 246 | // Initialize histograms if not done yet |
247 | if(!fHistPN[0]){ | |
248 | AliWarning("Histograms not yet initialized! --> Will be done now"); | |
249 | AliWarning("This works only in local mode --> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); | |
250 | InitHistograms(); | |
251 | } | |
252 | ||
74b04dd4 | 253 | Int_t gNtrack = chargeVector[0]->size(); |
254 | //Printf("(AliBalance) Number of tracks: %d",gNtrack); | |
255 | ||
256 | for(i = 0; i < gNtrack;i++){ | |
74b04dd4 | 257 | Short_t charge = chargeVector[0]->at(i); |
258 | Double_t rapidity = chargeVector[1]->at(i); | |
259 | Double_t pseudorapidity = chargeVector[2]->at(i); | |
260 | Double_t phi = chargeVector[3]->at(i); | |
b966652f | 261 | |
262 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi | |
263 | for(Int_t iAnalysisType = 0; iAnalysisType < ANALYSIS_TYPES; iAnalysisType++) { | |
6432ac6a | 264 | if(iAnalysisType == kEta) { |
b966652f | 265 | if((pseudorapidity >= fP1Start[iAnalysisType]) && (pseudorapidity <= fP1Stop[iAnalysisType])) { |
266 | if(charge > 0) { | |
267 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 268 | fHistP[iAnalysisType]->Fill(fCentrality,pseudorapidity); |
b966652f | 269 | }//charge > 0 |
270 | if(charge < 0) { | |
271 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 272 | fHistN[iAnalysisType]->Fill(fCentrality,pseudorapidity); |
b966652f | 273 | }//charge < 0 |
274 | }//p1 interval check | |
275 | }//analysis type: eta | |
5d42ac40 | 276 | else if(iAnalysisType == kPhi) { |
b966652f | 277 | if((phi >= fP1Start[iAnalysisType]) && (phi <= fP1Stop[iAnalysisType])) { |
278 | if(charge > 0) { | |
279 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 280 | fHistP[iAnalysisType]->Fill(fCentrality,phi); |
b966652f | 281 | }//charge > 0 |
282 | if(charge < 0) { | |
283 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 284 | fHistN[iAnalysisType]->Fill(fCentrality,phi); |
b966652f | 285 | }//charge < 0 |
286 | }//p1 interval check | |
287 | }//analysis type: phi | |
288 | else { | |
289 | if((rapidity >= fP1Start[iAnalysisType]) && (rapidity <= fP1Stop[iAnalysisType])) { | |
290 | if(charge > 0) { | |
291 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 292 | fHistP[iAnalysisType]->Fill(fCentrality,rapidity); |
b966652f | 293 | }//charge > 0 |
294 | if(charge < 0) { | |
295 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 296 | fHistN[iAnalysisType]->Fill(fCentrality,rapidity); |
b966652f | 297 | }//charge < 0 |
298 | }//p1 interval check | |
299 | }//analysis type: y, qside, qout, qlong, qinv | |
300 | }//analysis type loop | |
7f0257ea | 301 | } |
74b04dd4 | 302 | |
32a4f715 | 303 | //Printf("Np: %lf - Nn: %lf",fNp[0],fNn[0]); |
6c178944 | 304 | |
b966652f | 305 | Double_t dy = 0., deta = 0.; |
306 | Double_t qLong = 0., qOut = 0., qSide = 0., qInv = 0.; | |
307 | Double_t dphi = 0.; | |
308 | ||
309 | Short_t charge1 = 0; | |
b966652f | 310 | Double_t eta1 = 0., rap1 = 0.; |
74b04dd4 | 311 | Double_t px1 = 0., py1 = 0., pz1 = 0.; |
312 | Double_t pt1 = 0.; | |
b966652f | 313 | Double_t energy1 = 0.; |
314 | Double_t phi1 = 0.; | |
315 | ||
316 | Short_t charge2 = 0; | |
b966652f | 317 | Double_t eta2 = 0., rap2 = 0.; |
74b04dd4 | 318 | Double_t px2 = 0., py2 = 0., pz2 = 0.; |
319 | Double_t pt2 = 0.; | |
b966652f | 320 | Double_t energy2 = 0.; |
321 | Double_t phi2 = 0.; | |
6c178944 | 322 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi |
3feee083 | 323 | for(i = 1; i < gNtrack; i++) { |
c511520f | 324 | |
74b04dd4 | 325 | charge1 = chargeVector[0]->at(i); |
326 | rap1 = chargeVector[1]->at(i); | |
327 | eta1 = chargeVector[2]->at(i); | |
328 | phi1 = chargeVector[3]->at(i); | |
329 | px1 = chargeVector[4]->at(i); | |
330 | py1 = chargeVector[5]->at(i); | |
331 | pz1 = chargeVector[6]->at(i); | |
332 | pt1 = chargeVector[7]->at(i); | |
333 | energy1 = chargeVector[8]->at(i); | |
3feee083 | 334 | |
335 | for(j = 0; j < i; j++) { | |
74b04dd4 | 336 | |
337 | charge2 = chargeVector[0]->at(j); | |
338 | rap2 = chargeVector[1]->at(j); | |
339 | eta2 = chargeVector[2]->at(j); | |
340 | phi2 = chargeVector[3]->at(j); | |
341 | px2 = chargeVector[4]->at(j); | |
342 | py2 = chargeVector[5]->at(j); | |
343 | pz2 = chargeVector[6]->at(j); | |
344 | pt2 = chargeVector[7]->at(i); | |
345 | energy2 = chargeVector[8]->at(j); | |
346 | ||
3feee083 | 347 | // filling the arrays |
348 | ||
349 | // RAPIDITY | |
74b04dd4 | 350 | dy = TMath::Abs(rap1 - rap2); |
b966652f | 351 | |
3feee083 | 352 | // Eta |
b966652f | 353 | deta = TMath::Abs(eta1 - eta2); |
3feee083 | 354 | |
b966652f | 355 | //qlong |
3feee083 | 356 | Double_t eTot = energy1 + energy2; |
74b04dd4 | 357 | Double_t pxTot = px1 + px2; |
358 | Double_t pyTot = py1 + py2; | |
359 | Double_t pzTot = pz1 + pz2; | |
3feee083 | 360 | Double_t q0Tot = energy1 - energy2; |
74b04dd4 | 361 | Double_t qxTot = px1 - px2; |
362 | Double_t qyTot = py1 - py2; | |
363 | Double_t qzTot = pz1 - pz2; | |
364 | ||
365 | Double_t eTot2 = eTot*eTot; | |
366 | Double_t pTot2 = pxTot*pxTot + pyTot*pyTot + pzTot*pzTot; | |
367 | Double_t pzTot2 = pzTot*pzTot; | |
368 | ||
369 | Double_t q0Tot2 = q0Tot*q0Tot; | |
370 | Double_t qTot2 = qxTot*qxTot + qyTot*qyTot + qzTot*qzTot; | |
371 | ||
372 | Double_t snn = eTot2 - pTot2; | |
373 | Double_t ptTot2 = pTot2 - pzTot2 ; | |
374 | Double_t ptTot = TMath::Sqrt( ptTot2 ); | |
3feee083 | 375 | |
74b04dd4 | 376 | qLong = TMath::Abs(eTot*qzTot - pzTot*q0Tot)/TMath::Sqrt(snn + ptTot2); |
b966652f | 377 | |
378 | //qout | |
74b04dd4 | 379 | qOut = TMath::Sqrt(snn/(snn + ptTot2)) * TMath::Abs(pxTot*qxTot + pyTot*qyTot)/ptTot; |
b966652f | 380 | |
381 | //qside | |
382 | qSide = TMath::Abs(pxTot*qyTot - pyTot*qxTot)/ptTot; | |
3feee083 | 383 | |
b966652f | 384 | //qinv |
74b04dd4 | 385 | qInv = TMath::Sqrt(TMath::Abs(-q0Tot2 + qTot2 )); |
b966652f | 386 | |
387 | //phi | |
6432ac6a | 388 | dphi = TMath::Abs(phi1 - phi2); |
4bd2c3ed | 389 | if(dphi>180) dphi = 360 - dphi; //dphi should be between 0 and 180! |
b966652f | 390 | |
391 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi | |
74b04dd4 | 392 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { |
393 | ||
394 | // rapidity | |
395 | if( dy > fP2Start[kRapidity] && dy < fP2Stop[kRapidity]){ | |
396 | iBin = Int_t((dy-fP2Start[kRapidity])/fP2Step[kRapidity]); | |
397 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
398 | ||
399 | if((charge1 > 0)&&(charge2 > 0)) { | |
400 | fNpp[kRapidity][iBin] += 1.; | |
401 | fHistPP[kRapidity]->Fill(fCentrality,dy); | |
402 | } | |
403 | else if((charge1 < 0)&&(charge2 < 0)) { | |
404 | fNnn[kRapidity][iBin] += 1.; | |
405 | fHistNN[kRapidity]->Fill(fCentrality,dy); | |
406 | } | |
407 | else if((charge1 > 0)&&(charge2 < 0)) { | |
408 | fNpn[kRapidity][iBin] += 1.; | |
409 | fHistPN[kRapidity]->Fill(fCentrality,dy); | |
410 | } | |
411 | else if((charge1 < 0)&&(charge2 > 0)) { | |
412 | fNpn[kRapidity][iBin] += 1.; | |
413 | fHistPN[kRapidity]->Fill(fCentrality,dy); | |
414 | } | |
415 | }//BF binning check | |
416 | }//p2 interval check | |
417 | }//p1 interval check | |
6432ac6a | 418 | |
74b04dd4 | 419 | // pseudorapidity |
420 | if((eta1 >= fP1Start[kEta]) && (eta1 <= fP1Stop[kEta]) && (eta2 >= fP1Start[kEta]) && (eta2 <= fP1Stop[kEta])) { | |
421 | if( deta > fP2Start[kEta] && deta < fP2Stop[kEta]){ | |
422 | iBin = Int_t((deta-fP2Start[kEta])/fP2Step[kEta]); | |
423 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
424 | if((charge1 > 0)&&(charge2 > 0)) { | |
425 | fNpp[kEta][iBin] += 1.; | |
426 | fHistPP[kEta]->Fill(fCentrality,deta); | |
427 | } | |
428 | if((charge1 < 0)&&(charge2 < 0)) { | |
429 | fNnn[kEta][iBin] += 1.; | |
430 | fHistNN[kEta]->Fill(fCentrality,deta); | |
431 | } | |
432 | if((charge1 > 0)&&(charge2 < 0)) { | |
433 | fNpn[kEta][iBin] += 1.; | |
434 | fHistPN[kEta]->Fill(fCentrality,deta); | |
435 | } | |
436 | if((charge1 < 0)&&(charge2 > 0)) { | |
437 | fNpn[kEta][iBin] += 1.; | |
438 | fHistPN[kEta]->Fill(fCentrality,deta); | |
439 | } | |
440 | }//BF binning check | |
441 | }//p2 interval check | |
442 | }//p1 interval check | |
b966652f | 443 | |
74b04dd4 | 444 | // Qlong, out, side, inv |
445 | // Check the p1 intervall for rapidity here (like for single tracks above) | |
446 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
447 | if( qLong > fP2Start[kQlong] && qLong < fP2Stop[kQlong]){ | |
448 | iBin = Int_t((qLong-fP2Start[kQlong])/fP2Step[kQlong]); | |
449 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
450 | if((charge1 > 0)&&(charge2 > 0)) { | |
451 | fNpp[kQlong][iBin] += 1.; | |
452 | fHistPP[kQlong]->Fill(fCentrality,qLong); | |
453 | } | |
454 | if((charge1 < 0)&&(charge2 < 0)) { | |
455 | fNnn[kQlong][iBin] += 1.; | |
456 | fHistNN[kQlong]->Fill(fCentrality,qLong); | |
457 | } | |
458 | if((charge1 > 0)&&(charge2 < 0)) { | |
459 | fNpn[kQlong][iBin] += 1.; | |
460 | fHistPN[kQlong]->Fill(fCentrality,qLong); | |
461 | } | |
462 | if((charge1 < 0)&&(charge2 > 0)) { | |
463 | fNpn[kQlong][iBin] += 1.; | |
464 | fHistPN[kQlong]->Fill(fCentrality,qLong); | |
465 | } | |
466 | }//BF binning check | |
467 | }//p2 interval check | |
468 | }//p1 interval check | |
6432ac6a | 469 | |
74b04dd4 | 470 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { |
471 | if( qOut > fP2Start[kQout] && qOut < fP2Stop[kQout]){ | |
472 | iBin = Int_t((qOut-fP2Start[kQout])/fP2Step[kQout]); | |
473 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
474 | if((charge1 > 0)&&(charge2 > 0)) { | |
475 | fNpp[kQout][iBin] += 1.; | |
476 | fHistPP[kQout]->Fill(fCentrality,qOut); | |
477 | } | |
478 | if((charge1 < 0)&&(charge2 < 0)) { | |
479 | fNnn[kQout][iBin] += 1.; | |
480 | fHistNN[kQout]->Fill(fCentrality,qOut); | |
481 | } | |
482 | if((charge1 > 0)&&(charge2 < 0)) { | |
483 | fNpn[kQout][iBin] += 1.; | |
484 | fHistPN[kQout]->Fill(fCentrality,qOut); | |
485 | } | |
486 | if((charge1 < 0)&&(charge2 > 0)) { | |
487 | fNpn[kQout][iBin] += 1.; | |
488 | fHistPN[kQout]->Fill(fCentrality,qOut); | |
489 | } | |
490 | }//BF binning check | |
491 | }//p2 interval check | |
492 | }//p1 interval check | |
493 | ||
494 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
495 | if( qSide > fP2Start[kQside] && qSide < fP2Stop[kQside]){ | |
496 | iBin = Int_t((qSide-fP2Start[kQside])/fP2Step[kQside]); | |
497 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
498 | if((charge1 > 0)&&(charge2 > 0)) { | |
499 | fNpp[kQside][iBin] += 1.; | |
500 | fHistPP[kQside]->Fill(fCentrality,qSide); | |
501 | } | |
502 | if((charge1 < 0)&&(charge2 < 0)) { | |
503 | fNnn[kQside][iBin] += 1.; | |
504 | fHistNN[kQside]->Fill(fCentrality,qSide); | |
505 | } | |
506 | if((charge1 > 0)&&(charge2 < 0)) { | |
507 | fNpn[kQside][iBin] += 1.; | |
508 | fHistPN[kQside]->Fill(fCentrality,qSide); | |
509 | } | |
510 | if((charge1 < 0)&&(charge2 > 0)) { | |
511 | fNpn[kQside][iBin] += 1.; | |
512 | fHistPN[kQside]->Fill(fCentrality,qSide); | |
513 | } | |
514 | }//BF binning check | |
515 | }//p2 interval check | |
516 | }//p1 interval check | |
517 | ||
518 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
519 | if( qInv > fP2Start[kQinv] && qInv < fP2Stop[kQinv]){ | |
520 | iBin = Int_t((qInv-fP2Start[kQinv])/fP2Step[kQinv]); | |
521 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
522 | if((charge1 > 0)&&(charge2 > 0)) { | |
523 | fNpp[kQinv][iBin] += 1.; | |
524 | fHistPP[kQinv]->Fill(fCentrality,qInv); | |
525 | } | |
526 | if((charge1 < 0)&&(charge2 < 0)) { | |
527 | fNnn[kQinv][iBin] += 1.; | |
528 | fHistNN[kQinv]->Fill(fCentrality,qInv); | |
529 | } | |
530 | if((charge1 > 0)&&(charge2 < 0)) { | |
531 | fNpn[kQinv][iBin] += 1.; | |
532 | fHistPN[kQinv]->Fill(fCentrality,qInv); | |
533 | } | |
534 | if((charge1 < 0)&&(charge2 > 0)) { | |
535 | fNpn[kQinv][iBin] += 1.; | |
536 | fHistPN[kQinv]->Fill(fCentrality,qInv); | |
537 | } | |
538 | }//BF binning check | |
539 | }//p2 interval check | |
540 | }//p1 interval check | |
541 | ||
542 | // Phi | |
543 | if((phi1 >= fP1Start[kPhi]) && (phi1 <= fP1Stop[kPhi]) && (phi2 >= fP1Start[kPhi]) && (phi2 <= fP1Stop[kPhi])) { | |
544 | if( dphi > fP2Start[kPhi] && dphi < fP2Stop[kPhi]){ | |
545 | iBin = Int_t((dphi-fP2Start[kPhi])/fP2Step[kPhi]); | |
546 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
547 | if((charge1 > 0)&&(charge2 > 0)) { | |
548 | fNpp[kPhi][iBin] += 1.; | |
549 | fHistPP[kPhi]->Fill(fCentrality,dphi); | |
550 | } | |
551 | if((charge1 < 0)&&(charge2 < 0)) { | |
552 | fNnn[kPhi][iBin] += 1.; | |
553 | fHistNN[kPhi]->Fill(fCentrality,dphi); | |
554 | } | |
555 | if((charge1 > 0)&&(charge2 < 0)) { | |
556 | fNpn[kPhi][iBin] += 1.; | |
557 | fHistPN[kPhi]->Fill(fCentrality,dphi); | |
558 | } | |
559 | if((charge1 < 0)&&(charge2 > 0)) { | |
560 | fNpn[kPhi][iBin] += 1.; | |
561 | fHistPN[kPhi]->Fill(fCentrality,dphi); | |
562 | } | |
563 | }//BF binning check | |
564 | }//p2 interval check | |
565 | }//p1 interval check | |
b966652f | 566 | }//end of 2nd particle loop |
567 | }//end of 1st particle loop | |
3feee083 | 568 | //Printf("Number of analyzed events: %i",fAnalyzedEvents); |
74b04dd4 | 569 | //Printf("DeltaEta NN[0] = %.0f, PP[0] = %.0f, NP[0] = %.0f, PN[0] = %.0f",fNnn[kEta][0],fNpp[kEta][0],fNnp[kEta][0],fNpn[kEta][0]); |
3feee083 | 570 | } |
1d8792e7 | 571 | |
1d8792e7 | 572 | |
7f0257ea | 573 | //____________________________________________________________________// |
33a86282 | 574 | Double_t AliBalance::GetBalance(Int_t iAnalysisType, Int_t p2) { |
6c178944 | 575 | // Returns the value of the balance function in bin p2 |
33a86282 | 576 | fB[iAnalysisType][p2] = 0.5*(((fNpn[iAnalysisType][p2] - 2.*fNnn[iAnalysisType][p2])/fNn[iAnalysisType]) + ((fNpn[iAnalysisType][p2] - 2.*fNpp[iAnalysisType][p2])/fNp[iAnalysisType]))/fP2Step[iAnalysisType]; |
7f0257ea | 577 | |
33a86282 | 578 | return fB[iAnalysisType][p2]; |
6c178944 | 579 | } |
580 | ||
7f0257ea | 581 | //____________________________________________________________________// |
33a86282 | 582 | Double_t AliBalance::GetError(Int_t iAnalysisType, Int_t p2) { |
6c178944 | 583 | // Returns the error on the BF value for bin p2 |
6432ac6a | 584 | // The errors for fNn and fNp are neglected here (0.1 % of total error) |
33a86282 | 585 | /*ferror[iAnalysisType][p2] = TMath::Sqrt(Double_t(fNpp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) |
586 | + Double_t(fNnn[iAnalysisType][p2])/(Double_t(fNn[iAnalysisType])*Double_t(fNn[iAnalysisType])) | |
587 | + Double_t(fNpn[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) | |
588 | + Double_t(fNnp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) | |
589 | //+ TMath::Power(fNpn[iAnalysisType][p2]-fNpp[iAnalysisType][p2],2)/TMath::Power(Double_t(fNp[iAnalysisType]),3) | |
590 | //+ TMath::Power(fNnp[iAnalysisType][p2]-fNnn[iAnalysisType][p2],2)/TMath::Power(Double_t(fNn[iAnalysisType]),3) | |
591 | ) /fP2Step[iAnalysisType];*/ | |
592 | ||
593 | ferror[iAnalysisType][p2] = TMath::Sqrt( Double_t(fNpp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) + | |
594 | Double_t(fNnn[iAnalysisType][p2])/(Double_t(fNn[iAnalysisType])*Double_t(fNn[iAnalysisType])) + | |
595 | Double_t(fNpn[iAnalysisType][p2])*TMath::Power((0.5/Double_t(fNp[iAnalysisType]) + 0.5/Double_t(fNn[iAnalysisType])),2))/fP2Step[iAnalysisType]; | |
6432ac6a | 596 | |
33a86282 | 597 | return ferror[iAnalysisType][p2]; |
6c178944 | 598 | } |
6432ac6a | 599 | //____________________________________________________________________// |
33a86282 | 600 | TGraphErrors *AliBalance::DrawBalance(Int_t iAnalysisType) { |
6432ac6a | 601 | |
602 | // Draws the BF | |
603 | Double_t x[MAXIMUM_NUMBER_OF_STEPS]; | |
604 | Double_t xer[MAXIMUM_NUMBER_OF_STEPS]; | |
605 | Double_t b[MAXIMUM_NUMBER_OF_STEPS]; | |
606 | Double_t ber[MAXIMUM_NUMBER_OF_STEPS]; | |
607 | ||
33a86282 | 608 | if((fNp[iAnalysisType] == 0)||(fNn[iAnalysisType] == 0)) { |
6432ac6a | 609 | cerr<<"Couldn't find any particles in the analyzed interval!!!"<<endl; |
610 | return NULL; | |
611 | } | |
612 | ||
33a86282 | 613 | for(Int_t i = 0; i < fNumberOfBins[iAnalysisType]; i++) { |
614 | b[i] = GetBalance(iAnalysisType,i); | |
615 | ber[i] = GetError(iAnalysisType,i); | |
616 | x[i] = fP2Start[iAnalysisType] + fP2Step[iAnalysisType]*i + fP2Step[iAnalysisType]/2; | |
6432ac6a | 617 | xer[i] = 0.0; |
618 | } | |
619 | ||
33a86282 | 620 | TGraphErrors *gr = new TGraphErrors(fNumberOfBins[iAnalysisType],x,b,xer,ber); |
6432ac6a | 621 | gr->GetXaxis()->SetTitleColor(1); |
33a86282 | 622 | if(iAnalysisType==0) { |
6432ac6a | 623 | gr->SetTitle("Balance function B(#Delta y)"); |
624 | gr->GetXaxis()->SetTitle("#Delta y"); | |
625 | gr->GetYaxis()->SetTitle("B(#Delta y)"); | |
626 | } | |
33a86282 | 627 | if(iAnalysisType==1) { |
6432ac6a | 628 | gr->SetTitle("Balance function B(#Delta #eta)"); |
629 | gr->GetXaxis()->SetTitle("#Delta #eta"); | |
630 | gr->GetYaxis()->SetTitle("B(#Delta #eta)"); | |
631 | } | |
33a86282 | 632 | if(iAnalysisType==2) { |
6432ac6a | 633 | gr->SetTitle("Balance function B(q_{long})"); |
634 | gr->GetXaxis()->SetTitle("q_{long} (GeV/c)"); | |
635 | gr->GetYaxis()->SetTitle("B(q_{long}) ((GeV/c)^{-1})"); | |
636 | } | |
33a86282 | 637 | if(iAnalysisType==3) { |
6432ac6a | 638 | gr->SetTitle("Balance function B(q_{out})"); |
639 | gr->GetXaxis()->SetTitle("q_{out} (GeV/c)"); | |
640 | gr->GetYaxis()->SetTitle("B(q_{out}) ((GeV/c)^{-1})"); | |
641 | } | |
33a86282 | 642 | if(iAnalysisType==4) { |
6432ac6a | 643 | gr->SetTitle("Balance function B(q_{side})"); |
644 | gr->GetXaxis()->SetTitle("q_{side} (GeV/c)"); | |
645 | gr->GetYaxis()->SetTitle("B(q_{side}) ((GeV/c)^{-1})"); | |
646 | } | |
33a86282 | 647 | if(iAnalysisType==5) { |
6432ac6a | 648 | gr->SetTitle("Balance function B(q_{inv})"); |
649 | gr->GetXaxis()->SetTitle("q_{inv} (GeV/c)"); | |
650 | gr->GetYaxis()->SetTitle("B(q_{inv}) ((GeV/c)^{-1})"); | |
651 | } | |
33a86282 | 652 | if(iAnalysisType==6) { |
6432ac6a | 653 | gr->SetTitle("Balance function B(#Delta #phi)"); |
654 | gr->GetXaxis()->SetTitle("#Delta #phi"); | |
655 | gr->GetYaxis()->SetTitle("B(#Delta #phi)"); | |
656 | } | |
33a86282 | 657 | |
658 | return gr; | |
6432ac6a | 659 | } |
6c178944 | 660 | |
6432ac6a | 661 | //____________________________________________________________________// |
662 | void AliBalance::PrintResults(Int_t iAnalysisType, TH1D *gHistBalance) { | |
663 | //Prints the calculated width of the BF and its error | |
664 | Double_t x[MAXIMUM_NUMBER_OF_STEPS]; | |
665 | Double_t gSumXi = 0.0, gSumBi = 0.0, gSumBiXi = 0.0; | |
666 | Double_t gSumBiXi2 = 0.0, gSumBi2Xi2 = 0.0; | |
667 | Double_t gSumDeltaBi2 = 0.0, gSumXi2DeltaBi2 = 0.0; | |
668 | Double_t deltaBalP2 = 0.0, integral = 0.0; | |
669 | Double_t deltaErrorNew = 0.0; | |
670 | ||
671 | cout<<"=================================================="<<endl; | |
672 | for(Int_t i = 1; i <= fNumberOfBins[iAnalysisType]; i++) { | |
673 | x[i-1] = fP2Start[iAnalysisType] + fP2Step[iAnalysisType]*i + fP2Step[iAnalysisType]/2; | |
7ef516b2 | 674 | //cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<gHistBalance->GetBinCenter(i)<<endl; |
6432ac6a | 675 | } |
7ef516b2 | 676 | //cout<<"=================================================="<<endl; |
6432ac6a | 677 | for(Int_t i = 2; i <= fNumberOfBins[iAnalysisType]; i++) { |
678 | gSumXi += gHistBalance->GetBinCenter(i); | |
33a86282 | 679 | gSumBi += gHistBalance->GetBinContent(i); |
680 | gSumBiXi += gHistBalance->GetBinContent(i)*gHistBalance->GetBinCenter(i); | |
681 | gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(gHistBalance->GetBinCenter(i),2); | |
682 | gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(gHistBalance->GetBinCenter(i),2); | |
683 | gSumDeltaBi2 += TMath::Power(gHistBalance->GetBinError(i),2); | |
684 | gSumXi2DeltaBi2 += TMath::Power(gHistBalance->GetBinCenter(i),2) * TMath::Power(gHistBalance->GetBinError(i),2); | |
6432ac6a | 685 | |
33a86282 | 686 | deltaBalP2 += fP2Step[iAnalysisType]*TMath::Power(gHistBalance->GetBinError(i),2); |
687 | integral += fP2Step[iAnalysisType]*gHistBalance->GetBinContent(i); | |
688 | } | |
689 | for(Int_t i = 1; i < fNumberOfBins[iAnalysisType]; i++) | |
690 | deltaErrorNew += gHistBalance->GetBinError(i)*(gHistBalance->GetBinCenter(i)*gSumBi - gSumBiXi)/TMath::Power(gSumBi,2); | |
691 | ||
692 | Double_t integralError = TMath::Sqrt(deltaBalP2); | |
693 | ||
694 | Double_t delta = gSumBiXi / gSumBi; | |
695 | Double_t deltaError = (gSumBiXi / gSumBi) * TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumXi2DeltaBi2)/gSumBiXi),2) + TMath::Power((gSumDeltaBi2/gSumBi),2) ); | |
7ef516b2 | 696 | cout<<"Analysis type: "<<gBFAnalysisType[iAnalysisType].Data()<<endl; |
33a86282 | 697 | cout<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl; |
698 | cout<<"New error: "<<deltaErrorNew<<endl; | |
699 | cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl; | |
700 | cout<<"=================================================="<<endl; | |
6432ac6a | 701 | } |
702 | ||
703 | //____________________________________________________________________// | |
74b04dd4 | 704 | TH1D *AliBalance::GetBalanceFunctionHistogram(Int_t iAnalysisType,Double_t centrMin, Double_t centrMax) { |
705 | //Returns the BF histogram, extracted from the 6 TH2D objects | |
6432ac6a | 706 | //(private members) of the AliBalance class. |
707 | TString gAnalysisType[ANALYSIS_TYPES] = {"y","eta","qlong","qout","qside","qinv","phi"}; | |
708 | TString histName = "gHistBalanceFunctionHistogram"; | |
709 | histName += gAnalysisType[iAnalysisType]; | |
710 | ||
74b04dd4 | 711 | SetInterval(iAnalysisType, fHistP[iAnalysisType]->GetYaxis()->GetXmin(), |
712 | fHistP[iAnalysisType]->GetYaxis()->GetXmin(), | |
713 | fHistPP[iAnalysisType]->GetNbinsY(), | |
714 | fHistPP[iAnalysisType]->GetYaxis()->GetXmin(), | |
715 | fHistPP[iAnalysisType]->GetYaxis()->GetXmax()); | |
716 | ||
717 | // determine the projection thresholds | |
718 | Int_t binMinX, binMinY, binMinZ; | |
719 | Int_t binMaxX, binMaxY, binMaxZ; | |
720 | ||
721 | fHistPP[iAnalysisType]->GetBinXYZ(fHistPP[iAnalysisType]->FindBin(centrMin),binMinX,binMinY,binMinZ); | |
722 | fHistPP[iAnalysisType]->GetBinXYZ(fHistPP[iAnalysisType]->FindBin(centrMax),binMaxX,binMaxY,binMaxZ); | |
6432ac6a | 723 | |
74b04dd4 | 724 | TH1D *gHistBalanceFunctionHistogram = new TH1D(histName.Data(),"",fHistPP[iAnalysisType]->GetNbinsY(),fHistPP[iAnalysisType]->GetYaxis()->GetXmin(),fHistPP[iAnalysisType]->GetYaxis()->GetXmax()); |
6432ac6a | 725 | switch(iAnalysisType) { |
726 | case kRapidity: | |
727 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta y"); | |
728 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta y)"); | |
729 | break; | |
730 | case kEta: | |
731 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta #eta"); | |
732 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta #eta)"); | |
733 | break; | |
734 | case kQlong: | |
735 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{long} (GeV/c)"); | |
736 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{long})"); | |
737 | break; | |
738 | case kQout: | |
739 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{out} (GeV/c)"); | |
740 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{out})"); | |
741 | break; | |
742 | case kQside: | |
743 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{side} (GeV/c)"); | |
744 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{side})"); | |
745 | break; | |
746 | case kQinv: | |
747 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{inv} (GeV/c)"); | |
748 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{inv})"); | |
749 | break; | |
750 | case kPhi: | |
751 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta #phi (deg.)"); | |
752 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta #phi)"); | |
753 | break; | |
754 | default: | |
755 | break; | |
756 | } | |
74b04dd4 | 757 | |
758 | TH1D *hTemp1 = dynamic_cast<TH1D *>(fHistPN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistPN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
759 | TH1D *hTemp2 = dynamic_cast<TH1D *>(fHistPN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f_copy",fHistPN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
760 | TH1D *hTemp3 = dynamic_cast<TH1D *>(fHistNN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistNN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
761 | TH1D *hTemp4 = dynamic_cast<TH1D *>(fHistPP[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistPP[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
762 | TH1D *hTemp5 = dynamic_cast<TH1D *>(fHistN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
763 | TH1D *hTemp6 = dynamic_cast<TH1D *>(fHistP[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistP[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
33a86282 | 764 | |
765 | if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)) { | |
766 | hTemp1->Sumw2(); | |
767 | hTemp2->Sumw2(); | |
768 | hTemp3->Sumw2(); | |
769 | hTemp4->Sumw2(); | |
770 | hTemp1->Add(hTemp3,-2.); | |
74b04dd4 | 771 | hTemp1->Scale(1./hTemp5->GetEntries()); |
33a86282 | 772 | hTemp2->Add(hTemp4,-2.); |
74b04dd4 | 773 | hTemp2->Scale(1./hTemp6->GetEntries()); |
33a86282 | 774 | gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.); |
775 | gHistBalanceFunctionHistogram->Scale(0.5/fP2Step[iAnalysisType]); | |
776 | } | |
6432ac6a | 777 | |
778 | PrintResults(iAnalysisType,gHistBalanceFunctionHistogram); | |
898d5b28 | 779 | |
6432ac6a | 780 | return gHistBalanceFunctionHistogram; |
781 | } |