7 #include "AliInputEventHandler.h"
8 #include "AliAODEvent.h"
9 #include "AliAODVertex.h"
10 #include "AliAODTrack.h"
11 #include "AliCentrality.h"
12 #include "AliVHeader.h"
13 #include "AliAODVZERO.h"
15 #include "AliOADBContainer.h"
18 #include "AliGenHijingEventHeader.h"
19 #include "AliMCEvent.h"
20 #include "AliAODMCHeader.h"
21 #include "AliAODMCParticle.h"
23 #include "AliESDtrackCuts.h"
24 #include "AliESDVertex.h"
25 #include "AliEventplane.h"
26 #include "TProfile2D.h"
92 fContAllChargesV0A(NULL),
93 fContAllChargesV0C(NULL),
94 fContAllChargesV0Av3(NULL),
95 fContAllChargesV0Cv3(NULL),
96 fContAllChargesMC(NULL),
103 fContAllChargesMCA(NULL),
104 fContAllChargesMCC(NULL),
105 fContAllChargesMCAv3(NULL),
106 fContAllChargesMCCv3(NULL),
109 fModulationDEDx(kFALSE),
124 fList->SetName(
"resultsV2");
125 fList2->SetName(
"resultsV3");
126 fList3->SetName(
"resultsMC");
127 fList4->SetName(
"QA");
129 fList->SetOwner(kTRUE);
130 fList2->SetOwner(kTRUE);
131 fList3->SetOwner(kTRUE);
132 fList4->SetOwner(kTRUE);
134 fPID->SetNewTrackParam();
136 for(
Int_t i=0;i < 1000;i++){
156 fIsAfter2011(kFALSE),
189 fContAllChargesV0A(NULL),
190 fContAllChargesV0C(NULL),
191 fContAllChargesV0Av3(NULL),
192 fContAllChargesV0Cv3(NULL),
193 fContAllChargesMC(NULL),
200 fContAllChargesMCA(NULL),
201 fContAllChargesMCC(NULL),
202 fContAllChargesMCAv3(NULL),
203 fContAllChargesMCCv3(NULL),
206 fModulationDEDx(kFALSE),
221 DefineOutput(1, TList::Class());
222 DefineOutput(2, TList::Class());
223 DefineOutput(3, TList::Class());
224 DefineOutput(4, TList::Class());
227 fList->SetName(
"resultsV2");
228 fList2->SetName(
"resultsV3");
229 fList3->SetName(
"resultsMC");
232 fList->SetOwner(kTRUE);
239 for(
Int_t i=0;i < 1000;i++){
271 const Int_t nPtBinsTOF = 45;
272 Double_t binsPtTOF[nPtBinsTOF+1] = {0., 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.25, 2.5, 2.75,3.0,3.25,3.5,3.75,4.0,4.5,5,5.5,6,6.5,7,8,9,10,12,15,20};
274 const Int_t nPsiTOF = 10;
275 const Int_t nChargeBinsTOFres = 2;
277 const Int_t nProbTOFres = 4;
278 const Int_t nPsiTOFres = 10;
279 const Int_t nMaskPID = 3;
283 if(
fIsMC && nDCABin>1) nDCABin = 6;
291 Int_t binsTOF[6] = {nCentrTOFres,nChargeBinsTOFres,nProbTOFres,nPsiTOFres,nMaskPID,nDCABin};
292 Int_t binsTOFmc[5] = {nCentrTOFres,nChargeBinsTOFres,1,nPsiTOFres,2};
293 Int_t binsTOFmcPureMC[5] = {nCentrTOFres,nChargeBinsTOFres,1,nPsiTOFres,1};
353 fHctauPtEP =
new TProfile2D(
"hctauPtEP",
"K^{0}_{s} decay length;p_{T} (GeV/#it{c});#Delta#phi (rad)",40,0,5,10,-TMath::Pi(),TMath::Pi());
354 fHctauAt1EP =
new TH2F(
"hctauAt1EP",
"K^{0}_{s} decay length at 1 GeV/#it{c};c#tau (cm);#Delta#phi (rad)",50,0,50,10,-TMath::Pi(),TMath::Pi());
554 fPhiRPv0A =
new TH2F(
"fPhiRPv0Av2",
"#phi distribution of EP VZERO-A;centrality;#phi (rad)",
nCentrBin,0,
nCentrBin,nPsiTOF,-TMath::Pi()/2,TMath::Pi()/2);
555 fPhiRPv0C =
new TH2F(
"fPhiRPv0Cv2",
"#phi distribution of EP VZERO-C;centrality;#phi (rad)",
nCentrBin,0,
nCentrBin,nPsiTOF,-TMath::Pi()/2,TMath::Pi()/2);
563 const Int_t nDETsignal = 50;
564 Double_t binDETsignal[nDETsignal+1];
565 for(
Int_t i=0;i<nDETsignal+1;i++){
566 binDETsignal[i] = -5 + i*10. / nDETsignal;
574 const Int_t nDeltaPhi = 5;
575 const Int_t nDeltaPhiV3 = 7;
577 Int_t binsQA[5] = {nCentrTOF,7,5,nDeltaPhi,2};
578 Int_t binsQAv3[5] = {nCentrTOF,7,5,nDeltaPhiV3,2};
675 const Int_t nDCA = 300;
677 for(
Int_t i=0;i <= nDCA;i++){
678 DCAbin[i] = -3 +i*6.0/nDCA;
681 char nameHistos[100];
683 snprintf(nameHistos,100,
"fHdcaPtPiCent%i",iC);
684 fHdcaPt[iC][0] =
new TH2D(nameHistos,
"DCA_{xy} for #pi;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
685 snprintf(nameHistos,100,
"fHdcaPtKaCent%i",iC);
686 fHdcaPt[iC][1] =
new TH2D(nameHistos,
"DCA_{xy} for K;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
687 snprintf(nameHistos,100,
"fHdcaPtPrCent%i",iC);
688 fHdcaPt[iC][2] =
new TH2D(nameHistos,
"DCA_{xy} for #bar{p};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
689 snprintf(nameHistos,100,
"fHdcaPtElCent%i",iC);
690 fHdcaPt[iC][3] =
new TH2D(nameHistos,
"DCA_{xy} for e;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
691 snprintf(nameHistos,100,
"fHdcaPtDeCent%i",iC);
692 fHdcaPt[iC][4] =
new TH2D(nameHistos,
"DCA_{xy} for #bar{d};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
693 snprintf(nameHistos,100,
"fHdcaPtTrCent%i",iC);
694 fHdcaPt[iC][5] =
new TH2D(nameHistos,
"DCA_{xy} for #bar{t};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
695 snprintf(nameHistos,100,
"fHdcaPtHeCent%i",iC);
696 fHdcaPt[iC][6] =
new TH2D(nameHistos,
"DCA_{xy} for #bar{^{3}He};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
700 for(
Int_t i=0;i<7;i++)
706 snprintf(nameHistos,100,
"fHdcaPtPiSecCent%i",iC);
707 fHdcaPtSec[iC][0] =
new TH2D(nameHistos,
"DCA_{xy} for secondary #pi;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
708 snprintf(nameHistos,100,
"fHdcaPtKaSecCent%i",iC);
709 fHdcaPtSec[iC][1] =
new TH2D(nameHistos,
"DCA_{xy} for secondary K;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
710 snprintf(nameHistos,100,
"fHdcaPtPrSecCent%i",iC);
711 fHdcaPtSec[iC][2] =
new TH2D(nameHistos,
"DCA_{xy} for secondary #bar{p};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
712 snprintf(nameHistos,100,
"fHdcaPtElSecCent%i",iC);
713 fHdcaPtSec[iC][3] =
new TH2D(nameHistos,
"DCA_{xy} for secondary e;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
714 snprintf(nameHistos,100,
"fHdcaPtDeSecCent%i",iC);
715 fHdcaPtSec[iC][4] =
new TH2D(nameHistos,
"DCA_{xy} for secondary #bar{d};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
716 snprintf(nameHistos,100,
"fHdcaPtTrSecCent%i",iC);
717 fHdcaPtSec[iC][5] =
new TH2D(nameHistos,
"DCA_{xy} for secondary #bar{t};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
718 snprintf(nameHistos,100,
"fHdcaPtHeSecCent%i",iC);
719 fHdcaPtSec[iC][6] =
new TH2D(nameHistos,
"DCA_{xy} for secondary #bar{^{3}He};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
723 for(
Int_t i=0;i<7;i++)
730 const Int_t nBinQApid = 2;
731 Int_t binQApid[nBinQApid] = {nCentrTOF,200};
732 const Int_t nbinsigma = 100;
734 for(
Int_t i=0;i<nbinsigma+1;i++){
735 nsigmaQA[i] = -10 + 20.0*i/nbinsigma;
750 printf(
"Output creation ok!!\n\n\n\n");
755 fHKsPhi =
new TH2D(
"hKsPhi",
"K^{0}_{s} #phi distributuion;v_{z} (cm);#phi (rad)",20,-10,10,20,0,2*TMath::Pi());
757 fHKsPhiEP =
new TH2D(
"hKsPhiEP",
"EP V0C #phi distributuion;v_{z} (cm);#phi (rad)",20,-10,10,20,0,2*TMath::Pi());
760 fHK0sMass =
new TH2D(
"hK0sMass",
"K^{0}_{s} mass;p_{T} (GeV/#it{c});mass (GeV/#it{c}^{2})",20,0,5,400,0,1);
762 fHK0sMass2 =
new TH2D(
"hK0sMass2",
"K^{0}_{s} mass using secondary vertex;p_{T} (GeV/#it{c});mass (GeV/#it{c}^{2})",20,0,5,400,0,1);
765 fHK0vsLambda=
new TH2D(
"hK0vsLambda",
";K^{0} mass;#Lambda mass",100,0,1,100,0.5,1.5);
796 fOutputAOD =
dynamic_cast<AliAODEvent*
>(InputEvent());
798 Printf(
"%s:%d AODEvent not found in Input Manager",(
char*)__FILE__,__LINE__);
803 Int_t run = fOutputAOD->GetRunNumber();
817 AliAODMCHeader *mcHeader =
dynamic_cast<AliAODMCHeader*
>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
819 AliError(
"Could not find MC Header in AOD");
848 AliCentrality *
centrality = fOutputAOD->GetCentrality();
851 v0Centr = centrality->GetCentralityPercentile(
"V0M");
852 trkCentr = centrality->GetCentralityPercentile(
"TRK");
856 if(TMath::Abs(v0Centr - trkCentr) < 5.0 && v0Centr > 0){
872 AliAODTrack *usedForK0s1[1000];
873 AliAODTrack *usedForK0s2[1000];
875 Float_t mass[8] = {5.10998909999999971e-04, 1.05658000000000002e-01, 1.39570000000000000e-01, 4.93676999999999977e-01, 9.38271999999999995e-01,1.87783699999999998,2.81740199999999996,1.40805449999999999};
878 Float_t evPlRes[18] = {0.350582,0.505393,0.607845,0.632913,0.592230,0.502489,0.381717,0.249539,0.133180,
879 0.446480,0.612705,0.712222,0.736200,0.697907,0.610114,0.481009,0.327402,0.182277};
888 if(v0Centr < 5) iC = 0;
889 else if(v0Centr < 10) iC = 1;
890 else if(v0Centr < 20) iC = 2;
891 else if(v0Centr < 30) iC = 3;
892 else if(v0Centr < 40) iC = 4;
893 else if(v0Centr < 50) iC = 5;
894 else if(v0Centr < 60) iC = 6;
895 else if(v0Centr < 70) iC = 7;
934 Int_t nAODTracks = aodEvent->GetNumberOfTracks();
936 AliAODMCHeader *mcHeader = NULL;
937 TClonesArray *mcArray = NULL;
940 mcHeader =
dynamic_cast<AliAODMCHeader*
>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
943 evplaneMC = mcHeader->GetReactionPlaneAngle();
944 if(evplaneMC > TMath::Pi()/2 && evplaneMC <= TMath::Pi()*3/2) evplaneMC-=TMath::Pi();
945 else if(evplaneMC > TMath::Pi()*3/2) evplaneMC-=2*TMath::Pi();
946 mcArray = (TClonesArray*)fOutputAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
953 Float_t EvPlaneMCV2[3] = {0,0,0};
954 Float_t EvPlaneMCV3[3] = {0,0,0};
955 Float_t etaMin[3] = {2.8,-3.6,-0.8};
956 Float_t etaMax[3] = {4.88,-1.8,0.8};
959 Int_t nMCtrack = mcArray->GetEntries() ;
962 for(
Int_t iT=0;iT < nMCtrack;iT++){
963 AliAODMCParticle *mctr = (AliAODMCParticle*) mcArray->At(iT);
964 if(!mctr || !(mctr->IsPrimary()) || !(mctr->Charge()) || mctr->Pt() < 0.2)
continue;
968 for(
Int_t iD=0;iD<3;iD++){
969 if(eta > etaMin[iD] && eta < etaMax[iD]){
971 QxMCv2[iD] += TMath::Cos(2*phi);
972 QyMCv2[iD] += TMath::Sin(2*phi);
973 QxMCv3[iD] += TMath::Cos(3*phi);
974 QyMCv3[iD] += TMath::Sin(3*phi);
980 EvPlaneMCV2[0] = TMath::ATan2(QyMCv2[0],QxMCv2[0])/2.;
981 EvPlaneMCV2[1] = TMath::ATan2(QyMCv2[1],QxMCv2[1])/2.;
982 EvPlaneMCV2[2] = TMath::ATan2(QyMCv2[2],QxMCv2[2])/2.;
983 fHResMA2->Fill(
Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[2]-EvPlaneMCV2[0])));
984 fHResMC2->Fill(
Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[2]-EvPlaneMCV2[1])));
985 fHResAC2->Fill(
Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[0]-EvPlaneMCV2[1])));
991 EvPlaneMCV3[0] = TMath::ATan2(QyMCv3[0],QxMCv3[0])/3.;
992 EvPlaneMCV3[1] = TMath::ATan2(QyMCv3[1],QxMCv3[1])/3.;
993 EvPlaneMCV3[2] = TMath::ATan2(QyMCv3[2],QxMCv3[2])/3.;
994 fHResMA3->Fill(
Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[2]-EvPlaneMCV3[0])));
995 fHResMC3->Fill(
Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[2]-EvPlaneMCV3[1])));
996 fHResAC3->Fill(
Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[0]-EvPlaneMCV3[1])));
1003 Float_t xMCepAv2[5] = {
static_cast<Float_t>(iC),0,1,EvPlaneMCV2[0],1};
1004 Float_t xMCepCv2[5] = {
static_cast<Float_t>(iC),0,1,EvPlaneMCV2[1],1};
1005 Float_t xMCepAv3[5] = {
static_cast<Float_t>(iC),0,1,EvPlaneMCV3[0],1};
1006 Float_t xMCepCv3[5] = {
static_cast<Float_t>(iC),0,1,EvPlaneMCV3[1],1};
1008 for(
Int_t iT=0;iT < nMCtrack;iT++){
1009 AliAODMCParticle *mctr = (AliAODMCParticle*) mcArray->At(iT);
1010 if(!mctr || !(mctr->IsPhysicalPrimary()) || !(mctr->Charge()) || TMath::Abs(mctr->Eta()) > 0.8 || mctr->Pt() < 0.2)
continue;
1011 Int_t iS = TMath::Abs(mctr->GetPdgCode());
1073 for(
Int_t iT = 0; iT < nAODTracks; iT++) {
1075 AliAODTrack* aodTrack =
dynamic_cast<AliAODTrack*
>(aodEvent->GetTrack(iT));
1076 if(!aodTrack) AliFatal(
"Not a standard AOD");
1082 Bool_t trkFlag = aodTrack->TestFilterBit(1);
1084 if ((TMath::Abs(aodTrack->Eta()) > 0.8) || (aodTrack->Pt() < 0.2) || (aodTrack->GetTPCNcls() <
fNcluster) || !trkFlag)
1088 Double_t bCov[3] = {-99., -99., -99.};
1091 AliAODTrack param(*aodTrack);
1092 if (!param.PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov)){
1096 if ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4))
1099 Qx2 += TMath::Cos(2*aodTrack->Phi());
1100 Qy2 += TMath::Sin(2*aodTrack->Phi());
1101 Qx3 += TMath::Cos(3*aodTrack->Phi());
1102 Qy3 += TMath::Sin(3*aodTrack->Phi());
1106 evPlAng2 = TMath::ATan2(Qy2, Qx2)/2.;
1107 evPlAng3 = TMath::ATan2(Qy3, Qx3)/3.;
1115 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1117 for (
Int_t iv0 = 0; iv0 < 64; iv0++) {
1118 Double_t phiV0 = TMath::PiOver4()*(0.5 + iv0 % 8);
1119 Float_t multv0 = aodV0->GetMultiplicity(iv0);
1124 Qxc2 += TMath::Cos(2*phiV0) * multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1125 Qyc2 += TMath::Sin(2*phiV0) * multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1126 Qxc3 += TMath::Cos(3*phiV0) * multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1127 Qyc3 += TMath::Sin(3*phiV0) * multv0*
fV0Cpol/
fMultV0->GetBinContent(iv0+1);
1129 Qxa2 += TMath::Cos(2*phiV0) * multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1130 Qya2 += TMath::Sin(2*phiV0) * multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1131 Qxa3 += TMath::Cos(3*phiV0) * multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1132 Qya3 += TMath::Sin(3*phiV0) * multv0*
fV0Apol/
fMultV0->GetBinContent(iv0+1);
1137 Qxc2 += TMath::Cos(2*phiV0) * multv0;
1138 Qyc2 += TMath::Sin(2*phiV0) * multv0;
1139 Qxc3 += TMath::Cos(3*phiV0) * multv0;
1140 Qyc3 += TMath::Sin(3*phiV0) * multv0;
1142 Qxa2 += TMath::Cos(2*phiV0) * multv0;
1143 Qya2 += TMath::Sin(2*phiV0) * multv0;
1144 Qxa3 += TMath::Cos(3*phiV0) * multv0;
1145 Qya3 += TMath::Sin(3*phiV0) * multv0;
1170 Double_t QxaCor2 = (Qxa2 - Qxamean2)/Qxarms2;
1171 Double_t QyaCor2 = (Qya2 - Qyamean2)/Qyarms2;
1172 Double_t QxcCor2 = (Qxc2 - Qxcmean2)/Qxcrms2;
1173 Double_t QycCor2 = (Qyc2 - Qycmean2)/Qycrms2;
1174 Double_t QxaCor3 = (Qxa3 - Qxamean3)/Qxarms3;
1175 Double_t QyaCor3 = (Qya3 - Qyamean3)/Qyarms3;
1176 Double_t QxcCor3 = (Qxc3 - Qxcmean3)/Qxcrms3;
1177 Double_t QycCor3 = (Qyc3 - Qycmean3)/Qycrms3;
1194 AliEventplane *ep = aodEvent->GetEventplane();
1209 for(
Int_t iT = 0; iT < nAODTracks; iT++) {
1210 AliAODTrack* aodTrack =
dynamic_cast<AliAODTrack*
>(aodEvent->GetTrack(iT));
1211 if(!aodTrack) AliFatal(
"Not a standard AOD");
1217 Bool_t trkFlag = aodTrack->TestFilterBit(1);
1219 trkFlag = aodTrack->TestFilterBit(4);
1221 if ((TMath::Abs(aodTrack->Eta()) >
fEtaCut) || (aodTrack->Pt() <
fMinPt) || (aodTrack->GetTPCNcls() <
fNcluster) || !trkFlag){
1226 Double_t bCov[3] = {-99., -99., -99.};
1228 AliAODTrack param(*aodTrack);
1229 if (!param.PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov)){
1233 if (!
fFillDCA && ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4)))
1236 if(
fFillDCA && (TMath::Abs(b[0]) > 3.0 || TMath::Abs(b[1]) > 3))
1249 if(
fIsMC && mcArray){
1255 Float_t v2mc = TMath::Cos(2*(aodTrack->Phi() - evplaneMC));
1259 Int_t iS = TMath::Abs(((AliAODMCParticle*)mcArray->At(TMath::Abs(aodTrack->GetLabel())))->GetPdgCode());
1277 for(
Int_t iV0=0;iV0<2;iV0++){
1281 Float_t v2V0 = TMath::Cos(2*(aodTrack->Phi() - evPlAngV0[iV0]));
1282 Float_t v3V0 = TMath::Cos(3*(aodTrack->Phi() - evPlAngV0v3[iV0]));
1287 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
1290 Float_t x3[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),1,static_cast<Float_t>(evPlAngV0v3[iV0]),
static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb < 0.5),0};
1294 if(TMath::Abs(b[0]) > 0.1){
1298 if(TMath::Abs(b[0]) > 0.3){
1302 if(
fIsMC && mcArray){
1303 if(!((AliAODMCParticle*)mcArray->At(TMath::Abs(aodTrack->GetLabel())))->IsPhysicalPrimary()){
1311 if(
fV2) contV0[iV0]->
Fill(0,aodTrack->Pt(),v2V0,x);
1312 if(
fV3) contV0v3[iV0]->
Fill(0,aodTrack->Pt(),v3V0,x3);
1317 Double_t inttimes[8] = {0.,0.,0.,0.,0.,0.,0.,0.};
1318 Double_t expTOFsigma[8] = {0.,0.,0.,0.,0.,0.,0.,0.};
1323 if(aodTrack->GetDetPid()){
1324 for(
Int_t iS=0;iS < 8;iS++){
1326 nsigmaTPC[iS] = (dedx - dedxExp[iS])/(dedxExp[iS]*0.07);
1331 Float_t ptrack = aodTrack->P();
1332 tof = aodTrack->GetTOFsignal() -
fPID->
GetESDpid()->GetTOFResponse().GetStartTime(ptrack);
1333 aodTrack->GetIntegratedTimes(inttimes);
1335 for(
Int_t iS=5;iS < 8;iS++)
1336 inttimes[iS] = inttimes[0] / ptrack * mass[iS] * TMath::Sqrt(1+ptrack*ptrack/mass[iS]/mass[iS]);
1338 for(
Int_t iS=0;iS<8;iS++){
1339 expTOFsigma[iS] =
fPID->
GetESDpid()->GetTOFResponse().GetExpectedSigma(ptrack, inttimes[iS], mass[iS]);
1340 nsigmaTOF[iS] = (tof - inttimes[iS])/expTOFsigma[iS];
1346 Float_t deltaPhiV0 = aodTrack->Phi() - evPlAngV0[iV0];
1347 if(deltaPhiV0 > TMath::Pi()) deltaPhiV0 -= 2*TMath::Pi();
1348 else if(deltaPhiV0 < -TMath::Pi()) deltaPhiV0 += 2*TMath::Pi();
1349 if(deltaPhiV0 > TMath::Pi()) deltaPhiV0 -= 2*TMath::Pi();
1350 else if(deltaPhiV0 < -TMath::Pi()) deltaPhiV0 += 2*TMath::Pi();
1352 Float_t deltaPhiV0v3 = aodTrack->Phi() - evPlAngV0v3[iV0];
1353 if(deltaPhiV0v3 > TMath::Pi()) deltaPhiV0v3 -= 2*TMath::Pi();
1354 else if(deltaPhiV0v3 < -TMath::Pi()) deltaPhiV0v3 += 2*TMath::Pi();
1355 if(deltaPhiV0v3 > TMath::Pi()) deltaPhiV0v3 -= 2*TMath::Pi();
1356 else if(deltaPhiV0v3 < -TMath::Pi()) deltaPhiV0v3 += 2*TMath::Pi();
1359 Float_t xQA[5] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Pt()), 0.0,deltaPhiV0,x[4]};
1360 Float_t xQA3[5] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Pt()), 0.0,deltaPhiV0v3,x[4]};
1364 Float_t xQApid[2] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Pt())};
1374 if(!(
fPID->
GetCurrentMask(0)) || !aodTrack->GetDetPid() || dedx < 10. || aodTrack->Pt() < 0 || aodTrack->Pt() > 7){}
1376 if(TMath::Abs(nsigmaTPC[2])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[2])<5))){
1379 if(
fQAsw &&
fV2) QA[iV0]->
Fill(0,nsigmaTPC[2],nsigmaTOF[2],xQA);
1380 if(
fQAsw &&
fV3) QAv3[iV0]->
Fill(0,nsigmaTPC[2],nsigmaTOF[2],xQA3);
1382 if(TMath::Abs(nsigmaTPC[3])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[3])<5))){
1385 if(
fQAsw &&
fV2) QA[iV0]->
Fill(1,nsigmaTPC[3],nsigmaTOF[3],xQA);
1388 if(TMath::Abs(nsigmaTPC[4])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[4])<5))){
1391 if(
fQAsw &&
fV2) QA[iV0]->
Fill(2,nsigmaTPC[4],nsigmaTOF[4],xQA);
1394 if(TMath::Abs(nsigmaTPC[0])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[0])<5))){
1400 if(TMath::Abs(nsigmaTPC[5])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[5])<5))){
1406 if(TMath::Abs(nsigmaTPC[6])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[6])<5))){
1412 if(TMath::Abs(nsigmaTPC[7])<5 && (!(
fPID->
GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[7])<5))){
1422 else if(prob[2] > 0.6){
1425 if(TMath::Abs(nsigmaTPC[2]) < 5){
1426 if(
fV2) contV0[iV0]->
Fill(1,aodTrack->Pt(),v2V0,x);
1427 if(
fV3) contV0v3[iV0]->
Fill(1,aodTrack->Pt(),v3V0,x3);
1428 if(x[2] > 0.9 && x[5] < 3)
fHdcaPt[iC][0]->Fill(aodTrack->Pt(),b[0]);
1429 else if(x[2] > 0.9 &&
fIsMC)
fHdcaPtSec[iC][0]->Fill(aodTrack->Pt(),b[0]);
1432 else if(prob[3] > 0.6){
1435 if(TMath::Abs(nsigmaTPC[3]) < 5){
1436 if(
fV2) contV0[iV0]->
Fill(2,aodTrack->Pt(),v2V0,x);
1437 if(
fV3) contV0v3[iV0]->
Fill(2,aodTrack->Pt(),v3V0,x3);
1438 if(x[2] > 0.9 && x[5] < 3)
fHdcaPt[iC][1]->Fill(aodTrack->Pt(),b[0]);
1439 else if(x[2] > 0.9 &&
fIsMC)
fHdcaPtSec[iC][1]->Fill(aodTrack->Pt(),b[0]);
1442 else if(prob[4] > 0.6){
1445 if(TMath::Abs(nsigmaTPC[4]) < 5){
1446 if(
fV2) contV0[iV0]->
Fill(3,aodTrack->Pt(),v2V0,x);
1447 if(
fV3) contV0v3[iV0]->
Fill(3,aodTrack->Pt(),v3V0,x3);
1448 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0)
fHdcaPt[iC][2]->Fill(aodTrack->Pt(),b[0]);
1449 else if(x[2] > 0.9 &&
fIsMC && x[1] < 0)
fHdcaPtSec[iC][2]->Fill(aodTrack->Pt(),b[0]);
1452 else if(prob[0] > 0.6){
1455 if(TMath::Abs(nsigmaTPC[0]) < 5){
1456 if(
fV2) contV0[iV0]->
Fill(4,aodTrack->Pt(),v2V0,x);
1457 if(
fV3) contV0v3[iV0]->
Fill(4,aodTrack->Pt(),v3V0,x3);
1458 if(x[2] > 0.9 && x[5] < 3)
fHdcaPt[iC][3]->Fill(aodTrack->Pt(),b[0]);
1459 else if(x[2] > 0.9 &&
fIsMC)
fHdcaPtSec[iC][3]->Fill(aodTrack->Pt(),b[0]);
1462 else if(prob[1] > 0.6){
1465 if(TMath::Abs(nsigmaTPC[1]) < 5){
1466 if(
fV2) contV0[iV0]->
Fill(8,aodTrack->Pt(),v2V0,x);
1467 if(
fV3) contV0v3[iV0]->
Fill(8,aodTrack->Pt(),v3V0,x3);
1470 else if(prob[5] > 0.6){
1473 if(TMath::Abs(nsigmaTPC[5]) < 5){
1474 if(
fV2) contV0[iV0]->
Fill(5,aodTrack->Pt(),v2V0,x);
1475 if(
fV3) contV0v3[iV0]->
Fill(5,aodTrack->Pt(),v3V0,x3);
1476 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0)
fHdcaPt[iC][4]->Fill(aodTrack->Pt(),b[0]);
1477 else if(x[2] > 0.9 &&
fIsMC && x[1] < 0)
fHdcaPtSec[iC][4]->Fill(aodTrack->Pt(),b[0]);
1480 else if(prob[6] > 0.6){
1483 if(TMath::Abs(nsigmaTPC[6]) < 5){
1484 if(
fV2) contV0[iV0]->
Fill(6,aodTrack->Pt(),v2V0,x);
1485 if(
fV3) contV0v3[iV0]->
Fill(6,aodTrack->Pt(),v3V0,x3);
1486 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0)
fHdcaPt[iC][5]->Fill(aodTrack->Pt(),b[0]);
1487 else if(x[2] > 0.9 &&
fIsMC && x[1] < 0)
fHdcaPtSec[iC][5]->Fill(aodTrack->Pt(),b[0]);
1490 else if(prob[7] > 0.6){
1493 if(TMath::Abs(nsigmaTPC[7]) < 5){
1494 if(
fV2) contV0[iV0]->
Fill(7,aodTrack->Pt()*2,v2V0,x);
1495 if(
fV3) contV0v3[iV0]->
Fill(7,aodTrack->Pt()*2,v3V0,x3);
1496 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0)
fHdcaPt[iC][6]->Fill(aodTrack->Pt(),b[0]);
1497 else if(x[2] > 0.9 &&
fIsMC && x[1] < 0)
fHdcaPtSec[iC][6]->Fill(aodTrack->Pt(),b[0]);
1511 Float_t probTPC[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
1516 else if(probTPC[2] > 0.6){
1519 if(TMath::Abs(nsigmaTPC[2]) < 5){
1520 if(
fV2) contV0[iV0]->
Fill(1,aodTrack->Pt(),v2V0,x);
1521 if(
fV3) contV0v3[iV0]->
Fill(1,aodTrack->Pt(),v3V0,x3);
1524 else if(probTPC[3] > 0.6){
1527 if(TMath::Abs(nsigmaTPC[3]) < 5){
1528 if(
fV2) contV0[iV0]->
Fill(2,aodTrack->Pt(),v2V0,x);
1529 if(
fV3) contV0v3[iV0]->
Fill(2,aodTrack->Pt(),v3V0,x3);
1532 else if(probTPC[4] > 0.6){
1535 if(TMath::Abs(nsigmaTPC[4]) < 5){
1536 if(
fV2) contV0[iV0]->
Fill(3,aodTrack->Pt(),v2V0,x);
1537 if(
fV3) contV0v3[iV0]->
Fill(3,aodTrack->Pt(),v3V0,x3);
1540 else if(probTPC[0] > 0.6){
1543 if(TMath::Abs(nsigmaTPC[0]) < 5){
1544 if(
fV2) contV0[iV0]->
Fill(4,aodTrack->Pt(),v2V0,x);
1545 if(
fV3) contV0v3[iV0]->
Fill(4,aodTrack->Pt(),v3V0,x3);
1548 else if(probTPC[1] > 0.6){
1551 if(TMath::Abs(nsigmaTPC[1]) < 5){
1552 if(
fV2) contV0[iV0]->
Fill(8,aodTrack->Pt(),v2V0,x);
1553 if(
fV3) contV0v3[iV0]->
Fill(8,aodTrack->Pt(),v3V0,x3);
1556 else if(probTPC[5] > 0.6){
1559 if(TMath::Abs(nsigmaTPC[5]) < 5){
1560 if(
fV2) contV0[iV0]->
Fill(5,aodTrack->Pt(),v2V0,x);
1561 if(
fV3) contV0v3[iV0]->
Fill(5,aodTrack->Pt(),v3V0,x3);
1564 else if(probTPC[6] > 0.6){
1567 if(TMath::Abs(nsigmaTPC[6]) < 5){
1568 if(
fV2) contV0[iV0]->
Fill(6,aodTrack->Pt(),v2V0,x);
1569 if(
fV3) contV0v3[iV0]->
Fill(6,aodTrack->Pt(),v3V0,x3);
1572 else if(probTPC[7] > 0.6){
1575 if(TMath::Abs(nsigmaTPC[7]) < 5){
1576 if(
fV2) contV0[iV0]->
Fill(7,aodTrack->Pt()*2,v2V0,x);
1577 if(
fV3) contV0v3[iV0]->
Fill(7,aodTrack->Pt()*2,v3V0,x3);
1591 for(
Int_t iV0=0;iV0<2;iV0++){
1592 Float_t x[6] = {
static_cast<Float_t>(iC),-1,1,evPlAngV0[iV0],1,0};
1593 Float_t x3[6] = {
static_cast<Float_t>(iC),-1,1,evPlAngV0v3[iV0],1,0};
1603 Int_t nV0s = fOutputAOD->GetNumberOfV0s();
1606 for (
Int_t i=0; i!=nV0s; ++i) {
1607 myV0 = (AliAODv0*) fOutputAOD->GetV0(i);
1609 if(myV0->Pt()<0.1 || TMath::Abs(myV0->Eta()) >
fEtaCut)
continue;
1612 dMASS = myV0->MassK0Short();
1616 if(TMath::Abs(dMASS-0.497)/0.005 > 3){
1618 if(pass) dMASS = myV0->MassLambda();
1619 if(pass==2) dMASS = myV0->MassAntiLambda();
1628 AliAODTrack *iT=(AliAODTrack*) myV0->GetDaughter(0);
1629 if(iT->Charge()>0) {
1636 if(pass == 3 && TMath::Abs(dMASS-0.497)/0.005 < 1){
1642 for(
Int_t ii=0;ii<nusedForK0s;ii++){
1643 if(myV0->GetDaughter(iNeg) == usedForK0s1[ii] || myV0->GetDaughter(iPos) == usedForK0s2[ii]){
1647 if((!used) && nusedForK0s < 1000){
1649 usedForK0s1[nusedForK0s] = (AliAODTrack *) myV0->GetDaughter(iNeg);
1650 usedForK0s2[nusedForK0s] = (AliAODTrack *) myV0->GetDaughter(iPos);
1651 printf(
"accepted\n");
1655 printf(
"rejected\n");
1659 iT=(AliAODTrack*) myV0->GetDaughter(iPos);
1660 AliAODTrack *jT=(AliAODTrack*) myV0->GetDaughter(iNeg);
1669 for(
Int_t iV0=0;iV0<2;iV0++){
1673 Float_t v2V0 = TMath::Cos(2*(myV0->Phi() - evPlAngV0[iV0]));
1674 Float_t v3V0 = TMath::Cos(3*(myV0->Phi() - evPlAngV0v3[iV0]));
1676 Float_t deltaphi = myV0->Phi()- evPlAngV0[iV0];
1677 if(deltaphi > TMath::Pi()) deltaphi -= 2*TMath::Pi();
1678 if(deltaphi < -TMath::Pi()) deltaphi += 2*TMath::Pi();
1680 Float_t x[6] = {
static_cast<Float_t>(iC),1,1,evPlAngV0[iV0],1,0};
1681 Float_t x3[6] = {
static_cast<Float_t>(iC),1,1,evPlAngV0v3[iV0],1,0};
1683 Float_t decaylength = myV0->DecayLengthXY(fOutputAOD->GetPrimaryVertex());
1696 nsigma = TMath::Abs(dMASS-1.116)/0.0016;
1698 nsigma = TMath::Abs(dMASS-0.497)/0.005;
1714 if(
fV2 && pass == 3 && x[2] > 0.6){
1715 contV0[iV0]->
Fill(9,myV0->Pt(),v2V0,x);
1716 fHctauPtEP->Fill(myV0->Pt(),deltaphi,decaylength);
1717 if(myV0->Pt() < 1.1 && myV0->Pt() > 0.9)
fHctauAt1EP->Fill(decaylength,deltaphi);
1719 if(
fV3 && pass == 3 && x[2] > 0.6) contV0v3[iV0]->
Fill(9,myV0->Pt(),v3V0,x3);
1720 if(
fV2 && pass < 3 && x[2] > 0.6) contV0[iV0]->
Fill(10,myV0->Pt(),v2V0,x);
1721 if(
fV3 && pass < 3 && x[2] > 0.6) contV0v3[iV0]->
Fill(10,myV0->Pt(),v3V0,x3);
1724 AliAODTrack* aodTrack = iT;
1725 if(pass==2) aodTrack=jT;
1727 v2V0 = TMath::Cos(2*(aodTrack->Phi() - evPlAngV0[iV0]));
1728 v3V0 = TMath::Cos(3*(aodTrack->Phi() - evPlAngV0v3[iV0]));
1732 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
1735 if(prob[4] < 0.61) prob[4] = 0.61;
1737 Float_t xdec[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob[4],evPlAngV0[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb < 0.5),0};
1738 Float_t xdec3[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob[4],evPlAngV0v3[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb < 0.5),0};
1741 if(nsigma < 2 && xdec[2] > 0.6 && TMath::Abs(aodTrack->Eta()) < 0.8){
1742 if(
fV2) contV0[iV0]->
Fill(11,aodTrack->Pt(),v2V0,xdec);
1743 if(
fV3) contV0v3[iV0]->
Fill(11,aodTrack->Pt(),v3V0,xdec3);
1747 AliAODTrack* aodTrack = iT;
1749 v2V0 = TMath::Cos(2*(aodTrack->Phi() - evPlAngV0[iV0]));
1750 v3V0 = TMath::Cos(3*(aodTrack->Phi() - evPlAngV0v3[iV0]));
1754 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
1757 if(prob[2] < 0.61) prob[2] = 0.61;
1759 Float_t xdec[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob[2],evPlAngV0[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb < 0.5),0};
1760 Float_t xdec3[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob[2],evPlAngV0v3[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb < 0.5),0};
1762 if(nsigma < 2 && xdec[2] > 0.6 && TMath::Abs(aodTrack->Eta()) < 0.8){
1763 if(
fV2) contV0[iV0]->
Fill(12,aodTrack->Pt(),v2V0,xdec);
1764 if(
fV3) contV0v3[iV0]->
Fill(12,aodTrack->Pt(),v3V0,xdec3);
1768 v2V0 = TMath::Cos(2*(aodTrack->Phi() - evPlAngV0[iV0]));
1769 v3V0 = TMath::Cos(3*(aodTrack->Phi() - evPlAngV0v3[iV0]));
1773 Float_t prob2[8] = {probRead2[0],probRead2[1],probRead2[2],probRead2[3],probRead2[4],probRead2[5],probRead2[6],probRead2[7]};
1776 if(prob2[2] < 0.61) prob2[2] = 0.61;
1778 Float_t xdecB[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob2[2],evPlAngV0[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb2 < 0.5),0};
1779 Float_t xdecB3[6] = {
static_cast<Float_t>(iC),static_cast<Float_t>(aodTrack->Charge()),prob2[2],evPlAngV0v3[iV0],static_cast<Float_t>(
fPID->
GetCurrentMask(1)&&tofMismProb2 < 0.5),0};
1781 if(nsigma < 2 && xdecB[2] > 0.6 && TMath::Abs(aodTrack->Eta()) < 0.8){
1782 if(
fV2) contV0[iV0]->
Fill(12,aodTrack->Pt(),v2V0,xdecB);
1783 if(
fV3) contV0v3[iV0]->
Fill(12,aodTrack->Pt(),v3V0,xdecB3);
1812 for(
Int_t i=0;i < nusedForK0s;i++){
1813 usedForK0s1[i] = NULL;
1814 usedForK0s2[i] = NULL;
1824 const AliAODVertex* vtxAOD = aod->GetPrimaryVertex();
1827 if(vtxAOD->GetNContributors()>0)
1828 zvtx = vtxAOD->GetZ();
1836 Printf(
"Terminate()");
1840 TString oadbfilename =
"$ALICE_PHYSICS/OADB/PWGCF/VZERO/VZEROcalibEP.root";
1841 TFile *foadb = TFile::Open(oadbfilename.Data());
1844 printf(
"OADB file %s cannot be opened\n",oadbfilename.Data());
1848 AliOADBContainer *cont = (AliOADBContainer*) foadb->Get(
"hMultV0BefCorr");
1850 printf(
"OADB object hMultV0BefCorr is not available in the file\n");
1854 if(!(cont->GetObject(run))){
1855 printf(
"OADB object hMultV0BefCorr is not available for run %i (used run 137366)\n",run);
1858 fMultV0 = ((
TH2F *) cont->GetObject(run))->ProfileX();
1860 TF1 *fpol0 =
new TF1(
"fpol0",
"pol0");
1861 fMultV0->Fit(fpol0,
"",
"",0,31);
1862 fV0Cpol = fpol0->GetParameter(0);
1863 fMultV0->Fit(fpol0,
"",
"",32,64);
1864 fV0Apol = fpol0->GetParameter(0);
1866 for(
Int_t iside=0;iside<2;iside++){
1867 for(
Int_t icoord=0;icoord<2;icoord++){
1868 for(
Int_t i=0;i < 9;i++){
1870 if(iside==0 && icoord==0)
1871 snprintf(namecont,100,
"hQxc2_%i",i);
1872 else if(iside==1 && icoord==0)
1873 snprintf(namecont,100,
"hQxa2_%i",i);
1874 else if(iside==0 && icoord==1)
1875 snprintf(namecont,100,
"hQyc2_%i",i);
1876 else if(iside==1 && icoord==1)
1877 snprintf(namecont,100,
"hQya2_%i",i);
1879 cont = (AliOADBContainer*) foadb->Get(namecont);
1881 printf(
"OADB object %s is not available in the file\n",namecont);
1885 if(!(cont->GetObject(run))){
1886 printf(
"OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
1889 fMeanQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
1890 fWidthQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
1893 if(iside==0 && icoord==0)
1894 snprintf(namecont,100,
"hQxc3_%i",i);
1895 else if(iside==1 && icoord==0)
1896 snprintf(namecont,100,
"hQxa3_%i",i);
1897 else if(iside==0 && icoord==1)
1898 snprintf(namecont,100,
"hQyc3_%i",i);
1899 else if(iside==1 && icoord==1)
1900 snprintf(namecont,100,
"hQya3_%i",i);
1902 cont = (AliOADBContainer*) foadb->Get(namecont);
1904 printf(
"OADB object %s is not available in the file\n",namecont);
1908 if(!(cont->GetObject(run))){
1909 printf(
"OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
1912 fMeanQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
1913 fWidthQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
1928 fV0Cuts[0] = -1e+6; fV0Cuts[1] = +1e+6; fV0Cuts[2] = -1e+6;
1929 fV0Cuts[3] = -1e+6; fV0Cuts[4] = +1e+6; fV0Cuts[5] = -1e+6;
1930 fV0Cuts[6] = -1e+6; fV0Cuts[7] = +1e+6; fV0Cuts[8] = 0;
1933 fV0Cuts[0] = +0.5; fV0Cuts[1] = +0.5; fV0Cuts[2] = +0.998;
1934 fV0Cuts[3] = +0.1; fV0Cuts[4] = +0.0; fV0Cuts[5] = +0.105;
1935 fV0Cuts[6] = -0.8; fV0Cuts[7] = +0.8; fV0Cuts[8] = 0;
1938 fV0Cuts[0] = +0.5; fV0Cuts[1] = +0.5; fV0Cuts[2] = +0.998;
1939 fV0Cuts[3] = +0.1; fV0Cuts[4] = +0.0; fV0Cuts[5] = +0.105;
1940 fV0Cuts[6] = -0.8; fV0Cuts[7] = +0.8; fV0Cuts[8] = 1;
1943 fV0Cuts[0] = -1e+6; fV0Cuts[1] = +1e+6; fV0Cuts[2] = -1e+6;
1944 fV0Cuts[3] = -1e+6; fV0Cuts[4] = +1e+6; fV0Cuts[5] = -1e+6;
1945 fV0Cuts[6] = -1e+6; fV0Cuts[7] = +1e+6; fV0Cuts[8] = 1;
1951 fCutsDaughter =
new AliESDtrackCuts(Form(
"daughter_cuts_%s",
"ESD") );
1960 if (myV0->GetOnFlyStatus() )
return 0;
1962 AliAODTrack *iT, *jT;
1963 AliAODVertex *vV0s = myV0->GetSecondaryVtx();
1966 vV0s->GetCovarianceMatrix(cov);
1967 const AliESDVertex vESD(pos,cov,100.,100);
1970 iT=(AliAODTrack*) myV0->GetDaughter(0);
1971 if(iT->Charge()>0) {
1978 iT=(AliAODTrack*) myV0->GetDaughter(iPos);
1979 AliESDtrack ieT( iT );
1980 ieT.SetTPCClusterMap( iT->GetTPCClusterMap() );
1981 ieT.SetTPCSharedMap( iT->GetTPCSharedMap() );
1982 ieT.SetTPCPointsF( iT->GetTPCNclsF() );
1983 ieT.RelateToVertex(&vESD, tAOD->GetMagneticField(), 100);
1986 jT=(AliAODTrack*) myV0->GetDaughter(iNeg);
1987 AliESDtrack jeT( jT );
1988 jeT.SetTPCClusterMap( jT->GetTPCClusterMap() );
1989 jeT.SetTPCSharedMap( jT->GetTPCSharedMap() );
1990 jeT.SetTPCPointsF( jT->GetTPCNclsF() );
1991 jeT.RelateToVertex(&vESD, tAOD->GetMagneticField(), 100);
1995 pvertex[0]=tAOD->GetPrimaryVertex()->GetX();
1996 pvertex[1]=tAOD->GetPrimaryVertex()->GetY();
1997 pvertex[2]=tAOD->GetPrimaryVertex()->GetZ();
1998 Double_t dDL=myV0->DecayLengthV0( pvertex );
1999 Double_t dDCA=myV0->DcaV0Daughters();
2000 Double_t dCTP=myV0->CosPointingAngle( pvertex );
2001 Double_t dD0P=ieT.GetD(pvertex[0],pvertex[1],tAOD->GetMagneticField());
2002 Double_t dD0M=jeT.GetD(pvertex[0],pvertex[1],tAOD->GetMagneticField());
2006 if(myV0->ChargeProng(iPos)<0) dALPHA = -dALPHA;
2010 if(dDL <fV0Cuts[0]) passes = 0;
2011 if(dDCA >fV0Cuts[1]) passes = 0;
2012 if(dCTP <fV0Cuts[2]) passes = 0;
2013 if(TMath::Abs(dD0P) <fV0Cuts[3]) passes = 0;
2014 if(TMath::Abs(dD0M) <fV0Cuts[3]) passes = 0;
2015 if(dD0D0>fV0Cuts[4]) passes = 0;
2016 if(dETA <fV0Cuts[6]) passes = 0;
2017 if(dETA >fV0Cuts[7]) passes = 0;
2018 if(specie==0)
if(dQT<fV0Cuts[5]) passes = 0;
2019 if(specie==1&&passes==1&&dALPHA<0) passes = 2;
2035 Bool_t trkFlag = iT->TestFilterBit(1);
2036 Bool_t trkFlag2 = jT->TestFilterBit(1);
2038 if(!trkFlag) passes = 0;
2039 if(!trkFlag2) passes = 0;
2041 if(passes&&fV0Cuts[8]) {
2050 if(iT->GetDetPid()){
2051 for(
Int_t iS=0;iS < 8;iS++){
2053 nsigmaTPC[iS] = (
fPID->
GetDeDx() - dedxExp[iS])/(dedxExp[iS]*0.07);
2057 for(
Int_t iS=0;iS < 8;iS++)
2068 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
2072 if(jT->GetDetPid()){
2073 for(
Int_t iS=0;iS < 8;iS++){
2075 nsigmaTPC2[iS] = (
fPID->
GetDeDx() - dedxExp[iS])/(dedxExp[iS]*0.07);
2079 for(
Int_t iS=0;iS < 8;iS++)
2080 nsigmaTPC2[iS] = 10;
2089 Float_t prob2[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
2091 if(jT->GetTPCNcls() <
fNcluster) passes = 0;
2092 else if(iT->GetTPCNcls() <
fNcluster) passes = 0;
2105 if( ((jT->GetTPCmomentum()<15) &&
2106 (TMath::Abs(nsigmaTPC2[2])>3.)) || prob2[2] < 0.9)
2108 if( ((iT->GetTPCmomentum()<15) &&
2109 (TMath::Abs(nsigmaTPC[2])>3.))|| prob[2] < 0.9 )
2115 if( (iT->GetTPCmomentum()<15) &&
2116 (TMath::Abs(nsigmaTPC[4])>3.) )
2118 if( (jT->GetTPCmomentum()<15) &&
2119 (TMath::Abs(nsigmaTPC2[2])>3.) )
2123 if( (iT->GetTPCmomentum()<15) &&
2124 (TMath::Abs(nsigmaTPC[2])>3.) )
2126 if( (jT->GetTPCmomentum()<15) &&
2127 (TMath::Abs(nsigmaTPC2[4])>3.) )
2144 Int_t nAODTracks = fOutputAOD->GetNumberOfTracks();
2145 for(
Int_t iT = 0; iT < nAODTracks; iT++) {
2146 AliAODTrack* aodTrack =
dynamic_cast<AliAODTrack*
>(fOutputAOD->GetTrack(iT));
2147 if(!aodTrack) AliFatal(
"Not a standard AOD");
2153 Bool_t trkFlag = aodTrack->TestFilterBit(1);
2156 if ((TMath::Abs(aodTrack->Eta()) >
fEtaCut) || (aodTrack->Pt() <
fMinPt) || (aodTrack->GetTPCNcls() <
fNcluster) || !trkFlag){
2161 Double_t bCov[3] = {-99., -99., -99.};
2163 AliAODTrack param(*aodTrack);
2164 if (!param.PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov)){
2168 if(TMath::Abs(b[0]) < 0.5/aodTrack->Pt())
continue;
2172 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
2189 AliAODTrack *pip =
dynamic_cast<AliAODTrack*
>(fOutputAOD->GetTrack(
fIPiPos[i]));
2190 if(!pip) AliFatal(
"Not a standard AOD");
2191 AliESDtrack pipE(pip);
2194 AliAODTrack *pin =
dynamic_cast<AliAODTrack*
>(fOutputAOD->GetTrack(
fIPiNeg[j]));
2195 if(!pin) AliFatal(
"Not a standard AOD");
2196 AliESDtrack pinE(pin);
2198 Double_t xn, xp, mindist=pinE.GetDCA(&pipE,fOutputAOD->GetMagneticField(),xn,xp);
2202 pipE.GetPxPyPzAt(xp,fOutputAOD->GetMagneticField(),pPos);
2203 pinE.GetPxPyPzAt(xn,fOutputAOD->GetMagneticField(),pNeg);
2207 Float_t pxs = pPos[0] + pNeg[0];
2208 Float_t pys = pPos[1] + pNeg[1];
2209 Float_t pzs = pPos[2] + pNeg[2];
2210 Float_t es = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.13957*0.13957) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.13957*0.13957);
2212 Float_t pt = TMath::Sqrt(pxs*pxs + pys*pys);
2213 Float_t phi = TMath::ATan2(pys,pxs);
2214 Float_t mass = TMath::Sqrt(es*es - pt*pt - pzs*pzs);
2218 if(mindist < 0.2&& length > 1 && length < 25){
2221 Float_t esL = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.938*0.938) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.13957*0.13957);
2222 Float_t esAL = TMath::Sqrt(pPos[0]*pPos[0] + pPos[1]*pPos[1] + pPos[2]*pPos[2] + 0.13957*0.13957) + TMath::Sqrt(pNeg[0]*pNeg[0] + pNeg[1]*pNeg[1] + pNeg[2]*pNeg[2] + 0.938*0.938);
2224 Float_t massaL = TMath::Sqrt(esL*esL - pt*pt - pzs*pzs);
2225 Float_t massaAL = TMath::Sqrt(esAL*esAL - pt*pt - pzs*pzs);
2229 if(TMath::Abs(mass-0.497)/0.005 < 1 && massaL > 1.15 && massaAL > 1.15){
Bool_t fModulationDEDx
QA pid object.
AliFlowVZEROResults * fContAllChargesV0Cv3
results
Int_t fNpiPos
pt of K0s in my private selection
Float_t fPhiK0s[1000]
number of K0s in my private selection
void SetDetOR(Int_t idet)
TProfile * fHResTPCv0C3
also for v3
void SetVarRange(Int_t ivar, Float_t xMin, Float_t xMax)
TProfile * fHResMA3
TProfile for subevent resolution (output)
Float_t fWidthQv3[nCentrBin][2][2]
also for v3
static Float_t fgPsi3tpcMC
Float_t evPlAngV0ACor2
current centrality for the tree
TList * fList2
List for output objects.
static Bool_t fgIsPsiComputed
TProfile * fHResAC2
TProfile for subevent resolution (output)
TProfile * fHResTPCv0A2
...
static Float_t fgPsi2tpcMC
Float_t fPtK0s[1000]
phi of K0s in my private selection
Float_t GetTOFMismProb() const
Float_t evPlAngV0CCor2
subevent EPs (v2)
void AddSpecies(const char *name, Int_t nXbin, const Double_t *xbin, Int_t nYbin, const Double_t *ybin)
Int_t fNpiNeg
number of positive pions for K0s selection
virtual void UserCreateOutputObjects()
void ComputeProb(const AliESDtrack *t, Float_t)
virtual void Terminate(Option_t *)
virtual void Analyze(AliAODEvent *aodEvent, Float_t v0Centr)
Float_t evPlAng2
subevent EPs (v2)
void OpenInfoCalbration(Int_t run)
void Fill(Int_t species, Float_t pt, Float_t v2, Float_t x[])
void SetPsiCorrectionDeDx(Float_t psi, Float_t res)
void SetDetResponse(AliESDEvent *esd, Float_t centrality=-1.0, EStartTimeType_t flagStart=AliESDpid::kTOF_T0, Bool_t=kFALSE)
TProfile * fHResMA2
results
Int_t PassesAODCuts(AliAODv0 *myV0, AliAODEvent *tAOD, Int_t specie)
TH2F * fHctauAt1EP
ctau vs DeltaPhi,pt
void Fill(Int_t species, Float_t var1, Float_t var2, Float_t x[])
void QA(UInt_t run, const char *xmlfile="wn.xml", Int_t stage=0, const char *cdb="raw://")
Float_t GetExpDeDx(const AliVTrack *t, Int_t iS) const
TH2D * fHdcaPt[nCentrBin][7]
void SetVarName(Int_t ivar, const char *name)
Float_t fWidthQ[nCentrBin][2][2]
and recentering
static Float_t fgPsi2v0cMC
TProfile * fHResv0Cv0A2
TProfile for subevent resolution (output)
TList * fList4
List for output objects.
AliFlowVZEROResults * fContAllChargesMCC
results
TH2D * fHK0vsLambda
K0s mass vs. pt (standard selection)
TProfile * fHResTPCv0C2
TProfile for subevent resolution (output)
Bool_t GetCurrentMask(Int_t idet) const
Float_t evPlAng3
subevent EPs (v3)
TTree * fTree
PID class for the Bayesian probabilities.
AliFlowVZEROResults * fContAllChargesMC
results
void SetVarName(Int_t ivar, const char *name)
TH2D * fHK0sMass
EP distribution.
TH2D * fHdcaPtSec[nCentrBin][7]
DCA distribution (for MC primary)
TProfile * fHResMC3
also for v3
TH2D * fHKsPhiEP
Ks phi distribution.
Int_t fNK0s
primary vertex z coordinate
AliFlowVZEROResults * fContAllChargesMCAv3
results
Int_t fIPiPos[1000]
number of negative pions for K0s selection
void ResetDetOR(Int_t idet)
static Float_t fgPsi2v0aMC
AliFlowVZEROResults * fContAllChargesV0A
subevent EPs (v3)
TList * fList3
List for output objects.
TH2F * fPhiRPv0C
EP distribution vs. centrality (v2)
AliFlowVZEROQA * fQAv3
QA histos (v2)
TProfile * fHResAC3
also for v3
Float_t fMeanQ[nCentrBin][2][2]
loaded by OADB
void AddSpecies(const char *name, Int_t nXbin, const Double_t *bin)
AliFlowVZEROQA * fQA
EP distribution vs. centrality (v3)
TH2F * fPhiRPv0Cv3
EP distribution vs. centrality (v3)
Float_t evPlAngV0CCor3
subevent EPs (v3)
Int_t fNcluster
current run checked to load VZERO calibrations
TProfile * fHResv0Cv0A3
also for v3
AliFlowVZEROResults * fContAllChargesMCCv3
results
Float_t evPlAngV0ACor3
subevent EPs (v2)
Int_t fIPiNeg[1000]
position in the AOD stack of positive pions for K0s
AliFlowVZEROQA * fQA2v3
QA histos (v3)
void SetNewTrackParam(Bool_t flag=kTRUE)
static Float_t fgPsi3v0aMC
void SetVarRange(Int_t ivar, Float_t xMin, Float_t xMax)
AliFlowVZEROResults * fContAllChargesV0C
results
AliFlowVZEROResults * fContAllChargesMCA
also for v3
TProfile * fHResMC2
TProfile for subevent resolution (output)
TProfile * fHResTPCv0A3
TProfile for subevent resolution (output)
Float_t fCentrality
tree to debug EP (if needed)
static Float_t fgPsi3v0cMC
TH2D * fHK0sMass2
K0s mass vs. pt (private selection)
AliFlowVZEROResults * fContAllChargesV0Av3
results
virtual ~AliAnalysisTaskVnV0()
virtual void UserExec(Option_t *option)
TProfile2D * fHctauPtEP
K0s vs lambda mass (in private K0s selection)
Float_t fV0Apol
loaded by OADB
AliFlowVZEROResults * fContQApid
DCA distribution (for MC secondary, not used for data)
TH2F * fPhiRPv0A
also for v3
AliESDtrackCuts * fCutsDaughter
ctau vs. DeltaPhi at 1 GeV/c
AliFlowBayesianPID * fPID
QA histos (v3)
virtual Float_t GetVertex(AliAODEvent *aod) const
AliFlowVZEROQA * fQA2
QA histos (v2)
TH2F * fPhiRPv0Av3
EP distribution vs. centrality (v2)
Float_t fMeanQv3[nCentrBin][2][2]
...
Float_t fV0Cpol
object containing VZERO calibration information
TH2D * fHKsPhi
position in the AOD stack of negative pions for K0s
TProfile * fMultV0
List for output objects.
static const Int_t nCentrBin