1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
32 #include "AliAnalysisManager.h"
34 #include "AliAODHandler.h"
35 #include "AliAODInputHandler.h"
36 //#include "AliAODMCParticle.h"
37 #include "AliInputEventHandler.h"
39 #include "AliESDEvent.h"
40 #include "AliESDInputHandler.h"
41 #include "AliMultiplicity.h"
42 #include "AliCentrality.h"
43 #include "AliAnalysisTask3PCorrelations.h"
48 ClassImp(AliAnalysisTask3PCorrelations)
50 AliAnalysisTask3PCorrelations::AliAnalysisTask3PCorrelations()
51 : AliAnalysisTaskSE(),
53 fESDEvent(0), //! ESD Event
56 _twoPi ( 2.0 * 3.1415927),
62 _rejectPairConversion ( 0),
67 _centralityMethod ( 4),
77 _trackFilterBit ( 128),
116 _correctionWeight_1P(0),
117 _correctionWeight_1M(0),
118 _correctionWeight_2P(0),
119 _correctionWeight_2M(0),
120 _correctionWeight_3P(0),
121 _correctionWeight_3M(0),
122 _nBins_M0(500), _min_M0(0), _max_M0(10000), _width_M0(20),
123 _nBins_M1(500), _min_M1(0), _max_M1(10000), _width_M1(20),
124 _nBins_M2(500), _min_M2(0), _max_M2(10000), _width_M2(20),
125 _nBins_M3(500), _min_M3(0), _max_M3(10000), _width_M3(20),
126 _nBins_M4(100), _min_M4(0), _max_M4(1), _width_M4(0.01),
127 _nBins_M5(100), _min_M5(0), _max_M5(1), _width_M5(0.01),
128 _nBins_M6(100), _min_M6(0), _max_M6(1), _width_M6(0.01),
129 _nBins_vsM(0), _min_vsM(0), _max_vsM(0), _width_vsM(0),
130 _nBins_vertexZ(40), _min_vertexZ(-10), _max_vertexZ(10), _width_vertexZ(0.5),
132 _nBins_pt_1(8), _min_pt_1(2.), _max_pt_1(10.0), _width_pt_1(1.0),
133 _nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
134 _nBins_eta_1(1), _min_eta_1(-0.25), _max_eta_1(0.25), _width_eta_1(0.5),
136 _nBins_etaPhiPt_1(0),
137 _nBins_zEtaPhiPt_1(0),
139 _nBins_pt_2(5), _min_pt_2(0.5), _max_pt_2(1.0), _width_pt_2(0.1),
140 _nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
141 _nBins_eta_2(1), _min_eta_2(-1), _max_eta_2(-0.7), _width_eta_2(0.3),
143 _nBins_etaPhiPt_2(0),
144 _nBins_zEtaPhiPt_2(0),
146 _nBins_pt_3(5), _min_pt_3(0.5), _max_pt_3(1.0), _width_pt_3(0.1),
147 _nBins_phi_3(72), _min_phi_3(0), _max_phi_3(2.*3.1415927),_width_phi_3(2.*3.1415927/72),
148 _nBins_eta_3(1), _min_eta_3(0.7), _max_eta_3(1.), _width_eta_3(0.3),
150 _nBins_etaPhiPt_3(0),
151 _nBins_zEtaPhiPt_3(0),
162 _nBins_etaPhi_123(0),
181 __n1_1P_vsZEtaPhiPt(0),
182 __n1_1M_vsZEtaPhiPt(0),
186 __n1_2P_vsZEtaPhiPt(0),
187 __n1_2M_vsZEtaPhiPt(0),
191 __n1_3P_vsZEtaPhiPt(0),
192 __n1_3M_vsZEtaPhiPt(0),
205 _eventAccounting ( 0),
216 _n1_1_vsM ( 0), // w/ weight
217 _n1Nw_1_vsM ( 0), // w/o weight
220 _n1_1P_vsZVsEtaVsPhiVsPt ( 0),
221 _n1_1M_vsZVsEtaVsPhiVsPt ( 0),
230 _n1_2P_vsZVsEtaVsPhiVsPt ( 0),
231 _n1_2M_vsZVsEtaVsPhiVsPt ( 0),
240 _n1_3P_vsZVsEtaVsPhiVsPt ( 0),
241 _n1_3M_vsZVsEtaVsPhiVsPt ( 0),
281 intBinCorrName("NA"),
313 _title_phi_123("NA"),
322 printf("Default constructor called \n");
324 printf("passed \n ");
328 AliAnalysisTask3PCorrelations::AliAnalysisTask3PCorrelations(const TString & name)
329 : AliAnalysisTaskSE(name),
331 fESDEvent(0), //! ESD Event
334 _twoPi ( 2.0 * 3.1415927),
340 _rejectPairConversion ( 0),
345 _centralityMethod ( 4),
346 _centralityMin ( 0.),
347 _centralityMax ( 0.),
355 _trackFilterBit ( 128),
394 _correctionWeight_1P(0),
395 _correctionWeight_1M(0),
396 _correctionWeight_2P(0),
397 _correctionWeight_2M(0),
398 _correctionWeight_3P(0),
399 _correctionWeight_3M(0),
400 _nBins_M0(500), _min_M0(0), _max_M0(10000), _width_M0(20),
401 _nBins_M1(500), _min_M1(0), _max_M1(10000), _width_M1(20),
402 _nBins_M2(500), _min_M2(0), _max_M2(10000), _width_M2(20),
403 _nBins_M3(500), _min_M3(0), _max_M3(10000), _width_M3(20),
404 _nBins_M4(100), _min_M4(0), _max_M4(1), _width_M4(0.01),
405 _nBins_M5(100), _min_M5(0), _max_M5(1), _width_M5(0.01),
406 _nBins_M6(100), _min_M6(0), _max_M6(1), _width_M6(0.01),
407 _nBins_vsM(0), _min_vsM(0), _max_vsM(0), _width_vsM(0),
409 _nBins_vertexZ(40), _min_vertexZ(-10), _max_vertexZ(10), _width_vertexZ(0.5),
411 _nBins_pt_1(8), _min_pt_1(2.), _max_pt_1(10.0), _width_pt_1(1.0),
412 _nBins_phi_1(72), _min_phi_1(0), _max_phi_1(2.*3.1415927),_width_phi_1(2.*3.1415927/72.),
413 _nBins_eta_1(1), _min_eta_1(-0.25), _max_eta_1(0.25), _width_eta_1(0.5),
415 _nBins_etaPhiPt_1(0),
416 _nBins_zEtaPhiPt_1(0),
418 _nBins_pt_2(5), _min_pt_2(0.5), _max_pt_2(1.0), _width_pt_2(0.1),
419 _nBins_phi_2(72), _min_phi_2(0), _max_phi_2(2.*3.1415927),_width_phi_2(2.*3.1415927/72),
420 _nBins_eta_2(1), _min_eta_2(-1), _max_eta_2(-0.7), _width_eta_2(0.3),
422 _nBins_etaPhiPt_2(0),
423 _nBins_zEtaPhiPt_2(0),
425 _nBins_pt_3(5), _min_pt_3(0.5), _max_pt_3(1.0), _width_pt_3(0.1),
426 _nBins_phi_3(72), _min_phi_3(0), _max_phi_3(2.*3.1415927),_width_phi_3(2.*3.1415927/72),
427 _nBins_eta_3(1), _min_eta_3(0.7), _max_eta_3(1.), _width_eta_3(0.3),
429 _nBins_etaPhiPt_3(0),
430 _nBins_zEtaPhiPt_3(0),
440 _nBins_etaPhi_123(0),
459 __n1_1P_vsZEtaPhiPt(0),
460 __n1_1M_vsZEtaPhiPt(0),
464 __n1_2P_vsZEtaPhiPt(0),
465 __n1_2M_vsZEtaPhiPt(0),
469 __n1_3P_vsZEtaPhiPt(0),
470 __n1_3M_vsZEtaPhiPt(0),
483 _eventAccounting ( 0),
494 _n1_1_vsM ( 0), // w/ weight
495 _n1Nw_1_vsM ( 0), // w/o weight
498 _n1_1P_vsZVsEtaVsPhiVsPt ( 0),
499 _n1_1M_vsZVsEtaVsPhiVsPt ( 0),
508 _n1_2P_vsZVsEtaVsPhiVsPt ( 0),
509 _n1_2M_vsZVsEtaVsPhiVsPt ( 0),
518 _n1_3P_vsZVsEtaVsPhiVsPt ( 0),
519 _n1_3M_vsZVsEtaVsPhiVsPt ( 0),
559 intBinCorrName("NA"),
592 _title_phi_123("NA"),
601 printf("2nd constructor called ");
603 DefineOutput(0, TList::Class());
609 AliAnalysisTask3PCorrelations::~AliAnalysisTask3PCorrelations()
611 // no ops --- at least for now....
614 void AliAnalysisTask3PCorrelations::UserCreateOutputObjects()
616 cout<< "AliAnalysisTask3PCorrelations::CreateOutputObjects() Starting " << endl;
618 _outputHistoList = new TList();
619 _outputHistoList->SetOwner();
621 //if (_useWeights) DefineInput(2, TList::Class());
623 //Setup the parameters of the histograms
624 _nBins_M0 = 500; _min_M0 = 0.; _max_M0 = 5000.; _width_M0 = (_max_M0-_min_M0)/_nBins_M0;
625 _nBins_M1 = 500; _min_M1 = 0.; _max_M1 = 5000.; _width_M1 = (_max_M1-_min_M1)/_nBins_M1;
626 _nBins_M2 = 500; _min_M2 = 0.; _max_M2 = 5000.; _width_M2 = (_max_M2-_min_M2)/_nBins_M2;
627 _nBins_M3 = 500; _min_M3 = 0.; _max_M3 = 5000.; _width_M3 = (_max_M3-_min_M3)/_nBins_M3;
628 _nBins_M4 = 100; _min_M4 = 0.; _max_M4 = 100.; _width_M4 = (_max_M4-_min_M4)/_nBins_M4;
629 _nBins_M5 = 100; _min_M5 = 0.; _max_M5 = 100.; _width_M5 = (_max_M5-_min_M5)/_nBins_M5;
630 _nBins_M6 = 100; _min_M6 = 0.; _max_M6 = 100.; _width_M6 = (_max_M6-_min_M6)/_nBins_M6;
632 _min_vertexZ = _vertexZMin;
633 _max_vertexZ = _vertexZMax;
634 _width_vertexZ = 0.5;
635 _nBins_vertexZ = int(0.5+ (_max_vertexZ - _min_vertexZ)/_width_vertexZ);
637 _nBins_pt_1 = int(0.5+ (_max_pt_1 -_min_pt_1 )/_width_pt_1);
638 _nBins_eta_1 = int(0.5+ (_max_eta_1-_min_eta_1)/_width_eta_1);
639 _width_phi_1 = (_max_phi_1 - _min_phi_1) /_nBins_phi_1;
640 _nBins_etaPhi_1 = _nBins_phi_1 * _nBins_eta_1;
641 _nBins_zEtaPhiPt_1 = _nBins_vertexZ * _nBins_phi_1 * _nBins_eta_1 * _nBins_pt_1;
643 _nBins_pt_2 = int(0.5+ (_max_pt_2 -_min_pt_2 )/_width_pt_2);
644 _nBins_eta_2 = int(0.5+ (_max_eta_2-_min_eta_2)/_width_eta_2);
645 _width_phi_2 = (_max_phi_2 - _min_phi_2) /_nBins_phi_2;
646 _nBins_etaPhi_2 = _nBins_phi_2 * _nBins_eta_2;
647 _nBins_zEtaPhiPt_2 = _nBins_vertexZ * _nBins_phi_2 * _nBins_eta_2 * _nBins_pt_2;
649 _nBins_pt_3 = int(0.5+ (_max_pt_3 -_min_pt_3 )/_width_pt_3);
650 _nBins_eta_3 = int(0.5+ (_max_eta_3-_min_eta_3)/_width_eta_3);
651 _width_phi_3 = (_max_phi_3 - _min_phi_3) /_nBins_phi_3;
652 _nBins_etaPhi_3 = _nBins_phi_3 * _nBins_eta_3;
653 _nBins_zEtaPhiPt_3 = _nBins_vertexZ * _nBins_phi_3 * _nBins_eta_3 * _nBins_pt_3;
656 _nBins_etaPhi_12 = _nBins_etaPhi_1 * _nBins_etaPhi_2;
657 _nBins_etaPhi_13 = _nBins_etaPhi_1 * _nBins_etaPhi_3;
658 _nBins_etaPhi_23 = _nBins_etaPhi_2 * _nBins_etaPhi_3;
659 _nBins_etaPhi_123 = _nBins_etaPhi_1 * _nBins_etaPhi_2 * _nBins_etaPhi_3;
661 _nBins_phi_12 = _nBins_phi_1 * _nBins_phi_2;
662 _nBins_phi_13 = _nBins_phi_1 * _nBins_phi_3;
663 _nBins_phi_23 = _nBins_phi_2 * _nBins_phi_3;
664 _nBins_phi_123 = _nBins_phi_1 * _nBins_phi_2 * _nBins_phi_3;
667 //setup the work arrays
670 __n1_1_vsPt = getDoubleArray(_nBins_pt_1, 0.);
671 __n1_1P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_1, 0.);
672 __n1_1M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_1, 0.);
673 __n1_2_vsPt = getDoubleArray(_nBins_pt_2, 0.);
674 __n1_2P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_2, 0.);
675 __n1_2M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_2, 0.);
676 __n1_3_vsPt = getDoubleArray(_nBins_pt_3, 0.);
677 __n1_3P_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_3, 0.);
678 __n1_3M_vsZEtaPhiPt = getFloatArray (_nBins_zEtaPhiPt_3, 0.);
682 _id_1 = new int[arraySize];
683 //_charge_1 = new int[arraySize];
684 _iPhi_1 = new int[arraySize];
685 //_pt_1 = new float[arraySize];
686 //_px_1 = new float[arraySize];
687 //_py_1 = new float[arraySize];
688 //_pz_1 = new float[arraySize];
689 _correction_1 = new float[arraySize];
690 //_dedx_1 = new float[arraySize];
691 __n1_1_vsPhi = getDoubleArray(_nBins_phi_1, 0.);
693 _id_2 = new int[arraySize];
694 //_charge_2 = new int[arraySize];
695 _iPhi_2 = new int[arraySize];
696 //_pt_2 = new float[arraySize];
697 //_px_2 = new float[arraySize];
698 //_py_2 = new float[arraySize];
699 //_pz_2 = new float[arraySize];
700 _correction_2 = new float[arraySize];
701 //_dedx_2 = new float[arraySize];
702 __n1_2_vsPhi = getDoubleArray(_nBins_phi_2, 0.);
704 _id_3 = new int[arraySize];
705 //_charge_3 = new int[arraySize];
706 _iPhi_3 = new int[arraySize];
707 //_pt_3 = new float[arraySize];
708 //_px_3 = new float[arraySize];
709 //_py_3 = new float[arraySize];
710 //_pz_3 = new float[arraySize];
711 _correction_3 = new float[arraySize];
712 //_dedx_3 = new float[arraySize];
713 __n1_3_vsPhi = getDoubleArray(_nBins_phi_3, 0.);
715 __n2_12_vsPhi = getFloatArray(_nBins_phi_12, 0.);
716 __n2_13_vsPhi = getFloatArray(_nBins_phi_13, 0.);
717 __n2_23_vsPhi = getFloatArray(_nBins_phi_23, 0.);
718 __n3_123_vsPhi = getFloatArray(_nBins_phi_123, 0.);
722 // Setup all the labels needed.
724 part_1P_Name = "_1P";
725 part_1M_Name = "_1M";
727 part_2P_Name = "_2P";
728 part_2M_Name = "_2M";
730 part_3P_Name = "_3P";
731 part_3M_Name = "_3M";
732 pair_12_Name = "_12";
733 pair_13_Name = "_13";
734 pair_23_Name = "_23";
735 triplet_Name = "_123";
754 binCorrName = "binCorr";
755 intBinCorrName = "intBinCorr";
758 _title_counts = "yield";
763 _title_m4 = "V0Centrality";
764 _title_m5 = "TrkCentrality";
765 _title_m6 = "SpdCentrality";
767 _title_phi_1 = "#varphi_{1} (radian)";
768 _title_phi_2 = "#varphi_{2} (radian)";
769 _title_phi_3 = "#varphi_{3} (radian)";
770 _title_phi_12 = "#eta_{1}#times#varphi_{1}#times#eta_{2}#times#varphi_{2}";
771 _title_phi_13 = "#eta_{1}#times#varphi_{1}#times#eta_{3}#times#varphi_{3}";
772 _title_phi_23 = "#eta_{2}#times#varphi_{2}#times#eta_{3}#times#varphi_{3}";
789 _correctionWeight_1P = new float[_nBins_vertexZ*_nBins_etaPhi_1*_nBins_pt_1];
790 _correctionWeight_1M = new float[_nBins_vertexZ*_nBins_etaPhi_1*_nBins_pt_1];
792 b = _nBins_etaPhi_1*_nBins_pt_1;
793 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
795 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_1; iPhi++, iPhi1++)
797 for (iPt=0,iPt1=1; iPt<_nBins_pt_1; iPt++, iPt1++)
799 _correctionWeight_1P[iZ*b+iPhi*a+iPt] = _weight_1P->GetBinContent(iZ1,iPhi1,iPt1);
800 _correctionWeight_1M[iZ*b+iPhi*a+iPt] = _weight_1M->GetBinContent(iZ1,iPhi1,iPt1);
807 AliError("AliAnalysisTask3PCorrelations:: _weight_1 is a null pointer.");
812 _correctionWeight_2P = new float[_nBins_vertexZ*_nBins_etaPhi_2*_nBins_pt_2];
813 _correctionWeight_2M = new float[_nBins_vertexZ*_nBins_etaPhi_2*_nBins_pt_2];
815 b = _nBins_etaPhi_2*_nBins_pt_2;
816 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
818 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_2; iPhi++, iPhi1++)
820 for (iPt=0,iPt1=1; iPt<_nBins_pt_2; iPt++, iPt1++)
822 _correctionWeight_2P[iZ*b+iPhi*a+iPt] = _weight_2P->GetBinContent(iZ1,iPhi1,iPt1);
823 _correctionWeight_2M[iZ*b+iPhi*a+iPt] = _weight_2M->GetBinContent(iZ1,iPhi1,iPt1);
830 AliError("AliAnalysisTask3PCorrelations:: _weight_2 is a null pointer.");
835 _correctionWeight_3P = new float[_nBins_vertexZ*_nBins_etaPhi_3*_nBins_pt_3];
836 _correctionWeight_3M = new float[_nBins_vertexZ*_nBins_etaPhi_3*_nBins_pt_3];
838 b = _nBins_etaPhi_3*_nBins_pt_3;
839 for (iZ=0,iZ1=1; iZ<_nBins_vertexZ; iZ++, iZ1++)
841 for (iPhi=0,iPhi1=1; iPhi<_nBins_etaPhi_3; iPhi++, iPhi1++)
843 for (iPt=0,iPt1=1; iPt<_nBins_pt_3; iPt++, iPt1++)
845 _correctionWeight_3P[iZ*b+iPhi*a+iPt] = _weight_3P->GetBinContent(iZ1,iPhi1,iPt1);
846 _correctionWeight_3M[iZ*b+iPhi*a+iPt] = _weight_3M->GetBinContent(iZ1,iPhi1,iPt1);
853 AliError("AliAnalysisTask3PCorrelations:: _weight_2 is a null pointer.");
859 PostData(0,_outputHistoList);
861 cout<< "AliAnalysisTask3PCorrelations::CreateOutputObjects() DONE " << endl;
865 void AliAnalysisTask3PCorrelations::createHistograms()
867 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() Creating Event Histos");
870 // bin index : what it is...
871 // 0 : number of event submitted
872 // 1 : number accepted by centrality cut
873 // 2 : number accepted by centrality cut and z cut
874 // 3 : total number of particles that satisfied filter 1
875 // 4 : total number of particles that satisfied filter 2
876 // 5 : total number of particles that satisfied filter 3
877 name = "eventAccounting";
878 _eventAccounting = createHisto1D(name,name,10, -0.5, 9.5, "event Code", _title_counts);
880 name = "m0"; _m0 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m0, _title_counts);
881 name = "m1"; _m1 = createHisto1D(name,name,_nBins_M1, _min_M1, _max_M1, _title_m1, _title_counts);
882 name = "m2"; _m2 = createHisto1D(name,name,_nBins_M2, _min_M2, _max_M2, _title_m2, _title_counts);
883 name = "m3"; _m3 = createHisto1D(name,name,_nBins_M3, _min_M3, _max_M3, _title_m3, _title_counts);
884 name = "m4"; _m4 = createHisto1D(name,name,_nBins_M4, _min_M4, _max_M4, _title_m4, _title_counts);
885 name = "m5"; _m5 = createHisto1D(name,name,_nBins_M5, _min_M5, _max_M5, _title_m5, _title_counts);
886 name = "m6"; _m6 = createHisto1D(name,name,_nBins_M6, _min_M6, _max_M6, _title_m6, _title_counts);
887 name = "zV"; _vertexZ = createHisto1D(name,name,_nBins_vertexZ, _min_vertexZ, _max_vertexZ, "z-Vertex (cm)", _title_counts);
891 switch (_centralityMethod)
893 case 0: _nBins_vsM = _nBins_M0; _min_vsM = _min_M0; _max_vsM = _max_M0; _width_vsM = _width_M0; title_vsM = _title_m0; break;
894 case 1: _nBins_vsM = _nBins_M1; _min_vsM = _min_M1; _max_vsM = _max_M1; _width_vsM = _width_M1; title_vsM = _title_m1; break;
895 case 2: _nBins_vsM = _nBins_M2; _min_vsM = _min_M2; _max_vsM = _max_M2; _width_vsM = _width_M2; title_vsM = _title_m2; break;
896 case 3: _nBins_vsM = _nBins_M3; _min_vsM = _min_M3; _max_vsM = _max_M3; _width_vsM = _width_M3; title_vsM = _title_m3; break;
897 case 4: _nBins_vsM = _nBins_M4; _min_vsM = _min_M4; _max_vsM = _max_M4; _width_vsM = _width_M4; title_vsM = _title_m4; break;
898 case 5: _nBins_vsM = _nBins_M5; _min_vsM = _min_M5; _max_vsM = _max_M5; _width_vsM = _width_M5; title_vsM = _title_m5; break;
899 case 6: _nBins_vsM = _nBins_M6; _min_vsM = _min_M6; _max_vsM = _max_M6; _width_vsM = _width_M6; title_vsM = _title_m6; break;
902 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() Creating Part 1 Histos");
906 name = n1Name+part_1_Name+vsPt; _n1_1_vsPt = createHisto1F(name,name, _nBins_pt_1, _min_pt_1, _max_pt_1, "pt1", "counts");
907 name = "dedxVsP_1"; _dedxVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
908 name = "betaVsP_1"; _betaVsP_1 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
909 name = n1Name+part_1P_Name+vsZ+vsEtaPhi+vsPt; _n1_1P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_phi_1, "pt1");
910 name = n1Name+part_1M_Name+vsZ+vsEtaPhi+vsPt; _n1_1M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_1, 0., double(_nBins_etaPhi_1), _nBins_pt_1, _min_pt_1, _max_pt_1, "zVertex", _title_phi_1, "pt1");
912 name = n1Name+part_2_Name+vsPt; _n1_2_vsPt = createHisto1F(name,name, _nBins_pt_2, _min_pt_2, _max_pt_2, "pt2", "counts");
913 name = "dedxVsP_2"; _dedxVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
914 name = "betaVsP_2"; _betaVsP_2 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
915 name = n1Name+part_2P_Name+vsZ+vsEtaPhi+vsPt; _n1_2P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_phi_2, "pt2");
916 name = n1Name+part_2M_Name+vsZ+vsEtaPhi+vsPt; _n1_2M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_2, 0., double(_nBins_etaPhi_2), _nBins_pt_2, _min_pt_2, _max_pt_2, "zVertex", _title_phi_2, "pt2");
918 name = n1Name+part_3_Name+vsPt; _n1_3_vsPt = createHisto1F(name,name, _nBins_pt_3, _min_pt_3, _max_pt_3, "pt3", "counts");
919 name = "dedxVsP_3"; _dedxVsP_3 = createHisto2F(name,name,400,-2.,2.,120,0.,120.,"p (GeV/c)", "dedx", "counts");
920 name = "betaVsP_3"; _betaVsP_3 = createHisto2F(name,name,400,-2.,2.,120,0.5,1.1,"p (GeV/c)", "beta", "counts");
921 name = n1Name+part_3P_Name+vsZ+vsEtaPhi+vsPt; _n1_3P_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_3, 0., double(_nBins_etaPhi_3), _nBins_pt_3, _min_pt_3, _max_pt_3, "zVertex", _title_phi_3, "pt3");
922 name = n1Name+part_3M_Name+vsZ+vsEtaPhi+vsPt; _n1_3M_vsZVsEtaVsPhiVsPt = createHisto3F(name,name, _nBins_vertexZ,_min_vertexZ,_max_vertexZ, _nBins_etaPhi_3, 0., double(_nBins_etaPhi_3), _nBins_pt_3, _min_pt_3, _max_pt_3, "zVertex", _title_phi_3, "pt3");
926 name = n1Name+part_1_Name+vsPhi; _n1_1_vsPhi = createHisto1F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _title_phi_1, "counts");
927 name = n1Name+part_2_Name+vsPhi; _n1_2_vsPhi = createHisto1F(name,name, _nBins_phi_2, _min_phi_2, _max_phi_2, _title_phi_2, "counts");
928 name = n1Name+part_3_Name+vsPhi; _n1_3_vsPhi = createHisto1F(name,name, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_3, "counts");
930 name = n1Name+part_1_Name + vsM; _n1_1_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{1}>");
931 name = n1Name+part_2_Name + vsM; _n1_2_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{2}>");
932 name = n1Name+part_3_Name + vsM; _n1_3_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{3}>");
934 name = n1NwName+part_1_Name+vsM; _n1Nw_1_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{1}>");
935 name = n1NwName+part_2_Name+vsM; _n1Nw_2_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{2}>");
936 name = n1NwName+part_3_Name+vsM; _n1Nw_3_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{3}>");
938 name = n2Name+pair_12_Name+vsPhi; _n2_12_vsPhi = createHisto2F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_2, _min_phi_2, _max_phi_2, _title_phi_1, _title_phi_2, "<N_{12}>");
939 name = n2Name+pair_13_Name+vsPhi; _n2_13_vsPhi = createHisto2F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_2, _title_phi_3, "<N_{13}>");
940 name = n2Name+pair_23_Name+vsPhi; _n2_23_vsPhi = createHisto2F(name,name, _nBins_phi_2, _min_phi_2, _max_phi_2, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_1, _title_phi_3, "<N_{23}>");
941 name = n3Name+triplet_Name+vsPhi; _n3_123_vsPhi = createHisto3F(name,name, _nBins_phi_1, _min_phi_1, _max_phi_1, _nBins_phi_2, _min_phi_2, _max_phi_2, _nBins_phi_3, _min_phi_3, _max_phi_3, _title_phi_1, _title_phi_2, _title_phi_3);
943 name = n2Name+pair_12_Name+vsM; _n2_12_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{12}>");
944 name = n2Name+pair_13_Name+vsM; _n2_13_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{13}>");
945 name = n2Name+pair_23_Name+vsM; _n2_23_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{23}>");
946 name = n3Name+pair_23_Name+vsM; _n3_123_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{123}>");
947 name = n2NwName+pair_12_Name+vsM; _n2Nw_12_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{12}>");
948 name = n2NwName+pair_13_Name+vsM; _n2Nw_13_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{13}>");
949 name = n2NwName+pair_23_Name+vsM; _n2Nw_23_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{23}>");
950 name = n3NwName+triplet_Name+vsM; _n3Nw_123_vsM = createProfile(name,name, _nBins_vsM, _min_vsM, _max_vsM, title_vsM, "<N_{123}>");
954 AliInfo(" AliAnalysisTask3PCorrelations::createHistoHistograms() All Done");
956 //-----------------------//
958 void AliAnalysisTask3PCorrelations::finalizeHistograms()
961 AliInfo("AliAnalysisTask3PCorrelations::finalizeHistograms() starting");
962 AliInfo(Form("CorrelationAnalyzers::finalizeHistograms() _eventCount : %d",int(_eventCount)));
966 fillHistoWithArray(_n1_1_vsPt, __n1_1_vsPt, _nBins_pt_1);
967 fillHistoWithArray(_n1_1P_vsZVsEtaVsPhiVsPt, __n1_1P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
968 fillHistoWithArray(_n1_1M_vsZVsEtaVsPhiVsPt, __n1_1M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_1, _nBins_pt_1);
970 fillHistoWithArray(_n1_2_vsPt, __n1_2_vsPt, _nBins_pt_2);
971 fillHistoWithArray(_n1_2P_vsZVsEtaVsPhiVsPt, __n1_2P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
972 fillHistoWithArray(_n1_2M_vsZVsEtaVsPhiVsPt, __n1_2M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_2, _nBins_pt_2);
974 fillHistoWithArray(_n1_3_vsPt, __n1_3_vsPt, _nBins_pt_3);
975 fillHistoWithArray(_n1_3P_vsZVsEtaVsPhiVsPt, __n1_3P_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_3, _nBins_pt_3);
976 fillHistoWithArray(_n1_3M_vsZVsEtaVsPhiVsPt, __n1_3M_vsZEtaPhiPt, _nBins_vertexZ, _nBins_etaPhi_3, _nBins_pt_3);
981 fillHistoWithArray(_n1_1_vsPhi, __n1_1_vsPhi, _nBins_phi_1);
982 fillHistoWithArray(_n1_2_vsPhi, __n1_2_vsPhi, _nBins_phi_2);
983 fillHistoWithArray(_n1_3_vsPhi, __n1_3_vsPhi, _nBins_phi_3);
984 fillHistoWithArray(_n2_12_vsPhi, __n2_12_vsPhi, _nBins_phi_1, _nBins_phi_2);
985 fillHistoWithArray(_n2_13_vsPhi, __n2_13_vsPhi, _nBins_phi_1, _nBins_phi_3);
986 fillHistoWithArray(_n2_23_vsPhi, __n2_23_vsPhi, _nBins_phi_2, _nBins_phi_3);
987 fillHistoWithArray(_n3_123_vsPhi, __n3_123_vsPhi, _nBins_phi_1, _nBins_phi_2, _nBins_phi_3);
989 AliInfo("AliAnalysisTask3PCorrelations::finalizeHistograms() Done ");
994 void AliAnalysisTask3PCorrelations::UserExec(Option_t */*option*/)
996 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - Starting!!!!" << endl;
999 int iPhi=0, iEta=0, iEtaPhi=0, iPt=0, charge=0;
1000 float q=0, p=0, phi=0, pt=0, eta=0, corr=0, dedx=0, px=0, py=0, pz=0;
1001 int ij_12=0, ij_13=0, ij_23=0, ijk_123=0;
1002 int id_1=0, id_2=0, id_3=0, iPhi_1=0, iPhi_2=0, iPhi_3=0;
1003 float corr_1=0, corr_2=0, corr_3=0;
1004 float corr_12=0, corr_13=0, corr_23=0, corr_123=0;
1005 int iVertex=0, iVertexP1=0, iVertexP2=0, iVertexP3=0;
1007 //float massElecSq = 2.5e-7=0;
1010 const AliAODVertex* vertex=0;
1014 // count all events looked at here
1017 if (_eventAccounting)
1019 _eventAccounting->Fill(0);// count all calls to this function
1023 cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - !_eventAccounting" << endl;
1024 cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - Skip this task" << endl;
1028 //Get pointer to current event
1029 //fESDEvent = dynamic_cast<AliESDEvent*> (InputEvent());
1030 fAODEvent = dynamic_cast<AliAODEvent*> (InputEvent());
1032 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 2" << endl;
1036 AliError("AliAnalysisTask3PCorrelations::Exec(Option_t *option) !fAODEvent");
1041 float v0Centr = -999.;
1042 float trkCentr = -999.;
1043 float spdCentr = -999.;
1044 float vertexX = -999;
1045 float vertexY = -999;
1046 float vertexZ = -999;
1047 float vertexXY = -999;
1050 float centrality = -999;
1052 __n1_1 = __n1_2 = __n1_3 = __n1Nw_1 = __n1Nw_2 = __n1Nw_3 = 0;
1054 _eventAccounting->Fill(1);// count all calls to this function with a valid pointer
1057 AliCentrality* centralityObject = fAODEvent->GetHeader()->GetCentralityP();
1058 if (centralityObject)
1060 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 6" << endl;
1062 v0Centr = centralityObject->GetCentralityPercentile("V0M");
1063 trkCentr = centralityObject->GetCentralityPercentile("TRK");
1064 spdCentr = centralityObject->GetCentralityPercentile("CL1");
1065 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 7" << endl;
1068 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 8" << endl;
1070 _nTracks = fAODEvent->GetNumberOfTracks();
1078 _field = fAODEvent->GetMagneticField();
1080 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - _field:" << _field << endl;
1083 switch (_centralityMethod)
1085 case 0: centrality = _mult0; break;
1086 case 1: centrality = _mult1; break;
1087 case 2: centrality = _mult2; break;
1088 case 3: centrality = _mult3; break;
1089 case 4: centrality = _mult4; break;
1090 case 5: centrality = _mult5; break;
1091 case 6: centrality = _mult6; break;
1094 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 10" << endl;
1096 //filter on centrality
1097 if ( centrality < _centralityMin ||
1098 centrality > _centralityMax)
1100 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 11" << endl;
1102 // we dont analyze this event here...
1105 _eventAccounting->Fill(2);// count all events with right centrality
1106 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 12" << endl;
1108 // filter on z and xy vertex
1109 vertex = (AliAODVertex*) fAODEvent->GetPrimaryVertexSPD();
1110 if (!vertex || vertex->GetNContributors()<1)
1114 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - No valid vertex object or poor vertex" << endl;
1118 vertexX = vertex->GetX();
1119 vertexY = vertex->GetY();
1120 vertexZ = vertex->GetZ();
1121 vertexXY = sqrt(vertexX*vertexX+vertexY*vertexY);
1123 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 13" << endl;
1125 // cout << "vertexZ : " << vertexZ << endl;
1126 // cout << "vertexXY: " << vertexXY << endl;
1127 // cout << "_vertexZMin: " << _vertexZMin << endl;
1128 // cout << "_vertexZMax: " << _vertexZMax << endl;
1129 // cout << "_vertexXYMin: " << _vertexXYMin << endl;
1130 // cout << "_vertexXYMax: " << _vertexXYMax << endl;
1133 vertexZ < _vertexZMin ||
1134 vertexZ > _vertexZMax ||
1135 vertexXY < _vertexXYMin ||
1136 vertexXY > _vertexXYMax)
1140 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 14" << endl;
1142 iVertex = int((vertexZ-_min_vertexZ)/_width_vertexZ);
1143 iVertexP1 = iVertex*_nBins_etaPhiPt_1;
1144 iVertexP2 = iVertex*_nBins_etaPhiPt_2;
1145 iVertexP3 = iVertex*_nBins_etaPhiPt_3;
1146 if (iVertex<0 || iVertex>=_nBins_vertexZ)
1148 AliError("AliAnalysisTask3PCorrelations::Exec(Option_t *option) iVertex<0 || iVertex>=_nBins_vertexZ ");
1151 _eventAccounting->Fill(3);// count all calls to this function with a valid pointer
1152 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 15" << endl;
1155 // loop over all particles for singles
1156 //debug() << "_nTracks:"<< _nTracks << endl;
1157 //reset single particle counters
1158 for (int iTrack=0; iTrack< _nTracks; iTrack++)
1160 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - 16 iTrack:" << iTrack << endl;
1162 AliAODTrack * t = (AliAODTrack *) fAODEvent->GetTrack(iTrack);
1165 AliError(Form("AliAnalysisTask3PCorrelations::Exec(Option_t *option) No track ofr iTrack=%d", iTrack));
1178 dedx = t->GetTPCsignal();
1179 nClus = t->GetTPCNcls();
1180 bitOK = t->TestFilterBit(_trackFilterBit);
1184 nClus < _nClusterMin) continue;
1186 // cout << "_trackFilterBit:" << _trackFilterBit << " Track returns:" << bitOK << endl;
1187 // cout << " pt:" << pt << " _min_pt_1:" << _min_pt_1 << " _max_pt_1:" << _max_pt_1<< endl;
1188 // cout << " phi:" << phi << endl;
1189 // cout << " eta:" << eta << " _min_eta_1:" << _min_eta_1 << " _max_eta_1:" << _max_eta_1<< endl;
1190 // cout << " dedx:" << dedx << " _dedxMin:" << _dedxMin << " _dedxMax:" << _dedxMax << endl;
1191 // cout << "nclus:" << nClus<< " _nClusterMin:" << _nClusterMin << endl;
1192 if (pt >= _min_pt_1 &&
1194 eta >= _min_eta_1 &&
1197 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 1:" << endl;
1198 // Get the dca information
1199 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1200 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
1211 // cout << "1 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1212 // cout << "1 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1214 // skip track if DCA too large
1215 if (dcaZ >= _dcaZMin &&
1217 dcaXY >= _dcaXYMin &&
1219 continue; //track does not have a valid DCA
1220 // cout << "keep track:" << endl;
1222 iPhi = int( phi/_width_phi_1);
1223 // cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack<< endl<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1224 if (iPhi<0 || iPhi>=_nBins_phi_1 )
1226 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1230 iEta = int((eta-_min_eta_1)/_width_eta_1);
1231 if (iEta<0 || iEta>=_nBins_eta_1)
1233 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1236 iPt = int((pt -_min_pt_1 )/_width_pt_1 );
1237 if (iPt<0 || iPt >=_nBins_pt_1)
1239 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1242 iEtaPhi = iEta*_nBins_phi_1+iPhi;
1243 iZEtaPhiPt = iVertexP1 + iEtaPhi*_nBins_pt_1 + iPt;
1245 if (charge>0 && _correctionWeight_1P)
1246 corr = _correctionWeight_1P[iZEtaPhiPt];
1247 else if (charge<0 && _correctionWeight_1M)
1248 corr = _correctionWeight_1M[iZEtaPhiPt];
1251 // cout << "all good; process track:" << endl;
1254 __n1_1_vsPt[iPt] += corr;
1256 __n1_1P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1258 __n1_1M_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1263 //_charge_1[k1] = charge;
1265 _correction_1[k1] = corr;
1267 __n1_1_vsPhi[iPhi] += corr;
1272 AliError(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
1278 else if (pt >= _min_pt_2 &&
1280 eta >= _min_eta_2 &&
1283 // Get the dca information
1284 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
1285 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1286 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
1297 // cout << "2 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1298 // cout << "2 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1299 // skip track if DCA too large
1300 if (dcaZ >= _dcaZMin &&
1302 dcaXY >= _dcaXYMin &&
1304 continue; //track does not have a valid DCA
1306 iPhi = int( phi/_width_phi_2);
1307 //cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack << endl
1308 //<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1309 if (iPhi<0 || iPhi>=_nBins_phi_2 )
1311 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1315 iEta = int((eta-_min_eta_2)/_width_eta_2);
1316 if (iEta<0 || iEta>=_nBins_eta_2)
1318 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1321 iPt = int((pt -_min_pt_2 )/_width_pt_2 );
1322 if (iPt<0 || iPt >=_nBins_pt_2)
1324 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1328 iEtaPhi = iEta*_nBins_phi_2+iPhi;
1329 iZEtaPhiPt = iVertexP2 + iEtaPhi*_nBins_pt_2 + iPt;
1330 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2)
1332 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2");
1336 if (charge>0 && _correctionWeight_2P)
1337 corr = _correctionWeight_2P[iZEtaPhiPt];
1338 else if (charge<0 && _correctionWeight_2M)
1339 corr = _correctionWeight_2M[iZEtaPhiPt];
1345 //_dedxVsP_2->Fill(p*q,dedx);
1346 __n1_2_vsPt[iPt] += corr; // cout << "step 15" << endl;
1348 __n1_2P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1350 __n1_2M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1353 _id_2[k2] = iTrack; // cout << "step 1" << endl;
1354 //_charge_2[k2] = charge; // cout << "step 2" << endl;
1355 _iPhi_2[k2] = iPhi; // cout << "step 3" << endl;
1356 _correction_2[k2] = corr; // cout << "step 9" << endl;
1357 __n1_2 += corr; // cout << "step 10" << endl;
1359 __n1_2_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1363 AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize));
1369 else if (pt >= _min_pt_3 &&
1371 eta >= _min_eta_3 &&
1374 // Get the dca information
1375 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
1376 AliAODTrack* clone = (AliAODTrack*) t->Clone("trk_clone"); //need clone, in order not to change track parameters
1377 if (clone->PropagateToDCA(vertex, _field, 100., b, bCov) )
1388 // skip track if DCA too large
1389 if (dcaZ >= _dcaZMin &&
1391 dcaXY >= _dcaXYMin &&
1393 continue; //track does not have a valid DCA
1395 iPhi = int( phi/_width_phi_3);
1396 if (iPhi<0 || iPhi>=_nBins_phi_3 )
1398 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_3");
1402 iEta = int((eta-_min_eta_3)/_width_eta_3);
1403 if (iEta<0 || iEta>=_nBins_eta_3)
1405 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1408 iEtaPhi = iEta*_nBins_phi_3+iPhi;
1409 iZEtaPhiPt = iVertexP3 + iEtaPhi*_nBins_pt_3 + iPt;
1410 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3)
1412 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3");
1415 if (charge>0 && _correctionWeight_3P)
1416 corr = _correctionWeight_3P[iZEtaPhiPt];
1417 else if (charge<0 && _correctionWeight_3M)
1418 corr = _correctionWeight_3M[iZEtaPhiPt];
1424 __n1_3_vsPt[iPt] += corr; // cout << "step 15" << endl;
1426 __n1_3P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1428 __n1_3M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1431 _id_3[k3] = iTrack; // cout << "step 1" << endl;
1432 //_charge_3[k3] = charge; // cout << "step 2" << endl;
1433 _iPhi_3[k3] = iPhi; // cout << "step 3" << endl;
1434 _correction_3[k3] = corr; // cout << "step 9" << endl;
1435 __n1_3 += corr; // cout << "step 10" << endl;
1437 __n1_3_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1441 AliWarning(Form("-W- k3 >=arraySize; arraySize: %d",arraySize));
1447 // cout << "done with track" << endl;
1450 // cout << "Filling histograms now" << endl;
1458 _vertexZ->Fill(vertexZ);
1461 //if singels only selected, do not fill pair histograms.
1468 // reset pair counters
1469 _n1_1_vsM->Fill( centrality, __n1_1);
1470 _n1Nw_1_vsM->Fill( centrality, __n1Nw_1);
1471 _n1_2_vsM->Fill( centrality, __n1_2);
1472 _n1Nw_2_vsM->Fill( centrality, __n1Nw_2);
1473 _n1_3_vsM->Fill( centrality, __n1_3);
1474 _n1Nw_3_vsM->Fill( centrality, __n1Nw_3);
1476 __n2_12 = __n2Nw_12 = __n2_13 = __n2Nw_13 = __n2_23 = __n2Nw_23 = __n3_123 = __n3Nw_123 = 0;
1478 for (int i1=0; i1<k1; i1++)
1480 // cout << " i1:" << i1 << endl;
1482 iPhi_1 = _iPhi_1[i1];
1483 corr_1 = _correction_1[i1];
1485 for (int i2=0;i2<k2;i2++)
1490 iPhi_2 = _iPhi_2[i2];
1491 corr_2 = _correction_2[i2];
1492 corr_12 = corr_1*corr_2;
1493 ij_12 = iPhi_1*_nBins_phi_1 + iPhi_2;
1494 __n2_12_vsPhi[ij_12] += corr_12;
1497 for (int i3=0;i3<k3;i3++)
1500 if (id_1!=id_3 && id_2!=id_3)
1502 iPhi_3 = _iPhi_3[i3];
1503 corr_3 = _correction_3[i3];
1504 corr_123 = corr_12*corr_3;
1505 ijk_123 = ij_12 *_nBins_phi_2 + iPhi_3;
1506 __n3_123_vsPhi[ijk_123] += corr_123;
1507 __n3_123 += corr_123;
1514 for (int i3=0;i3<k3;i3++)
1519 iPhi_3 = _iPhi_3[i3];
1520 corr_3 = _correction_3[i3];
1521 corr_13 = corr_1*corr_3;
1522 ij_13 = iPhi_1*_nBins_phi_1 + iPhi_3;
1523 __n2_13_vsPhi[ij_13] += corr_13;
1531 for (int i2=0; i2<k2; i2++)
1534 iPhi_2 = _iPhi_2[i2];
1535 corr_2 = _correction_2[i2];
1536 for (int i3=0;i3<k3;i3++)
1541 iPhi_3 = _iPhi_3[i3];
1542 corr_3 = _correction_3[i3];
1543 corr_23 = corr_2*corr_3;
1544 ij_23 = iPhi_2*_nBins_phi_2 + iPhi_3;
1545 __n2_23_vsPhi[ij_23] += corr_23;
1551 _n2_12_vsM->Fill( centrality, __n2_12);
1552 _n2_13_vsM->Fill( centrality, __n2_13);
1553 _n2_23_vsM->Fill( centrality, __n2_23);
1554 _n3_123_vsM->Fill( centrality, __n3_123);
1555 _n2Nw_12_vsM->Fill( centrality, __n2Nw_12);
1556 _n2Nw_13_vsM->Fill( centrality, __n2Nw_13);
1557 _n2Nw_23_vsM->Fill( centrality, __n2Nw_23);
1558 _n3Nw_123_vsM->Fill(centrality, __n3_123);
1561 // cout << "Event Done " << endl;
1562 PostData(0,_outputHistoList);
1566 void AliAnalysisTask3PCorrelations::FinishTaskOutput()
1568 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Starting." << endl;
1569 finalizeHistograms();
1570 PostData(0,_outputHistoList);
1571 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Done." << endl;
1574 void AliAnalysisTask3PCorrelations::Terminate(Option_t* /*option*/)
1581 //===================================================================================================
1582 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, float * array, int size)
1585 float v1, ev1, v2, ev2, sum, esum;
1586 for (i=0, i1=1; i<size; ++i,++i1)
1588 v1 = array[i]; ev1 = sqrt(v1);
1589 v2 = h->GetBinContent(i1);
1590 ev2 = h->GetBinError(i1);
1592 esum = sqrt(ev1*ev1+ev2*ev2);
1593 h->SetBinContent(i1,sum);
1594 h->SetBinError(i1,esum);
1598 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, float * array, int size1, int size2)
1602 float v1, ev1, v2, ev2, sum, esum;
1603 for (i=0, i1=1; i<size1; ++i,++i1)
1605 for (j=0, j1=1; j<size2; ++j,++j1)
1607 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1608 v2 = h->GetBinContent(i1,j1);
1609 ev2 = h->GetBinError(i1,j1);
1611 esum = sqrt(ev1*ev1+ev2*ev2);
1612 h->SetBinContent(i1,j1,sum);
1613 h->SetBinError(i1,j1,esum);
1618 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, float * array, int size1, int size2, int size3)
1623 float v1, ev1, v2, ev2, sum, esum;
1624 int size23 = size2*size3;
1625 for (i=0, i1=1; i<size1; ++i,++i1)
1627 for (j=0, j1=1; j<size2; ++j,++j1)
1629 for (k=0, k1=1; k<size3; ++k,++k1)
1631 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1632 v2 = h->GetBinContent(i1,j1,k1);
1633 ev2 = h->GetBinError(i1,j1,k1);
1635 esum = sqrt(ev1*ev1+ev2*ev2);
1636 h->SetBinContent(i1,j1,k1,sum);
1637 h->SetBinError(i1,j1,k1,esum);
1643 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, double * array, int size)
1646 double v1, ev1, v2, ev2, sum, esum;
1647 for (i=0, i1=1; i<size; ++i,++i1)
1649 v1 = array[i]; ev1 = sqrt(v1);
1650 v2 = h->GetBinContent(i1);
1651 ev2 = h->GetBinError(i1);
1653 esum = sqrt(ev1*ev1+ev2*ev2);
1654 h->SetBinContent(i1,sum);
1655 h->SetBinError(i1,esum);
1659 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, double * array, int size1, int size2)
1663 double v1, ev1, v2, ev2, sum, esum;
1664 for (i=0, i1=1; i<size1; ++i,++i1)
1666 for (j=0, j1=1; j<size2; ++j,++j1)
1668 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1669 v2 = h->GetBinContent(i1,j1);
1670 ev2 = h->GetBinError(i1,j1);
1672 esum = sqrt(ev1*ev1+ev2*ev2);
1673 h->SetBinContent(i1,j1,sum);
1674 h->SetBinError(i1,j1,esum);
1679 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, double * array, int size1, int size2, int size3)
1684 double v1, ev1, v2, ev2, sum, esum;
1685 int size23 = size2*size3;
1686 for (i=0, i1=1; i<size1; ++i,++i1)
1688 for (j=0, j1=1; j<size2; ++j,++j1)
1690 for (k=0, k1=1; k<size3; ++k,++k1)
1692 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1693 v2 = h->GetBinContent(i1,j1,k1);
1694 ev2 = h->GetBinError(i1,j1,k1);
1696 esum = sqrt(ev1*ev1+ev2*ev2);
1697 h->SetBinContent(i1,j1,k1,sum);
1698 h->SetBinError(i1,j1,k1,esum);
1704 //________________________________________________________________________
1705 double * AliAnalysisTask3PCorrelations::getDoubleArray(int size, double v)
1707 /// Allocate an array of type double with n values
1708 /// Initialize the array to the given value
1709 double * array = new double [size];
1710 for (int i=0;i<size;++i) array[i]=v;
1714 //________________________________________________________________________
1715 float * AliAnalysisTask3PCorrelations::getFloatArray(int size, float v)
1717 /// Allocate an array of type float with n values
1718 /// Initialize the array to the given value
1719 float * array = new float [size];
1720 for (int i=0;i<size;++i) array[i]=v;
1725 //________________________________________________________________________
1726 TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1727 int n, double xMin, double xMax,
1728 const TString & xTitle, const TString & yTitle)
1730 //CreateHisto new 1D historgram
1731 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1732 TH1D * h = new TH1D(name,title,n,xMin,xMax);
1733 h->GetXaxis()->SetTitle(xTitle);
1734 h->GetYaxis()->SetTitle(yTitle);
1740 //________________________________________________________________________
1741 TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1742 int n, double * bins,
1743 const TString & xTitle, const TString & yTitle)
1745 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1746 TH1D * h = new TH1D(name,title,n,bins);
1747 h->GetXaxis()->SetTitle(xTitle);
1748 h->GetYaxis()->SetTitle(yTitle);
1754 //________________________________________________________________________
1755 TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1756 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1757 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1759 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax));
1760 TH2D * h = new TH2D(name,title,nx,xMin,xMax,ny,yMin,yMax);
1761 h->GetXaxis()->SetTitle(xTitle);
1762 h->GetYaxis()->SetTitle(yTitle);
1763 h->GetZaxis()->SetTitle(zTitle);
1768 //________________________________________________________________________
1769 TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1770 int nx, double* xbins, int ny, double yMin, double yMax,
1771 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1773 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1775 h = new TH2D(name,title,nx,xbins,ny,yMin,yMax);
1776 h->GetXaxis()->SetTitle(xTitle);
1777 h->GetYaxis()->SetTitle(yTitle);
1778 h->GetZaxis()->SetTitle(zTitle);
1784 //________________________________________________________________________
1785 TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1786 int n, double xMin, double xMax,
1787 const TString & xTitle, const TString & yTitle)
1789 //CreateHisto new 1D historgram
1790 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1791 TH1F * h = new TH1F(name,title,n,xMin,xMax);
1792 h->GetXaxis()->SetTitle(xTitle);
1793 h->GetYaxis()->SetTitle(yTitle);
1799 //________________________________________________________________________
1800 TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1801 int n, double * bins,
1802 const TString & xTitle, const TString & yTitle)
1804 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1805 TH1F * h = new TH1F(name,title,n,bins);
1806 h->GetXaxis()->SetTitle(xTitle);
1807 h->GetYaxis()->SetTitle(yTitle);
1813 //________________________________________________________________________
1814 TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1815 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1816 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1818 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax));
1819 TH2F * h = new TH2F(name,title,nx,xMin,xMax,ny,yMin,yMax);
1820 h->GetXaxis()->SetTitle(xTitle);
1821 h->GetYaxis()->SetTitle(yTitle);
1822 h->GetZaxis()->SetTitle(zTitle);
1827 //________________________________________________________________________
1828 TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1829 int nx, double* xbins, int ny, double yMin, double yMax,
1830 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1832 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1834 h = new TH2F(name,title,nx,xbins,ny,yMin,yMax);
1835 h->GetXaxis()->SetTitle(xTitle);
1836 h->GetYaxis()->SetTitle(yTitle);
1837 h->GetZaxis()->SetTitle(zTitle);
1843 //________________________________________________________________________
1844 TH3F * AliAnalysisTask3PCorrelations::createHisto3F(const TString & name, const TString & title,
1845 int nx, double xMin, double xMax,
1846 int ny, double yMin, double yMax,
1847 int nz, double zMin, double zMax,
1848 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1850 AliInfo(Form("createHisto 2D histo %s nx: %d xMin: %f10.4 xMax: %f10.4 ny: %d yMin: %f10.4 yMax: %f10.4 nz: %d zMin: %f10.4 zMax: %f10.4",name.Data(),nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax));
1851 TH3F * h = new TH3F(name,title,nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax);
1852 h->GetXaxis()->SetTitle(xTitle);
1853 h->GetYaxis()->SetTitle(yTitle);
1854 h->GetZaxis()->SetTitle(zTitle);
1859 //________________________________________________________________________
1860 TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name, const TString & description,
1861 int nx,double xMin,double xMax,
1862 const TString & xTitle, const TString & yTitle)
1864 AliInfo(Form("createHisto 1D profile %s nBins: %d xMin: %f10.4 xMax: %f10.4",name.Data(),nx,xMin,xMax));
1865 TProfile * h = new TProfile(name,description,nx,xMin,xMax);
1866 h->GetXaxis()->SetTitle(xTitle);
1867 h->GetYaxis()->SetTitle(yTitle);
1872 //________________________________________________________________________
1873 TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name,const TString & description,
1874 int nx, double* bins,
1875 const TString & xTitle, const TString & yTitle)
1877 AliInfo(Form("createHisto 1D profile %s with %d non uniform bins",name.Data(),nx));
1878 TProfile * h = new TProfile(name,description,nx,bins);
1879 h->GetXaxis()->SetTitle(xTitle);
1880 h->GetYaxis()->SetTitle(yTitle);
1886 void AliAnalysisTask3PCorrelations::addToList(TH1 *h)
1888 if (_outputHistoList)
1890 _outputHistoList->Add(h);
1893 cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;