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