]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/Correlations/DPhi/AliAnalysisTask3PCorrelations.cxx
AliAODEvent::GetHeader() returns AliVHeader
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTask3PCorrelations.cxx
CommitLineData
17039b7c 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/* $Id:$ */
17
18#include <TROOT.h>
19#include <TChain.h>
20#include <TFile.h>
21#include <TList.h>
22#include <TMath.h>
23#include <TTree.h>
24#include <TH1F.h>
25#include <TH2F.h>
26#include <TH3F.h>
27#include <TProfile.h>
28#include <TH1D.h>
29#include <TH2D.h>
30#include <TH3D.h>
31#include <TRandom.h>
32#include "AliAnalysisManager.h"
33
34#include "AliAODHandler.h"
35#include "AliAODInputHandler.h"
36//#include "AliAODMCParticle.h"
37#include "AliInputEventHandler.h"
38#include "AliLog.h"
39#include "AliESDEvent.h"
40#include "AliESDInputHandler.h"
41#include "AliMultiplicity.h"
42#include "AliCentrality.h"
43#include "AliAnalysisTask3PCorrelations.h"
44
c64cb1f6 45using std::cout;
46using std::endl;
47
17039b7c 48ClassImp(AliAnalysisTask3PCorrelations)
49
50AliAnalysisTask3PCorrelations::AliAnalysisTask3PCorrelations()
51: AliAnalysisTaskSE(),
52fAODEvent(0),
53fESDEvent(0), //! ESD Event
54fInputHandler(0),
55_outputHistoList(0),
56_twoPi ( 2.0 * 3.1415927),
57_eventCount ( 0),
58_debugLevel ( 0),
59_singlesOnly ( 0),
60_useWeights ( 0),
61_rejectPileup ( 1),
62_rejectPairConversion ( 0),
63_vertexZMin ( -10),
64_vertexZMax ( 10),
65_vertexXYMin ( -10),
66_vertexXYMax ( 10),
67_centralityMethod ( 4),
68_centralityMin ( 0.),
69_centralityMax ( 0.),
70_dcaZMin ( -3),
71_dcaZMax ( 3.),
72_dcaXYMin ( -3.),
73_dcaXYMax ( 3.),
74_dedxMin ( 0),
75_dedxMax ( 100000),
76_nClusterMin ( 70),
77_trackFilterBit ( 128),
78_field ( 1.),
79_nTracks ( 0 ),
80_mult0 ( 0 ),
81_mult1 ( 0 ),
82_mult2 ( 0 ),
83_mult3 ( 0 ),
84_mult4 ( 0 ),
85_mult5 ( 0 ),
86_mult6 ( 0 ),
87arraySize ( 2000),
88_id_1(0),
89_charge_1(0),
90_iPhi_1(0),
91_pt_1(0),
92_px_1(0),
93_py_1(0),
94_pz_1(0),
95_correction_1(0),
96_dedx_1(0),
97_id_2(0),
98_charge_2(0),
99_iPhi_2(0),
100_pt_2(0),
101_px_2(0),
102_py_2(0),
103_pz_2(0),
104_correction_2(0),
105_dedx_2(0),
106_id_3(0),
107_charge_3(0),
108_iPhi_3(0),
109_pt_3(0),
110_px_3(0),
111_py_3(0),
112_pz_3(0),
113_correction_3(0),
114_dedx_3(0),
115
116_correctionWeight_1P(0),
117_correctionWeight_1M(0),
118_correctionWeight_2P(0),
119_correctionWeight_2M(0),
120_correctionWeight_3P(0),
121_correctionWeight_3M(0),
122_nBins_M0(500), _min_M0(0), _max_M0(10000), _width_M0(20),
123_nBins_M1(500), _min_M1(0), _max_M1(10000), _width_M1(20),
124_nBins_M2(500), _min_M2(0), _max_M2(10000), _width_M2(20),
125_nBins_M3(500), _min_M3(0), _max_M3(10000), _width_M3(20),
126_nBins_M4(100), _min_M4(0), _max_M4(1), _width_M4(0.01),
127_nBins_M5(100), _min_M5(0), _max_M5(1), _width_M5(0.01),
128_nBins_M6(100), _min_M6(0), _max_M6(1), _width_M6(0.01),
129_nBins_vsM(0), _min_vsM(0), _max_vsM(0), _width_vsM(0),
130_nBins_vertexZ(40), _min_vertexZ(-10), _max_vertexZ(10), _width_vertexZ(0.5),
131
132_nBins_pt_1(8), _min_pt_1(2.), _max_pt_1(10.0), _width_pt_1(1.0),
133_nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
134_nBins_eta_1(1), _min_eta_1(-0.25), _max_eta_1(0.25), _width_eta_1(0.5),
135_nBins_etaPhi_1(0),
136_nBins_etaPhiPt_1(0),
137_nBins_zEtaPhiPt_1(0),
138
139_nBins_pt_2(5), _min_pt_2(0.5), _max_pt_2(1.0), _width_pt_2(0.1),
140_nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
141_nBins_eta_2(1), _min_eta_2(-1), _max_eta_2(-0.7), _width_eta_2(0.3),
142_nBins_etaPhi_2(0),
143_nBins_etaPhiPt_2(0),
144_nBins_zEtaPhiPt_2(0),
145
146_nBins_pt_3(5), _min_pt_3(0.5), _max_pt_3(1.0), _width_pt_3(0.1),
147_nBins_phi_3(72), _min_phi_3(0), _max_phi_3(2.*3.1415927),_width_phi_3(2.*3.1415927/72),
148_nBins_eta_3(1), _min_eta_3(0.7), _max_eta_3(1.), _width_eta_3(0.3),
149_nBins_etaPhi_3(0),
150_nBins_etaPhiPt_3(0),
151_nBins_zEtaPhiPt_3(0),
152
153_nBins_phi_12(0),
154_nBins_phi_13(0),
155_nBins_phi_23(0),
156_nBins_phi_123(0),
157
158
159_nBins_etaPhi_12(0),
160_nBins_etaPhi_13(0),
161_nBins_etaPhi_23(0),
162_nBins_etaPhi_123(0),
163
164__n1_1(0),
165__n1_2(0),
166__n1_3(0),
167__n2_12(0),
168__n2_13(0),
169__n2_23(0),
170__n3_123(0),
171__n1Nw_1(0),
172__n1Nw_2(0),
173__n1Nw_3(0),
174__n2Nw_12(0),
175__n2Nw_13(0),
176__n2Nw_23(0),
177__n3Nw_123(0),
178
179__n1_1_vsPt(0),
180__n1_1_vsPhi(0),
181__n1_1P_vsZEtaPhiPt(0),
182__n1_1M_vsZEtaPhiPt(0),
183
184__n1_2_vsPt(0),
185__n1_2_vsPhi(0),
186__n1_2P_vsZEtaPhiPt(0),
187__n1_2M_vsZEtaPhiPt(0),
188
189__n1_3_vsPt(0),
190__n1_3_vsPhi(0),
191__n1_3P_vsZEtaPhiPt(0),
192__n1_3M_vsZEtaPhiPt(0),
193
194__n2_12_vsPhi(0),
195__n2_13_vsPhi(0),
196__n2_23_vsPhi(0),
197__n3_123_vsPhi(0),
198
199_weight_1P ( 0 ),
200_weight_1M ( 0 ),
201_weight_2P ( 0 ),
202_weight_2M ( 0 ),
203_weight_3P ( 0 ),
204_weight_3M ( 0 ),
205_eventAccounting ( 0),
206_m0 ( 0),
207_m1 ( 0),
208_m2 ( 0),
209_m3 ( 0),
210_m4 ( 0),
211_m5 ( 0),
212_m6 ( 0),
213_vertexZ ( 0),
214
215_n1_1_vsPhi ( 0),
216_n1_1_vsM ( 0), // w/ weight
217_n1Nw_1_vsM ( 0), // w/o weight
218
219_n1_1_vsPt ( 0),
220_n1_1P_vsZVsEtaVsPhiVsPt ( 0),
221_n1_1M_vsZVsEtaVsPhiVsPt ( 0),
222_dedxVsP_1 ( 0),
223_corrDedxVsP_1 ( 0),
224_betaVsP_1 ( 0),
225
226_n1_2_vsPhi ( 0),
227_n1_2_vsM ( 0),
228_n1Nw_2_vsM ( 0),
229_n1_2_vsPt ( 0),
230_n1_2P_vsZVsEtaVsPhiVsPt ( 0),
231_n1_2M_vsZVsEtaVsPhiVsPt ( 0),
232_dedxVsP_2 ( 0),
233_corrDedxVsP_2 ( 0),
234_betaVsP_2 ( 0),
235
236_n1_3_vsPhi ( 0),
237_n1_3_vsM ( 0),
238_n1Nw_3_vsM ( 0),
239_n1_3_vsPt ( 0),
240_n1_3P_vsZVsEtaVsPhiVsPt ( 0),
241_n1_3M_vsZVsEtaVsPhiVsPt ( 0),
242_dedxVsP_3 ( 0),
243_corrDedxVsP_3 ( 0),
244_betaVsP_3 ( 0),
245
246_n2_12_vsPhi ( 0),
247_n2_13_vsPhi ( 0),
248_n2_23_vsPhi ( 0),
249_n3_123_vsPhi ( 0),
250
251_n2_12_vsM ( 0),
252_n2_13_vsM ( 0),
253_n2_23_vsM ( 0),
254_n3_123_vsM ( 0),
255
256_n2Nw_12_vsM ( 0),
257_n2Nw_13_vsM ( 0),
258_n2Nw_23_vsM ( 0),
259_n3Nw_123_vsM ( 0),
260
261n1Name("NA"),
262n2Name("NA"),
263n3Name("NA"),
264n1NwName("NA"),
265n2NwName("NA"),
266n3NwName("NA"),
267n1n1Name("NA"),
268n1n1n1Name("NA"),
269n2n1Name("NA"),
270r1Name("NA"),
271r2Name("NA"),
272r3Name("NA"),
273r2r1Name("NA"),
274c2Name("NA"),
275c3Name("NA"),
276d3Name("NA"),
277p3Name("NA"),
278
279intR2Name("NA"),
280binCorrName("NA"),
281intBinCorrName("NA"),
282
283countsName("NA"),
284part_1_Name("NA"),
285part_1P_Name("NA"),
286part_1M_Name("NA"),
287part_2_Name("NA"),
288part_2P_Name("NA"),
289part_2M_Name("NA"),
290part_3_Name("NA"),
291part_3P_Name("NA"),
292part_3M_Name("NA"),
293pair_12_Name("NA"),
294pair_13_Name("NA"),
295pair_23_Name("NA"),
296triplet_Name("NA"),
297
298_title_counts("NA"),
299_title_m0("NA"),
300_title_m1("NA"),
301_title_m2("NA"),
302_title_m3("NA"),
303_title_m4("NA"),
304_title_m5("NA"),
305_title_m6("NA"),
306
307_title_phi_1("NA"),
308_title_phi_2("NA"),
309_title_phi_3("NA"),
310_title_phi_12("NA"),
311_title_phi_13("NA"),
312_title_phi_23("NA"),
313_title_phi_123("NA"),
314
315vsZ("NA"),
316vsM("NA"),
317vsPt("NA"),
318vsPhi("NA"),
319vsEta("NA"),
320vsEtaPhi("NA")
321{
322 printf("Default constructor called \n");
323
324 printf("passed \n ");
325
326}
327
328AliAnalysisTask3PCorrelations::AliAnalysisTask3PCorrelations(const TString & name)
329: AliAnalysisTaskSE(name),
330fAODEvent(0),
331fESDEvent(0), //! ESD Event
332fInputHandler(0),
333_outputHistoList(0),
334_twoPi ( 2.0 * 3.1415927),
335_eventCount ( 0),
336_debugLevel ( 0),
337_singlesOnly ( 0),
338_useWeights ( 0),
339_rejectPileup ( 1),
340_rejectPairConversion ( 0),
341_vertexZMin ( -10),
342_vertexZMax ( 10),
343_vertexXYMin ( -10),
344_vertexXYMax ( 10),
345_centralityMethod ( 4),
346_centralityMin ( 0.),
347_centralityMax ( 0.),
348_dcaZMin ( -3),
349_dcaZMax ( 3.),
350_dcaXYMin ( -3.),
351_dcaXYMax ( 3.),
352_dedxMin ( 0),
353_dedxMax ( 100000),
354_nClusterMin ( 70),
355_trackFilterBit ( 128),
356_field ( 1.),
357_nTracks ( 0 ),
358_mult0 ( 0 ),
359_mult1 ( 0 ),
360_mult2 ( 0 ),
361_mult3 ( 0 ),
362_mult4 ( 0 ),
363_mult5 ( 0 ),
364_mult6 ( 0 ),
365arraySize ( 2000),
366_id_1(0),
367_charge_1(0),
368_iPhi_1(0),
369_pt_1(0),
370_px_1(0),
371_py_1(0),
372_pz_1(0),
373_correction_1(0),
374_dedx_1(0),
375_id_2(0),
376_charge_2(0),
377_iPhi_2(0),
378_pt_2(0),
379_px_2(0),
380_py_2(0),
381_pz_2(0),
382_correction_2(0),
383_dedx_2(0),
384_id_3(0),
385_charge_3(0),
386_iPhi_3(0),
387_pt_3(0),
388_px_3(0),
389_py_3(0),
390_pz_3(0),
391_correction_3(0),
392_dedx_3(0),
393
394_correctionWeight_1P(0),
395_correctionWeight_1M(0),
396_correctionWeight_2P(0),
397_correctionWeight_2M(0),
398_correctionWeight_3P(0),
399_correctionWeight_3M(0),
400_nBins_M0(500), _min_M0(0), _max_M0(10000), _width_M0(20),
401_nBins_M1(500), _min_M1(0), _max_M1(10000), _width_M1(20),
402_nBins_M2(500), _min_M2(0), _max_M2(10000), _width_M2(20),
403_nBins_M3(500), _min_M3(0), _max_M3(10000), _width_M3(20),
404_nBins_M4(100), _min_M4(0), _max_M4(1), _width_M4(0.01),
405_nBins_M5(100), _min_M5(0), _max_M5(1), _width_M5(0.01),
406_nBins_M6(100), _min_M6(0), _max_M6(1), _width_M6(0.01),
407_nBins_vsM(0), _min_vsM(0), _max_vsM(0), _width_vsM(0),
408
409_nBins_vertexZ(40), _min_vertexZ(-10), _max_vertexZ(10), _width_vertexZ(0.5),
410
411_nBins_pt_1(8), _min_pt_1(2.), _max_pt_1(10.0), _width_pt_1(1.0),
412_nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
413_nBins_eta_1(1), _min_eta_1(-0.25), _max_eta_1(0.25), _width_eta_1(0.5),
414_nBins_etaPhi_1(0),
415_nBins_etaPhiPt_1(0),
416_nBins_zEtaPhiPt_1(0),
417
418_nBins_pt_2(5), _min_pt_2(0.5), _max_pt_2(1.0), _width_pt_2(0.1),
419_nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
420_nBins_eta_2(1), _min_eta_2(-1), _max_eta_2(-0.7), _width_eta_2(0.3),
421_nBins_etaPhi_2(0),
422_nBins_etaPhiPt_2(0),
423_nBins_zEtaPhiPt_2(0),
424
425_nBins_pt_3(5), _min_pt_3(0.5), _max_pt_3(1.0), _width_pt_3(0.1),
426_nBins_phi_3(72), _min_phi_3(0), _max_phi_3(2.*3.1415927),_width_phi_3(2.*3.1415927/72),
427_nBins_eta_3(1), _min_eta_3(0.7), _max_eta_3(1.), _width_eta_3(0.3),
428_nBins_etaPhi_3(0),
429_nBins_etaPhiPt_3(0),
430_nBins_zEtaPhiPt_3(0),
431
432_nBins_phi_12(0),
433_nBins_phi_13(0),
434_nBins_phi_23(0),
435_nBins_phi_123(0),
436
437_nBins_etaPhi_12(0),
438_nBins_etaPhi_13(0),
439_nBins_etaPhi_23(0),
440_nBins_etaPhi_123(0),
441
442__n1_1(0),
443__n1_2(0),
444__n1_3(0),
445__n2_12(0),
446__n2_13(0),
447__n2_23(0),
448__n3_123(0),
449__n1Nw_1(0),
450__n1Nw_2(0),
451__n1Nw_3(0),
452__n2Nw_12(0),
453__n2Nw_13(0),
454__n2Nw_23(0),
455__n3Nw_123(0),
456
457__n1_1_vsPt(0),
458__n1_1_vsPhi(0),
459__n1_1P_vsZEtaPhiPt(0),
460__n1_1M_vsZEtaPhiPt(0),
461
462__n1_2_vsPt(0),
463__n1_2_vsPhi(0),
464__n1_2P_vsZEtaPhiPt(0),
465__n1_2M_vsZEtaPhiPt(0),
466
467__n1_3_vsPt(0),
468__n1_3_vsPhi(0),
469__n1_3P_vsZEtaPhiPt(0),
470__n1_3M_vsZEtaPhiPt(0),
471
472__n2_12_vsPhi(0),
473__n2_13_vsPhi(0),
474__n2_23_vsPhi(0),
475__n3_123_vsPhi(0),
476
477_weight_1P ( 0 ),
478_weight_1M ( 0 ),
479_weight_2P ( 0 ),
480_weight_2M ( 0 ),
481_weight_3P ( 0 ),
482_weight_3M ( 0 ),
483_eventAccounting ( 0),
484_m0 ( 0),
485_m1 ( 0),
486_m2 ( 0),
487_m3 ( 0),
488_m4 ( 0),
489_m5 ( 0),
490_m6 ( 0),
491_vertexZ ( 0),
492
493_n1_1_vsPhi ( 0),
494_n1_1_vsM ( 0), // w/ weight
495_n1Nw_1_vsM ( 0), // w/o weight
496
497_n1_1_vsPt ( 0),
498_n1_1P_vsZVsEtaVsPhiVsPt ( 0),
499_n1_1M_vsZVsEtaVsPhiVsPt ( 0),
500_dedxVsP_1 ( 0),
501_corrDedxVsP_1 ( 0),
502_betaVsP_1 ( 0),
503
504_n1_2_vsPhi ( 0),
505_n1_2_vsM ( 0),
506_n1Nw_2_vsM ( 0),
507_n1_2_vsPt ( 0),
508_n1_2P_vsZVsEtaVsPhiVsPt ( 0),
509_n1_2M_vsZVsEtaVsPhiVsPt ( 0),
510_dedxVsP_2 ( 0),
511_corrDedxVsP_2 ( 0),
512_betaVsP_2 ( 0),
513
514_n1_3_vsPhi ( 0),
515_n1_3_vsM ( 0),
516_n1Nw_3_vsM ( 0),
517_n1_3_vsPt ( 0),
518_n1_3P_vsZVsEtaVsPhiVsPt ( 0),
519_n1_3M_vsZVsEtaVsPhiVsPt ( 0),
520_dedxVsP_3 ( 0),
521_corrDedxVsP_3 ( 0),
522_betaVsP_3 ( 0),
523
524_n2_12_vsPhi ( 0),
525_n2_13_vsPhi ( 0),
526_n2_23_vsPhi ( 0),
527_n3_123_vsPhi ( 0),
528
529_n2_12_vsM ( 0),
530_n2_13_vsM ( 0),
531_n2_23_vsM ( 0),
532_n3_123_vsM ( 0),
533
534_n2Nw_12_vsM ( 0),
535_n2Nw_13_vsM ( 0),
536_n2Nw_23_vsM ( 0),
537_n3Nw_123_vsM ( 0),
538
539n1Name("NA"),
540n2Name("NA"),
541n3Name("NA"),
542n1NwName("NA"),
543n2NwName("NA"),
544n3NwName("NA"),
545n1n1Name("NA"),
546n1n1n1Name("NA"),
547n2n1Name("NA"),
548r1Name("NA"),
549r2Name("NA"),
550r3Name("NA"),
551r2r1Name("NA"),
552c2Name("NA"),
553c3Name("NA"),
554d3Name("NA"),
555p3Name("NA"),
556
557intR2Name("NA"),
558binCorrName("NA"),
559intBinCorrName("NA"),
560
561countsName("NA"),
562part_1_Name("NA"),
563part_1P_Name("NA"),
564part_1M_Name("NA"),
565part_2_Name("NA"),
566part_2P_Name("NA"),
567part_2M_Name("NA"),
568part_3_Name("NA"),
569part_3P_Name("NA"),
570part_3M_Name("NA"),
571pair_12_Name("NA"),
572pair_13_Name("NA"),
573pair_23_Name("NA"),
574triplet_Name("NA"),
575
576_title_counts("NA"),
577_title_m0("NA"),
578_title_m1("NA"),
579_title_m2("NA"),
580_title_m3("NA"),
581_title_m4("NA"),
582_title_m5("NA"),
583_title_m6("NA"),
584
585_title_phi_1("NA"),
586_title_phi_2("NA"),
587_title_phi_3("NA"),
588
589_title_phi_12("NA"),
590_title_phi_13("NA"),
591_title_phi_23("NA"),
592_title_phi_123("NA"),
593
594vsZ("NA"),
595vsM("NA"),
596vsPt("NA"),
597vsPhi("NA"),
598vsEta("NA"),
599vsEtaPhi("NA")
600{
601 printf("2nd constructor called ");
602
603 DefineOutput(0, TList::Class());
604
605 printf("passed ");
606
607}
608
609AliAnalysisTask3PCorrelations::~AliAnalysisTask3PCorrelations()
610{
611 // no ops --- at least for now....
612}
613
614void AliAnalysisTask3PCorrelations::UserCreateOutputObjects()
615{
616 cout<< "AliAnalysisTask3PCorrelations::CreateOutputObjects() Starting " << endl;
617 OpenFile(0);
618 _outputHistoList = new TList();
619 _outputHistoList->SetOwner();
620
621 //if (_useWeights) DefineInput(2, TList::Class());
622
623 //Setup the parameters of the histograms
624 _nBins_M0 = 500; _min_M0 = 0.; _max_M0 = 5000.; _width_M0 = (_max_M0-_min_M0)/_nBins_M0;
625 _nBins_M1 = 500; _min_M1 = 0.; _max_M1 = 5000.; _width_M1 = (_max_M1-_min_M1)/_nBins_M1;
626 _nBins_M2 = 500; _min_M2 = 0.; _max_M2 = 5000.; _width_M2 = (_max_M2-_min_M2)/_nBins_M2;
627 _nBins_M3 = 500; _min_M3 = 0.; _max_M3 = 5000.; _width_M3 = (_max_M3-_min_M3)/_nBins_M3;
628 _nBins_M4 = 100; _min_M4 = 0.; _max_M4 = 100.; _width_M4 = (_max_M4-_min_M4)/_nBins_M4;
629 _nBins_M5 = 100; _min_M5 = 0.; _max_M5 = 100.; _width_M5 = (_max_M5-_min_M5)/_nBins_M5;
630 _nBins_M6 = 100; _min_M6 = 0.; _max_M6 = 100.; _width_M6 = (_max_M6-_min_M6)/_nBins_M6;
631
632 _min_vertexZ = _vertexZMin;
633 _max_vertexZ = _vertexZMax;
634 _width_vertexZ = 0.5;
635 _nBins_vertexZ = int(0.5+ (_max_vertexZ - _min_vertexZ)/_width_vertexZ);
636
637 _nBins_pt_1 = int(0.5+ (_max_pt_1 -_min_pt_1 )/_width_pt_1);
638 _nBins_eta_1 = int(0.5+ (_max_eta_1-_min_eta_1)/_width_eta_1);
639 _width_phi_1 = (_max_phi_1 - _min_phi_1) /_nBins_phi_1;
640 _nBins_etaPhi_1 = _nBins_phi_1 * _nBins_eta_1;
641 _nBins_zEtaPhiPt_1 = _nBins_vertexZ * _nBins_phi_1 * _nBins_eta_1 * _nBins_pt_1;
642
643 _nBins_pt_2 = int(0.5+ (_max_pt_2 -_min_pt_2 )/_width_pt_2);
644 _nBins_eta_2 = int(0.5+ (_max_eta_2-_min_eta_2)/_width_eta_2);
645 _width_phi_2 = (_max_phi_2 - _min_phi_2) /_nBins_phi_2;
646 _nBins_etaPhi_2 = _nBins_phi_2 * _nBins_eta_2;
647 _nBins_zEtaPhiPt_2 = _nBins_vertexZ * _nBins_phi_2 * _nBins_eta_2 * _nBins_pt_2;
648
649 _nBins_pt_3 = int(0.5+ (_max_pt_3 -_min_pt_3 )/_width_pt_3);
650 _nBins_eta_3 = int(0.5+ (_max_eta_3-_min_eta_3)/_width_eta_3);
651 _width_phi_3 = (_max_phi_3 - _min_phi_3) /_nBins_phi_3;
652 _nBins_etaPhi_3 = _nBins_phi_3 * _nBins_eta_3;
653 _nBins_zEtaPhiPt_3 = _nBins_vertexZ * _nBins_phi_3 * _nBins_eta_3 * _nBins_pt_3;
654
655
656 _nBins_etaPhi_12 = _nBins_etaPhi_1 * _nBins_etaPhi_2;
657 _nBins_etaPhi_13 = _nBins_etaPhi_1 * _nBins_etaPhi_3;
658 _nBins_etaPhi_23 = _nBins_etaPhi_2 * _nBins_etaPhi_3;
659 _nBins_etaPhi_123 = _nBins_etaPhi_1 * _nBins_etaPhi_2 * _nBins_etaPhi_3;
660
661 _nBins_phi_12 = _nBins_phi_1 * _nBins_phi_2;
662 _nBins_phi_13 = _nBins_phi_1 * _nBins_phi_3;
663 _nBins_phi_23 = _nBins_phi_2 * _nBins_phi_3;
664 _nBins_phi_123 = _nBins_phi_1 * _nBins_phi_2 * _nBins_phi_3;
665
666
667 //setup the work arrays
668 if (_singlesOnly)
669 {
670 __n1_1_vsPt = getDoubleArray(_nBins_pt_1, 0.);
671 __n1_1P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_1, 0.);
672 __n1_1M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_1, 0.);
673 __n1_2_vsPt = getDoubleArray(_nBins_pt_2, 0.);
674 __n1_2P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_2, 0.);
675 __n1_2M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_2, 0.);
676 __n1_3_vsPt = getDoubleArray(_nBins_pt_3, 0.);
677 __n1_3P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_3, 0.);
678 __n1_3M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_3, 0.);
679 }
680 else
681 {
682 _id_1 = new int[arraySize];
683 //_charge_1 = new int[arraySize];
684 _iPhi_1 = new int[arraySize];
685 //_pt_1 = new float[arraySize];
686 //_px_1 = new float[arraySize];
687 //_py_1 = new float[arraySize];
688 //_pz_1 = new float[arraySize];
689 _correction_1 = new float[arraySize];
690 //_dedx_1 = new float[arraySize];
691 __n1_1_vsPhi = getDoubleArray(_nBins_phi_1, 0.);
692
693 _id_2 = new int[arraySize];
694 //_charge_2 = new int[arraySize];
695 _iPhi_2 = new int[arraySize];
696 //_pt_2 = new float[arraySize];
697 //_px_2 = new float[arraySize];
698 //_py_2 = new float[arraySize];
699 //_pz_2 = new float[arraySize];
700 _correction_2 = new float[arraySize];
701 //_dedx_2 = new float[arraySize];
702 __n1_2_vsPhi = getDoubleArray(_nBins_phi_2, 0.);
703
704 _id_3 = new int[arraySize];
705 //_charge_3 = new int[arraySize];
706 _iPhi_3 = new int[arraySize];
707 //_pt_3 = new float[arraySize];
708 //_px_3 = new float[arraySize];
709 //_py_3 = new float[arraySize];
710 //_pz_3 = new float[arraySize];
711 _correction_3 = new float[arraySize];
712 //_dedx_3 = new float[arraySize];
713 __n1_3_vsPhi = getDoubleArray(_nBins_phi_3, 0.);
714
715 __n2_12_vsPhi = getFloatArray(_nBins_phi_12, 0.);
716 __n2_13_vsPhi = getFloatArray(_nBins_phi_13, 0.);
717 __n2_23_vsPhi = getFloatArray(_nBins_phi_23, 0.);
718 __n3_123_vsPhi = getFloatArray(_nBins_phi_123, 0.);
719 }
720
721
722 // Setup all the labels needed.
723 part_1_Name = "_1";
724 part_1P_Name = "_1P";
725 part_1M_Name = "_1M";
726 part_2_Name = "_2";
727 part_2P_Name = "_2P";
728 part_2M_Name = "_2M";
729 part_3_Name = "_3";
730 part_3P_Name = "_3P";
731 part_3M_Name = "_3M";
732 pair_12_Name = "_12";
733 pair_13_Name = "_13";
734 pair_23_Name = "_23";
735 triplet_Name = "_123";
736
737 n1Name = "n1";
738 n2Name = "n2";
739 n3Name = "n3";
740 n1NwName = "n1Nw";
741 n2NwName = "n2Nw";
742 n3NwName = "n3Nw";
743
744 r1Name = "r1";
745 r2Name = "r2";
746 r3Name = "r3";
747 r2r1Name = "r2r1";
748 c2Name = "c2";
749 c3Name = "c3";
750 d3Name = "d3";
751 p3Name = "p3";
752
753 intR2Name = "intR2";
754 binCorrName = "binCorr";
755 intBinCorrName = "intBinCorr";
756
757
758 _title_counts = "yield";
759 _title_m0 = "M_{0}";
760 _title_m1 = "M_{1}";
761 _title_m2 = "M_{2}";
762 _title_m3 = "M_{3}";
763 _title_m4 = "V0Centrality";
764 _title_m5 = "TrkCentrality";
765 _title_m6 = "SpdCentrality";
766
767 _title_phi_1 = "#varphi_{1} (radian)";
768 _title_phi_2 = "#varphi_{2} (radian)";
769 _title_phi_3 = "#varphi_{3} (radian)";
770 _title_phi_12 = "#eta_{1}#times#varphi_{1}#times#eta_{2}#times#varphi_{2}";
771 _title_phi_13 = "#eta_{1}#times#varphi_{1}#times#eta_{3}#times#varphi_{3}";
772 _title_phi_23 = "#eta_{2}#times#varphi_{2}#times#eta_{3}#times#varphi_{3}";
773
774 vsZ = "_vsZ";
775 vsM = "_vsM";
776 vsPt = "_vsPt";
777 vsPhi = "_vsPhi";
778 vsEta = "_vsEta";
779 vsEtaPhi = "vsPhi";
780
781
782 if (_useWeights)
783 {
784 int iZ, iPhi, iPt;
785 int iZ1,iPhi1,iPt1;
786 int a, b;
787 if (_weight_1P)
788 {
789 _correctionWeight_1P = new float[_nBins_vertexZ*_nBins_etaPhi_1*_nBins_pt_1];
790 _correctionWeight_1M = new float[_nBins_vertexZ*_nBins_etaPhi_1*_nBins_pt_1];
791 a = _nBins_pt_1;
792 b = _nBins_etaPhi_1*_nBins_pt_1;
793 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
794 {
795 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_1; iPhi++, iPhi1++)
796 {
797 for (iPt=0,iPt1=1; iPt<_nBins_pt_1; iPt++, iPt1++)
798 {
799 _correctionWeight_1P[iZ*b+iPhi*a+iPt] = _weight_1P->GetBinContent(iZ1,iPhi1,iPt1);
800 _correctionWeight_1M[iZ*b+iPhi*a+iPt] = _weight_1M->GetBinContent(iZ1,iPhi1,iPt1);
801 }
802 }
803 }
804 } // _weight_1
805 else
806 {
807 AliError("AliAnalysisTask3PCorrelations:: _weight_1 is a null pointer.");
808 return;
809 }
810 if (_weight_2P)
811 {
812 _correctionWeight_2P = new float[_nBins_vertexZ*_nBins_etaPhi_2*_nBins_pt_2];
813 _correctionWeight_2M = new float[_nBins_vertexZ*_nBins_etaPhi_2*_nBins_pt_2];
814 a = _nBins_pt_2;
815 b = _nBins_etaPhi_2*_nBins_pt_2;
816 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
817 {
818 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_2; iPhi++, iPhi1++)
819 {
820 for (iPt=0,iPt1=1; iPt<_nBins_pt_2; iPt++, iPt1++)
821 {
822 _correctionWeight_2P[iZ*b+iPhi*a+iPt] = _weight_2P->GetBinContent(iZ1,iPhi1,iPt1);
823 _correctionWeight_2M[iZ*b+iPhi*a+iPt] = _weight_2M->GetBinContent(iZ1,iPhi1,iPt1);
824 }
825 }
826 }
827 } // _weight_2
828 else
829 {
830 AliError("AliAnalysisTask3PCorrelations:: _weight_2 is a null pointer.");
831 return;
832 }
833 if (_weight_3P)
834 {
835 _correctionWeight_3P = new float[_nBins_vertexZ*_nBins_etaPhi_3*_nBins_pt_3];
836 _correctionWeight_3M = new float[_nBins_vertexZ*_nBins_etaPhi_3*_nBins_pt_3];
837 a = _nBins_pt_3;
838 b = _nBins_etaPhi_3*_nBins_pt_3;
839 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
840 {
d56adb45 841 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_3; iPhi++, iPhi1++)
17039b7c 842 {
843 for (iPt=0,iPt1=1; iPt<_nBins_pt_3; iPt++, iPt1++)
844 {
845 _correctionWeight_3P[iZ*b+iPhi*a+iPt] = _weight_3P->GetBinContent(iZ1,iPhi1,iPt1);
846 _correctionWeight_3M[iZ*b+iPhi*a+iPt] = _weight_3M->GetBinContent(iZ1,iPhi1,iPt1);
847 }
848 }
849 }
850 } // _weight_2
851 else
852 {
853 AliError("AliAnalysisTask3PCorrelations:: _weight_2 is a null pointer.");
854 return;
855 }
856 }
857
858 createHistograms();
859 PostData(0,_outputHistoList);
860
861 cout<< "AliAnalysisTask3PCorrelations::CreateOutputObjects() DONE " << endl;
862
863}
864
865void AliAnalysisTask3PCorrelations::createHistograms()
866{
867 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() Creating Event Histos");
868 TString name;
869
870 // bin index : what it is...
871 // 0 : number of event submitted
872 // 1 : number accepted by centrality cut
873 // 2 : number accepted by centrality cut and z cut
874 // 3 : total number of particles that satisfied filter 1
875 // 4 : total number of particles that satisfied filter 2
876 // 5 : total number of particles that satisfied filter 3
877 name = "eventAccounting";
878 _eventAccounting = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
879
880 name = "m0"; _m0 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
881 name = "m1"; _m1 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
882 name = "m2"; _m2 = createHisto1D(name,name,_nBins_M2, _min_M2, _max_M2, _title_m2, _title_counts);
883 name = "m3"; _m3 = createHisto1D(name,name,_nBins_M3, _min_M3, _max_M3, _title_m3, _title_counts);
884 name = "m4"; _m4 = createHisto1D(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
885 name = "m5"; _m5 = createHisto1D(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
886 name = "m6"; _m6 = createHisto1D(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
887 name = "zV"; _vertexZ = createHisto1D(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
888
889 TString title_vsM;
890 //_centralityMethod
891 switch (_centralityMethod)
892 {
893 case 0: _nBins_vsM = _nBins_M0; _min_vsM = _min_M0; _max_vsM = _max_M0; _width_vsM = _width_M0; title_vsM = _title_m0; break;
894 case 1: _nBins_vsM = _nBins_M1; _min_vsM = _min_M1; _max_vsM = _max_M1; _width_vsM = _width_M1; title_vsM = _title_m1; break;
895 case 2: _nBins_vsM = _nBins_M2; _min_vsM = _min_M2; _max_vsM = _max_M2; _width_vsM = _width_M2; title_vsM = _title_m2; break;
896 case 3: _nBins_vsM = _nBins_M3; _min_vsM = _min_M3; _max_vsM = _max_M3; _width_vsM = _width_M3; title_vsM = _title_m3; break;
897 case 4: _nBins_vsM = _nBins_M4; _min_vsM = _min_M4; _max_vsM = _max_M4; _width_vsM = _width_M4; title_vsM = _title_m4; break;
898 case 5: _nBins_vsM = _nBins_M5; _min_vsM = _min_M5; _max_vsM = _max_M5; _width_vsM = _width_M5; title_vsM = _title_m5; break;
899 case 6: _nBins_vsM = _nBins_M6; _min_vsM = _min_M6; _max_vsM = _max_M6; _width_vsM = _width_M6; title_vsM = _title_m6; break;
900 }
901
902 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() Creating Part 1 Histos");
903
904 if (_singlesOnly)
905 {
906 name = n1Name+part_1_Name+vsPt; _n1_1_vsPt = createHisto1F(name,name, _nBins_pt_1, _min_pt_1, _max_pt_1, "pt1", "counts");
907 name = "dedxVsP_1"; _dedxVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
908 name = "betaVsP_1"; _betaVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
909 name = n1Name+part_1P_Name+vsZ+vsEtaPhi+vsPt; _n1_1P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_phi_1, "pt1");
910 name = n1Name+part_1M_Name+vsZ+vsEtaPhi+vsPt; _n1_1M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_phi_1, "pt1");
911
912 name = n1Name+part_2_Name+vsPt; _n1_2_vsPt = createHisto1F(name,name, _nBins_pt_2, _min_pt_2, _max_pt_2, "pt2", "counts");
913 name = "dedxVsP_2"; _dedxVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
914 name = "betaVsP_2"; _betaVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
915 name = n1Name+part_2P_Name+vsZ+vsEtaPhi+vsPt; _n1_2P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_phi_2, "pt2");
916 name = n1Name+part_2M_Name+vsZ+vsEtaPhi+vsPt; _n1_2M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_phi_2, "pt2");
917
918 name = n1Name+part_3_Name+vsPt; _n1_3_vsPt = createHisto1F(name,name, _nBins_pt_3, _min_pt_3, _max_pt_3, "pt3", "counts");
919 name = "dedxVsP_3"; _dedxVsP_3 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
920 name = "betaVsP_3"; _betaVsP_3 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
921 name = n1Name+part_3P_Name+vsZ+vsEtaPhi+vsPt; _n1_3P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_3, 0., double(_nBins_etaPhi_3), _nBins_pt_3, _min_pt_3, _max_pt_3, "zVertex", _title_phi_3, "pt3");
922 name = n1Name+part_3M_Name+vsZ+vsEtaPhi+vsPt; _n1_3M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_3, 0., double(_nBins_etaPhi_3), _nBins_pt_3, _min_pt_3, _max_pt_3, "zVertex", _title_phi_3, "pt3");
923 }
924 else
925 {
926 name = n1Name+part_1_Name+vsPhi; _n1_1_vsPhi = createHisto1F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _title_phi_1, "counts");
927 name = n1Name+part_2_Name+vsPhi; _n1_2_vsPhi = createHisto1F(name,name, _nBins_phi_2, _min_phi_2, _max_phi_2, _title_phi_2, "counts");
928 name = n1Name+part_3_Name+vsPhi; _n1_3_vsPhi = createHisto1F(name,name, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_3, "counts");
929
930 name = n1Name+part_1_Name + vsM; _n1_1_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{1}>");
931 name = n1Name+part_2_Name + vsM; _n1_2_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{2}>");
932 name = n1Name+part_3_Name + vsM; _n1_3_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{3}>");
933
934 name = n1NwName+part_1_Name+vsM; _n1Nw_1_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{1}>");
935 name = n1NwName+part_2_Name+vsM; _n1Nw_2_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{2}>");
936 name = n1NwName+part_3_Name+vsM; _n1Nw_3_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{3}>");
937
938 name = n2Name+pair_12_Name+vsPhi; _n2_12_vsPhi = createHisto2F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_2, _min_phi_2, _max_phi_2, _title_phi_1, _title_phi_2, "<N_{12}>");
939 name = n2Name+pair_13_Name+vsPhi; _n2_13_vsPhi = createHisto2F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_2, _title_phi_3, "<N_{13}>");
940 name = n2Name+pair_23_Name+vsPhi; _n2_23_vsPhi = createHisto2F(name,name, _nBins_phi_2, _min_phi_2, _max_phi_2, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_1, _title_phi_3, "<N_{23}>");
941 name = n3Name+triplet_Name+vsPhi; _n3_123_vsPhi = createHisto3F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_2, _min_phi_2, _max_phi_2, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_1, _title_phi_2, _title_phi_3);
942
943 name = n2Name+pair_12_Name+vsM; _n2_12_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{12}>");
944 name = n2Name+pair_13_Name+vsM; _n2_13_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{13}>");
945 name = n2Name+pair_23_Name+vsM; _n2_23_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{23}>");
946 name = n3Name+pair_23_Name+vsM; _n3_123_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{123}>");
947 name = n2NwName+pair_12_Name+vsM; _n2Nw_12_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{12}>");
948 name = n2NwName+pair_13_Name+vsM; _n2Nw_13_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{13}>");
949 name = n2NwName+pair_23_Name+vsM; _n2Nw_23_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{23}>");
950 name = n3NwName+triplet_Name+vsM; _n3Nw_123_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{123}>");
951
952 }
953
954 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() All Done");
955}
956//-----------------------//
957
958void AliAnalysisTask3PCorrelations::finalizeHistograms()
959{
960
961 AliInfo("AliAnalysisTask3PCorrelations::finalizeHistograms() starting");
962 AliInfo(Form("CorrelationAnalyzers::finalizeHistograms() _eventCount : %d",int(_eventCount)));
963
964 if (_singlesOnly)
965 {
966 fillHistoWithArray(_n1_1_vsPt, __n1_1_vsPt, _nBins_pt_1);
967 fillHistoWithArray(_n1_1P_vsZVsEtaVsPhiVsPt, __n1_1P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
968 fillHistoWithArray(_n1_1M_vsZVsEtaVsPhiVsPt, __n1_1M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
969
970 fillHistoWithArray(_n1_2_vsPt, __n1_2_vsPt, _nBins_pt_2);
971 fillHistoWithArray(_n1_2P_vsZVsEtaVsPhiVsPt, __n1_2P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
972 fillHistoWithArray(_n1_2M_vsZVsEtaVsPhiVsPt, __n1_2M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
973
974 fillHistoWithArray(_n1_3_vsPt, __n1_3_vsPt, _nBins_pt_3);
975 fillHistoWithArray(_n1_3P_vsZVsEtaVsPhiVsPt, __n1_3P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_3, _nBins_pt_3);
976 fillHistoWithArray(_n1_3M_vsZVsEtaVsPhiVsPt, __n1_3M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_3, _nBins_pt_3);
977
978 }
979 else
980 {
981 fillHistoWithArray(_n1_1_vsPhi, __n1_1_vsPhi, _nBins_phi_1);
982 fillHistoWithArray(_n1_2_vsPhi, __n1_2_vsPhi, _nBins_phi_2);
983 fillHistoWithArray(_n1_3_vsPhi, __n1_3_vsPhi, _nBins_phi_3);
984 fillHistoWithArray(_n2_12_vsPhi, __n2_12_vsPhi, _nBins_phi_1, _nBins_phi_2);
985 fillHistoWithArray(_n2_13_vsPhi, __n2_13_vsPhi, _nBins_phi_1, _nBins_phi_3);
986 fillHistoWithArray(_n2_23_vsPhi, __n2_23_vsPhi, _nBins_phi_2, _nBins_phi_3);
987 fillHistoWithArray(_n3_123_vsPhi, __n3_123_vsPhi, _nBins_phi_1, _nBins_phi_2, _nBins_phi_3);
988 }
989 AliInfo("AliAnalysisTask3PCorrelations::finalizeHistograms() Done ");
990}
991//--------------//
992
993
994void AliAnalysisTask3PCorrelations::UserExec(Option_t */*option*/)
995{
996 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - Starting!!!!" << endl;
997
71e14f26 998 int k1=0,k2=0,k3=0;
999 int iPhi=0, iEta=0, iEtaPhi=0, iPt=0, charge=0;
1000 float q=0, p=0, phi=0, pt=0, eta=0, corr=0, dedx=0, px=0, py=0, pz=0;
1001 int ij_12=0, ij_13=0, ij_23=0, ijk_123=0;
1002 int id_1=0, id_2=0, id_3=0, iPhi_1=0, iPhi_2=0, iPhi_3=0;
1003 float corr_1=0, corr_2=0, corr_3=0;
1004 float corr_12=0, corr_13=0, corr_23=0, corr_123=0;
1005 int iVertex=0, iVertexP1=0, iVertexP2=0, iVertexP3=0;
1006 int iZEtaPhiPt=0;
1007 //float massElecSq = 2.5e-7=0;
17039b7c 1008 double b[2];
1009 double bCov[3];
71e14f26 1010 const AliAODVertex* vertex=0;
1011 int nClus=0;
1012 bool bitOK=0;
17039b7c 1013
1014 // count all events looked at here
1015 _eventCount++;
1016
1017 if (_eventAccounting)
1018 {
1019 _eventAccounting->Fill(0);// count all calls to this function
1020 }
1021 else
1022 {
1023 cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - !_eventAccounting" << endl;
1024 cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - Skip this task" << endl;
1025 return;
1026 }
1027
1028 //Get pointer to current event
1029 //fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());
1030 fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
1031
1032 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 2" << endl;
1033
1034 if(!fAODEvent)
1035 {
1036 AliError("AliAnalysisTask3PCorrelations::Exec(Option_t *option) !fAODEvent");
1037 return;
1038 }
1039
1040
1041 float v0Centr = -999.;
1042 float trkCentr = -999.;
1043 float spdCentr = -999.;
1044 float vertexX = -999;
1045 float vertexY = -999;
1046 float vertexZ = -999;
1047 float vertexXY = -999;
1048 float dcaZ = -999;
1049 float dcaXY = -999;
1050 float centrality = -999;
1051 k1 = k2 = k3 = 0;
1052 __n1_1 = __n1_2 = __n1_3 = __n1Nw_1 = __n1Nw_2 = __n1Nw_3 = 0;
1053
1054 _eventAccounting->Fill(1);// count all calls to this function with a valid pointer
1055
1056 //Centrality
0a918d8d 1057 AliCentrality* centralityObject = ((AliVAODHeader*)fAODEvent->GetHeader())->GetCentralityP();
17039b7c 1058 if (centralityObject)
1059 {
1060 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 6" << endl;
1061
1062 v0Centr = centralityObject->GetCentralityPercentile("V0M");
1063 trkCentr = centralityObject->GetCentralityPercentile("TRK");
1064 spdCentr = centralityObject->GetCentralityPercentile("CL1");
1065 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 7" << endl;
1066
1067 }
1068 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 8" << endl;
1069
4640c275 1070 _nTracks = fAODEvent->GetNumberOfTracks();
17039b7c 1071 _mult0 = 0;
1072 _mult1 = 0;
1073 _mult2 = 0;
1074 _mult3 = _nTracks;
1075 _mult4 = v0Centr;
1076 _mult5 = trkCentr;
1077 _mult6 = spdCentr;
1078 _field = fAODEvent->GetMagneticField();
1079
1080 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - _field:" << _field << endl;
1081
1082 //_centralityMethod
1083 switch (_centralityMethod)
1084 {
1085 case 0: centrality = _mult0; break;
1086 case 1: centrality = _mult1; break;
1087 case 2: centrality = _mult2; break;
1088 case 3: centrality = _mult3; break;
1089 case 4: centrality = _mult4; break;
1090 case 5: centrality = _mult5; break;
1091 case 6: centrality = _mult6; break;
1092 }
1093
1094 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 10" << endl;
1095
1096 //filter on centrality
1097 if ( centrality < _centralityMin ||
1098 centrality > _centralityMax)
1099 {
1100 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 11" << endl;
1101
1102 // we dont analyze this event here...
1103 return;
1104 }
1105 _eventAccounting->Fill(2);// count all events with right centrality
1106 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 12" << endl;
1107
1108 // filter on z and xy vertex
1109 vertex = (AliAODVertex*) fAODEvent->GetPrimaryVertexSPD();
1110 if (!vertex || vertex->GetNContributors()<1)
1111 {
1112 vertexZ = -999;
1113 vertexXY = -999;
1114 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - No valid vertex object or poor vertex" << endl;
1115 }
1116 else
1117 {
1118 vertexX = vertex->GetX();
1119 vertexY = vertex->GetY();
1120 vertexZ = vertex->GetZ();
1121 vertexXY = sqrt(vertexX*vertexX+vertexY*vertexY);
1122 }
1123 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 13" << endl;
1124
1125 // cout << "vertexZ : " << vertexZ << endl;
1126 // cout << "vertexXY: " << vertexXY << endl;
1127 // cout << "_vertexZMin: " << _vertexZMin << endl;
1128 // cout << "_vertexZMax: " << _vertexZMax << endl;
1129 // cout << "_vertexXYMin: " << _vertexXYMin << endl;
1130 // cout << "_vertexXYMax: " << _vertexXYMax << endl;
1131
1132 if (!vertex ||
1133 vertexZ < _vertexZMin ||
1134 vertexZ > _vertexZMax ||
1135 vertexXY < _vertexXYMin ||
1136 vertexXY > _vertexXYMax)
1137 return;
1138
1139
1140 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 14" << endl;
1141
1142 iVertex = int((vertexZ-_min_vertexZ)/_width_vertexZ);
1143 iVertexP1 = iVertex*_nBins_etaPhiPt_1;
1144 iVertexP2 = iVertex*_nBins_etaPhiPt_2;
1145 iVertexP3 = iVertex*_nBins_etaPhiPt_3;
1146 if (iVertex<0 || iVertex>=_nBins_vertexZ)
1147 {
1148 AliError("AliAnalysisTask3PCorrelations::Exec(Option_t *option) iVertex<0 || iVertex>=_nBins_vertexZ ");
1149 return;
1150 }
1151 _eventAccounting->Fill(3);// count all calls to this function with a valid pointer
1152 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 15" << endl;
1153
1154
1155 // loop over all particles for singles
1156 //debug() << "_nTracks:"<< _nTracks << endl;
1157 //reset single particle counters
1158 for (int iTrack=0; iTrack< _nTracks; iTrack++)
1159 {
1160 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 16 iTrack:" << iTrack << endl;
1161
1162 AliAODTrack * t = (AliAODTrack *) fAODEvent->GetTrack(iTrack);
1163 if (!t)
1164 {
1165 AliError(Form("AliAnalysisTask3PCorrelations::Exec(Option_t *option) No track ofr iTrack=%d", iTrack));
1166 continue;
1167 }
1168
1169 q = t->Charge();
1170 charge = int(q);
1171 phi = t->Phi();
1172 p = t->P();
1173 pt = t->Pt();
1174 px = t->Px();
1175 py = t->Py();
1176 pz = t->Pz();
1177 eta = t->Eta();
1178 dedx = t->GetTPCsignal();
1179 nClus = t->GetTPCNcls();
1180 bitOK = t->TestFilterBit(_trackFilterBit);
1181 if (!bitOK ||
1182 dedx < _dedxMin ||
1183 dedx > _dedxMax ||
1184 nClus < _nClusterMin) continue;
1185
1186 // cout << "_trackFilterBit:" << _trackFilterBit << " Track returns:" << bitOK << endl;
1187 // cout << " pt:" << pt << " _min_pt_1:" << _min_pt_1 << " _max_pt_1:" << _max_pt_1<< endl;
1188 // cout << " phi:" << phi << endl;
1189 // cout << " eta:" << eta << " _min_eta_1:" << _min_eta_1 << " _max_eta_1:" << _max_eta_1<< endl;
1190 // cout << " dedx:" << dedx << " _dedxMin:" << _dedxMin << " _dedxMax:" << _dedxMax << endl;
1191 // cout << "nclus:" << nClus<< " _nClusterMin:" << _nClusterMin << endl;
1192 if (pt >= _min_pt_1 &&
1193 pt < _max_pt_1 &&
1194 eta >= _min_eta_1 &&
1195 eta < _max_eta_1)
1196 {
1197 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 1:" << endl;
1198 // Get the dca information
14fb8e86 1199 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1200 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
17039b7c 1201 {
1202 dcaXY = b[0];
1203 dcaZ = b[1];
1204 }
1205 else
1206 {
1207 dcaXY = -999999;
1208 dcaZ = -999999;
1209 }
14fb8e86 1210 delete clone;
17039b7c 1211 // cout << "1 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1212 // cout << "1 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1213
1214 // skip track if DCA too large
1215 if (dcaZ >= _dcaZMin &&
1216 dcaZ < _dcaZMax &&
1217 dcaXY >= _dcaXYMin &&
1218 dcaXY < _dcaXYMax)
1219 continue; //track does not have a valid DCA
1220 // cout << "keep track:" << endl;
1221
1222 iPhi = int( phi/_width_phi_1);
1223 // cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack<< endl<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1224 if (iPhi<0 || iPhi>=_nBins_phi_1 )
1225 {
1226 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1227 return;
1228 }
1229
1230 iEta = int((eta-_min_eta_1)/_width_eta_1);
1231 if (iEta<0 || iEta>=_nBins_eta_1)
1232 {
1233 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1234 continue;
1235 }
1236 iPt = int((pt -_min_pt_1 )/_width_pt_1 );
1237 if (iPt<0 || iPt >=_nBins_pt_1)
1238 {
1239 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1240 continue;
1241 }
1242 iEtaPhi = iEta*_nBins_phi_1+iPhi;
1243 iZEtaPhiPt = iVertexP1 + iEtaPhi*_nBins_pt_1 + iPt;
1244
1245 if (charge>0 && _correctionWeight_1P)
1246 corr = _correctionWeight_1P[iZEtaPhiPt];
1247 else if (charge<0 && _correctionWeight_1M)
1248 corr = _correctionWeight_1M[iZEtaPhiPt];
1249 else
1250 corr = 1;
1251 // cout << "all good; process track:" << endl;
1252 if (_singlesOnly)
1253 {
1254 __n1_1_vsPt[iPt] += corr;
1255 if (charge>0)
1256 __n1_1P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1257 else if (charge>0)
1258 __n1_1M_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1259 }
1260 else
1261 {
1262 _id_1[k1] = iTrack;
1263 //_charge_1[k1] = charge;
1264 _iPhi_1[k1] = iPhi;
1265 _correction_1[k1] = corr;
1266 __n1_1 += corr;
1267 __n1_1_vsPhi[iPhi] += corr;
1268 __n1Nw_1 += 1;
1269 ++k1;
1270 if (k1>=arraySize)
1271 {
1272 AliError(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
1273 return;
1274 }
1275 }
1276 }
1277
1278 else if (pt >= _min_pt_2 &&
1279 pt < _max_pt_2 &&
1280 eta >= _min_eta_2 &&
1281 eta < _max_eta_2)
1282 {
1283 // Get the dca information
1284 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
14fb8e86 1285 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1286 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
17039b7c 1287 {
1288 dcaXY = b[0];
1289 dcaZ = b[1];
1290 }
1291 else
1292 {
1293 dcaXY = -999999;
1294 dcaZ = -999999;
1295 }
14fb8e86 1296 delete clone;
17039b7c 1297 // cout << "2 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1298 // cout << "2 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1299 // skip track if DCA too large
1300 if (dcaZ >= _dcaZMin &&
1301 dcaZ < _dcaZMax &&
1302 dcaXY >= _dcaXYMin &&
1303 dcaXY < _dcaXYMax)
1304 continue; //track does not have a valid DCA
1305
1306 iPhi = int( phi/_width_phi_2);
1307 //cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack << endl
1308 //<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1309 if (iPhi<0 || iPhi>=_nBins_phi_2 )
1310 {
1311 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1312 return;
1313 }
1314
1315 iEta = int((eta-_min_eta_2)/_width_eta_2);
1316 if (iEta<0 || iEta>=_nBins_eta_2)
1317 {
1318 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1319 continue;
1320 }
1321 iPt = int((pt -_min_pt_2 )/_width_pt_2 );
1322 if (iPt<0 || iPt >=_nBins_pt_2)
1323 {
1324 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1325 continue;
1326 }
1327
1328 iEtaPhi = iEta*_nBins_phi_2+iPhi;
1329 iZEtaPhiPt = iVertexP2 + iEtaPhi*_nBins_pt_2 + iPt;
1330 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2)
1331 {
1332 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2");
1333 continue;
1334 }
1335
1336 if (charge>0 && _correctionWeight_2P)
1337 corr = _correctionWeight_2P[iZEtaPhiPt];
1338 else if (charge<0 && _correctionWeight_2M)
1339 corr = _correctionWeight_2M[iZEtaPhiPt];
1340 else
1341 corr = 1;
1342
1343 if (_singlesOnly)
1344 {
1345 //_dedxVsP_2->Fill(p*q,dedx);
1346 __n1_2_vsPt[iPt] += corr; // cout << "step 15" << endl;
1347 if (charge>0)
1348 __n1_2P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1349 else if (charge>0)
1350 __n1_2M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1351 else
1352 {
1353 _id_2[k2] = iTrack; // cout << "step 1" << endl;
1354 //_charge_2[k2] = charge; // cout << "step 2" << endl;
1355 _iPhi_2[k2] = iPhi; // cout << "step 3" << endl;
1356 _correction_2[k2] = corr; // cout << "step 9" << endl;
1357 __n1_2 += corr; // cout << "step 10" << endl;
1358 __n1Nw_2 += 1;
1359 __n1_2_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1360 ++k2;
1361 if (k2>=arraySize)
1362 {
1363 AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize));
1364 return;
1365 }
1366 }
1367 }
1368
1369 else if (pt >= _min_pt_3 &&
1370 pt < _max_pt_3 &&
1371 eta >= _min_eta_3 &&
1372 eta < _max_eta_3)
1373 {
1374 // Get the dca information
1375 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
14fb8e86 1376 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1377 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
17039b7c 1378 {
1379 dcaXY = b[0];
1380 dcaZ = b[1];
1381 }
1382 else
1383 {
1384 dcaXY = -999999;
1385 dcaZ = -999999;
1386 }
14fb8e86 1387 delete clone;
17039b7c 1388 // skip track if DCA too large
1389 if (dcaZ >= _dcaZMin &&
1390 dcaZ < _dcaZMax &&
1391 dcaXY >= _dcaXYMin &&
1392 dcaXY < _dcaXYMax)
1393 continue; //track does not have a valid DCA
1394
1395 iPhi = int( phi/_width_phi_3);
1396 if (iPhi<0 || iPhi>=_nBins_phi_3 )
1397 {
1398 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_3");
1399 return;
1400 }
1401
1402 iEta = int((eta-_min_eta_3)/_width_eta_3);
1403 if (iEta<0 || iEta>=_nBins_eta_3)
1404 {
1405 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1406 continue;
1407 }
1408 iEtaPhi = iEta*_nBins_phi_3+iPhi;
1409 iZEtaPhiPt = iVertexP3 + iEtaPhi*_nBins_pt_3 + iPt;
1410 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3)
1411 {
1412 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3");
1413 continue;
1414 }
1415 if (charge>0 && _correctionWeight_3P)
1416 corr = _correctionWeight_3P[iZEtaPhiPt];
1417 else if (charge<0 && _correctionWeight_3M)
1418 corr = _correctionWeight_3M[iZEtaPhiPt];
1419 else
1420 corr = 1;
1421
1422 if (_singlesOnly)
1423 {
1424 __n1_3_vsPt[iPt] += corr; // cout << "step 15" << endl;
1425 if (charge>0)
1426 __n1_3P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1427 else if (charge>0)
1428 __n1_3M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1429 else
1430 {
1431 _id_3[k3] = iTrack; // cout << "step 1" << endl;
1432 //_charge_3[k3] = charge; // cout << "step 2" << endl;
1433 _iPhi_3[k3] = iPhi; // cout << "step 3" << endl;
1434 _correction_3[k3] = corr; // cout << "step 9" << endl;
1435 __n1_3 += corr; // cout << "step 10" << endl;
1436 __n1Nw_3 += 1;
1437 __n1_3_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1438 ++k3;
1439 if (k3>=arraySize)
1440 {
1441 AliWarning(Form("-W- k3 >=arraySize; arraySize: %d",arraySize));
1442 return;
1443 }
1444 }
1445 }
1446
1447 // cout << "done with track" << endl;
1448 } //iTrack
1449
1450 // cout << "Filling histograms now" << endl;
1451 _m0->Fill(_mult0);
1452 _m1->Fill(_mult1);
1453 _m2->Fill(_mult2);
1454 _m3->Fill(_mult3);
1455 _m4->Fill(_mult4);
1456 _m5->Fill(_mult5);
1457 _m6->Fill(_mult6);
1458 _vertexZ->Fill(vertexZ);
1459
1460
1461 //if singels only selected, do not fill pair histograms.
1462 if (_singlesOnly)
1463 {
1464
1465 }
1466 else
1467 {
1468 // reset pair counters
1469 _n1_1_vsM->Fill( centrality, __n1_1);
1470 _n1Nw_1_vsM->Fill( centrality, __n1Nw_1);
1471 _n1_2_vsM->Fill( centrality, __n1_2);
1472 _n1Nw_2_vsM->Fill( centrality, __n1Nw_2);
1473 _n1_3_vsM->Fill( centrality, __n1_3);
1474 _n1Nw_3_vsM->Fill( centrality, __n1Nw_3);
1475
1476 __n2_12 = __n2Nw_12 = __n2_13 = __n2Nw_13 = __n2_23 = __n2Nw_23 = __n3_123 = __n3Nw_123 = 0;
1477
1478 for (int i1=0; i1<k1; i1++)
1479 {
1480 // cout << " i1:" << i1 << endl;
1481 id_1 = _id_1[i1];
1482 iPhi_1 = _iPhi_1[i1];
1483 corr_1 = _correction_1[i1];
1484 //1 and 2
1485 for (int i2=0;i2<k2;i2++)
1486 {
1487 id_2 = _id_2[i2];
1488 if (id_1!=id_2)
1489 {
1490 iPhi_2 = _iPhi_2[i2];
1491 corr_2 = _correction_2[i2];
1492 corr_12 = corr_1*corr_2;
1493 ij_12 = iPhi_1*_nBins_phi_1 + iPhi_2;
1494 __n2_12_vsPhi[ij_12] += corr_12;
1495 __n2_12 += corr_12;
1496 __n2Nw_12 += 1;
1497 for (int i3=0;i3<k3;i3++)
1498 {
1499 id_3 = _id_3[i3];
1500 if (id_1!=id_3 && id_2!=id_3)
1501 {
1502 iPhi_3 = _iPhi_3[i3];
1503 corr_3 = _correction_3[i3];
1504 corr_123 = corr_12*corr_3;
1505 ijk_123 = ij_12 *_nBins_phi_2 + iPhi_3;
1506 __n3_123_vsPhi[ijk_123] += corr_123;
1507 __n3_123 += corr_123;
1508 __n3Nw_123 += 1;
1509 }
1510 } //i3
1511 }
1512 } //i2
1513 //1 and 3
1514 for (int i3=0;i3<k3;i3++)
1515 {
1516 id_3 = _id_3[i3];
1517 if (id_1!=id_3)
1518 {
1519 iPhi_3 = _iPhi_3[i3];
1520 corr_3 = _correction_3[i3];
1521 corr_13 = corr_1*corr_3;
1522 ij_13 = iPhi_1*_nBins_phi_1 + iPhi_3;
1523 __n2_13_vsPhi[ij_13] += corr_13;
1524 __n2_13 += corr_13;
1525 __n2Nw_13 += 1;
1526 }
1527 } //i3
1528 } //i1
1529
1530 //2 & 3
1531 for (int i2=0; i2<k2; i2++)
1532 {
1533 id_2 = _id_2[i2];
1534 iPhi_2 = _iPhi_2[i2];
1535 corr_2 = _correction_2[i2];
1536 for (int i3=0;i3<k3;i3++)
1537 {
1538 id_3 = _id_3[i3];
1539 if (id_2!=id_3)
1540 {
1541 iPhi_3 = _iPhi_3[i3];
1542 corr_3 = _correction_3[i3];
1543 corr_23 = corr_2*corr_3;
1544 ij_23 = iPhi_2*_nBins_phi_2 + iPhi_3;
1545 __n2_23_vsPhi[ij_23] += corr_23;
1546 __n2_23 += corr_23;
1547 __n2Nw_23 += 1;
1548 }
1549 } //i2
1550 }
1551 _n2_12_vsM->Fill( centrality, __n2_12);
1552 _n2_13_vsM->Fill( centrality, __n2_13);
1553 _n2_23_vsM->Fill( centrality, __n2_23);
1554 _n3_123_vsM->Fill( centrality, __n3_123);
1555 _n2Nw_12_vsM->Fill( centrality, __n2Nw_12);
1556 _n2Nw_13_vsM->Fill( centrality, __n2Nw_13);
1557 _n2Nw_23_vsM->Fill( centrality, __n2Nw_23);
1558 _n3Nw_123_vsM->Fill(centrality, __n3_123);
1559 }
1560
1561 // cout << "Event Done " << endl;
1562 PostData(0,_outputHistoList);
1563
1564}
1565
1566void AliAnalysisTask3PCorrelations::FinishTaskOutput()
1567{
1568 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Starting." << endl;
1569 finalizeHistograms();
1570 PostData(0,_outputHistoList);
1571 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Done." << endl;
1572}
1573
1574void AliAnalysisTask3PCorrelations::Terminate(Option_t* /*option*/)
1575{
1576 // no ops
1577}
1578
1579
1580//Tools
1581//===================================================================================================
1582void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, float * array, int size)
1583{
1584 int i, i1;
1585 float v1, ev1, v2, ev2, sum, esum;
1586 for (i=0, i1=1; i<size; ++i,++i1)
1587 {
1588 v1 = array[i]; ev1 = sqrt(v1);
1589 v2 = h->GetBinContent(i1);
1590 ev2 = h->GetBinError(i1);
1591 sum = v1 + v2;
1592 esum = sqrt(ev1*ev1+ev2*ev2);
1593 h->SetBinContent(i1,sum);
1594 h->SetBinError(i1,esum);
1595 }
1596}
1597
1598void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, float * array, int size1, int size2)
1599{
1600 int i, i1;
1601 int j, j1;
1602 float v1, ev1, v2, ev2, sum, esum;
1603 for (i=0, i1=1; i<size1; ++i,++i1)
1604 {
1605 for (j=0, j1=1; j<size2; ++j,++j1)
1606 {
1607 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1608 v2 = h->GetBinContent(i1,j1);
1609 ev2 = h->GetBinError(i1,j1);
1610 sum = v1 + v2;
1611 esum = sqrt(ev1*ev1+ev2*ev2);
1612 h->SetBinContent(i1,j1,sum);
1613 h->SetBinError(i1,j1,esum);
1614 }
1615 }
1616}
1617
1618void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, float * array, int size1, int size2, int size3)
1619{
1620 int i, i1;
1621 int j, j1;
1622 int k, k1;
1623 float v1, ev1, v2, ev2, sum, esum;
1624 int size23 = size2*size3;
1625 for (i=0, i1=1; i<size1; ++i,++i1)
1626 {
1627 for (j=0, j1=1; j<size2; ++j,++j1)
1628 {
1629 for (k=0, k1=1; k<size3; ++k,++k1)
1630 {
1631 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1632 v2 = h->GetBinContent(i1,j1,k1);
1633 ev2 = h->GetBinError(i1,j1,k1);
1634 sum = v1 + v2;
1635 esum = sqrt(ev1*ev1+ev2*ev2);
1636 h->SetBinContent(i1,j1,k1,sum);
1637 h->SetBinError(i1,j1,k1,esum);
1638 }
1639 }
1640 }
1641}
1642
1643void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, double * array, int size)
1644{
1645 int i, i1;
1646 double v1, ev1, v2, ev2, sum, esum;
1647 for (i=0, i1=1; i<size; ++i,++i1)
1648 {
1649 v1 = array[i]; ev1 = sqrt(v1);
1650 v2 = h->GetBinContent(i1);
1651 ev2 = h->GetBinError(i1);
1652 sum = v1 + v2;
1653 esum = sqrt(ev1*ev1+ev2*ev2);
1654 h->SetBinContent(i1,sum);
1655 h->SetBinError(i1,esum);
1656 }
1657}
1658
1659void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, double * array, int size1, int size2)
1660{
1661 int i, i1;
1662 int j, j1;
1663 double v1, ev1, v2, ev2, sum, esum;
1664 for (i=0, i1=1; i<size1; ++i,++i1)
1665 {
1666 for (j=0, j1=1; j<size2; ++j,++j1)
1667 {
1668 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1669 v2 = h->GetBinContent(i1,j1);
1670 ev2 = h->GetBinError(i1,j1);
1671 sum = v1 + v2;
1672 esum = sqrt(ev1*ev1+ev2*ev2);
1673 h->SetBinContent(i1,j1,sum);
1674 h->SetBinError(i1,j1,esum);
1675 }
1676 }
1677}
1678
1679void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, double * array, int size1, int size2, int size3)
1680{
1681 int i, i1;
1682 int j, j1;
1683 int k, k1;
1684 double v1, ev1, v2, ev2, sum, esum;
1685 int size23 = size2*size3;
1686 for (i=0, i1=1; i<size1; ++i,++i1)
1687 {
1688 for (j=0, j1=1; j<size2; ++j,++j1)
1689 {
1690 for (k=0, k1=1; k<size3; ++k,++k1)
1691 {
1692 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1693 v2 = h->GetBinContent(i1,j1,k1);
1694 ev2 = h->GetBinError(i1,j1,k1);
1695 sum = v1 + v2;
1696 esum = sqrt(ev1*ev1+ev2*ev2);
1697 h->SetBinContent(i1,j1,k1,sum);
1698 h->SetBinError(i1,j1,k1,esum);
1699 }
1700 }
1701 }
1702}
1703
1704//________________________________________________________________________
1705double * AliAnalysisTask3PCorrelations::getDoubleArray(int size, double v)
1706{
1707 /// Allocate an array of type double with n values
1708 /// Initialize the array to the given value
1709 double * array = new double [size];
1710 for (int i=0;i<size;++i) array[i]=v;
1711 return array;
1712}
1713
1714//________________________________________________________________________
1715float * AliAnalysisTask3PCorrelations::getFloatArray(int size, float v)
1716{
1717 /// Allocate an array of type float with n values
1718 /// Initialize the array to the given value
1719 float * array = new float [size];
1720 for (int i=0;i<size;++i) array[i]=v;
1721 return array;
1722}
1723
1724
1725//________________________________________________________________________
1726TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1727 int n, double xMin, double xMax,
1728 const TString & xTitle, const TString & yTitle)
1729{
1730 //CreateHisto new 1D historgram
1731 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1732 TH1D * h = new TH1D(name,title,n,xMin,xMax);
1733 h->GetXaxis()->SetTitle(xTitle);
1734 h->GetYaxis()->SetTitle(yTitle);
1735 addToList(h);
1736 return h;
1737}
1738
1739
1740//________________________________________________________________________
1741TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1742 int n, double * bins,
1743 const TString & xTitle, const TString & yTitle)
1744{
1745 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1746 TH1D * h = new TH1D(name,title,n,bins);
1747 h->GetXaxis()->SetTitle(xTitle);
1748 h->GetYaxis()->SetTitle(yTitle);
1749 addToList(h);
1750 return h;
1751}
1752
1753
1754//________________________________________________________________________
1755TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1756 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1757 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1758{
1759 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax));
1760 TH2D * h = new TH2D(name,title,nx,xMin,xMax,ny,yMin,yMax);
1761 h->GetXaxis()->SetTitle(xTitle);
1762 h->GetYaxis()->SetTitle(yTitle);
1763 h->GetZaxis()->SetTitle(zTitle);
1764 addToList(h);
1765 return h;
1766}
1767
1768//________________________________________________________________________
1769TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1770 int nx, double* xbins, int ny, double yMin, double yMax,
1771 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1772{
1773 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1774 TH2D * h;
1775 h = new TH2D(name,title,nx,xbins,ny,yMin,yMax);
1776 h->GetXaxis()->SetTitle(xTitle);
1777 h->GetYaxis()->SetTitle(yTitle);
1778 h->GetZaxis()->SetTitle(zTitle);
1779 addToList(h);
1780 return h;
1781}
1782
1783//// F /////
1784//________________________________________________________________________
1785TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1786 int n, double xMin, double xMax,
1787 const TString & xTitle, const TString & yTitle)
1788{
1789 //CreateHisto new 1D historgram
1790 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1791 TH1F * h = new TH1F(name,title,n,xMin,xMax);
1792 h->GetXaxis()->SetTitle(xTitle);
1793 h->GetYaxis()->SetTitle(yTitle);
1794 addToList(h);
1795 return h;
1796}
1797
1798
1799//________________________________________________________________________
1800TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1801 int n, double * bins,
1802 const TString & xTitle, const TString & yTitle)
1803{
1804 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1805 TH1F * h = new TH1F(name,title,n,bins);
1806 h->GetXaxis()->SetTitle(xTitle);
1807 h->GetYaxis()->SetTitle(yTitle);
1808 addToList(h);
1809 return h;
1810}
1811
1812
1813//________________________________________________________________________
1814TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1815 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1816 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1817{
1818 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax));
1819 TH2F * h = new TH2F(name,title,nx,xMin,xMax,ny,yMin,yMax);
1820 h->GetXaxis()->SetTitle(xTitle);
1821 h->GetYaxis()->SetTitle(yTitle);
1822 h->GetZaxis()->SetTitle(zTitle);
1823 addToList(h);
1824 return h;
1825}
1826
1827//________________________________________________________________________
1828TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1829 int nx, double* xbins, int ny, double yMin, double yMax,
1830 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1831{
1832 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1833 TH2F * h;
1834 h = new TH2F(name,title,nx,xbins,ny,yMin,yMax);
1835 h->GetXaxis()->SetTitle(xTitle);
1836 h->GetYaxis()->SetTitle(yTitle);
1837 h->GetZaxis()->SetTitle(zTitle);
1838 addToList(h);
1839 return h;
1840}
1841
1842
1843//________________________________________________________________________
1844TH3F * AliAnalysisTask3PCorrelations::createHisto3F(const TString & name, const TString & title,
1845 int nx, double xMin, double xMax,
1846 int ny, double yMin, double yMax,
1847 int nz, double zMin, double zMax,
1848 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1849{
1850 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4 nz: %d zMin: %f10.4 zMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax));
1851 TH3F * h = new TH3F(name,title,nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax);
1852 h->GetXaxis()->SetTitle(xTitle);
1853 h->GetYaxis()->SetTitle(yTitle);
1854 h->GetZaxis()->SetTitle(zTitle);
1855 addToList(h);
1856 return h;
1857}
1858
1859//________________________________________________________________________
1860TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name, const TString & description,
1861 int nx,double xMin,double xMax,
1862 const TString & xTitle, const TString & yTitle)
1863{
1864 AliInfo(Form("createHisto 1D profile %s nBins: %d xMin: %f10.4 xMax: %f10.4",name.Data(),nx,xMin,xMax));
1865 TProfile * h = new TProfile(name,description,nx,xMin,xMax);
1866 h->GetXaxis()->SetTitle(xTitle);
1867 h->GetYaxis()->SetTitle(yTitle);
1868 addToList(h);
1869 return h;
1870}
1871
1872//________________________________________________________________________
1873TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name,const TString & description,
1874 int nx, double* bins,
1875 const TString & xTitle, const TString & yTitle)
1876{
1877 AliInfo(Form("createHisto 1D profile %s with %d non uniform bins",name.Data(),nx));
1878 TProfile * h = new TProfile(name,description,nx,bins);
1879 h->GetXaxis()->SetTitle(xTitle);
1880 h->GetYaxis()->SetTitle(yTitle);
1881 addToList(h);
1882 return h;
1883}
1884
1885
1886void AliAnalysisTask3PCorrelations::addToList(TH1 *h)
1887{
1888 if (_outputHistoList)
1889 {
1890 _outputHistoList->Add(h);
1891 }
1892 else
1893 cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;
1894
1895}
1896
1897
1898