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