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