]>
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> |
1c8a00af | 27 | #include <TFile.h> |
b840442a | 28 | #include <TF1.h> |
74b04dd4 | 29 | #include <TH2D.h> |
6c178944 | 30 | #include <TLorentzVector.h> |
5c33329d | 31 | #include <TObjArray.h> |
6c178944 | 32 | #include <TGraphErrors.h> |
9d1f0df5 | 33 | #include <TString.h> |
6c178944 | 34 | |
cd54a838 | 35 | #include "AliVParticle.h" |
36 | #include "AliMCParticle.h" | |
5c33329d | 37 | #include "AliESDtrack.h" |
cd54a838 | 38 | #include "AliAODTrack.h" |
39 | ||
6c178944 | 40 | #include "AliBalance.h" |
41 | ||
c64cb1f6 | 42 | using std::cout; |
43 | using std::cerr; | |
44 | using std::endl; | |
45 | ||
6c178944 | 46 | ClassImp(AliBalance) |
47 | ||
7f0257ea | 48 | //____________________________________________________________________// |
5d534bd4 | 49 | AliBalance::AliBalance() : |
50 | TObject(), | |
9fd4b54e | 51 | fShuffle(kFALSE), |
52 | fHBTcut(kFALSE), | |
53 | fConversionCut(kFALSE), | |
3feee083 | 54 | fAnalysisLevel("ESD"), |
6a3f819e | 55 | fAnalyzedEvents(0) , |
74b04dd4 | 56 | fCentralityId(0) , |
57 | fCentStart(0.), | |
47e040b5 | 58 | fCentStop(0.), |
59 | fHistHBTbefore(NULL), | |
60 | fHistHBTafter(NULL), | |
61 | fHistConversionbefore(NULL), | |
62 | fHistConversionafter(NULL) | |
74b04dd4 | 63 | { |
6c178944 | 64 | // Default constructor |
3feee083 | 65 | |
b966652f | 66 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
67 | if(i == 6) { | |
68 | fNumberOfBins[i] = 180; | |
6432ac6a | 69 | fP1Start[i] = -360.0; |
b966652f | 70 | fP1Stop[i] = 360.0; |
71 | fP2Start[i] = -360.0; | |
72 | fP2Stop[i] = 360.0; | |
73 | fP2Step[i] = 0.1; | |
74 | } | |
75 | else { | |
76 | fNumberOfBins[i] = 20; | |
77 | fP1Start[i] = -1.0; | |
78 | fP1Stop[i] = 1.0; | |
79 | fP2Start[i] = 0.0; | |
80 | fP2Stop[i] = 2.0; | |
81 | } | |
82 | fP2Step[i] = TMath::Abs(fP2Start - fP2Stop) / (Double_t)fNumberOfBins[i]; | |
74b04dd4 | 83 | fCentStart = 0.; |
84 | fCentStop = 0.; | |
85 | ||
b966652f | 86 | fNn[i] = 0.0; |
87 | fNp[i] = 0.0; | |
3feee083 | 88 | |
89 | for(Int_t j = 0; j < MAXIMUM_NUMBER_OF_STEPS; j++) { | |
90 | fNpp[i][j] = .0; | |
91 | fNnn[i][j] = .0; | |
92 | fNpn[i][j] = .0; | |
6432ac6a | 93 | fNnp[i][j] = .0; |
3feee083 | 94 | fB[i][j] = 0.0; |
95 | ferror[i][j] = 0.0; | |
6432ac6a | 96 | } |
b966652f | 97 | |
6432ac6a | 98 | fHistP[i] = NULL; |
99 | fHistN[i] = NULL; | |
100 | fHistPP[i] = NULL; | |
101 | fHistPN[i] = NULL; | |
102 | fHistNP[i] = NULL; | |
103 | fHistNN[i] = NULL; | |
b966652f | 104 | |
105 | } | |
6c178944 | 106 | } |
107 | ||
6c178944 | 108 | |
7f0257ea | 109 | //____________________________________________________________________// |
110 | AliBalance::AliBalance(const AliBalance& balance): | |
49a3750f | 111 | TObject(balance), |
9fd4b54e | 112 | fShuffle(balance.fShuffle), |
113 | fHBTcut(balance.fHBTcut), | |
114 | fConversionCut(balance.fConversionCut), | |
6a3f819e | 115 | fAnalysisLevel(balance.fAnalysisLevel), |
116 | fAnalyzedEvents(balance.fAnalyzedEvents), | |
74b04dd4 | 117 | fCentralityId(balance.fCentralityId), |
118 | fCentStart(balance.fCentStart), | |
47e040b5 | 119 | fCentStop(balance.fCentStop), |
120 | fHistHBTbefore(balance.fHistHBTbefore), | |
121 | fHistHBTafter(balance.fHistHBTafter), | |
122 | fHistConversionbefore(balance.fHistConversionbefore), | |
123 | fHistConversionafter(balance.fHistConversionafter) { | |
7f0257ea | 124 | //copy constructor |
b966652f | 125 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
126 | fNn[i] = balance.fNn[i]; | |
127 | fNp[i] = balance.fNp[i]; | |
3feee083 | 128 | |
b966652f | 129 | fP1Start[i] = balance.fP1Start[i]; |
130 | fP1Stop[i] = balance.fP1Stop[i]; | |
3feee083 | 131 | fNumberOfBins[i] = balance.fNumberOfBins[i]; |
132 | fP2Start[i] = balance.fP2Start[i]; | |
133 | fP2Stop[i] = balance.fP2Stop[i]; | |
134 | fP2Step[i] = balance.fP2Step[i]; | |
74b04dd4 | 135 | fCentStart = balance.fCentStart; |
136 | fCentStop = balance.fCentStop; | |
3feee083 | 137 | |
b966652f | 138 | fHistP[i] = balance.fHistP[i]; |
139 | fHistN[i] = balance.fHistN[i]; | |
140 | fHistPN[i] = balance.fHistPN[i]; | |
141 | fHistNP[i] = balance.fHistNP[i]; | |
142 | fHistPP[i] = balance.fHistPP[i]; | |
143 | fHistNN[i] = balance.fHistNN[i]; | |
144 | ||
3feee083 | 145 | for(Int_t j = 0; j < MAXIMUM_NUMBER_OF_STEPS; j++) { |
146 | fNpp[i][j] = .0; | |
147 | fNnn[i][j] = .0; | |
148 | fNpn[i][j] = .0; | |
6432ac6a | 149 | fNnp[i][j] = .0; |
3feee083 | 150 | fB[i][j] = 0.0; |
151 | ferror[i][j] = 0.0; | |
152 | } | |
153 | } | |
154 | } | |
155 | ||
7f0257ea | 156 | |
157 | //____________________________________________________________________// | |
158 | AliBalance::~AliBalance() { | |
6c178944 | 159 | // Destructor |
6c178944 | 160 | |
6432ac6a | 161 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
162 | ||
163 | delete fHistP[i]; | |
164 | delete fHistN[i]; | |
165 | delete fHistPN[i]; | |
166 | delete fHistNP[i]; | |
167 | delete fHistPP[i]; | |
168 | delete fHistNN[i]; | |
169 | ||
170 | } | |
7f0257ea | 171 | } |
172 | ||
7f0257ea | 173 | //____________________________________________________________________// |
6432ac6a | 174 | void AliBalance::SetInterval(Int_t iAnalysisType, |
175 | Double_t p1Start, Double_t p1Stop, | |
176 | Int_t ibins, Double_t p2Start, Double_t p2Stop) { | |
6c178944 | 177 | // Sets the analyzed interval. |
3feee083 | 178 | // Set the same Information for all analyses |
6432ac6a | 179 | |
180 | if(iAnalysisType == -1){ | |
b966652f | 181 | for(Int_t i = 0; i < ANALYSIS_TYPES; i++){ |
182 | fP1Start[i] = p1Start; | |
183 | fP1Stop[i] = p1Stop; | |
6432ac6a | 184 | fNumberOfBins[i] = ibins; |
3feee083 | 185 | fP2Start[i] = p2Start; |
186 | fP2Stop[i] = p2Stop; | |
187 | fP2Step[i] = TMath::Abs(p2Start - p2Stop) / (Double_t)fNumberOfBins[i]; | |
188 | } | |
7f0257ea | 189 | } |
3feee083 | 190 | // Set the Information for one analysis |
6432ac6a | 191 | else if((iAnalysisType > -1) && (iAnalysisType < ANALYSIS_TYPES)) { |
192 | fP1Start[iAnalysisType] = p1Start; | |
193 | fP1Stop[iAnalysisType] = p1Stop; | |
194 | fNumberOfBins[iAnalysisType] = ibins; | |
195 | fP2Start[iAnalysisType] = p2Start; | |
196 | fP2Stop[iAnalysisType] = p2Stop; | |
197 | fP2Step[iAnalysisType] = TMath::Abs(p2Start - p2Stop) / (Double_t)fNumberOfBins[iAnalysisType]; | |
7f0257ea | 198 | } |
6432ac6a | 199 | else { |
3feee083 | 200 | AliError("Wrong ANALYSIS number!"); |
7f0257ea | 201 | } |
6c178944 | 202 | } |
203 | ||
6432ac6a | 204 | //____________________________________________________________________// |
205 | void AliBalance::InitHistograms() { | |
6a3f819e | 206 | //Initialize the histograms |
211b716d | 207 | |
208 | // global switch disabling the reference | |
209 | // (to avoid "Replacing existing TH1" if several wagons are created in train) | |
210 | Bool_t oldStatus = TH1::AddDirectoryStatus(); | |
211 | TH1::AddDirectory(kFALSE); | |
212 | ||
6432ac6a | 213 | TString histName; |
214 | for(Int_t iAnalysisType = 0; iAnalysisType < ANALYSIS_TYPES; iAnalysisType++) { | |
9fd4b54e | 215 | histName = "fHistP"; histName += kBFAnalysisType[iAnalysisType]; |
216 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 217 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 218 | fHistP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,100,fP1Start[iAnalysisType],fP1Stop[iAnalysisType]); |
6a3f819e | 219 | |
9fd4b54e | 220 | histName = "fHistN"; histName += kBFAnalysisType[iAnalysisType]; |
221 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 222 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 223 | fHistN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,100,fP1Start[iAnalysisType],fP1Stop[iAnalysisType]); |
6432ac6a | 224 | |
9fd4b54e | 225 | histName = "fHistPN"; histName += kBFAnalysisType[iAnalysisType]; |
226 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 227 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 228 | fHistPN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 229 | |
9fd4b54e | 230 | histName = "fHistNP"; histName += kBFAnalysisType[iAnalysisType]; |
231 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 232 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 233 | fHistNP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 234 | |
9fd4b54e | 235 | histName = "fHistPP"; histName += kBFAnalysisType[iAnalysisType]; |
236 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 237 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 238 | fHistPP[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6a3f819e | 239 | |
9fd4b54e | 240 | histName = "fHistNN"; histName += kBFAnalysisType[iAnalysisType]; |
241 | if(fShuffle) histName.Append("_shuffle"); | |
6a3f819e | 242 | if(fCentralityId) histName += fCentralityId.Data(); |
74b04dd4 | 243 | fHistNN[iAnalysisType] = new TH2D(histName.Data(),"",fCentStop-fCentStart,fCentStart,fCentStop,fNumberOfBins[iAnalysisType],fP2Start[iAnalysisType],fP2Stop[iAnalysisType]); |
6432ac6a | 244 | } |
6de53600 | 245 | |
246 | // QA histograms | |
247 | fHistHBTbefore = new TH2D("fHistHBTbefore","before HBT cut",200,0,2,200,0,200); | |
248 | fHistHBTafter = new TH2D("fHistHBTafter","after HBT cut",200,0,2,200,0,200); | |
249 | fHistConversionbefore = new TH2D("fHistConversionbefore","before Conversion cut",200,0,2,200,0,200); | |
250 | fHistConversionafter = new TH2D("fHistConversionafter","after Conversion cut",200,0,2,200,0,200); | |
251 | ||
211b716d | 252 | TH1::AddDirectory(oldStatus); |
253 | ||
6432ac6a | 254 | } |
3feee083 | 255 | |
898d5b28 | 256 | //____________________________________________________________________// |
09bb7bf4 | 257 | void AliBalance::PrintAnalysisSettings() { |
9fd4b54e | 258 | //prints the analysis settings |
09bb7bf4 | 259 | |
260 | Printf("======================================"); | |
261 | Printf("Analysis level: %s",fAnalysisLevel.Data()); | |
3feee083 | 262 | Printf("======================================"); |
b966652f | 263 | for(Int_t ibin = 0; ibin < ANALYSIS_TYPES; ibin++){ |
3feee083 | 264 | Printf("Interval info for variable %d",ibin); |
265 | Printf("Analyzed interval (min.): %lf",fP2Start[ibin]); | |
266 | Printf("Analyzed interval (max.): %lf",fP2Stop[ibin]); | |
267 | Printf("Number of bins: %d",fNumberOfBins[ibin]); | |
268 | Printf("Step: %lf",fP2Step[ibin]); | |
269 | Printf(" "); | |
270 | } | |
09bb7bf4 | 271 | Printf("======================================"); |
898d5b28 | 272 | } |
273 | ||
7f0257ea | 274 | //____________________________________________________________________// |
845fdeca | 275 | void AliBalance::CalculateBalance(Float_t fCentrality,vector<Double_t> **chargeVector,Float_t bSign) { |
6c178944 | 276 | // Calculates the balance function |
277 | fAnalyzedEvents++; | |
278 | Int_t i = 0 , j = 0; | |
3feee083 | 279 | Int_t iBin = 0; |
845fdeca | 280 | |
6432ac6a | 281 | // Initialize histograms if not done yet |
282 | if(!fHistPN[0]){ | |
283 | AliWarning("Histograms not yet initialized! --> Will be done now"); | |
284 | AliWarning("This works only in local mode --> Add 'gBalance->InitHistograms()' in your configBalanceFunction"); | |
285 | InitHistograms(); | |
286 | } | |
287 | ||
74b04dd4 | 288 | Int_t gNtrack = chargeVector[0]->size(); |
289 | //Printf("(AliBalance) Number of tracks: %d",gNtrack); | |
290 | ||
291 | for(i = 0; i < gNtrack;i++){ | |
f12385bb | 292 | Short_t charge = chargeVector[0]->at(i); |
74b04dd4 | 293 | Double_t rapidity = chargeVector[1]->at(i); |
294 | Double_t pseudorapidity = chargeVector[2]->at(i); | |
295 | Double_t phi = chargeVector[3]->at(i); | |
b966652f | 296 | |
297 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi | |
298 | for(Int_t iAnalysisType = 0; iAnalysisType < ANALYSIS_TYPES; iAnalysisType++) { | |
6432ac6a | 299 | if(iAnalysisType == kEta) { |
b966652f | 300 | if((pseudorapidity >= fP1Start[iAnalysisType]) && (pseudorapidity <= fP1Stop[iAnalysisType])) { |
301 | if(charge > 0) { | |
302 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 303 | fHistP[iAnalysisType]->Fill(fCentrality,pseudorapidity); |
b966652f | 304 | }//charge > 0 |
305 | if(charge < 0) { | |
306 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 307 | fHistN[iAnalysisType]->Fill(fCentrality,pseudorapidity); |
b966652f | 308 | }//charge < 0 |
309 | }//p1 interval check | |
310 | }//analysis type: eta | |
5d42ac40 | 311 | else if(iAnalysisType == kPhi) { |
b966652f | 312 | if((phi >= fP1Start[iAnalysisType]) && (phi <= fP1Stop[iAnalysisType])) { |
313 | if(charge > 0) { | |
314 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 315 | fHistP[iAnalysisType]->Fill(fCentrality,phi); |
b966652f | 316 | }//charge > 0 |
317 | if(charge < 0) { | |
318 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 319 | fHistN[iAnalysisType]->Fill(fCentrality,phi); |
b966652f | 320 | }//charge < 0 |
321 | }//p1 interval check | |
322 | }//analysis type: phi | |
323 | else { | |
324 | if((rapidity >= fP1Start[iAnalysisType]) && (rapidity <= fP1Stop[iAnalysisType])) { | |
325 | if(charge > 0) { | |
326 | fNp[iAnalysisType] += 1.; | |
74b04dd4 | 327 | fHistP[iAnalysisType]->Fill(fCentrality,rapidity); |
b966652f | 328 | }//charge > 0 |
329 | if(charge < 0) { | |
330 | fNn[iAnalysisType] += 1.; | |
74b04dd4 | 331 | fHistN[iAnalysisType]->Fill(fCentrality,rapidity); |
b966652f | 332 | }//charge < 0 |
333 | }//p1 interval check | |
334 | }//analysis type: y, qside, qout, qlong, qinv | |
335 | }//analysis type loop | |
7f0257ea | 336 | } |
74b04dd4 | 337 | |
32a4f715 | 338 | //Printf("Np: %lf - Nn: %lf",fNp[0],fNn[0]); |
6c178944 | 339 | |
b966652f | 340 | Double_t dy = 0., deta = 0.; |
341 | Double_t qLong = 0., qOut = 0., qSide = 0., qInv = 0.; | |
342 | Double_t dphi = 0.; | |
343 | ||
f12385bb | 344 | Short_t charge1 = 0; |
b966652f | 345 | Double_t eta1 = 0., rap1 = 0.; |
74b04dd4 | 346 | Double_t px1 = 0., py1 = 0., pz1 = 0.; |
347 | Double_t pt1 = 0.; | |
b966652f | 348 | Double_t energy1 = 0.; |
349 | Double_t phi1 = 0.; | |
350 | ||
f12385bb | 351 | Short_t charge2 = 0; |
b966652f | 352 | Double_t eta2 = 0., rap2 = 0.; |
74b04dd4 | 353 | Double_t px2 = 0., py2 = 0., pz2 = 0.; |
354 | Double_t pt2 = 0.; | |
b966652f | 355 | Double_t energy2 = 0.; |
356 | Double_t phi2 = 0.; | |
6c178944 | 357 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi |
3feee083 | 358 | for(i = 1; i < gNtrack; i++) { |
c511520f | 359 | |
74b04dd4 | 360 | charge1 = chargeVector[0]->at(i); |
361 | rap1 = chargeVector[1]->at(i); | |
362 | eta1 = chargeVector[2]->at(i); | |
363 | phi1 = chargeVector[3]->at(i); | |
364 | px1 = chargeVector[4]->at(i); | |
365 | py1 = chargeVector[5]->at(i); | |
366 | pz1 = chargeVector[6]->at(i); | |
367 | pt1 = chargeVector[7]->at(i); | |
368 | energy1 = chargeVector[8]->at(i); | |
3feee083 | 369 | |
370 | for(j = 0; j < i; j++) { | |
74b04dd4 | 371 | |
372 | charge2 = chargeVector[0]->at(j); | |
373 | rap2 = chargeVector[1]->at(j); | |
374 | eta2 = chargeVector[2]->at(j); | |
375 | phi2 = chargeVector[3]->at(j); | |
376 | px2 = chargeVector[4]->at(j); | |
377 | py2 = chargeVector[5]->at(j); | |
378 | pz2 = chargeVector[6]->at(j); | |
e1d6ee8e | 379 | pt2 = chargeVector[7]->at(j); |
74b04dd4 | 380 | energy2 = chargeVector[8]->at(j); |
e1d6ee8e | 381 | |
3feee083 | 382 | // filling the arrays |
383 | ||
384 | // RAPIDITY | |
74b04dd4 | 385 | dy = TMath::Abs(rap1 - rap2); |
b966652f | 386 | |
3feee083 | 387 | // Eta |
b966652f | 388 | deta = TMath::Abs(eta1 - eta2); |
3feee083 | 389 | |
b966652f | 390 | //qlong |
3feee083 | 391 | Double_t eTot = energy1 + energy2; |
74b04dd4 | 392 | Double_t pxTot = px1 + px2; |
393 | Double_t pyTot = py1 + py2; | |
394 | Double_t pzTot = pz1 + pz2; | |
3feee083 | 395 | Double_t q0Tot = energy1 - energy2; |
74b04dd4 | 396 | Double_t qxTot = px1 - px2; |
397 | Double_t qyTot = py1 - py2; | |
398 | Double_t qzTot = pz1 - pz2; | |
399 | ||
400 | Double_t eTot2 = eTot*eTot; | |
401 | Double_t pTot2 = pxTot*pxTot + pyTot*pyTot + pzTot*pzTot; | |
402 | Double_t pzTot2 = pzTot*pzTot; | |
403 | ||
404 | Double_t q0Tot2 = q0Tot*q0Tot; | |
405 | Double_t qTot2 = qxTot*qxTot + qyTot*qyTot + qzTot*qzTot; | |
406 | ||
407 | Double_t snn = eTot2 - pTot2; | |
408 | Double_t ptTot2 = pTot2 - pzTot2 ; | |
409 | Double_t ptTot = TMath::Sqrt( ptTot2 ); | |
3feee083 | 410 | |
74b04dd4 | 411 | qLong = TMath::Abs(eTot*qzTot - pzTot*q0Tot)/TMath::Sqrt(snn + ptTot2); |
b966652f | 412 | |
413 | //qout | |
74b04dd4 | 414 | qOut = TMath::Sqrt(snn/(snn + ptTot2)) * TMath::Abs(pxTot*qxTot + pyTot*qyTot)/ptTot; |
b966652f | 415 | |
416 | //qside | |
417 | qSide = TMath::Abs(pxTot*qyTot - pyTot*qxTot)/ptTot; | |
3feee083 | 418 | |
b966652f | 419 | //qinv |
74b04dd4 | 420 | qInv = TMath::Sqrt(TMath::Abs(-q0Tot2 + qTot2 )); |
b966652f | 421 | |
422 | //phi | |
6432ac6a | 423 | dphi = TMath::Abs(phi1 - phi2); |
4bd2c3ed | 424 | if(dphi>180) dphi = 360 - dphi; //dphi should be between 0 and 180! |
b966652f | 425 | |
49a3750f | 426 | // HBT like cut |
9fd4b54e | 427 | if(fHBTcut && charge1 * charge2 > 0){ |
845fdeca | 428 | //if( dphi < 3 || deta < 0.01 ){ // VERSION 1 |
429 | // continue; | |
430 | ||
431 | // VERSION 2 (Taken from DPhiCorrelations) | |
432 | // the variables & cuthave been developed by the HBT group | |
433 | // see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700 | |
6de53600 | 434 | |
435 | fHistHBTbefore->Fill(deta,dphi); | |
845fdeca | 436 | |
437 | // optimization | |
438 | if (TMath::Abs(deta) < 0.02 * 2.5 * 3) //twoTrackEfficiencyCutValue = 0.02 [default for dphicorrelations] | |
439 | { | |
e1d6ee8e | 440 | |
441 | // phi in rad | |
442 | Float_t phi1rad = phi1*TMath::DegToRad(); | |
443 | Float_t phi2rad = phi2*TMath::DegToRad(); | |
444 | ||
845fdeca | 445 | // check first boundaries to see if is worth to loop and find the minimum |
e1d6ee8e | 446 | Float_t dphistar1 = GetDPhiStar(phi1rad, pt1, charge1, phi2rad, pt2, charge2, 0.8, bSign); |
447 | Float_t dphistar2 = GetDPhiStar(phi1rad, pt1, charge1, phi2rad, pt2, charge2, 2.5, bSign); | |
845fdeca | 448 | |
449 | const Float_t kLimit = 0.02 * 3; | |
450 | ||
451 | Float_t dphistarminabs = 1e5; | |
e1d6ee8e | 452 | |
453 | if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0 ) | |
845fdeca | 454 | { |
455 | for (Double_t rad=0.8; rad<2.51; rad+=0.01) | |
456 | { | |
e1d6ee8e | 457 | Float_t dphistar = GetDPhiStar(phi1rad, pt1, charge1, phi2rad, pt2, charge2, rad, bSign); |
845fdeca | 458 | Float_t dphistarabs = TMath::Abs(dphistar); |
459 | ||
460 | if (dphistarabs < dphistarminabs) | |
461 | { | |
845fdeca | 462 | dphistarminabs = dphistarabs; |
463 | } | |
464 | } | |
e1d6ee8e | 465 | |
845fdeca | 466 | if (dphistarminabs < 0.02 && TMath::Abs(deta) < 0.02) |
467 | { | |
e1d6ee8e | 468 | //AliInfo(Form("HBT: Removed track pair %d %d with [[%f %f]] %f %f %f | %f %f %d %f %f %d %f", i, j, deta, dphi, dphistarminabs, dphistar1, dphistar2, phi1rad, pt1, charge1, phi2rad, pt2, charge2, bSign)); |
845fdeca | 469 | continue; |
470 | } | |
471 | } | |
472 | } | |
6de53600 | 473 | fHistHBTafter->Fill(deta,dphi); |
49a3750f | 474 | } |
845fdeca | 475 | |
476 | // conversions | |
9fd4b54e | 477 | if(fConversionCut){ |
845fdeca | 478 | if (charge1 * charge2 < 0) |
479 | { | |
6de53600 | 480 | |
481 | fHistConversionbefore->Fill(deta,dphi); | |
482 | ||
845fdeca | 483 | Float_t m0 = 0.510e-3; |
484 | Float_t tantheta1 = 1e10; | |
e1d6ee8e | 485 | |
486 | // phi in rad | |
487 | Float_t phi1rad = phi1*TMath::DegToRad(); | |
488 | Float_t phi2rad = phi2*TMath::DegToRad(); | |
845fdeca | 489 | |
490 | if (eta1 < -1e-10 || eta1 > 1e-10) | |
491 | tantheta1 = 2 * TMath::Exp(-eta1) / ( 1 - TMath::Exp(-2*eta1)); | |
492 | ||
493 | Float_t tantheta2 = 1e10; | |
494 | if (eta2 < -1e-10 || eta2 > 1e-10) | |
495 | tantheta2 = 2 * TMath::Exp(-eta2) / ( 1 - TMath::Exp(-2*eta2)); | |
496 | ||
497 | Float_t e1squ = m0 * m0 + pt1 * pt1 * (1.0 + 1.0 / tantheta1 / tantheta1); | |
498 | Float_t e2squ = m0 * m0 + pt2 * pt2 * (1.0 + 1.0 / tantheta2 / tantheta2); | |
e1d6ee8e | 499 | |
500 | Float_t masssqu = 2 * m0 * m0 + 2 * ( TMath::Sqrt(e1squ * e2squ) - ( pt1 * pt2 * ( TMath::Cos(phi1rad - phi2rad) + 1.0 / tantheta1 / tantheta2 ) ) ); | |
501 | ||
502 | if (masssqu < 0.04*0.04){ | |
503 | //AliInfo(Form("Conversion: Removed track pair %d %d with [[%f %f] %f %f] %d %d <- %f %f %f %f %f %f ", i, j, deta, dphi, masssqu, charge1, charge2,eta1,eta2,phi1,phi2,pt1,pt2)); | |
845fdeca | 504 | continue; |
505 | } | |
6de53600 | 506 | fHistConversionafter->Fill(deta,dphi); |
845fdeca | 507 | } |
508 | } | |
509 | ||
510 | ||
b966652f | 511 | //0:y - 1:eta - 2:Qlong - 3:Qout - 4:Qside - 5:Qinv - 6:phi |
74b04dd4 | 512 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { |
513 | ||
514 | // rapidity | |
515 | if( dy > fP2Start[kRapidity] && dy < fP2Stop[kRapidity]){ | |
516 | iBin = Int_t((dy-fP2Start[kRapidity])/fP2Step[kRapidity]); | |
517 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
518 | ||
519 | if((charge1 > 0)&&(charge2 > 0)) { | |
520 | fNpp[kRapidity][iBin] += 1.; | |
521 | fHistPP[kRapidity]->Fill(fCentrality,dy); | |
522 | } | |
523 | else if((charge1 < 0)&&(charge2 < 0)) { | |
524 | fNnn[kRapidity][iBin] += 1.; | |
525 | fHistNN[kRapidity]->Fill(fCentrality,dy); | |
526 | } | |
527 | else if((charge1 > 0)&&(charge2 < 0)) { | |
528 | fNpn[kRapidity][iBin] += 1.; | |
529 | fHistPN[kRapidity]->Fill(fCentrality,dy); | |
530 | } | |
531 | else if((charge1 < 0)&&(charge2 > 0)) { | |
532 | fNpn[kRapidity][iBin] += 1.; | |
533 | fHistPN[kRapidity]->Fill(fCentrality,dy); | |
534 | } | |
535 | }//BF binning check | |
536 | }//p2 interval check | |
537 | }//p1 interval check | |
6432ac6a | 538 | |
74b04dd4 | 539 | // pseudorapidity |
540 | if((eta1 >= fP1Start[kEta]) && (eta1 <= fP1Stop[kEta]) && (eta2 >= fP1Start[kEta]) && (eta2 <= fP1Stop[kEta])) { | |
541 | if( deta > fP2Start[kEta] && deta < fP2Stop[kEta]){ | |
542 | iBin = Int_t((deta-fP2Start[kEta])/fP2Step[kEta]); | |
543 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
544 | if((charge1 > 0)&&(charge2 > 0)) { | |
545 | fNpp[kEta][iBin] += 1.; | |
546 | fHistPP[kEta]->Fill(fCentrality,deta); | |
547 | } | |
548 | if((charge1 < 0)&&(charge2 < 0)) { | |
549 | fNnn[kEta][iBin] += 1.; | |
550 | fHistNN[kEta]->Fill(fCentrality,deta); | |
551 | } | |
552 | if((charge1 > 0)&&(charge2 < 0)) { | |
553 | fNpn[kEta][iBin] += 1.; | |
554 | fHistPN[kEta]->Fill(fCentrality,deta); | |
555 | } | |
556 | if((charge1 < 0)&&(charge2 > 0)) { | |
557 | fNpn[kEta][iBin] += 1.; | |
558 | fHistPN[kEta]->Fill(fCentrality,deta); | |
559 | } | |
560 | }//BF binning check | |
561 | }//p2 interval check | |
562 | }//p1 interval check | |
b966652f | 563 | |
74b04dd4 | 564 | // Qlong, out, side, inv |
565 | // Check the p1 intervall for rapidity here (like for single tracks above) | |
566 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
567 | if( qLong > fP2Start[kQlong] && qLong < fP2Stop[kQlong]){ | |
568 | iBin = Int_t((qLong-fP2Start[kQlong])/fP2Step[kQlong]); | |
569 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
570 | if((charge1 > 0)&&(charge2 > 0)) { | |
571 | fNpp[kQlong][iBin] += 1.; | |
572 | fHistPP[kQlong]->Fill(fCentrality,qLong); | |
573 | } | |
574 | if((charge1 < 0)&&(charge2 < 0)) { | |
575 | fNnn[kQlong][iBin] += 1.; | |
576 | fHistNN[kQlong]->Fill(fCentrality,qLong); | |
577 | } | |
578 | if((charge1 > 0)&&(charge2 < 0)) { | |
579 | fNpn[kQlong][iBin] += 1.; | |
580 | fHistPN[kQlong]->Fill(fCentrality,qLong); | |
581 | } | |
582 | if((charge1 < 0)&&(charge2 > 0)) { | |
583 | fNpn[kQlong][iBin] += 1.; | |
584 | fHistPN[kQlong]->Fill(fCentrality,qLong); | |
585 | } | |
586 | }//BF binning check | |
587 | }//p2 interval check | |
588 | }//p1 interval check | |
6432ac6a | 589 | |
74b04dd4 | 590 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { |
591 | if( qOut > fP2Start[kQout] && qOut < fP2Stop[kQout]){ | |
592 | iBin = Int_t((qOut-fP2Start[kQout])/fP2Step[kQout]); | |
593 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
594 | if((charge1 > 0)&&(charge2 > 0)) { | |
595 | fNpp[kQout][iBin] += 1.; | |
596 | fHistPP[kQout]->Fill(fCentrality,qOut); | |
597 | } | |
598 | if((charge1 < 0)&&(charge2 < 0)) { | |
599 | fNnn[kQout][iBin] += 1.; | |
600 | fHistNN[kQout]->Fill(fCentrality,qOut); | |
601 | } | |
602 | if((charge1 > 0)&&(charge2 < 0)) { | |
603 | fNpn[kQout][iBin] += 1.; | |
604 | fHistPN[kQout]->Fill(fCentrality,qOut); | |
605 | } | |
606 | if((charge1 < 0)&&(charge2 > 0)) { | |
607 | fNpn[kQout][iBin] += 1.; | |
608 | fHistPN[kQout]->Fill(fCentrality,qOut); | |
609 | } | |
610 | }//BF binning check | |
611 | }//p2 interval check | |
612 | }//p1 interval check | |
613 | ||
614 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
615 | if( qSide > fP2Start[kQside] && qSide < fP2Stop[kQside]){ | |
616 | iBin = Int_t((qSide-fP2Start[kQside])/fP2Step[kQside]); | |
617 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
618 | if((charge1 > 0)&&(charge2 > 0)) { | |
619 | fNpp[kQside][iBin] += 1.; | |
620 | fHistPP[kQside]->Fill(fCentrality,qSide); | |
621 | } | |
622 | if((charge1 < 0)&&(charge2 < 0)) { | |
623 | fNnn[kQside][iBin] += 1.; | |
624 | fHistNN[kQside]->Fill(fCentrality,qSide); | |
625 | } | |
626 | if((charge1 > 0)&&(charge2 < 0)) { | |
627 | fNpn[kQside][iBin] += 1.; | |
628 | fHistPN[kQside]->Fill(fCentrality,qSide); | |
629 | } | |
630 | if((charge1 < 0)&&(charge2 > 0)) { | |
631 | fNpn[kQside][iBin] += 1.; | |
632 | fHistPN[kQside]->Fill(fCentrality,qSide); | |
633 | } | |
634 | }//BF binning check | |
635 | }//p2 interval check | |
636 | }//p1 interval check | |
637 | ||
638 | if((rap1 >= fP1Start[kRapidity]) && (rap1 <= fP1Stop[kRapidity]) && (rap2 >= fP1Start[kRapidity]) && (rap2 <= fP1Stop[kRapidity])) { | |
639 | if( qInv > fP2Start[kQinv] && qInv < fP2Stop[kQinv]){ | |
640 | iBin = Int_t((qInv-fP2Start[kQinv])/fP2Step[kQinv]); | |
641 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
642 | if((charge1 > 0)&&(charge2 > 0)) { | |
643 | fNpp[kQinv][iBin] += 1.; | |
644 | fHistPP[kQinv]->Fill(fCentrality,qInv); | |
645 | } | |
646 | if((charge1 < 0)&&(charge2 < 0)) { | |
647 | fNnn[kQinv][iBin] += 1.; | |
648 | fHistNN[kQinv]->Fill(fCentrality,qInv); | |
649 | } | |
650 | if((charge1 > 0)&&(charge2 < 0)) { | |
651 | fNpn[kQinv][iBin] += 1.; | |
652 | fHistPN[kQinv]->Fill(fCentrality,qInv); | |
653 | } | |
654 | if((charge1 < 0)&&(charge2 > 0)) { | |
655 | fNpn[kQinv][iBin] += 1.; | |
656 | fHistPN[kQinv]->Fill(fCentrality,qInv); | |
657 | } | |
658 | }//BF binning check | |
659 | }//p2 interval check | |
660 | }//p1 interval check | |
661 | ||
662 | // Phi | |
663 | if((phi1 >= fP1Start[kPhi]) && (phi1 <= fP1Stop[kPhi]) && (phi2 >= fP1Start[kPhi]) && (phi2 <= fP1Stop[kPhi])) { | |
664 | if( dphi > fP2Start[kPhi] && dphi < fP2Stop[kPhi]){ | |
665 | iBin = Int_t((dphi-fP2Start[kPhi])/fP2Step[kPhi]); | |
666 | if(iBin >=0 && iBin < MAXIMUM_NUMBER_OF_STEPS){ | |
667 | if((charge1 > 0)&&(charge2 > 0)) { | |
668 | fNpp[kPhi][iBin] += 1.; | |
669 | fHistPP[kPhi]->Fill(fCentrality,dphi); | |
670 | } | |
671 | if((charge1 < 0)&&(charge2 < 0)) { | |
672 | fNnn[kPhi][iBin] += 1.; | |
673 | fHistNN[kPhi]->Fill(fCentrality,dphi); | |
674 | } | |
675 | if((charge1 > 0)&&(charge2 < 0)) { | |
676 | fNpn[kPhi][iBin] += 1.; | |
677 | fHistPN[kPhi]->Fill(fCentrality,dphi); | |
678 | } | |
679 | if((charge1 < 0)&&(charge2 > 0)) { | |
680 | fNpn[kPhi][iBin] += 1.; | |
681 | fHistPN[kPhi]->Fill(fCentrality,dphi); | |
682 | } | |
683 | }//BF binning check | |
684 | }//p2 interval check | |
685 | }//p1 interval check | |
b966652f | 686 | }//end of 2nd particle loop |
687 | }//end of 1st particle loop | |
3feee083 | 688 | //Printf("Number of analyzed events: %i",fAnalyzedEvents); |
74b04dd4 | 689 | //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 | 690 | } |
1d8792e7 | 691 | |
1d8792e7 | 692 | |
7f0257ea | 693 | //____________________________________________________________________// |
33a86282 | 694 | Double_t AliBalance::GetBalance(Int_t iAnalysisType, Int_t p2) { |
6c178944 | 695 | // Returns the value of the balance function in bin p2 |
33a86282 | 696 | 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 | 697 | |
33a86282 | 698 | return fB[iAnalysisType][p2]; |
6c178944 | 699 | } |
700 | ||
7f0257ea | 701 | //____________________________________________________________________// |
33a86282 | 702 | Double_t AliBalance::GetError(Int_t iAnalysisType, Int_t p2) { |
6c178944 | 703 | // Returns the error on the BF value for bin p2 |
6432ac6a | 704 | // The errors for fNn and fNp are neglected here (0.1 % of total error) |
33a86282 | 705 | /*ferror[iAnalysisType][p2] = TMath::Sqrt(Double_t(fNpp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) |
706 | + Double_t(fNnn[iAnalysisType][p2])/(Double_t(fNn[iAnalysisType])*Double_t(fNn[iAnalysisType])) | |
707 | + Double_t(fNpn[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) | |
708 | + Double_t(fNnp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) | |
709 | //+ TMath::Power(fNpn[iAnalysisType][p2]-fNpp[iAnalysisType][p2],2)/TMath::Power(Double_t(fNp[iAnalysisType]),3) | |
710 | //+ TMath::Power(fNnp[iAnalysisType][p2]-fNnn[iAnalysisType][p2],2)/TMath::Power(Double_t(fNn[iAnalysisType]),3) | |
711 | ) /fP2Step[iAnalysisType];*/ | |
712 | ||
713 | ferror[iAnalysisType][p2] = TMath::Sqrt( Double_t(fNpp[iAnalysisType][p2])/(Double_t(fNp[iAnalysisType])*Double_t(fNp[iAnalysisType])) + | |
714 | Double_t(fNnn[iAnalysisType][p2])/(Double_t(fNn[iAnalysisType])*Double_t(fNn[iAnalysisType])) + | |
715 | Double_t(fNpn[iAnalysisType][p2])*TMath::Power((0.5/Double_t(fNp[iAnalysisType]) + 0.5/Double_t(fNn[iAnalysisType])),2))/fP2Step[iAnalysisType]; | |
6432ac6a | 716 | |
33a86282 | 717 | return ferror[iAnalysisType][p2]; |
6c178944 | 718 | } |
6432ac6a | 719 | //____________________________________________________________________// |
33a86282 | 720 | TGraphErrors *AliBalance::DrawBalance(Int_t iAnalysisType) { |
6432ac6a | 721 | |
722 | // Draws the BF | |
723 | Double_t x[MAXIMUM_NUMBER_OF_STEPS]; | |
724 | Double_t xer[MAXIMUM_NUMBER_OF_STEPS]; | |
725 | Double_t b[MAXIMUM_NUMBER_OF_STEPS]; | |
726 | Double_t ber[MAXIMUM_NUMBER_OF_STEPS]; | |
727 | ||
33a86282 | 728 | if((fNp[iAnalysisType] == 0)||(fNn[iAnalysisType] == 0)) { |
6432ac6a | 729 | cerr<<"Couldn't find any particles in the analyzed interval!!!"<<endl; |
730 | return NULL; | |
731 | } | |
732 | ||
33a86282 | 733 | for(Int_t i = 0; i < fNumberOfBins[iAnalysisType]; i++) { |
734 | b[i] = GetBalance(iAnalysisType,i); | |
735 | ber[i] = GetError(iAnalysisType,i); | |
736 | x[i] = fP2Start[iAnalysisType] + fP2Step[iAnalysisType]*i + fP2Step[iAnalysisType]/2; | |
6432ac6a | 737 | xer[i] = 0.0; |
738 | } | |
739 | ||
33a86282 | 740 | TGraphErrors *gr = new TGraphErrors(fNumberOfBins[iAnalysisType],x,b,xer,ber); |
6432ac6a | 741 | gr->GetXaxis()->SetTitleColor(1); |
33a86282 | 742 | if(iAnalysisType==0) { |
6432ac6a | 743 | gr->SetTitle("Balance function B(#Delta y)"); |
744 | gr->GetXaxis()->SetTitle("#Delta y"); | |
745 | gr->GetYaxis()->SetTitle("B(#Delta y)"); | |
746 | } | |
33a86282 | 747 | if(iAnalysisType==1) { |
6432ac6a | 748 | gr->SetTitle("Balance function B(#Delta #eta)"); |
749 | gr->GetXaxis()->SetTitle("#Delta #eta"); | |
750 | gr->GetYaxis()->SetTitle("B(#Delta #eta)"); | |
751 | } | |
33a86282 | 752 | if(iAnalysisType==2) { |
6432ac6a | 753 | gr->SetTitle("Balance function B(q_{long})"); |
754 | gr->GetXaxis()->SetTitle("q_{long} (GeV/c)"); | |
755 | gr->GetYaxis()->SetTitle("B(q_{long}) ((GeV/c)^{-1})"); | |
756 | } | |
33a86282 | 757 | if(iAnalysisType==3) { |
6432ac6a | 758 | gr->SetTitle("Balance function B(q_{out})"); |
759 | gr->GetXaxis()->SetTitle("q_{out} (GeV/c)"); | |
760 | gr->GetYaxis()->SetTitle("B(q_{out}) ((GeV/c)^{-1})"); | |
761 | } | |
33a86282 | 762 | if(iAnalysisType==4) { |
6432ac6a | 763 | gr->SetTitle("Balance function B(q_{side})"); |
764 | gr->GetXaxis()->SetTitle("q_{side} (GeV/c)"); | |
765 | gr->GetYaxis()->SetTitle("B(q_{side}) ((GeV/c)^{-1})"); | |
766 | } | |
33a86282 | 767 | if(iAnalysisType==5) { |
6432ac6a | 768 | gr->SetTitle("Balance function B(q_{inv})"); |
769 | gr->GetXaxis()->SetTitle("q_{inv} (GeV/c)"); | |
770 | gr->GetYaxis()->SetTitle("B(q_{inv}) ((GeV/c)^{-1})"); | |
771 | } | |
33a86282 | 772 | if(iAnalysisType==6) { |
6432ac6a | 773 | gr->SetTitle("Balance function B(#Delta #phi)"); |
774 | gr->GetXaxis()->SetTitle("#Delta #phi"); | |
775 | gr->GetYaxis()->SetTitle("B(#Delta #phi)"); | |
776 | } | |
33a86282 | 777 | |
778 | return gr; | |
6432ac6a | 779 | } |
6c178944 | 780 | |
6432ac6a | 781 | //____________________________________________________________________// |
782 | void AliBalance::PrintResults(Int_t iAnalysisType, TH1D *gHistBalance) { | |
783 | //Prints the calculated width of the BF and its error | |
6432ac6a | 784 | Double_t gSumXi = 0.0, gSumBi = 0.0, gSumBiXi = 0.0; |
785 | Double_t gSumBiXi2 = 0.0, gSumBi2Xi2 = 0.0; | |
786 | Double_t gSumDeltaBi2 = 0.0, gSumXi2DeltaBi2 = 0.0; | |
787 | Double_t deltaBalP2 = 0.0, integral = 0.0; | |
788 | Double_t deltaErrorNew = 0.0; | |
789 | ||
47e040b5 | 790 | // cout<<"=================================================="<<endl; |
791 | // for(Int_t i = 1; i <= fNumberOfBins[iAnalysisType]; i++) { | |
792 | // x[i-1] = fP2Start[iAnalysisType] + fP2Step[iAnalysisType]*i + fP2Step[iAnalysisType]/2; | |
793 | // cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<gHistBalance->GetBinCenter(i)<<endl; | |
794 | // } | |
795 | // cout<<"=================================================="<<endl; | |
6432ac6a | 796 | for(Int_t i = 2; i <= fNumberOfBins[iAnalysisType]; i++) { |
797 | gSumXi += gHistBalance->GetBinCenter(i); | |
33a86282 | 798 | gSumBi += gHistBalance->GetBinContent(i); |
799 | gSumBiXi += gHistBalance->GetBinContent(i)*gHistBalance->GetBinCenter(i); | |
800 | gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(gHistBalance->GetBinCenter(i),2); | |
801 | gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(gHistBalance->GetBinCenter(i),2); | |
802 | gSumDeltaBi2 += TMath::Power(gHistBalance->GetBinError(i),2); | |
803 | gSumXi2DeltaBi2 += TMath::Power(gHistBalance->GetBinCenter(i),2) * TMath::Power(gHistBalance->GetBinError(i),2); | |
6432ac6a | 804 | |
33a86282 | 805 | deltaBalP2 += fP2Step[iAnalysisType]*TMath::Power(gHistBalance->GetBinError(i),2); |
806 | integral += fP2Step[iAnalysisType]*gHistBalance->GetBinContent(i); | |
807 | } | |
808 | for(Int_t i = 1; i < fNumberOfBins[iAnalysisType]; i++) | |
809 | deltaErrorNew += gHistBalance->GetBinError(i)*(gHistBalance->GetBinCenter(i)*gSumBi - gSumBiXi)/TMath::Power(gSumBi,2); | |
810 | ||
811 | Double_t integralError = TMath::Sqrt(deltaBalP2); | |
eca1352f | 812 | integralError *= 1.0; |
813 | ||
814 | Double_t delta = gSumBiXi / gSumBi; delta *= 1.0; | |
33a86282 | 815 | Double_t deltaError = (gSumBiXi / gSumBi) * TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumXi2DeltaBi2)/gSumBiXi),2) + TMath::Power((gSumDeltaBi2/gSumBi),2) ); |
eca1352f | 816 | deltaError *= 1.0; |
47e040b5 | 817 | // cout<<"Analysis type: "<<kBFAnalysisType[iAnalysisType].Data()<<endl; |
818 | // cout<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl; | |
819 | // cout<<"New error: "<<deltaErrorNew<<endl; | |
820 | // cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl; | |
821 | // cout<<"=================================================="<<endl; | |
6432ac6a | 822 | } |
823 | ||
824 | //____________________________________________________________________// | |
47e040b5 | 825 | TH1D *AliBalance::GetBalanceFunctionHistogram(Int_t iAnalysisType,Double_t centrMin, Double_t centrMax, Double_t etaWindow,Bool_t correctWithEfficiency, Bool_t correctWithAcceptanceOnly, Bool_t correctWithMixed, TH1D *hMixed[4]) { |
74b04dd4 | 826 | //Returns the BF histogram, extracted from the 6 TH2D objects |
6432ac6a | 827 | //(private members) of the AliBalance class. |
b7ce3d3f | 828 | // |
829 | // Acceptance correction: | |
830 | // - only for analysis type = kEta | |
831 | // - only if etaWindow > 0 (default = -1.) | |
832 | // - calculated as proposed by STAR | |
833 | // | |
6432ac6a | 834 | TString gAnalysisType[ANALYSIS_TYPES] = {"y","eta","qlong","qout","qside","qinv","phi"}; |
835 | TString histName = "gHistBalanceFunctionHistogram"; | |
836 | histName += gAnalysisType[iAnalysisType]; | |
837 | ||
74b04dd4 | 838 | SetInterval(iAnalysisType, fHistP[iAnalysisType]->GetYaxis()->GetXmin(), |
839 | fHistP[iAnalysisType]->GetYaxis()->GetXmin(), | |
840 | fHistPP[iAnalysisType]->GetNbinsY(), | |
841 | fHistPP[iAnalysisType]->GetYaxis()->GetXmin(), | |
842 | fHistPP[iAnalysisType]->GetYaxis()->GetXmax()); | |
843 | ||
844 | // determine the projection thresholds | |
845 | Int_t binMinX, binMinY, binMinZ; | |
846 | Int_t binMaxX, binMaxY, binMaxZ; | |
847 | ||
848 | fHistPP[iAnalysisType]->GetBinXYZ(fHistPP[iAnalysisType]->FindBin(centrMin),binMinX,binMinY,binMinZ); | |
849 | fHistPP[iAnalysisType]->GetBinXYZ(fHistPP[iAnalysisType]->FindBin(centrMax),binMaxX,binMaxY,binMaxZ); | |
6432ac6a | 850 | |
74b04dd4 | 851 | TH1D *gHistBalanceFunctionHistogram = new TH1D(histName.Data(),"",fHistPP[iAnalysisType]->GetNbinsY(),fHistPP[iAnalysisType]->GetYaxis()->GetXmin(),fHistPP[iAnalysisType]->GetYaxis()->GetXmax()); |
6432ac6a | 852 | switch(iAnalysisType) { |
853 | case kRapidity: | |
854 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta y"); | |
855 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta y)"); | |
856 | break; | |
857 | case kEta: | |
858 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta #eta"); | |
859 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta #eta)"); | |
860 | break; | |
861 | case kQlong: | |
862 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{long} (GeV/c)"); | |
863 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{long})"); | |
864 | break; | |
865 | case kQout: | |
866 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{out} (GeV/c)"); | |
867 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{out})"); | |
868 | break; | |
869 | case kQside: | |
870 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{side} (GeV/c)"); | |
871 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{side})"); | |
872 | break; | |
873 | case kQinv: | |
874 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("q_{inv} (GeV/c)"); | |
875 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(q_{inv})"); | |
876 | break; | |
877 | case kPhi: | |
878 | gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta #phi (deg.)"); | |
879 | gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta #phi)"); | |
880 | break; | |
881 | default: | |
882 | break; | |
883 | } | |
74b04dd4 | 884 | |
885 | TH1D *hTemp1 = dynamic_cast<TH1D *>(fHistPN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistPN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
886 | TH1D *hTemp2 = dynamic_cast<TH1D *>(fHistPN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f_copy",fHistPN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
887 | TH1D *hTemp3 = dynamic_cast<TH1D *>(fHistNN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistNN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
888 | TH1D *hTemp4 = dynamic_cast<TH1D *>(fHistPP[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistPP[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
889 | TH1D *hTemp5 = dynamic_cast<TH1D *>(fHistN[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistN[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
890 | TH1D *hTemp6 = dynamic_cast<TH1D *>(fHistP[iAnalysisType]->ProjectionY(Form("%s_Cent_%.0f_%.0f",fHistP[iAnalysisType]->GetName(),centrMin,centrMax),binMinX,binMaxX)); | |
4665ed86 | 891 | |
b5b9a4f9 | 892 | // get the file with the efficiency matrices |
893 | // withAcceptanceOnly: Data single distributions are normalized to 1 (efficiency not taken into account) | |
894 | // else : Data single distributions are normalized to give single particle efficiency of MC | |
4665ed86 | 895 | TFile *fEfficiencyMatrix = NULL; |
9ff3a85f | 896 | if(correctWithEfficiency || correctWithMixed){ |
b5b9a4f9 | 897 | if(correctWithAcceptanceOnly) fEfficiencyMatrix = TFile::Open("$ALICE_ROOT/PWGCF/EBYE/macros/accOnlyFromConvolutionAllCent.root"); |
898 | else fEfficiencyMatrix = TFile::Open("$ALICE_ROOT/PWGCF/EBYE/macros/effFromConvolutionAllCent.root"); | |
4665ed86 | 899 | if(!fEfficiencyMatrix){ |
900 | AliError("Efficiency histogram file not found"); | |
901 | return NULL; | |
902 | } | |
903 | } | |
904 | ||
e879f836 | 905 | // do correction with the efficiency calculated from MC + Data (for single particles and two particle correlations) |
906 | // - single particle efficiencies from MC (AliAnalysiTaskEfficiency) | |
907 | // - two particle efficiencies from convolution of data single particle distributions | |
908 | // (normalized to single particle efficiency) | |
47e040b5 | 909 | if(iAnalysisType == kEta && etaWindow > 0 && correctWithEfficiency && !correctWithMixed){ |
b840442a | 910 | |
b5b9a4f9 | 911 | TH1F* hEffP = NULL; |
912 | TH1F* hEffN = NULL; | |
4665ed86 | 913 | TH1F* hEffPP = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffPP_Cent%.0f-%.0f_Data",centrMin,centrMax)); |
914 | TH1F* hEffNN = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffNN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
915 | TH1F* hEffPN = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffPN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
b5b9a4f9 | 916 | |
917 | // take the data distributions | |
918 | if(correctWithAcceptanceOnly){ | |
919 | hEffP = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffP_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
920 | hEffN = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
921 | } | |
922 | // take the MC distributions | |
923 | else{ | |
924 | hEffP = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffP_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
925 | hEffN = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffN_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
926 | } | |
927 | ||
e879f836 | 928 | if( !hEffP || !hEffN || !hEffPP || !hEffNN || !hEffPN){ |
4665ed86 | 929 | AliError(Form("Efficiency (eta) histograms not found: etaEffPP_Cent%.0f-%.0f_Data",centrMin,centrMax)); |
930 | return NULL; | |
931 | } | |
e879f836 | 932 | |
933 | for(Int_t iBin = 0; iBin < hEffP->GetNbinsX(); iBin++){ | |
934 | hTemp5->SetBinError(iBin+1,hTemp5->GetBinError(iBin+1)/hEffN->GetBinContent(hEffN->FindBin(hTemp5->GetBinCenter(iBin+1)))); | |
935 | hTemp5->SetBinContent(iBin+1,hTemp5->GetBinContent(iBin+1)/hEffN->GetBinContent(hEffN->FindBin(hTemp5->GetBinCenter(iBin+1)))); | |
936 | ||
937 | hTemp6->SetBinError(iBin+1,hTemp6->GetBinError(iBin+1)/hEffP->GetBinContent(hEffP->FindBin(hTemp6->GetBinCenter(iBin+1)))); | |
938 | hTemp6->SetBinContent(iBin+1,hTemp6->GetBinContent(iBin+1)/hEffP->GetBinContent(hEffP->FindBin(hTemp6->GetBinCenter(iBin+1)))); | |
939 | } | |
4665ed86 | 940 | |
b840442a | 941 | for(Int_t iBin = 0; iBin < gHistBalanceFunctionHistogram->GetNbinsX(); iBin++){ |
1c8a00af | 942 | |
1c8a00af | 943 | hTemp1->SetBinError(iBin+1,hTemp1->GetBinError(iBin+1)/hEffPN->GetBinContent(hEffPN->FindBin(hTemp1->GetBinCenter(iBin+1)))); |
944 | hTemp1->SetBinContent(iBin+1,hTemp1->GetBinContent(iBin+1)/hEffPN->GetBinContent(hEffPN->FindBin(hTemp1->GetBinCenter(iBin+1)))); | |
945 | hTemp2->SetBinError(iBin+1,hTemp2->GetBinError(iBin+1)/hEffPN->GetBinContent(hEffPN->FindBin(hTemp2->GetBinCenter(iBin+1)))); | |
946 | hTemp2->SetBinContent(iBin+1,hTemp2->GetBinContent(iBin+1)/hEffPN->GetBinContent(hEffPN->FindBin(hTemp2->GetBinCenter(iBin+1)))); | |
947 | hTemp3->SetBinError(iBin+1,hTemp3->GetBinError(iBin+1)/hEffNN->GetBinContent(hEffNN->FindBin(hTemp3->GetBinCenter(iBin+1)))); | |
948 | hTemp3->SetBinContent(iBin+1,hTemp3->GetBinContent(iBin+1)/hEffNN->GetBinContent(hEffNN->FindBin(hTemp3->GetBinCenter(iBin+1)))); | |
949 | hTemp4->SetBinError(iBin+1,hTemp4->GetBinError(iBin+1)/hEffPP->GetBinContent(hEffPP->FindBin(hTemp4->GetBinCenter(iBin+1)))); | |
950 | hTemp4->SetBinContent(iBin+1,hTemp4->GetBinContent(iBin+1)/hEffPP->GetBinContent(hEffPP->FindBin(hTemp4->GetBinCenter(iBin+1)))); | |
951 | ||
b840442a | 952 | } |
1c8a00af | 953 | |
954 | // TF1 *fPP = new TF1("fPP","pol1",0,1.6); // phase space factor + efficiency for ++ | |
955 | // fPP->SetParameters(0.736466,-0.461529); | |
956 | // TF1 *fNN = new TF1("fNN","pol1",0,1.6); // phase space factor + efficiency for -- | |
957 | // fNN->SetParameters(0.718616,-0.450473); | |
958 | // TF1 *fPN = new TF1("fPN","pol1",0,1.6); // phase space factor + efficiency for +- | |
959 | // fPN->SetParameters(0.727507,-0.455981); | |
960 | ||
961 | // for(Int_t iBin = 0; iBin < gHistBalanceFunctionHistogram->GetNbinsX(); iBin++){ | |
962 | // hTemp1->SetBinContent(iBin+1,hTemp1->GetBinContent(iBin+1)/fPN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
963 | // hTemp1->SetBinError(iBin+1,hTemp1->GetBinError(iBin+1)/fPN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
964 | // hTemp2->SetBinContent(iBin+1,hTemp2->GetBinContent(iBin+1)/fPN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
965 | // hTemp2->SetBinError(iBin+1,hTemp2->GetBinError(iBin+1)/fPN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
966 | // hTemp3->SetBinContent(iBin+1,hTemp3->GetBinContent(iBin+1)/fNN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
967 | // hTemp3->SetBinError(iBin+1,hTemp3->GetBinError(iBin+1)/fNN->Eval(hTemp1->GetBinCenter(iBin+1))); | |
968 | // hTemp4->SetBinContent(iBin+1,hTemp4->GetBinContent(iBin+1)/fPP->Eval(hTemp1->GetBinCenter(iBin+1))); | |
969 | // hTemp4->SetBinError(iBin+1,hTemp4->GetBinError(iBin+1)/fPP->Eval(hTemp1->GetBinCenter(iBin+1))); | |
970 | // } | |
b840442a | 971 | } |
33a86282 | 972 | |
e879f836 | 973 | // do correction with the efficiency calculated from MC + Data (for single particles and two particle correlations) |
974 | // - single particle efficiencies from MC (AliAnalysiTaskEfficiency) | |
975 | // - two particle efficiencies from convolution of data single particle distributions | |
976 | // (normalized to single particle efficiency) | |
47e040b5 | 977 | if(iAnalysisType == kPhi && correctWithEfficiency && !correctWithMixed){ |
346fa574 | 978 | |
b5b9a4f9 | 979 | TH1F* hEffPhiP = NULL; |
980 | TH1F* hEffPhiN = NULL; | |
4665ed86 | 981 | TH1F* hEffPhiPP = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffPP_Cent%.0f-%.0f_Data",centrMin,centrMax)); |
982 | TH1F* hEffPhiNN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffNN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
983 | TH1F* hEffPhiPN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffPN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
b5b9a4f9 | 984 | |
985 | // take the data distributions | |
986 | if(correctWithAcceptanceOnly){ | |
987 | hEffPhiP = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffP_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
988 | hEffPhiN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
989 | } | |
990 | // take the MC distributions | |
991 | else{ | |
992 | hEffPhiP = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffP_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
993 | hEffPhiN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffN_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
994 | } | |
995 | ||
e879f836 | 996 | if( !hEffPhiP || !hEffPhiN || !hEffPhiPP || !hEffPhiNN || !hEffPhiPN){ |
4665ed86 | 997 | AliError("Efficiency (phi) histograms not found"); |
998 | return NULL; | |
999 | } | |
1000 | ||
e879f836 | 1001 | for(Int_t iBin = 0; iBin < hEffPhiP->GetNbinsX(); iBin++){ |
1002 | hTemp5->SetBinError(iBin+1,hTemp5->GetBinError(iBin+1)/hEffPhiN->GetBinContent(hEffPhiN->FindBin(hTemp5->GetBinCenter(iBin+1)))); | |
1003 | hTemp5->SetBinContent(iBin+1,hTemp5->GetBinContent(iBin+1)/hEffPhiN->GetBinContent(hEffPhiN->FindBin(hTemp5->GetBinCenter(iBin+1)))); | |
1004 | ||
1005 | hTemp6->SetBinError(iBin+1,hTemp6->GetBinError(iBin+1)/hEffPhiP->GetBinContent(hEffPhiP->FindBin(hTemp6->GetBinCenter(iBin+1)))); | |
1006 | hTemp6->SetBinContent(iBin+1,hTemp6->GetBinContent(iBin+1)/hEffPhiP->GetBinContent(hEffPhiP->FindBin(hTemp6->GetBinCenter(iBin+1)))); | |
1007 | } | |
1008 | ||
346fa574 | 1009 | for(Int_t iBin = 0; iBin < gHistBalanceFunctionHistogram->GetNbinsX(); iBin++){ |
1010 | ||
1011 | hTemp1->SetBinError(iBin+1,hTemp1->GetBinError(iBin+1)/hEffPhiPN->GetBinContent(hEffPhiPN->FindBin(hTemp1->GetBinCenter(iBin+1)))); | |
1012 | hTemp1->SetBinContent(iBin+1,hTemp1->GetBinContent(iBin+1)/hEffPhiPN->GetBinContent(hEffPhiPN->FindBin(hTemp1->GetBinCenter(iBin+1)))); | |
1013 | hTemp2->SetBinError(iBin+1,hTemp2->GetBinError(iBin+1)/hEffPhiPN->GetBinContent(hEffPhiPN->FindBin(hTemp2->GetBinCenter(iBin+1)))); | |
1014 | hTemp2->SetBinContent(iBin+1,hTemp2->GetBinContent(iBin+1)/hEffPhiPN->GetBinContent(hEffPhiPN->FindBin(hTemp2->GetBinCenter(iBin+1)))); | |
1015 | hTemp3->SetBinError(iBin+1,hTemp3->GetBinError(iBin+1)/hEffPhiNN->GetBinContent(hEffPhiNN->FindBin(hTemp3->GetBinCenter(iBin+1)))); | |
1016 | hTemp3->SetBinContent(iBin+1,hTemp3->GetBinContent(iBin+1)/hEffPhiNN->GetBinContent(hEffPhiNN->FindBin(hTemp3->GetBinCenter(iBin+1)))); | |
1017 | hTemp4->SetBinError(iBin+1,hTemp4->GetBinError(iBin+1)/hEffPhiPP->GetBinContent(hEffPhiPP->FindBin(hTemp4->GetBinCenter(iBin+1)))); | |
1018 | hTemp4->SetBinContent(iBin+1,hTemp4->GetBinContent(iBin+1)/hEffPhiPP->GetBinContent(hEffPhiPP->FindBin(hTemp4->GetBinCenter(iBin+1)))); | |
1019 | ||
1020 | } | |
346fa574 | 1021 | } |
1022 | ||
47e040b5 | 1023 | // do the correction with the event mixing directly! |
1024 | if(correctWithMixed){ | |
9ff3a85f | 1025 | |
1026 | // take the MC distributions (for average efficiency) | |
1027 | TH1F* hEffP = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffP_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
1028 | TH1F* hEffN = (TH1F*)fEfficiencyMatrix->Get(Form("etaEffN_Cent%.0f-%.0f_MC",centrMin,centrMax)); | |
47e040b5 | 1029 | |
9ff3a85f | 1030 | TH1F* hEffPP = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffPP_Cent%.0f-%.0f_Data",centrMin,centrMax)); |
1031 | TH1F* hEffNN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffNN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
1032 | TH1F* hEffPN = (TH1F*)fEfficiencyMatrix->Get(Form("phiEffPN_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
47e040b5 | 1033 | |
9ff3a85f | 1034 | if( !hEffP || !hEffN){ |
1035 | AliError(Form("Efficiency (eta) histograms not found: etaEffPP_Cent%.0f-%.0f_Data",centrMin,centrMax)); | |
1036 | return NULL; | |
1037 | } | |
47e040b5 | 1038 | |
9ff3a85f | 1039 | if(hMixed[0] && hMixed[1] && hMixed[2] && hMixed[3]){ |
1040 | ||
47e040b5 | 1041 | // scale to average efficiency in the pt region (0.3-1.5) and |eta| < 0.8 |
1042 | // by multiplying the average single particle efficiencies from HIJING | |
9ff3a85f | 1043 | // here we assume that the distributions are 1: |
1044 | // - in the integral for dphi (for averaging over sector structure) | |
1045 | // - in the maximum for deta | |
1046 | Double_t normPMC = (Double_t)hEffP->Integral()/(Double_t)hEffP->GetNbinsX(); | |
1047 | Double_t normNMC = (Double_t)hEffN->Integral()/(Double_t)hEffN->GetNbinsX(); | |
1048 | Double_t normPPMC = (Double_t)hEffPP->Integral()/(Double_t)hEffPP->GetNbinsX(); | |
1049 | Double_t normNNMC = (Double_t)hEffNN->Integral()/(Double_t)hEffNN->GetNbinsX(); | |
1050 | Double_t normPNMC = (Double_t)hEffPN->Integral()/(Double_t)hEffPN->GetNbinsX(); | |
1051 | ||
1052 | hMixed[0]->Scale(normPNMC); | |
1053 | hMixed[1]->Scale(normPNMC); | |
1054 | hMixed[2]->Scale(normNNMC); | |
1055 | hMixed[3]->Scale(normPPMC); | |
47e040b5 | 1056 | |
1057 | // divide by event mixing | |
1058 | hTemp1->Divide(hMixed[0]); | |
9ff3a85f | 1059 | hTemp2->Divide(hMixed[1]); |
47e040b5 | 1060 | hTemp3->Divide(hMixed[2]); |
1061 | hTemp4->Divide(hMixed[3]); | |
1062 | ||
1063 | // scale also single histograms with average efficiency | |
1064 | hTemp5->Scale(1./normNMC); | |
1065 | hTemp6->Scale(1./normPMC); | |
1066 | ||
1067 | } | |
1068 | else{ | |
1069 | AliError("Correction with EventMixing requested, but not all Histograms there!"); | |
1070 | return NULL; | |
1071 | } | |
1072 | } | |
346fa574 | 1073 | |
1074 | ||
33a86282 | 1075 | if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)) { |
1076 | hTemp1->Sumw2(); | |
1077 | hTemp2->Sumw2(); | |
1078 | hTemp3->Sumw2(); | |
1079 | hTemp4->Sumw2(); | |
1080 | hTemp1->Add(hTemp3,-2.); | |
e879f836 | 1081 | hTemp1->Scale(1./hTemp5->Integral()); |
33a86282 | 1082 | hTemp2->Add(hTemp4,-2.); |
e879f836 | 1083 | hTemp2->Scale(1./hTemp6->Integral()); |
33a86282 | 1084 | gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.); |
1085 | gHistBalanceFunctionHistogram->Scale(0.5/fP2Step[iAnalysisType]); | |
1086 | } | |
b7ce3d3f | 1087 | |
1088 | // do the acceptance correction (only for Eta and etaWindow > 0) | |
47e040b5 | 1089 | if(iAnalysisType == kEta && etaWindow > 0 && !correctWithEfficiency && !correctWithMixed){ |
b7ce3d3f | 1090 | for(Int_t iBin = 0; iBin < gHistBalanceFunctionHistogram->GetNbinsX(); iBin++){ |
1091 | ||
1092 | Double_t notCorrected = gHistBalanceFunctionHistogram->GetBinContent(iBin+1); | |
1093 | Double_t corrected = notCorrected / (1 - (gHistBalanceFunctionHistogram->GetBinCenter(iBin+1))/ etaWindow ); | |
1094 | gHistBalanceFunctionHistogram->SetBinContent(iBin+1, corrected); | |
1c8a00af | 1095 | gHistBalanceFunctionHistogram->SetBinError(iBin+1,corrected/notCorrected*gHistBalanceFunctionHistogram->GetBinError(iBin+1)); |
b7ce3d3f | 1096 | |
1097 | } | |
1098 | } | |
6432ac6a | 1099 | |
4665ed86 | 1100 | if(fEfficiencyMatrix) fEfficiencyMatrix->Close(); |
1101 | ||
6432ac6a | 1102 | PrintResults(iAnalysisType,gHistBalanceFunctionHistogram); |
898d5b28 | 1103 | |
6432ac6a | 1104 | return gHistBalanceFunctionHistogram; |
1105 | } |