]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/Correlations/DPhi/AliAnalysisTaskDptDptQA.cxx
Update from Prabhat
[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   //if (_useWeights) DefineInput(2, TList::Class());
616   
617   //Setup the parameters of the histograms
618   _nBins_M0 = 500; _min_M0   = 0.;    _max_M0    = 5000.;  _width_M0 = (_max_M0-_min_M0)/_nBins_M0;
619   _nBins_M1 = 500; _min_M1   = 0.;    _max_M1    = 5000.;  _width_M1 = (_max_M1-_min_M1)/_nBins_M1;
620   _nBins_M2 = 500; _min_M2   = 0.;    _max_M2    = 5000.;  _width_M2 = (_max_M2-_min_M2)/_nBins_M2;
621   _nBins_M3 = 500; _min_M3   = 0.;    _max_M3    = 5000.;  _width_M3 = (_max_M3-_min_M3)/_nBins_M3;
622   _nBins_M4 = 100; _min_M4   = 0.;    _max_M4    = 100.;   _width_M4 = (_max_M4-_min_M4)/_nBins_M4;
623   _nBins_M5 = 100; _min_M5   = 0.;    _max_M5    = 100.;   _width_M5 = (_max_M5-_min_M5)/_nBins_M5;
624   _nBins_M6 = 100; _min_M6   = 0.;    _max_M6    = 100.;   _width_M6 = (_max_M6-_min_M6)/_nBins_M6;
625   
626   _min_vertexZ       = _vertexZMin;  
627   _max_vertexZ       = _vertexZMax;  
628   _width_vertexZ     = 0.5;
629   _nBins_vertexZ     = int(0.5+ (_max_vertexZ - _min_vertexZ)/_width_vertexZ); 
630   _nBins_pt_1        = int(0.5+ (_max_pt_1 -_min_pt_1 )/_width_pt_1); 
631   _nBins_eta_1       = int(0.5+ (_max_eta_1-_min_eta_1)/_width_eta_1);  
632   _width_phi_1       = (_max_phi_1  - _min_phi_1)  /_nBins_phi_1;
633   _nBins_etaPhi_1    = _nBins_phi_1    * _nBins_eta_1;
634   _nBins_etaPhiPt_1  = _nBins_etaPhi_1 * _nBins_pt_1;
635   _nBins_zEtaPhiPt_1 = _nBins_vertexZ  * _nBins_etaPhiPt_1;
636   
637   _nBins_pt_2        =  int(0.5+ (_max_pt_2 -_min_pt_2 )/_width_pt_2);  
638   _nBins_eta_2       = int(0.5+ (_max_eta_2-_min_eta_2)/_width_eta_2); 
639   _width_phi_2       = (_max_phi_2  - _min_phi_2)  /_nBins_phi_2;
640   _nBins_etaPhi_2    = _nBins_phi_2    * _nBins_eta_2;
641   _nBins_etaPhiPt_2  = _nBins_etaPhi_2 * _nBins_pt_2;
642   _nBins_zEtaPhiPt_2 = _nBins_vertexZ  * _nBins_etaPhiPt_2;
643   _nBins_etaPhi_12   = _nBins_etaPhi_1 * _nBins_etaPhi_2;
644   
645   //setup the work arrays
646   
647   _id_1       = new int[arraySize];   
648   _charge_1   = new int[arraySize]; 
649   //_iPhi_1 = new int[arraySize]; 
650   //_iEta_1 = new int[arraySize]; 
651   _iEtaPhi_1  = new int[arraySize]; 
652   _iPt_1      = new int[arraySize];  
653   _pt_1       = new float[arraySize];    
654   _px_1       = new float[arraySize];   
655   _py_1       = new float[arraySize];   
656   _pz_1       = new float[arraySize];   
657   //_phi_1 = new float[arraySize];  
658   //_eta_1 = new float[arraySize];  
659   _correction_1 = new float[arraySize];
660   _dedx_1     = new float[arraySize];
661   
662   __n1_1_vsPt              = getDoubleArray(_nBins_pt_1,        0.);
663   __n1_1_vsEtaPhi          = getDoubleArray(_nBins_etaPhi_1,    0.);
664   __s1pt_1_vsEtaPhi        = getDoubleArray(_nBins_etaPhi_1,    0.);
665   __n1_1_vsZEtaPhiPt       = getFloatArray(_nBins_zEtaPhiPt_1,  0.);
666   
667   cout << "==========================================================================================" << endl;
668   cout << "=============== Booking for particle 1 done." << endl;
669   cout << "_requestedCharge_1: " << _requestedCharge_1 << endl;
670   cout << "_requestedCharge_2: " << _requestedCharge_2 << endl;
671   
672   if (_requestedCharge_2!=_requestedCharge_1)
673     {
674     cout << " creating arrays for particle 2 with size: " << arraySize << endl;
675     _sameFilter = 0;
676     //particle 2
677     _id_2       = new int[arraySize];   
678     _charge_2   = new int[arraySize]; 
679     //_iPhi_2   = new int[arraySize]; 
680     //_iEta_2   = new int[arraySize]; 
681     _iEtaPhi_2  = new int[arraySize]; 
682     _iPt_2      = new int[arraySize];  
683     _pt_2       = new float[arraySize];   
684     _px_2       = new float[arraySize];   
685     _py_2       = new float[arraySize];   
686     _pz_2       = new float[arraySize];   
687     //_phi_2    = new float[arraySize];  
688     //_eta_2    = new float[arraySize];  
689     _correction_2 = new float[arraySize];
690     _dedx_2       = new float[arraySize];
691     
692     __n1_2_vsPt              = getDoubleArray(_nBins_pt_2,        0.);
693     __n1_2_vsEtaPhi          = getDoubleArray(_nBins_etaPhi_2,    0.);
694     __s1pt_2_vsEtaPhi        = getDoubleArray(_nBins_etaPhi_2,    0.);
695     __n1_2_vsZEtaPhiPt       = getFloatArray(_nBins_zEtaPhiPt_2, 0.);
696     
697     }
698   
699   __n2_12_vsPtPt           = getDoubleArray(_nBins_pt_1*_nBins_pt_2,0.);
700   __n2_12_vsEtaPhi         = getFloatArray(_nBins_etaPhi_12,       0.);
701   __s2ptpt_12_vsEtaPhi     = getFloatArray(_nBins_etaPhi_12,       0.);
702   __s2PtN_12_vsEtaPhi      = getFloatArray(_nBins_etaPhi_12,       0.);
703   __s2NPt_12_vsEtaPhi      = getFloatArray(_nBins_etaPhi_12,       0.);
704   
705   // Setup all the labels needed.
706   
707   part_1_Name   = "_1";
708   part_2_Name   = "_2";
709   pair_12_Name  = "_12";
710   
711   n1Name     = "n1";
712   n2Name     = "n2";
713   n1NwName   = "n1Nw";
714   n2NwName   = "n2Nw";
715   r1Name     = "r1";
716   r2Name     = "r2";
717   r3Name     = "r3";
718   r2r1Name   = "r2r1";
719   c2Name     = "c2";
720   c3Name     = "c3";
721   d3Name     = "d3";
722   p3Name     = "p3";
723   cName      = "sean";
724   
725   intR2Name       = "intR2";
726   binCorrName     = "binCorr";
727   intBinCorrName  = "intBinCorr";
728   
729   avgName      = "avg";
730   sumName      = "sum";
731   s1ptName     = "sumPt";
732   s1ptNwName   = "sumPtNw";
733   s1DptName    = "sumDpt";
734   s2PtPtName   = "sumPtPt";
735   s2PtPtNwName = "sumPtPtNw";
736   s2DptDptName = "sumDptDpt";
737   s2NPtName    = "sumNPt";
738   s2NPtNwName  = "sumNPtNw";
739   s2PtNName    = "sumPtN";
740   s2NPtNwName  = "sumNPtNw";
741   s2PtNNwName  = "sumPtNNw";
742   ptName       = "avgPt";
743   ptptName     = "avgPtPt";
744   pt1pt1Name   = "avgPtavgPt";
745   DptName      = "avgDpt";
746   DptDptName   = "avgDptDpt";
747   RDptDptName  = "relDptDpt"; // ratio of avgDptDpt by avgPt*avgPt
748   nPtName      = "avgNpt";
749   ptNName      = "avgPtN";
750   seanName     = "seanC";
751   
752   _title_counts = "yield";
753   
754   _title_m0     = "M_{0}";
755   _title_m1     = "M_{1}";
756   _title_m2     = "M_{2}";
757   _title_m3     = "M_{3}";
758   _title_m4     = "V0Centrality";
759   _title_m5     = "TrkCentrality";
760   _title_m6     = "SpdCentrality";
761   
762   _title_eta_1       = "#eta_{1}";
763   _title_phi_1       = "#varphi_{1} (radian)";
764   _title_etaPhi_1    = "#eta_{1}#times#varphi_{1}";
765   _title_pt_1        = "p_{t,1} (GeV/c)";
766   _title_n_1         = "n_{1}";
767   _title_SumPt_1     = "#Sigma p_{t,1} (GeV/c)";
768   _title_AvgPt_1     = "#LT p_{t,1} #GT (GeV/c)";
769   _title_AvgN_1      = "#LT n_{1} #GT";
770   _title_AvgSumPt_1  = "#LT #Sigma p_{t,1} #GT (GeV/c)";
771   
772   _title_eta_2       = "#eta_{2}";
773   _title_phi_2       = "#varphi_{2} (radian)";
774   _title_etaPhi_2    = "#eta_{2}#times#varphi_{2}";
775   _title_pt_2        = "p_{t,2} (GeV/c)";
776   _title_n_2         = "n_{2}";
777   _title_SumPt_2     = "#Sigma p_{t,1} (GeV/c)";
778   _title_AvgPt_2     = "#LT p_{t,2} #GT (GeV/c)";
779   _title_AvgN_2      = "#LT n_{2} #GT";
780   _title_AvgSumPt_2  = "#LT #Sigma p_{t,2} #GT (GeV/c)";
781   
782   _title_etaPhi_12   = "#eta_{1}#times#varphi_{1}#times#eta_{2}#times#varphi_{2}";
783   
784   _title_AvgN2_12       = "#LT n_{2} #GT";;
785   _title_AvgSumPtPt_12  = "#LT #Sigma p_{t,1}p_{t,2} #GT";;
786   _title_AvgSumPtN_12   = "#LT #Sigma p_{t,1}N #GT";;
787   _title_AvgNSumPt_12   = "#LT N#Sigma p_{t,2} #GT";;
788   
789   
790   vsZ         = "_vsZ";
791   vsM         = "_vsM";
792   vsPt         = "_vsPt";
793   vsPhi        = "_vsPhi"; 
794   vsEta        = "_vsEta"; 
795   vsEtaPhi     = "_vsEtaPhi"; 
796   vsPtVsPt     = "_vsPtVsPt";
797   
798   
799   if (_useWeights)
800     {
801     int iZ, iEtaPhi, iPt;
802     int iZ1,iEtaPhi1,iPt1;
803     int a, b;
804     if (_weight_1)
805       {
806       _correctionWeight_1 = new float[_nBins_vertexZ*_nBins_etaPhi_1*_nBins_pt_1];
807       a = _nBins_pt_1;
808       b = _nBins_etaPhi_1*_nBins_pt_1;
809       for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
810         {
811         for (iEtaPhi=0,iEtaPhi1=1; iEtaPhi<_nBins_etaPhi_1; iEtaPhi++, iEtaPhi1++)
812           {
813           for (iPt=0,iPt1=1; iPt<_nBins_pt_1; iPt++, iPt1++)
814             {
815             _correctionWeight_1[iZ*b+iEtaPhi*a+iPt] = _weight_1->GetBinContent(iZ1,iEtaPhi1,iPt1);
816             }      
817           }
818         }
819       } // _weight_1
820     else
821       {
822       AliError("AliAnalysisTaskDptDptQA:: _weight_1 is a null pointer.");
823       return;
824       }
825     if (!_sameFilter) 
826       {
827       if (_weight_2)
828         {
829         _correctionWeight_2 = new float[_nBins_vertexZ*_nBins_etaPhi_2*_nBins_pt_2];
830         a = _nBins_pt_2;
831         b = _nBins_etaPhi_2*_nBins_pt_2;
832         for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
833           {
834           for (iEtaPhi=0,iEtaPhi1=1; iEtaPhi<_nBins_etaPhi_2; iEtaPhi++, iEtaPhi1++)
835             {
836             for (iPt=0,iPt1=1; iPt<_nBins_pt_2; iPt++, iPt1++)
837               {
838               _correctionWeight_2[iZ*b+iEtaPhi*a+iPt] = _weight_2->GetBinContent(iZ1,iEtaPhi1,iPt1);
839               }      
840             }
841           }
842         } // _weight_2
843       else
844         {
845         AliError("AliAnalysisTaskDptDptQA:: _weight_1 is a null pointer.");
846         return;
847         }
848       }
849     }
850   
851   createHistograms();
852   PostData(0,_outputHistoList);
853   
854   cout<< "AliAnalysisTaskDptDptQA::CreateOutputObjects() DONE " << endl;
855   
856 }
857
858 void  AliAnalysisTaskDptDptQA::createHistograms()
859 {
860   AliInfo(" AliAnalysisTaskDptDptQA::createHistoHistograms() Creating Event Histos");
861   TString name;
862   
863   name = "eventAccounting";
864   
865   // bin index : what it is...
866   //         0 :  number of event submitted
867   //         1 :  number accepted by centrality cut
868   //         2 :  number accepted by centrality cut and z cut
869   //         3 :  total number of particles that satisfied filter 1
870   //         4 :  total number of particles that satisfied filter 2
871   _eventAccounting      = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
872   
873   name = "m0"; _m0      = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
874   name = "m1"; _m1      = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
875   name = "m2"; _m2      = createHisto1D(name,name,_nBins_M2, _min_M2, _max_M2, _title_m2, _title_counts);
876   name = "m3"; _m3      = createHisto1D(name,name,_nBins_M3, _min_M3, _max_M3, _title_m3, _title_counts);
877   name = "m4"; _m4      = createHisto1D(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
878   name = "m5"; _m5      = createHisto1D(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
879   name = "m6"; _m6      = createHisto1D(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
880   name = "zV"; _vertexZ = createHisto1D(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
881   
882   name = "Eta";     _etadis   = createHisto1F(name,name, 200, -1.0, 1.0, "#eta","counts");
883   name = "Phi";     _phidis   = createHisto1F(name,name, 360, 0.0, 6.4, "#phi","counts");
884
885   if (_singlesOnly)
886     {
887     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);
888     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);
889     //name = "dedxVsP_1";                          _dedxVsP_1              = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
890     //name = "corrDedxVsP_1";                      _corrDedxVsP_1          = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
891     //name = "betaVsP_1";                          _betaVsP_1              = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
892
893     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);
894     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);
895     //name = "dedxVsP_2";                          _dedxVsP_2              = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
896     //name = "corrDedxVsP_2";                      _corrDedxVsP_2          = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
897     //name = "betaVsP_2";                          _betaVsP_2              = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
898
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->GetNTracks();
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         {
1193           iPhi   = int( phi/_width_phi_1);
1194           
1195           if (iPhi<0 || iPhi>=_nBins_phi_1 ) 
1196             {
1197               AliWarning("AliAnalysisTaskDptDptQA::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1198               return;
1199             }
1200           
1201           iEta    = int((eta-_min_eta_1)/_width_eta_1); 
1202           if (iEta<0 || iEta>=_nBins_eta_1) 
1203             {
1204               AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1205               continue;
1206             }
1207           iPt     = int((pt -_min_pt_1 )/_width_pt_1 ); 
1208           if (iPt<0  || iPt >=_nBins_pt_1)
1209             {
1210               AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1211               continue;
1212             }
1213           iEtaPhi = iEta*_nBins_phi_1+iPhi;
1214           iZEtaPhiPt = iVertexP1 + iEtaPhi*_nBins_pt_1 + iPt;
1215           
1216           if (_correctionWeight_1)
1217             corr = _correctionWeight_1[iZEtaPhiPt];
1218           else
1219             corr = 1;
1220           if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_1)
1221             {
1222               AliWarning("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_1");
1223               continue;
1224             }
1225           //cout << "all good; process track:" << endl;
1226           
1227           if (_singlesOnly)
1228             {
1229               //_betaVsP_1->Fill(p*q,_trackFilter_1->getBeta() );
1230               //_dedxVsP_1->Fill(p*q,dedx);
1231               //_corrDedxVsP_1->Fill(p*q,_trackFilter_1->getCorrectedDedx() );
1232               __n1_1_vsPt[iPt]               += corr;          //cout << "step 15" << endl;
1233               __n1_1_vsZEtaPhiPt[iZEtaPhiPt] += corr;       //cout << "step 12" << endl;
1234               
1235             }
1236           else
1237             {
1238               corrPt                      = corr*pt;
1239               _id_1[k1]                   = iTrack;     
1240               _charge_1[k1]               = charge;
1241               _iEtaPhi_1[k1]              = iEtaPhi; 
1242               _iPt_1[k1]                  = iPt;   
1243               _pt_1[k1]                   = pt;   
1244               _px_1[k1]                   = px;   
1245               _py_1[k1]                   = py;   
1246               _pz_1[k1]                   = pz;   
1247               _correction_1[k1]           = corr; 
1248               __n1_1                      += corr;
1249               __n1_1_vsEtaPhi[iEtaPhi]    += corr; 
1250               __s1pt_1                    += corrPt;
1251               __s1pt_1_vsEtaPhi[iEtaPhi]  += corrPt;
1252               __n1Nw_1                    += 1;
1253               __s1ptNw_1                  += pt;
1254               ++k1;
1255               if (k1>=arraySize)
1256                 {
1257                   AliError(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
1258                   return;
1259                 }
1260             }
1261         }
1262       
1263       if (!_sameFilter && _requestedCharge_2 == charge)  
1264         {
1265           iPhi   = int( phi/_width_phi_2);
1266           if (iPhi<0 || iPhi>=_nBins_phi_2 ) 
1267             {
1268               AliWarning("AliAnalysisTaskDptDptQA::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1269               return;
1270             }
1271           
1272           iEta    = int((eta-_min_eta_2)/_width_eta_2);
1273           if (iEta<0 || iEta>=_nBins_eta_2) 
1274             {
1275               AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1276               continue;
1277             }
1278           iPt     = int((pt -_min_pt_2 )/_width_pt_2 ); 
1279           if (iPt<0  || iPt >=_nBins_pt_2)
1280             {
1281               AliWarning(Form("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1282               continue;
1283             }
1284           
1285           iEtaPhi = iEta*_nBins_phi_2+iPhi;
1286           iZEtaPhiPt = iVertexP2 + iEtaPhi*_nBins_pt_2 + iPt;
1287           if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2)
1288             {
1289               AliWarning("AliAnalysisTaskDptDptQA::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2");
1290               continue;
1291             }
1292           
1293           //cout << " iEtaPhi:" << iEtaPhi << "  _nBins_etaPhi_1: "<< _nBins_etaPhi_1<< "  _nBins_etaPhi_2: "<< _nBins_etaPhi_2<< endl;
1294           //if (_useEbyECorrections)  corr = (charge>0) ? _correction_2p[iEtaPhi] : _correction_2m[iEtaPhi];      else  
1295           //cout << "_correctionWeight_2:" << _correctionWeight_2 << endl;
1296           if (_correctionWeight_2)
1297             corr = _correctionWeight_2[iZEtaPhiPt];
1298           else
1299             corr = 1;
1300           //dpt = pt - (charge>0) ? _avgPt_vsEtaPhi_2p[iEtaPhi] : _avgPt_vsEtaPhi_2m[iEtaPhi];       
1301           
1302           if (_singlesOnly)
1303             {
1304               //_dedxVsP_2->Fill(p*q,dedx);
1305               __n1_2_vsPt[iPt]               += corr;          //cout << "step 15" << endl;
1306               __n1_2_vsZEtaPhiPt[iZEtaPhiPt] += corr;       //cout << "step 12" << endl;
1307             }
1308           else
1309             {
1310               corrPt                      = corr*pt;
1311               _id_2[k2]                   = iTrack;         //cout << "step 1" << endl;
1312               _charge_2[k2]               = charge;         //cout << "step 2" << endl;
1313               _iEtaPhi_2[k2]              = iEtaPhi;        //cout << "step 3" << endl;
1314               _iPt_2[k2]                  = iPt;            //cout << "step 4" << endl;
1315               _pt_2[k2]                   = pt;             //cout << "step 5" << endl;
1316               _px_2[k2]                   = px;             //cout << "step 6" << endl;
1317               _py_2[k2]                   = py;             //cout << "step 7" << endl;
1318               _pz_2[k2]                   = pz;             //cout << "step 8" << endl;
1319               _correction_2[k2]           = corr;           //cout << "step 9" << endl;
1320               __n1_2                      += corr;          //cout << "step 10" << endl;
1321               __s1pt_2                    += corrPt;        //cout << "step 13" << endl;
1322               __n1Nw_2                    += 1;
1323               __n1_2_vsEtaPhi[iEtaPhi]    += corr;          //cout << "step 11" << endl;
1324               __s1pt_2_vsEtaPhi[iEtaPhi]  += corrPt;        //cout << "step 14" << endl;
1325               __s1ptNw_2                  += pt;
1326               ++k2;
1327               if (k2>=arraySize)
1328                 {
1329                   AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize)); 
1330                   return;
1331                 }
1332             }
1333           
1334           //cout << "done with track" << endl;
1335         } //iTrack
1336       } //aod 
1337     }
1338   
1339   
1340   //cout << "Filling histograms now" << endl;
1341   _m0->Fill(_mult0);
1342   _m1->Fill(_mult1);
1343   _m2->Fill(_mult2);
1344   _m3->Fill(_mult3);
1345   _m4->Fill(_mult4);
1346   _m5->Fill(_mult5);
1347   _m6->Fill(_mult6);
1348   _vertexZ->Fill(vertexZ);
1349   
1350   if (_singlesOnly)
1351     {
1352       // nothing to do here.
1353     }
1354   else
1355     {
1356       if (_sameFilter)
1357         {
1358           _n1_1_vsM->Fill(centrality,      __n1_1);
1359           _s1pt_1_vsM->Fill(centrality,    __s1pt_1);
1360           _n1Nw_1_vsM->Fill(centrality,    __n1Nw_1);
1361           _s1ptNw_1_vsM->Fill(centrality,  __s1ptNw_1);
1362           _n1_2_vsM->Fill(centrality,      __n1_1);
1363           _s1pt_2_vsM->Fill(centrality,    __s1pt_1);
1364           _n1Nw_2_vsM->Fill(centrality,    __n1Nw_1);
1365           _s1ptNw_2_vsM->Fill(centrality,  __s1ptNw_1);
1366           // reset pair counters
1367           __n2_12   = __s2ptpt_12   = __s2NPt_12    = __s2PtN_12    = 0;
1368           __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12  = __s2PtNNw_12  = 0;
1369           if (_field>0)
1370             {
1371               for (int i1=0; i1<k1; i1++)
1372                 {
1373                   ////cout << "         i1:" << i1 << endl;
1374                   id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
1375                   q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
1376                   iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
1377                   iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
1378                   corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
1379                   pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
1380                   dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
1381                   //1 and 2
1382                   for (int i2=i1+1; i2<k1; i2++)
1383                     {        
1384                       ////cout << "         i2:" << i2 << endl;
1385                       id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
1386                       if (id_1!=id_2)
1387                         {
1388                           q_2       = _charge_1[i2];     ////cout << "        q_1:" << q_1 << endl;
1389                           iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
1390                           iPt_2     = _iPt_1[i2];        ////cout << "      iPt_1:" << iPt_1 << endl;
1391                           corr_2    = _correction_1[i2]; ////cout << "     corr_1:" << corr_1 << endl;
1392                           pt_2      = _pt_1[i2];         ////cout << "       pt_1:" << pt_1 << endl;
1393                           dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
1394                           corr      = corr_1*corr_2;
1395                           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))
1396                             {
1397                               ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
1398                             }
1399                           else // swap particles
1400                             {
1401                               ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
1402                             }
1403                           
1404                           __n2_12                  += corr;
1405                           __n2_12_vsEtaPhi[ij]     += corr;
1406                           ptpt                     = pt_1*pt_2;
1407                           __s2ptpt_12              += corr*ptpt;
1408                           __s2PtN_12               += corr*pt_1;
1409                           __s2NPt_12               += corr*pt_2;
1410                           __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
1411                           __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
1412                           __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
1413                           __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
1414                           
1415                           __n2Nw_12                  += 1;
1416                           __s2ptptNw_12              += ptpt;
1417                           __s2PtNNw_12               += pt_1;
1418                           __s2NPtNw_12               += pt_2;
1419                           
1420                         }
1421                     } //i2       
1422                 } //i1       
1423             }
1424           else // field<0
1425             {
1426               for (int i1=0; i1<k1; i1++)
1427                 {
1428                   ////cout << "         i1:" << i1 << endl;
1429                   id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
1430                   q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
1431                   iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
1432                   iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
1433                   corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
1434                   pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
1435                   dedx_1    = _dedx_1[i1];         ////cout << "     dedx_1:" << dedx_1 << endl;
1436                   //1 and 2
1437                   for (int i2=i1+1; i2<k1; i2++)
1438                     {        
1439                       ////cout << "         i2:" << i2 << endl;
1440                       id_2      = _id_1[i2];              ////cout << "       id_2:" << id_2 << endl;
1441                       if (id_1!=id_2)
1442                         {
1443                           q_2       = _charge_1[i2];     ////cout << "        q_2:" << q_2 << endl;
1444                           iEtaPhi_2 = _iEtaPhi_1[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
1445                           iPt_2     = _iPt_1[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
1446                           corr_2    = _correction_1[i2]; ////cout << "     corr_2:" << corr_2 << endl;
1447                           pt_2      = _pt_1[i2];         ////cout << "       pt_2:" << pt_2 << endl;
1448                           dedx_2    = _dedx_1[i2];       ////cout << "     dedx_2:" << dedx_2 << endl;
1449                           corr      = corr_1*corr_2;
1450                           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))
1451                             {
1452                               ij = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
1453                             }
1454                           else // swap particles
1455                             {
1456                               ij = iEtaPhi_2*_nBins_etaPhi_1 + iEtaPhi_1;   ////cout << " ij:" << ij<< endl;
1457                             }
1458                           
1459                           __n2_12                  += corr;
1460                           __n2_12_vsEtaPhi[ij]     += corr;
1461                           ptpt                     = pt_1*pt_2;
1462                           __s2ptpt_12              += corr*ptpt;
1463                           __s2PtN_12               += corr*pt_1;
1464                           __s2NPt_12               += corr*pt_2;
1465                           __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
1466                           __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
1467                           __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
1468                           __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;
1469                           
1470                           __n2Nw_12                  += 1;
1471                           __s2ptptNw_12              += ptpt;
1472                           __s2PtNNw_12               += pt_1;
1473                           __s2NPtNw_12               += pt_2;
1474                           
1475                         }
1476                     } //i2       
1477                 } //i1  
1478             }
1479         }
1480       else  // filter 1 and 2 are different -- must do all particle pairs...
1481         {
1482           _n1_1_vsM->Fill(centrality,      __n1_1);
1483           _s1pt_1_vsM->Fill(centrality,    __s1pt_1);
1484           _n1Nw_1_vsM->Fill(centrality,    __n1Nw_1);
1485           _s1ptNw_1_vsM->Fill(centrality,  __s1ptNw_1);
1486           _n1_2_vsM->Fill(centrality,      __n1_2);
1487           _s1pt_2_vsM->Fill(centrality,    __s1pt_2);
1488           _n1Nw_2_vsM->Fill(centrality,    __n1Nw_2);
1489           _s1ptNw_2_vsM->Fill(centrality,  __s1ptNw_2);
1490           // reset pair counters
1491           __n2_12   = __s2ptpt_12   = __s2NPt_12    = __s2PtN_12    = 0;
1492           __n2Nw_12 = __s2ptptNw_12 = __s2NPtNw_12  = __s2PtNNw_12  = 0;
1493           for (int i1=0; i1<k1; i1++)
1494             {
1495               ////cout << "         i1:" << i1 << endl;
1496               id_1      = _id_1[i1];           ////cout << "       id_1:" << id_1 << endl;
1497               q_1       = _charge_1[i1];       ////cout << "        q_1:" << q_1 << endl;
1498               iEtaPhi_1 = _iEtaPhi_1[i1];      ////cout << "  iEtaPhi_1:" << iEtaPhi_1 << endl;
1499               iPt_1     = _iPt_1[i1];          ////cout << "      iPt_1:" << iPt_1 << endl;
1500               corr_1    = _correction_1[i1];   ////cout << "     corr_1:" << corr_1 << endl;
1501               pt_1      = _pt_1[i1];           ////cout << "       pt_1:" << pt_1 << endl;
1502               px_1      = _px_1[i1];          ////cout << "      px_1:" << px_1 << endl;
1503               py_1      = _py_1[i1];          ////cout << "      py_1:" << py_1 << endl;
1504               pz_1      = _pz_1[i1];          ////cout << "      pz_1:" << pz_1 << endl;
1505               dedx_1    = _dedx_1[i1];        ////cout << "     dedx_1:" << dedx_1 << endl;
1506               
1507               //1 and 2
1508               for (int i2=0; i2<k2; i2++)
1509                 {        
1510                   ////cout << "         i2:" << i2 << endl;
1511                   id_2   = _id_2[i2];              ////cout << "       id_2:" << id_2 << endl;
1512                   if (id_1!=id_2)  // exclude auto correlation
1513                     {
1514                       q_2       = _charge_2[i2];     ////cout << "        q_2:" << q_2 << endl;
1515                       iEtaPhi_2 = _iEtaPhi_2[i2];    ////cout << "  iEtaPhi_2:" << iEtaPhi_2 << endl;
1516                       iPt_2     = _iPt_2[i2];        ////cout << "      iPt_2:" << iPt_2 << endl;
1517                       corr_2    = _correction_2[i2]; ////cout << "     corr_2:" << corr_2 << endl;
1518                       pt_2      = _pt_2[i2];         ////cout << "       pt_2:" << pt_2 << endl;
1519                       px_2      = _px_2[i2];          ////cout << "      px_2:" << px_2 << endl;
1520                       py_2      = _py_2[i2];          ////cout << "      py_2:" << py_2 << endl;
1521                       pz_2      = _pz_2[i2];          ////cout << "      pz_2:" << pz_2 << endl;
1522                       dedx_2    = _dedx_2[i2];        ////cout << "     dedx_2:" << dedx_2 << endl;
1523                       if (_rejectPairConversion)
1524                         {
1525                           float e1Sq = massElecSq + pt_1*pt_1 + pz_1*pz_1;
1526                           float e2Sq = massElecSq + pt_2*pt_2 + pz_2*pz_2;
1527                           float mInvSq = 2*(massElecSq + sqrt(e1Sq*e2Sq) - px_1*px_2 - py_1*py_2 - pz_1*pz_2 );
1528                           float mInv = sqrt(mInvSq);
1529                           _invMass->Fill(mInv);
1530                           if (mInv<0.5)
1531                             {
1532                               if (dedx_1>75. && dedx_2>75.)
1533                                 {
1534                                   _invMassElec->Fill(mInv);
1535                                   if (mInv<0.05) continue;
1536                                 }
1537                             }
1538                         }
1539                       corr      = corr_1*corr_2;
1540                       ij        = iEtaPhi_1*_nBins_etaPhi_1 + iEtaPhi_2;   ////cout << " ij:" << ij<< endl;
1541                       __n2_12                  += corr;
1542                       __n2_12_vsEtaPhi[ij]     += corr;
1543                       ptpt                     = pt_1*pt_2;
1544                       __s2ptpt_12              += corr*ptpt;
1545                       __s2PtN_12               += corr*pt_1;
1546                       __s2NPt_12               += corr*pt_2;
1547                       __s2ptpt_12_vsEtaPhi[ij] += corr*ptpt;
1548                       __s2PtN_12_vsEtaPhi[ij]  += corr*pt_1;
1549                       __s2NPt_12_vsEtaPhi[ij]  += corr*pt_2;
1550                       __n2_12_vsPtPt[iPt_1*_nBins_pt_2 + iPt_2] += corr;         
1551                       __n2Nw_12                  += 1;
1552                       __s2ptptNw_12              += ptpt;
1553                       __s2PtNNw_12               += pt_1;
1554                       __s2NPtNw_12               += pt_2;
1555                       
1556                     }
1557                 } //i2       
1558             } //i1         
1559         }
1560       
1561       _n2_12_vsM->Fill(centrality,     __n2_12);
1562       _s2PtPt_12_vsM->Fill(centrality, __s2ptpt_12); 
1563       _s2PtN_12_vsM->Fill(centrality,  __s2NPt_12);
1564       _s2NPt_12_vsM->Fill(centrality,  __s2PtN_12);
1565       
1566       _n2Nw_12_vsM->Fill(centrality,     __n2Nw_12);
1567       _s2PtPtNw_12_vsM->Fill(centrality, __s2ptptNw_12); 
1568       _s2PtNNw_12_vsM->Fill(centrality,  __s2NPtNw_12);
1569       _s2NPtNw_12_vsM->Fill(centrality,  __s2PtNNw_12);
1570       
1571     }
1572   
1573   
1574   cout << "AliAnalysisTaskDptDptQA::UserExec()   -----------------Event Done " << endl;
1575   PostData(0,_outputHistoList);
1576   
1577 }
1578
1579 void   AliAnalysisTaskDptDptQA::FinishTaskOutput()
1580 {
1581   cout << "AliAnalysisTaskDptDptQA::FinishTaskOutput() Starting." << endl;
1582   cout << "= 0 ====================================================================" << endl;
1583   finalizeHistograms();
1584   cout << "= 1 ====================================================================" << endl;
1585   PostData(0,_outputHistoList);
1586   cout << "= 2 ====================================================================" << endl;
1587   cout << "AliAnalysisTaskDptDptQA::FinishTaskOutput() Done." << endl;
1588 }
1589
1590 void   AliAnalysisTaskDptDptQA::Terminate(Option_t* /*option*/)
1591 {
1592   cout << "AliAnalysisTaskDptDptQA::Terminate() Starting/Done." << endl;
1593 }
1594
1595
1596 //Tools
1597 //===================================================================================================
1598 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH1 * h, float * array, int size)
1599 {
1600   int i, i1;
1601   float v1, ev1, v2, ev2, sum, esum;
1602   for (i=0, i1=1; i<size; ++i,++i1)
1603     {
1604     v1  = array[i]; ev1 = sqrt(v1);
1605     v2  = h->GetBinContent(i1);
1606     ev2 = h->GetBinError(i1);
1607     sum = v1 + v2;
1608     esum = sqrt(ev1*ev1+ev2*ev2);
1609     h->SetBinContent(i1,sum);
1610     h->SetBinError(i1,esum);
1611     }
1612 }
1613
1614 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH2 * h, float * array, int size1, int size2)
1615 {
1616   int i, i1;
1617   int j, j1;
1618   float v1, ev1, v2, ev2, sum, esum;
1619   for (i=0, i1=1; i<size1; ++i,++i1)
1620     {
1621     for (j=0, j1=1; j<size2; ++j,++j1)
1622       {
1623       v1  = array[i*size2+j]; ev1 = sqrt(v1);
1624       v2  = h->GetBinContent(i1,j1);
1625       ev2 = h->GetBinError(i1,j1);
1626       sum = v1 + v2;
1627       esum = sqrt(ev1*ev1+ev2*ev2);
1628       h->SetBinContent(i1,j1,sum);
1629       h->SetBinError(i1,j1,esum);
1630       }
1631     }
1632 }
1633
1634 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH3 * h, float * array, int size1, int size2, int size3)
1635 {
1636   int i, i1;
1637   int j, j1;
1638   int k, k1;
1639   float v1, ev1, v2, ev2, sum, esum;
1640   int size23 = size2*size3;
1641   for (i=0, i1=1; i<size1; ++i,++i1)
1642     {
1643     for (j=0, j1=1; j<size2; ++j,++j1)
1644       {
1645       for (k=0, k1=1; k<size3; ++k,++k1)
1646         {
1647         v1  = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1648         v2  = h->GetBinContent(i1,j1,k1);
1649         ev2 = h->GetBinError(i1,j1,k1);
1650         sum = v1 + v2;
1651         esum = sqrt(ev1*ev1+ev2*ev2);
1652         h->SetBinContent(i1,j1,k1,sum);
1653         h->SetBinError(i1,j1,k1,esum);
1654         }
1655       }
1656     }
1657 }
1658
1659 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH1 * h, double * array, int size)
1660 {
1661   int i, i1;
1662   double v1, ev1, v2, ev2, sum, esum;
1663   for (i=0, i1=1; i<size; ++i,++i1)
1664     {
1665     v1  = array[i]; ev1 = sqrt(v1);
1666     v2  = h->GetBinContent(i1);
1667     ev2 = h->GetBinError(i1);
1668     sum = v1 + v2;
1669     esum = sqrt(ev1*ev1+ev2*ev2);
1670     h->SetBinContent(i1,sum);
1671     h->SetBinError(i1,esum);
1672     }
1673 }
1674
1675 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH2 * h, double * array, int size1, int size2)
1676 {
1677   int i, i1;
1678   int j, j1;
1679   double v1, ev1, v2, ev2, sum, esum;
1680   for (i=0, i1=1; i<size1; ++i,++i1)
1681     {
1682     for (j=0, j1=1; j<size2; ++j,++j1)
1683       {
1684       v1  = array[i*size2+j]; ev1 = sqrt(v1);
1685       v2  = h->GetBinContent(i1,j1);
1686       ev2 = h->GetBinError(i1,j1);
1687       sum = v1 + v2;
1688       esum = sqrt(ev1*ev1+ev2*ev2);
1689       h->SetBinContent(i1,j1,sum);
1690       h->SetBinError(i1,j1,esum);
1691       }
1692     }
1693 }
1694
1695 void  AliAnalysisTaskDptDptQA::fillHistoWithArray(TH3 * h, double * array, int size1, int size2, int size3)
1696 {
1697   int i, i1;
1698   int j, j1;
1699   int k, k1;
1700   double v1, ev1, v2, ev2, sum, esum;
1701   int size23 = size2*size3;
1702   for (i=0, i1=1; i<size1; ++i,++i1)
1703     {
1704     for (j=0, j1=1; j<size2; ++j,++j1)
1705       {
1706       for (k=0, k1=1; k<size3; ++k,++k1)
1707         {
1708         v1  = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1709         v2  = h->GetBinContent(i1,j1,k1);
1710         ev2 = h->GetBinError(i1,j1,k1);
1711         sum = v1 + v2;
1712         esum = sqrt(ev1*ev1+ev2*ev2);
1713         h->SetBinContent(i1,j1,k1,sum);
1714         h->SetBinError(i1,j1,k1,esum);
1715         }
1716       }
1717     }
1718 }
1719
1720 //________________________________________________________________________
1721 double *  AliAnalysisTaskDptDptQA::getDoubleArray(int size, double v)
1722 {
1723   /// Allocate an array of type double with n values
1724   /// Initialize the array to the given value
1725   double * array = new double [size];
1726   for (int i=0;i<size;++i) array[i]=v;
1727   return array;
1728 }
1729
1730 //________________________________________________________________________
1731 float *  AliAnalysisTaskDptDptQA::getFloatArray(int size, float v)
1732 {
1733   /// Allocate an array of type float with n values
1734   /// Initialize the array to the given value
1735   float * array = new float [size];
1736   for (int i=0;i<size;++i) array[i]=v;
1737   return array;
1738 }
1739
1740
1741 //________________________________________________________________________
1742 TH1D * AliAnalysisTaskDptDptQA::createHisto1D(const TString &  name, const TString &  title, 
1743                                                       int n, double xMin, double xMax, 
1744                                                       const TString &  xTitle, const TString &  yTitle)
1745 {
1746   //CreateHisto new 1D historgram
1747   AliInfo(Form("createHisto 1D histo %s   nBins: %d  xMin: %f   xMax: %f",name.Data(),n,xMin,xMax));
1748   TH1D * h = new TH1D(name,title,n,xMin,xMax);
1749   h->GetXaxis()->SetTitle(xTitle);
1750   h->GetYaxis()->SetTitle(yTitle);
1751   addToList(h);
1752   return h;
1753 }
1754
1755
1756 //________________________________________________________________________
1757 TH1D * AliAnalysisTaskDptDptQA::createHisto1D(const TString &  name, const TString &  title, 
1758                                                       int n, double * bins, 
1759                                                       const TString &  xTitle, const TString &  yTitle)
1760 {
1761   AliInfo(Form("createHisto 1D histo %s   with %d non uniform nBins",name.Data(),n));
1762   TH1D * h = new TH1D(name,title,n,bins);
1763   h->GetXaxis()->SetTitle(xTitle);
1764   h->GetYaxis()->SetTitle(yTitle);
1765   addToList(h);
1766   return h;
1767 }
1768
1769
1770 //________________________________________________________________________
1771 TH2D * AliAnalysisTaskDptDptQA::createHisto2D(const TString &  name, const TString &  title, 
1772                                                       int nx, double xMin, double xMax, int ny, double yMin, double yMax, 
1773                                                       const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
1774 {
1775   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));
1776   TH2D * h = new TH2D(name,title,nx,xMin,xMax,ny,yMin,yMax);
1777   h->GetXaxis()->SetTitle(xTitle);
1778   h->GetYaxis()->SetTitle(yTitle);
1779   h->GetZaxis()->SetTitle(zTitle);
1780   addToList(h);
1781   return h;
1782 }
1783
1784 //________________________________________________________________________
1785 TH2D * AliAnalysisTaskDptDptQA::createHisto2D(const TString &  name, const TString &  title, 
1786                                                       int nx, double* xbins, int ny, double yMin, double yMax, 
1787                                                       const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
1788 {
1789   AliInfo(Form("createHisto 2D histo %s   with %d non uniform nBins",name.Data(),nx));
1790   TH2D * h;
1791   h = new TH2D(name,title,nx,xbins,ny,yMin,yMax);
1792   h->GetXaxis()->SetTitle(xTitle);
1793   h->GetYaxis()->SetTitle(yTitle);
1794   h->GetZaxis()->SetTitle(zTitle);
1795   addToList(h);
1796   return h;
1797 }
1798
1799 //// F /////
1800 //________________________________________________________________________
1801 TH1F * AliAnalysisTaskDptDptQA::createHisto1F(const TString &  name, const TString &  title, 
1802                                                         int n, double xMin, double xMax, 
1803                                                         const TString &  xTitle, const TString &  yTitle)
1804 {
1805   //CreateHisto new 1D historgram
1806   AliInfo(Form("createHisto 1D histo %s   nBins: %d  xMin: %f   xMax: %f",name.Data(),n,xMin,xMax));
1807   TH1F * h = new TH1F(name,title,n,xMin,xMax);
1808   h->GetXaxis()->SetTitle(xTitle);
1809   h->GetYaxis()->SetTitle(yTitle);
1810   addToList(h);
1811   return h;
1812 }
1813
1814
1815 //________________________________________________________________________
1816 TH1F * AliAnalysisTaskDptDptQA::createHisto1F(const TString &  name, const TString &  title, 
1817                                                         int n, double * bins, 
1818                                                         const TString &  xTitle, const TString &  yTitle)
1819 {
1820   AliInfo(Form("createHisto 1D histo %s   with %d non uniform nBins",name.Data(),n));
1821   TH1F * h = new TH1F(name,title,n,bins);
1822   h->GetXaxis()->SetTitle(xTitle);
1823   h->GetYaxis()->SetTitle(yTitle);
1824   addToList(h);
1825   return h;
1826 }
1827
1828
1829 //________________________________________________________________________
1830 TH2F * AliAnalysisTaskDptDptQA::createHisto2F(const TString &  name, const TString &  title, 
1831                                                         int nx, double xMin, double xMax, int ny, double yMin, double yMax, 
1832                                                         const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
1833 {
1834   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));
1835   TH2F * h = new TH2F(name,title,nx,xMin,xMax,ny,yMin,yMax);
1836   h->GetXaxis()->SetTitle(xTitle);
1837   h->GetYaxis()->SetTitle(yTitle);
1838   h->GetZaxis()->SetTitle(zTitle);
1839   addToList(h);
1840   return h;
1841 }
1842
1843 //________________________________________________________________________
1844 TH2F * AliAnalysisTaskDptDptQA::createHisto2F(const TString &  name, const TString &  title, 
1845                                                         int nx, double* xbins, int ny, double yMin, double yMax, 
1846                                                         const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
1847 {
1848   AliInfo(Form("createHisto 2D histo %s   with %d non uniform nBins",name.Data(),nx));
1849   TH2F * h;
1850   h = new TH2F(name,title,nx,xbins,ny,yMin,yMax);
1851   h->GetXaxis()->SetTitle(xTitle);
1852   h->GetYaxis()->SetTitle(yTitle);
1853   h->GetZaxis()->SetTitle(zTitle);
1854   addToList(h);
1855   return h;
1856 }
1857
1858
1859 //________________________________________________________________________
1860 TH3F * AliAnalysisTaskDptDptQA::createHisto3F(const TString &  name, const TString &  title, 
1861                                                       int nx, double xMin, double xMax, 
1862                                                       int ny, double yMin, double yMax, 
1863                                                       int nz, double zMin, double zMax, 
1864                                                       const TString &  xTitle, const TString &  yTitle, const TString &  zTitle)
1865 {
1866   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));
1867   TH3F * h = new TH3F(name,title,nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax);
1868   h->GetXaxis()->SetTitle(xTitle);
1869   h->GetYaxis()->SetTitle(yTitle);
1870   h->GetZaxis()->SetTitle(zTitle);
1871   addToList(h);
1872   return h;
1873 }
1874
1875
1876 //________________________________________________________________________
1877 TProfile * AliAnalysisTaskDptDptQA::createProfile(const TString & name, const TString & description, 
1878                                                             int nx,double xMin,double xMax,
1879                                                             const TString &  xTitle, const TString &  yTitle)
1880 {
1881   AliInfo(Form("createHisto 1D profile %s   nBins: %d  xMin: %f10.4 xMax: %f10.4",name.Data(),nx,xMin,xMax));
1882   TProfile * h = new TProfile(name,description,nx,xMin,xMax);
1883   h->GetXaxis()->SetTitle(xTitle);
1884   h->GetYaxis()->SetTitle(yTitle);
1885   addToList(h);
1886   return h;  
1887 }
1888
1889 //________________________________________________________________________
1890 TProfile * AliAnalysisTaskDptDptQA::createProfile(const TString &  name,const TString &  description, 
1891                                                             int nx,  double* bins,
1892                                                             const TString &  xTitle, const TString &  yTitle)
1893 {
1894   AliInfo(Form("createHisto 1D profile %s  with %d non uniform bins",name.Data(),nx));
1895   TProfile * h = new TProfile(name,description,nx,bins);
1896   h->GetXaxis()->SetTitle(xTitle);
1897   h->GetYaxis()->SetTitle(yTitle);
1898   addToList(h);
1899   return h;
1900 }
1901
1902
1903 void   AliAnalysisTaskDptDptQA::addToList(TH1 *h)
1904 {
1905   if (_outputHistoList)
1906     {
1907     _outputHistoList->Add(h);
1908     }
1909   else
1910     cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;
1911
1912 }
1913
1914
1915