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_2; 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->GetNTracks();
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 if (t->PropagateToDCA(vertex, _field, 100., b, bCov) )
1209 // cout << "1 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1210 // cout << "1 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1212 // skip track if DCA too large
1213 if (dcaZ >= _dcaZMin &&
1215 dcaXY >= _dcaXYMin &&
1217 continue; //track does not have a valid DCA
1218 // cout << "keep track:" << endl;
1220 iPhi = int( phi/_width_phi_1);
1221 // cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack<< endl<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1222 if (iPhi<0 || iPhi>=_nBins_phi_1 )
1224 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1228 iEta = int((eta-_min_eta_1)/_width_eta_1);
1229 if (iEta<0 || iEta>=_nBins_eta_1)
1231 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1234 iPt = int((pt -_min_pt_1 )/_width_pt_1 );
1235 if (iPt<0 || iPt >=_nBins_pt_1)
1237 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1240 iEtaPhi = iEta*_nBins_phi_1+iPhi;
1241 iZEtaPhiPt = iVertexP1 + iEtaPhi*_nBins_pt_1 + iPt;
1243 if (charge>0 && _correctionWeight_1P)
1244 corr = _correctionWeight_1P[iZEtaPhiPt];
1245 else if (charge<0 && _correctionWeight_1M)
1246 corr = _correctionWeight_1M[iZEtaPhiPt];
1249 // cout << "all good; process track:" << endl;
1252 __n1_1_vsPt[iPt] += corr;
1254 __n1_1P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1256 __n1_1M_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1261 //_charge_1[k1] = charge;
1263 _correction_1[k1] = corr;
1265 __n1_1_vsPhi[iPhi] += corr;
1270 AliError(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) k1 >=arraySize; arraySize: %d",arraySize));
1276 else if (pt >= _min_pt_2 &&
1278 eta >= _min_eta_2 &&
1281 // Get the dca information
1282 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
1283 if (t->PropagateToDCA(vertex, _field, 100., b, bCov) )
1293 // cout << "2 dcaZ:" << dcaZ << " _dcaZMin:" << _dcaZMin << " _dcaZMax:" << _dcaZMax << endl;
1294 // cout << "2 dcaXY:" << dcaXY << " _dcaXYMin:" << _dcaXYMin << " _dcaXYMax:" << _dcaXYMax << endl;
1295 // skip track if DCA too large
1296 if (dcaZ >= _dcaZMin &&
1298 dcaXY >= _dcaXYMin &&
1300 continue; //track does not have a valid DCA
1302 iPhi = int( phi/_width_phi_2);
1303 //cout << " AliAnalysisTask3PCorrelations::analyze(Event * event) -1- iTrack:" << iTrack << endl
1304 //<< "pt:" << pt << " phi:" << phi << " eta:" << eta << endl;
1305 if (iPhi<0 || iPhi>=_nBins_phi_2 )
1307 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_1");
1311 iEta = int((eta-_min_eta_2)/_width_eta_2);
1312 if (iEta<0 || iEta>=_nBins_eta_2)
1314 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1317 iPt = int((pt -_min_pt_2 )/_width_pt_2 );
1318 if (iPt<0 || iPt >=_nBins_pt_2)
1320 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iPt: %d",iPt));
1324 iEtaPhi = iEta*_nBins_phi_2+iPhi;
1325 iZEtaPhiPt = iVertexP2 + iEtaPhi*_nBins_pt_2 + iPt;
1326 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2)
1328 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_2");
1332 if (charge>0 && _correctionWeight_2P)
1333 corr = _correctionWeight_2P[iZEtaPhiPt];
1334 else if (charge<0 && _correctionWeight_2M)
1335 corr = _correctionWeight_2M[iZEtaPhiPt];
1341 //_dedxVsP_2->Fill(p*q,dedx);
1342 __n1_2_vsPt[iPt] += corr; // cout << "step 15" << endl;
1344 __n1_2P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1346 __n1_2M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1349 _id_2[k2] = iTrack; // cout << "step 1" << endl;
1350 //_charge_2[k2] = charge; // cout << "step 2" << endl;
1351 _iPhi_2[k2] = iPhi; // cout << "step 3" << endl;
1352 _correction_2[k2] = corr; // cout << "step 9" << endl;
1353 __n1_2 += corr; // cout << "step 10" << endl;
1355 __n1_2_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1359 AliWarning(Form("-W- k2 >=arraySize; arraySize: %d",arraySize));
1365 else if (pt >= _min_pt_3 &&
1367 eta >= _min_eta_3 &&
1370 // Get the dca information
1371 // cout << "AliAnalysisTask3PCorrelations::UserExec(Option_t *option) - check vertex for 2:" << endl;
1372 if (t->PropagateToDCA(vertex, _field, 100., b, bCov) )
1382 // skip track if DCA too large
1383 if (dcaZ >= _dcaZMin &&
1385 dcaXY >= _dcaXYMin &&
1387 continue; //track does not have a valid DCA
1389 iPhi = int( phi/_width_phi_3);
1390 if (iPhi<0 || iPhi>=_nBins_phi_3 )
1392 AliWarning("AliAnalysisTask3PCorrelations::analyze() iPhi<0 || iPhi>=_nBins_phi_3");
1396 iEta = int((eta-_min_eta_3)/_width_eta_3);
1397 if (iEta<0 || iEta>=_nBins_eta_3)
1399 AliWarning(Form("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) Mismatched iEta: %d", iEta));
1402 iEtaPhi = iEta*_nBins_phi_3+iPhi;
1403 iZEtaPhiPt = iVertexP3 + iEtaPhi*_nBins_pt_3 + iPt;
1404 if (iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3)
1406 AliWarning("AliAnalysisTask3PCorrelations::analyze(AliceEvent * event) iZEtaPhiPt<0 || iZEtaPhiPt>=_nBins_zEtaPhiPt_3");
1409 if (charge>0 && _correctionWeight_3P)
1410 corr = _correctionWeight_3P[iZEtaPhiPt];
1411 else if (charge<0 && _correctionWeight_3M)
1412 corr = _correctionWeight_3M[iZEtaPhiPt];
1418 __n1_3_vsPt[iPt] += corr; // cout << "step 15" << endl;
1420 __n1_3P_vsZEtaPhiPt[iZEtaPhiPt] += corr;
1422 __n1_3M_vsZEtaPhiPt[iZEtaPhiPt] += corr; }
1425 _id_3[k3] = iTrack; // cout << "step 1" << endl;
1426 //_charge_3[k3] = charge; // cout << "step 2" << endl;
1427 _iPhi_3[k3] = iPhi; // cout << "step 3" << endl;
1428 _correction_3[k3] = corr; // cout << "step 9" << endl;
1429 __n1_3 += corr; // cout << "step 10" << endl;
1431 __n1_3_vsPhi[iPhi] += corr; // cout << "step 11" << endl;
1435 AliWarning(Form("-W- k3 >=arraySize; arraySize: %d",arraySize));
1441 // cout << "done with track" << endl;
1444 // cout << "Filling histograms now" << endl;
1452 _vertexZ->Fill(vertexZ);
1455 //if singels only selected, do not fill pair histograms.
1462 // reset pair counters
1463 _n1_1_vsM->Fill( centrality, __n1_1);
1464 _n1Nw_1_vsM->Fill( centrality, __n1Nw_1);
1465 _n1_2_vsM->Fill( centrality, __n1_2);
1466 _n1Nw_2_vsM->Fill( centrality, __n1Nw_2);
1467 _n1_3_vsM->Fill( centrality, __n1_3);
1468 _n1Nw_3_vsM->Fill( centrality, __n1Nw_3);
1470 __n2_12 = __n2Nw_12 = __n2_13 = __n2Nw_13 = __n2_23 = __n2Nw_23 = __n3_123 = __n3Nw_123 = 0;
1472 for (int i1=0; i1<k1; i1++)
1474 // cout << " i1:" << i1 << endl;
1476 iPhi_1 = _iPhi_1[i1];
1477 corr_1 = _correction_1[i1];
1479 for (int i2=0;i2<k2;i2++)
1484 iPhi_2 = _iPhi_2[i2];
1485 corr_2 = _correction_2[i2];
1486 corr_12 = corr_1*corr_2;
1487 ij_12 = iPhi_1*_nBins_phi_1 + iPhi_2;
1488 __n2_12_vsPhi[ij_12] += corr_12;
1491 for (int i3=0;i3<k3;i3++)
1494 if (id_1!=id_3 && id_2!=id_3)
1496 iPhi_3 = _iPhi_3[i3];
1497 corr_3 = _correction_3[i3];
1498 corr_123 = corr_12*corr_3;
1499 ijk_123 = ij_12 *_nBins_phi_2 + iPhi_3;
1500 __n3_123_vsPhi[ijk_123] += corr_123;
1501 __n3_123 += corr_123;
1508 for (int i3=0;i3<k3;i3++)
1513 iPhi_3 = _iPhi_3[i3];
1514 corr_3 = _correction_3[i3];
1515 corr_13 = corr_1*corr_3;
1516 ij_13 = iPhi_1*_nBins_phi_1 + iPhi_3;
1517 __n2_13_vsPhi[ij_13] += corr_13;
1525 for (int i2=0; i2<k2; i2++)
1528 iPhi_2 = _iPhi_2[i2];
1529 corr_2 = _correction_2[i2];
1530 for (int i3=0;i3<k3;i3++)
1535 iPhi_3 = _iPhi_3[i3];
1536 corr_3 = _correction_3[i3];
1537 corr_23 = corr_2*corr_3;
1538 ij_23 = iPhi_2*_nBins_phi_2 + iPhi_3;
1539 __n2_23_vsPhi[ij_23] += corr_23;
1545 _n2_12_vsM->Fill( centrality, __n2_12);
1546 _n2_13_vsM->Fill( centrality, __n2_13);
1547 _n2_23_vsM->Fill( centrality, __n2_23);
1548 _n3_123_vsM->Fill( centrality, __n3_123);
1549 _n2Nw_12_vsM->Fill( centrality, __n2Nw_12);
1550 _n2Nw_13_vsM->Fill( centrality, __n2Nw_13);
1551 _n2Nw_23_vsM->Fill( centrality, __n2Nw_23);
1552 _n3Nw_123_vsM->Fill(centrality, __n3_123);
1555 // cout << "Event Done " << endl;
1556 PostData(0,_outputHistoList);
1560 void AliAnalysisTask3PCorrelations::FinishTaskOutput()
1562 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Starting." << endl;
1563 finalizeHistograms();
1564 PostData(0,_outputHistoList);
1565 cout << "AliAnalysisTask3PCorrelations::FinishTaskOutput() Done." << endl;
1568 void AliAnalysisTask3PCorrelations::Terminate(Option_t* /*option*/)
1575 //===================================================================================================
1576 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, float * array, int size)
1579 float v1, ev1, v2, ev2, sum, esum;
1580 for (i=0, i1=1; i<size; ++i,++i1)
1582 v1 = array[i]; ev1 = sqrt(v1);
1583 v2 = h->GetBinContent(i1);
1584 ev2 = h->GetBinError(i1);
1586 esum = sqrt(ev1*ev1+ev2*ev2);
1587 h->SetBinContent(i1,sum);
1588 h->SetBinError(i1,esum);
1592 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, float * array, int size1, int size2)
1596 float v1, ev1, v2, ev2, sum, esum;
1597 for (i=0, i1=1; i<size1; ++i,++i1)
1599 for (j=0, j1=1; j<size2; ++j,++j1)
1601 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1602 v2 = h->GetBinContent(i1,j1);
1603 ev2 = h->GetBinError(i1,j1);
1605 esum = sqrt(ev1*ev1+ev2*ev2);
1606 h->SetBinContent(i1,j1,sum);
1607 h->SetBinError(i1,j1,esum);
1612 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, float * array, int size1, int size2, int size3)
1617 float v1, ev1, v2, ev2, sum, esum;
1618 int size23 = size2*size3;
1619 for (i=0, i1=1; i<size1; ++i,++i1)
1621 for (j=0, j1=1; j<size2; ++j,++j1)
1623 for (k=0, k1=1; k<size3; ++k,++k1)
1625 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1626 v2 = h->GetBinContent(i1,j1,k1);
1627 ev2 = h->GetBinError(i1,j1,k1);
1629 esum = sqrt(ev1*ev1+ev2*ev2);
1630 h->SetBinContent(i1,j1,k1,sum);
1631 h->SetBinError(i1,j1,k1,esum);
1637 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH1 * h, double * array, int size)
1640 double v1, ev1, v2, ev2, sum, esum;
1641 for (i=0, i1=1; i<size; ++i,++i1)
1643 v1 = array[i]; ev1 = sqrt(v1);
1644 v2 = h->GetBinContent(i1);
1645 ev2 = h->GetBinError(i1);
1647 esum = sqrt(ev1*ev1+ev2*ev2);
1648 h->SetBinContent(i1,sum);
1649 h->SetBinError(i1,esum);
1653 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH2 * h, double * array, int size1, int size2)
1657 double v1, ev1, v2, ev2, sum, esum;
1658 for (i=0, i1=1; i<size1; ++i,++i1)
1660 for (j=0, j1=1; j<size2; ++j,++j1)
1662 v1 = array[i*size2+j]; ev1 = sqrt(v1);
1663 v2 = h->GetBinContent(i1,j1);
1664 ev2 = h->GetBinError(i1,j1);
1666 esum = sqrt(ev1*ev1+ev2*ev2);
1667 h->SetBinContent(i1,j1,sum);
1668 h->SetBinError(i1,j1,esum);
1673 void AliAnalysisTask3PCorrelations::fillHistoWithArray(TH3 * h, double * array, int size1, int size2, int size3)
1678 double v1, ev1, v2, ev2, sum, esum;
1679 int size23 = size2*size3;
1680 for (i=0, i1=1; i<size1; ++i,++i1)
1682 for (j=0, j1=1; j<size2; ++j,++j1)
1684 for (k=0, k1=1; k<size3; ++k,++k1)
1686 v1 = array[i*size23+j*size3+k]; ev1 = sqrt(v1);
1687 v2 = h->GetBinContent(i1,j1,k1);
1688 ev2 = h->GetBinError(i1,j1,k1);
1690 esum = sqrt(ev1*ev1+ev2*ev2);
1691 h->SetBinContent(i1,j1,k1,sum);
1692 h->SetBinError(i1,j1,k1,esum);
1698 //________________________________________________________________________
1699 double * AliAnalysisTask3PCorrelations::getDoubleArray(int size, double v)
1701 /// Allocate an array of type double with n values
1702 /// Initialize the array to the given value
1703 double * array = new double [size];
1704 for (int i=0;i<size;++i) array[i]=v;
1708 //________________________________________________________________________
1709 float * AliAnalysisTask3PCorrelations::getFloatArray(int size, float v)
1711 /// Allocate an array of type float with n values
1712 /// Initialize the array to the given value
1713 float * array = new float [size];
1714 for (int i=0;i<size;++i) array[i]=v;
1719 //________________________________________________________________________
1720 TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1721 int n, double xMin, double xMax,
1722 const TString & xTitle, const TString & yTitle)
1724 //CreateHisto new 1D historgram
1725 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1726 TH1D * h = new TH1D(name,title,n,xMin,xMax);
1727 h->GetXaxis()->SetTitle(xTitle);
1728 h->GetYaxis()->SetTitle(yTitle);
1734 //________________________________________________________________________
1735 TH1D * AliAnalysisTask3PCorrelations::createHisto1D(const TString & name, const TString & title,
1736 int n, double * bins,
1737 const TString & xTitle, const TString & yTitle)
1739 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1740 TH1D * h = new TH1D(name,title,n,bins);
1741 h->GetXaxis()->SetTitle(xTitle);
1742 h->GetYaxis()->SetTitle(yTitle);
1748 //________________________________________________________________________
1749 TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1750 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1751 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1753 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));
1754 TH2D * h = new TH2D(name,title,nx,xMin,xMax,ny,yMin,yMax);
1755 h->GetXaxis()->SetTitle(xTitle);
1756 h->GetYaxis()->SetTitle(yTitle);
1757 h->GetZaxis()->SetTitle(zTitle);
1762 //________________________________________________________________________
1763 TH2D * AliAnalysisTask3PCorrelations::createHisto2D(const TString & name, const TString & title,
1764 int nx, double* xbins, int ny, double yMin, double yMax,
1765 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1767 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1769 h = new TH2D(name,title,nx,xbins,ny,yMin,yMax);
1770 h->GetXaxis()->SetTitle(xTitle);
1771 h->GetYaxis()->SetTitle(yTitle);
1772 h->GetZaxis()->SetTitle(zTitle);
1778 //________________________________________________________________________
1779 TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1780 int n, double xMin, double xMax,
1781 const TString & xTitle, const TString & yTitle)
1783 //CreateHisto new 1D historgram
1784 AliInfo(Form("createHisto 1D histo %s nBins: %d xMin: %f xMax: %f",name.Data(),n,xMin,xMax));
1785 TH1F * h = new TH1F(name,title,n,xMin,xMax);
1786 h->GetXaxis()->SetTitle(xTitle);
1787 h->GetYaxis()->SetTitle(yTitle);
1793 //________________________________________________________________________
1794 TH1F * AliAnalysisTask3PCorrelations::createHisto1F(const TString & name, const TString & title,
1795 int n, double * bins,
1796 const TString & xTitle, const TString & yTitle)
1798 AliInfo(Form("createHisto 1D histo %s with %d non uniform nBins",name.Data(),n));
1799 TH1F * h = new TH1F(name,title,n,bins);
1800 h->GetXaxis()->SetTitle(xTitle);
1801 h->GetYaxis()->SetTitle(yTitle);
1807 //________________________________________________________________________
1808 TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1809 int nx, double xMin, double xMax, int ny, double yMin, double yMax,
1810 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1812 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));
1813 TH2F * h = new TH2F(name,title,nx,xMin,xMax,ny,yMin,yMax);
1814 h->GetXaxis()->SetTitle(xTitle);
1815 h->GetYaxis()->SetTitle(yTitle);
1816 h->GetZaxis()->SetTitle(zTitle);
1821 //________________________________________________________________________
1822 TH2F * AliAnalysisTask3PCorrelations::createHisto2F(const TString & name, const TString & title,
1823 int nx, double* xbins, int ny, double yMin, double yMax,
1824 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1826 AliInfo(Form("createHisto 2D histo %s with %d non uniform nBins",name.Data(),nx));
1828 h = new TH2F(name,title,nx,xbins,ny,yMin,yMax);
1829 h->GetXaxis()->SetTitle(xTitle);
1830 h->GetYaxis()->SetTitle(yTitle);
1831 h->GetZaxis()->SetTitle(zTitle);
1837 //________________________________________________________________________
1838 TH3F * AliAnalysisTask3PCorrelations::createHisto3F(const TString & name, const TString & title,
1839 int nx, double xMin, double xMax,
1840 int ny, double yMin, double yMax,
1841 int nz, double zMin, double zMax,
1842 const TString & xTitle, const TString & yTitle, const TString & zTitle)
1844 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));
1845 TH3F * h = new TH3F(name,title,nx,xMin,xMax,ny,yMin,yMax,nz,zMin,zMax);
1846 h->GetXaxis()->SetTitle(xTitle);
1847 h->GetYaxis()->SetTitle(yTitle);
1848 h->GetZaxis()->SetTitle(zTitle);
1853 //________________________________________________________________________
1854 TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name, const TString & description,
1855 int nx,double xMin,double xMax,
1856 const TString & xTitle, const TString & yTitle)
1858 AliInfo(Form("createHisto 1D profile %s nBins: %d xMin: %f10.4 xMax: %f10.4",name.Data(),nx,xMin,xMax));
1859 TProfile * h = new TProfile(name,description,nx,xMin,xMax);
1860 h->GetXaxis()->SetTitle(xTitle);
1861 h->GetYaxis()->SetTitle(yTitle);
1866 //________________________________________________________________________
1867 TProfile * AliAnalysisTask3PCorrelations::createProfile(const TString & name,const TString & description,
1868 int nx, double* bins,
1869 const TString & xTitle, const TString & yTitle)
1871 AliInfo(Form("createHisto 1D profile %s with %d non uniform bins",name.Data(),nx));
1872 TProfile * h = new TProfile(name,description,nx,bins);
1873 h->GetXaxis()->SetTitle(xTitle);
1874 h->GetYaxis()->SetTitle(yTitle);
1880 void AliAnalysisTask3PCorrelations::addToList(TH1 *h)
1882 if (_outputHistoList)
1884 _outputHistoList->Add(h);
1887 cout << "addToList(TH1 *h) _outputHistoList is null!!!!! Shoudl abort ship" << endl;