38 #include <TParticle.h> 39 #include <TParticlePDG.h> 40 #include <THnSparse.h> 43 #include <TLorentzVector.h> 46 #include <TDatabasePDG.h> 47 #include <AliAnalysisDataSlot.h> 48 #include <AliAnalysisDataContainer.h> 49 #include "AliMCEvent.h" 50 #include "AliAnalysisManager.h" 51 #include "AliAODMCHeader.h" 52 #include "AliAODHandler.h" 54 #include "AliExternalTrackParam.h" 55 #include "AliAODVertex.h" 56 #include "AliESDVertex.h" 57 #include "AliAODRecoDecay.h" 60 #include "AliESDtrack.h" 61 #include "AliAODTrack.h" 63 #include "AliAODcascade.h" 64 #include "AliAODMCParticle.h" 65 #include "AliAnalysisTaskSE.h" 67 #include "AliPIDResponse.h" 68 #include "AliPIDCombined.h" 70 #include "AliInputEventHandler.h" 71 #include "AliESDtrackCuts.h" 72 #include "AliNeutralTrackParam.h" 73 #include "AliKFParticle.h" 74 #include "AliKFVertex.h" 75 #include "AliExternalTrackParam.h" 76 #include "AliCentrality.h" 77 #include "AliVertexerTracks.h" 97 fIsEventSelected(kFALSE),
98 fWriteVariableTree(kFALSE),
100 fReconstructPrimVert(kFALSE),
106 fCandidateVariables(),
115 fHistoLikeDecayLength(0),
116 fHistoLikeDecayLengthXY(0),
119 fHistoCascDcaXiDaughters(0),
120 fHistoCascDcaV0Daughters(0),
121 fHistoCascDcaV0ToPrimVertex(0),
122 fHistoCascDcaPosToPrimVertex(0),
123 fHistoCascDcaNegToPrimVertex(0),
124 fHistoCascDcaBachToPrimVertex(0),
125 fHistoCascCosPAXiPrim(0),
129 fHistonSigmaTPCpi(0),
130 fHistonSigmaTOFpi(0),
132 fHistoXiMassvsPtRef(0),
133 fHistoXiMassvsPtRef2(0),
134 fHistoXiMassvsPtRef3(0),
135 fHistoXiMassvsPtRef4(0),
136 fHistoXiMassvsPtRef5(0),
137 fHistoXiMassvsPtRef6(0),
148 Bool_t writeVariableTree) :
204 Info(
"AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks",
"Calling Constructor");
206 DefineOutput(1,TList::Class());
207 DefineOutput(2,TList::Class());
208 if(writeVariableTree){
209 DefineOutput(3,TTree::Class());
211 DefineOutput(3,TList::Class());
220 Info(
"~AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks",
"Calling Destructor");
267 if (fDebug > 1) AliInfo(
"Init");
286 AliError(
"NO EVENT FOUND!");
296 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
301 fVtx1->GetCovarianceMatrix(cov);
302 fV1 =
new AliESDVertex(pos,cov,100.,100,
fVtx1->GetName());
305 AliKFParticle::SetField(fBzkG);
306 if (TMath::Abs(fBzkG)<0.001) {
316 if(!fIsTriggerNotOK)
fCEvents->Fill(3);
329 fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
330 fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
331 fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
332 fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
333 fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
346 AliCentrality *cent = aodEvent->GetCentrality();
347 fCentrality = cent->GetCentralityPercentile(
"V0M");
353 Int_t ncasc = aodEvent->GetNumberOfCascades();
354 Int_t nselecasc = 0.;
355 for(
Int_t ic=0;ic<ncasc;ic++){
356 AliAODcascade *casc = aodEvent->GetCascade(ic);
371 TClonesArray *mcArray = 0;
372 AliAODMCHeader *mcHeader=0;
375 mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
377 AliError(
"Could not find Monte-Carlo in AOD");
384 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
386 AliError(
"AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks::UserExec: MC header branch not found!\n");
392 Double_t zMCVertex = mcHeader->GetVtxZ();
394 AliDebug(2,Form(
"Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,
fAnalCuts->
GetMaxVtxZ()));
428 AliAnalysisTaskSE::Terminate();
432 AliError(
"fOutput not available");
439 AliError(
"fOutputAll not available");
454 AliInfo(Form(
"CreateOutputObjects of task %s\n", GetName()));
490 Int_t nCascades= aodEvent->GetNumberOfCascades();
494 Int_t nTracks= aodEvent->GetNumberOfTracks();
502 Bool_t seleTrkFlags[nTracks];
504 SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags);
505 Bool_t seleCascFlags[nCascades];
510 Int_t nusedmclab[20];
511 for(
Int_t i=0;i<20;i++) {
519 for (
Int_t icasc = 0; icasc<nCascades; icasc++) {
520 if(!seleCascFlags[icasc])
continue;
521 AliAODcascade *casc = aodEvent->GetCascade(icasc);
524 AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
525 AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
526 AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
527 if(!cptrack || !cntrack || !cbtrack)
continue;
529 Int_t cpid = cptrack->GetID();
530 Int_t cnid = cntrack->GetID();
531 Int_t cbid = cbtrack->GetID();
533 if(cptrack->Charge()==0)
continue;
534 if(cntrack->Charge()==0)
continue;
535 if(cbtrack->Charge()==0)
continue;
537 Short_t charge_casc = cptrack->Charge() + cntrack->Charge() + cbtrack->Charge();
542 for (
Int_t itrk1 = 0; itrk1<nTracks-1; itrk1++) {
543 if(!seleTrkFlags[itrk1])
continue;
544 AliAODTrack *trk1 = (AliAODTrack*)aodEvent->GetTrack(itrk1);
545 if(!trk1||trk1->GetID()<0)
continue;
550 for (
Int_t itrk2 = itrk1+1; itrk2<nTracks; itrk2++) {
551 if(!seleTrkFlags[itrk2])
continue;
552 AliAODTrack *trk2 = (AliAODTrack*)aodEvent->GetTrack(itrk2);
553 if(!trk2||trk2->GetID()<0)
continue;
557 Int_t lpid1 = trk1->GetID();
558 Int_t lpid2 = trk2->GetID();
559 if((cpid==lpid1)||(cpid==lpid2)||(cnid==lpid1)||(cnid==lpid2)||(cbid==lpid1)||(cbid==lpid2))
continue;
562 Short_t charge_like1 = trk1->Charge();
563 Short_t charge_like2 = trk2->Charge();
564 Bool_t ok_charge = kFALSE;
565 if((charge_casc==-1)&&(charge_like1==1)&&(charge_like2==1)) ok_charge = kTRUE;
566 if((charge_casc==1)&&(charge_like1==-1)&&(charge_like2==-1)) ok_charge = kTRUE;
567 if(!ok_charge)
continue;
579 if(!secVert)
continue;
586 AliAODMCParticle *mcxic = 0;
587 AliAODMCParticle *mcdaughter1 = 0;
588 AliAODMCParticle *mcdaughter2 = 0;
589 AliAODMCParticle *mcdaughterxi = 0;
594 Int_t pdgDg[3]={211,3312,211};
595 Int_t pdgDgcasc[2]={211,3122};
596 Int_t pdgDgv0[2]={2212,211};
597 mclabxic = xicobj->
MatchToMC(4232,pdgDg[1],pdgDg,pdgDgcasc,pdgDgv0,mcArray);
599 mcxic = (AliAODMCParticle*) mcArray->At(mclabxic);
600 for(
Int_t ia=0;ia<20;ia++){
601 if(usedmclab[ia]==mclabxic){
603 nmclabxic = nusedmclab[ia];
606 if(usedmclab[ia]==-9999){
607 usedmclab[ia]=mclabxic;
609 nmclabxic = nusedmclab[ia];
614 Int_t pi_counter = 0;
615 for(
Int_t idau=mcxic->GetFirstDaughter();idau<mcxic->GetLastDaughter()+1;idau++)
619 AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(idau);
620 Int_t pdgcode = TMath::Abs(mcpart->GetPdgCode());
621 if(pdgcode==211 && pi_counter==0){
622 mcdaughter1 = mcpart;
624 }
else if(pdgcode==211 && pi_counter==1){
625 mcdaughter2 = mcpart;
627 }
else if(pdgcode==3312){
628 mcdaughterxi = mcpart;
639 FillROOTObjects(xicobj,mcxic,mcdaughter1,mcdaughter2,mcdaughterxi,nmclabxic);
641 xicobj->GetSecondaryVtx()->RemoveDaughters();
643 delete xicobj;xicobj=NULL;
765 if(mcdaughter1&&mcdaughter2&&mcdaughterxi){
766 Double_t mcprimvertx = mcpart->Xv();
767 Double_t mcprimverty = mcpart->Yv();
768 Double_t mcsecvertx = mcdaughter1->Xv();
769 Double_t mcsecverty = mcdaughter1->Yv();
770 Double_t recosecvertx = xicobj->GetSecondaryVtx()->GetX();
771 Double_t recosecverty = xicobj->GetSecondaryVtx()->GetY();
772 fCandidateVariables[51] = TMath::Sqrt((mcsecvertx-mcprimvertx)*(mcsecvertx-mcprimvertx)+(mcsecverty-mcprimverty)*(mcsecverty-mcprimverty));
773 fCandidateVariables[52] = TMath::Sqrt((recosecvertx-mcprimvertx)*(recosecvertx-mcprimvertx)+(recosecverty-mcprimverty)*(recosecverty-mcprimverty));
774 Double_t vecx_vert = recosecvertx-mcprimvertx;
775 Double_t vecy_vert = recosecverty-mcprimverty;
776 Double_t vecl_vert = TMath::Sqrt(vecx_vert*vecx_vert+vecy_vert*vecy_vert);
780 if(vecl_vert>0.&&vecl_mom>0.)
806 if(TMath::Abs(casc->MassLambda()-1.115683)<0.02){
839 cont[1] = xicobj->Pt();
880 const char* nameoutput = GetOutputSlot(3)->GetContainer()->GetName();
886 fCandidateVariableNames[ 0]=
"InvMassXic";
887 fCandidateVariableNames[ 1]=
"XicPx";
888 fCandidateVariableNames[ 2]=
"XicPy";
889 fCandidateVariableNames[ 3]=
"XicPz";
890 fCandidateVariableNames[ 4]=
"Pi1Px";
891 fCandidateVariableNames[ 5]=
"Pi1Py";
892 fCandidateVariableNames[ 6]=
"Pi1Pz";
893 fCandidateVariableNames[ 7]=
"Pi2Px";
894 fCandidateVariableNames[ 8]=
"Pi2Py";
895 fCandidateVariableNames[ 9]=
"Pi2Pz";
896 fCandidateVariableNames[10]=
"MassXi";
897 fCandidateVariableNames[11]=
"XiPx";
898 fCandidateVariableNames[12]=
"XiPy";
899 fCandidateVariableNames[13]=
"XiPz";
900 fCandidateVariableNames[14]=
"MassLambda";
901 fCandidateVariableNames[15]=
"MassAntiLambda";
903 fCandidateVariableNames[16]=
"Centrality";
904 fCandidateVariableNames[17]=
"PrimVtxX";
905 fCandidateVariableNames[18]=
"PrimVtxY";
906 fCandidateVariableNames[19]=
"PrimVtxZ";
907 fCandidateVariableNames[20]=
"NewPrimVtxX";
908 fCandidateVariableNames[21]=
"NewPrimVtxY";
909 fCandidateVariableNames[22]=
"NewPrimVtxZ";
911 fCandidateVariableNames[23]=
"CascDcaXiDaughters";
912 fCandidateVariableNames[24]=
"CascDcaV0Daughters";
913 fCandidateVariableNames[25]=
"CascDecayLengthXi";
914 fCandidateVariableNames[26]=
"CascCosPointingAngleXi";
915 fCandidateVariableNames[27]=
"CascDcaV0ToPrimVertex";
916 fCandidateVariableNames[28]=
"CascDcaPosToPrimVertex";
917 fCandidateVariableNames[29]=
"CascDcaNegToPrimVertex";
918 fCandidateVariableNames[30]=
"CascDcaBachToPrimVertex";
919 fCandidateVariableNames[31]=
"CascDecayLengthV0";
920 fCandidateVariableNames[32]=
"CascCosPointingAngleV0";
922 fCandidateVariableNames[33]=
"DcaPi1Casc";
923 fCandidateVariableNames[34]=
"DcaPi2Casc";
924 fCandidateVariableNames[35]=
"DcaPi1Pi2";
926 fCandidateVariableNames[36]=
"Pi1d0";
927 fCandidateVariableNames[37]=
"Pi2d0";
928 fCandidateVariableNames[38]=
"Cascd0";
930 fCandidateVariableNames[39]=
"DecayLength";
931 fCandidateVariableNames[40]=
"DecayLengthXY";
932 fCandidateVariableNames[41]=
"XicCosPAXY";
934 fCandidateVariableNames[42]=
"nSigmaTPCpi1";
935 fCandidateVariableNames[43]=
"nSigmaTPCpi2";
936 fCandidateVariableNames[44]=
"nSigmaTOFpi1";
937 fCandidateVariableNames[45]=
"nSigmaTOFpi2";
938 fCandidateVariableNames[46]=
"probPion1";
939 fCandidateVariableNames[47]=
"probPion2";
941 fCandidateVariableNames[48]=
"mcxicID";
942 fCandidateVariableNames[49]=
"mcnused";
943 fCandidateVariableNames[50]=
"mcpdgcode";
944 fCandidateVariableNames[51]=
"mcdecaylength";
945 fCandidateVariableNames[52]=
"mcdecaylength_secsmear";
946 fCandidateVariableNames[53]=
"mcxiccospaxy";
947 fCandidateVariableNames[54]=
"mcxicpt";
948 fCandidateVariableNames[55]=
"mcpi1pt";
949 fCandidateVariableNames[56]=
"mcpi2pt";
950 fCandidateVariableNames[57]=
"mcxipt";
952 fCandidateVariableNames[58]=
"LambdaPx";
953 fCandidateVariableNames[59]=
"LambdaPy";
954 fCandidateVariableNames[60]=
"LambdaPz";
955 fCandidateVariableNames[61]=
"ProtonPx";
956 fCandidateVariableNames[62]=
"ProtonPy";
957 fCandidateVariableNames[63]=
"ProtonPz";
958 fCandidateVariableNames[64]=
"BachelorsCosPAXY";
960 fCandidateVariableNames[65]=
"mcxicpx";
961 fCandidateVariableNames[66]=
"mcxicpy";
962 fCandidateVariableNames[67]=
"mcxicpz";
963 fCandidateVariableNames[68]=
"mcpi1px";
964 fCandidateVariableNames[69]=
"mcpi1py";
965 fCandidateVariableNames[70]=
"mcpi1pz";
966 fCandidateVariableNames[71]=
"mcpi2px";
967 fCandidateVariableNames[72]=
"mcpi2py";
968 fCandidateVariableNames[73]=
"mcpi2pz";
969 fCandidateVariableNames[74]=
"mcxipx";
970 fCandidateVariableNames[75]=
"mcxipy";
971 fCandidateVariableNames[76]=
"mcxipz";
973 fCandidateVariableNames[77]=
"LambdaVertX";
974 fCandidateVariableNames[78]=
"LambdaVertY";
975 fCandidateVariableNames[79]=
"LambdaVertZ";
976 fCandidateVariableNames[80]=
"XiVertX";
977 fCandidateVariableNames[81]=
"XiVertY";
978 fCandidateVariableNames[82]=
"XiVertZ";
979 fCandidateVariableNames[83]=
"XicVertX";
980 fCandidateVariableNames[84]=
"XicVertY";
981 fCandidateVariableNames[85]=
"XicVertZ";
997 fCEvents =
new TH1F(
"fCEvents",
"conter",18,-0.5,17.5);
999 fCEvents->GetXaxis()->SetBinLabel(1,
"X1");
1000 fCEvents->GetXaxis()->SetBinLabel(2,
"Analyzed events");
1001 fCEvents->GetXaxis()->SetBinLabel(3,
"AliAODVertex exists");
1002 fCEvents->GetXaxis()->SetBinLabel(4,
"TriggerOK");
1003 fCEvents->GetXaxis()->SetBinLabel(5,
"IsEventSelected");
1004 fCEvents->GetXaxis()->SetBinLabel(6,
"CascadesHF exists");
1005 fCEvents->GetXaxis()->SetBinLabel(7,
"MCarray exists");
1006 fCEvents->GetXaxis()->SetBinLabel(8,
"MCheader exists");
1007 fCEvents->GetXaxis()->SetBinLabel(9,
"triggerClass!=CINT1");
1008 fCEvents->GetXaxis()->SetBinLabel(10,
"triggerMask!=kAnyINT");
1009 fCEvents->GetXaxis()->SetBinLabel(11,
"triggerMask!=kAny");
1010 fCEvents->GetXaxis()->SetBinLabel(12,
"vtxTitle.Contains(Z)");
1011 fCEvents->GetXaxis()->SetBinLabel(13,
"vtxTitle.Contains(3D)");
1012 fCEvents->GetXaxis()->SetBinLabel(14,
"vtxTitle.Doesn'tContain(Z-3D)");
1014 fCEvents->GetXaxis()->SetBinLabel(16,
"!IsEventSelected");
1015 fCEvents->GetXaxis()->SetBinLabel(17,
"triggerMask!=kAnyINT || triggerClass!=CINT1");
1018 fCEvents->GetYaxis()->SetTitle(
"counts");
1020 fHTrigger =
new TH1F(
"fHTrigger",
"counter",18,-0.5,17.5);
1022 fHTrigger->GetXaxis()->SetBinLabel(1,
"X1");
1023 fHTrigger->GetXaxis()->SetBinLabel(2,
"kMB");
1024 fHTrigger->GetXaxis()->SetBinLabel(3,
"kSemiCentral");
1025 fHTrigger->GetXaxis()->SetBinLabel(4,
"kCentral");
1026 fHTrigger->GetXaxis()->SetBinLabel(5,
"kINT7");
1027 fHTrigger->GetXaxis()->SetBinLabel(6,
"kEMC7");
1029 fHTrigger->GetXaxis()->SetBinLabel(8,
"kMB|kSemiCentral|kCentral");
1030 fHTrigger->GetXaxis()->SetBinLabel(9,
"kINT7|kEMC7");
1031 fHTrigger->GetXaxis()->SetBinLabel(11,
"kMB&kSemiCentral");
1032 fHTrigger->GetXaxis()->SetBinLabel(12,
"kMB&kCentral");
1033 fHTrigger->GetXaxis()->SetBinLabel(13,
"kINT7&kEMC7");
1035 fHCentrality =
new TH1F(
"fHCentrality",
"conter",100,0.,100.);
1038 for(
Int_t ib=0;ib<101;ib++){
1039 binx[ib] = 1.322-0.05 + 0.1/100.*(
Double_t)ib ;
1041 Double_t biny[21]={0.0,0.60,0.80,0.90,1.00,1.1,1.2,1.3,1.4,1.5,1.7,1.9,2.2,2.6,3.1,3.9,4.9,6.0,7.2,8.5,10.};
1048 fHistoPiPtRef =
new TH1F(
"fHistoPiPtRef",
"Reference #pi spectrum",20,0.,10.);
1074 Int_t bins_base[3]= {80 ,20 ,10};
1075 Double_t xmin_base[3]={2.468-0.2,0 ,0.00};
1076 Double_t xmax_base[3]={2.468+0.2,20. ,100};
1077 fHistoXicMass =
new THnSparseF(
"fHistoXicMass",
"",3,bins_base,xmin_base,xmax_base);
1083 fHistoDcaPi1Pi2 =
new TH1F(
"fHistoDcaPi1Pi2",
"DCA (#pi_{1}-#pi_{2})",100,0.0,1.0);
1085 fHistoDcaPiCasc =
new TH1F(
"fHistoDcaPiCasc",
"DCA (#pi-#Xi)",100,0.0,1.0);
1091 fHistoXicCosPAXY =
new TH1F(
"fHistoXicCosPAXY",
"#Xi_{c} cos(pa) ",100,-1.0,1.0);
1093 fHistoXiMass=
new TH1F(
"fHistoXiMass",
"#Xi^{-} Mass",100,1.322-0.05,1.322+0.05);
1109 fHistoXiPt=
new TH1F(
"fHistoXiPt",
"#Xi^{-} p_{T}",100,0.,10.);
1111 fHistoPiPt=
new TH1F(
"fHistoPiPt",
"#pi p_{T}",100,0.,10);
1113 fHistoPid0=
new TH1F(
"fHistoPid0",
"#pi d_{0}",100,-0.1,0.1);
1115 fHistonSigmaTPCpi=
new TH1F(
"fHistonSigmaTPCpi",
"n#sigma (TPC, pion)",100,-10.,10.);
1117 fHistonSigmaTOFpi=
new TH1F(
"fHistonSigmaTOFpi",
"n#sigma (TOF, pion)",100,-10.,10.);
1119 fHistoProbPion=
new TH1F(
"fHistoProbPion",
"Bayse Prob",100,0.0,1.);
1133 if(trkEntries==0)
return;
1136 for(
Int_t i=0; i<trkEntries; i++) {
1137 seleFlags[i] = kFALSE;
1140 track = (AliVTrack*)event->GetTrack(i);
1142 if(track->GetID()<0)
continue;
1144 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1146 AliAODTrack *aodt = (AliAODTrack*)track;
1165 fVtx1->GetXYZ(primVtx);
1168 for(
Int_t icasc=0;icasc<nCascades;icasc++)
1170 seleCascFlags[icasc] = kFALSE;
1171 AliAODcascade *casc = ((
AliAODEvent*)event)->GetCascade(icasc);
1175 seleCascFlags[icasc] = kTRUE;
1181 if(rapxi>-1.5&&rapxi<-1.0){
1184 if(rapxi>-1.0&&rapxi<-0.5){
1187 if(rapxi>-0.5&&rapxi<0.0){
1188 fHistoXiMassvsPtRef->Fill(casc->MassXi(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
1190 if(rapxi>0.0&&rapxi<0.5){
1193 if(rapxi>0.5&&rapxi<1.0){
1196 if(rapxi>1.0&&rapxi<1.5){
1210 if(trk1->Charge()!=trk2->Charge())
return kFALSE;
1211 if(trk1->GetID()==trk2->GetID())
return kFALSE;
1225 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk1);
1226 twoTrackArrayPlusXi->AddAt(cptrk1,0);
1227 AliESDtrack *cptrk2 =
new AliESDtrack((AliVTrack*)trk2);
1228 twoTrackArrayPlusXi->AddAt(cptrk2,1);
1230 AliESDtrack *cascptrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(0));
1231 twoTrackArrayPlusXi->AddAt(cascptrack,2);
1232 AliESDtrack *cascntrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(1));
1233 twoTrackArrayPlusXi->AddAt(cascntrack,3);
1234 AliESDtrack *cascbtrack =
new AliESDtrack((AliVTrack*)casc->GetDecayVertexXi()->GetDaughter(0));
1235 twoTrackArrayPlusXi->AddAt(cascbtrack,4);
1237 AliAODVertex *newvert =
PrimaryVertex(twoTrackArrayPlusXi,aod);
1239 for(
Int_t i=0;i<5;i++)
1241 AliESDtrack *tesd = (AliESDtrack*)twoTrackArrayPlusXi->UncheckedAt(i);
1244 twoTrackArrayPlusXi->Clear();
1245 delete twoTrackArrayPlusXi;
1260 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk1);
1261 trkArray->AddAt(cptrk1,0);
1262 AliESDtrack *cptrk2 =
new AliESDtrack((AliVTrack*)trk2);
1263 trkArray->AddAt(cptrk2,1);
1266 Double_t dcap1p2 = cptrk1->GetDCA(cptrk2,
fBzkG,xdummy,ydummy);
1268 AliAODVertex *secvertex=0;
1269 if(dcap1p2<fAnalCuts->GetProdLikeSignDcaMax()){
1273 for(
Int_t i=0;i<2;i++)
1275 AliESDtrack *tesd = (AliESDtrack*)trkArray->UncheckedAt(i);
1293 Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
1294 Bool_t fRmTrksFromPrimVtx = kFALSE;
1296 AliESDVertex *vertexESD = 0;
1297 AliAODVertex *vertexAOD = 0;
1302 if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
1305 vertexESD =
new AliESDVertex(*
fV1);
1310 Int_t nTrks = trkArray->GetEntriesFast();
1311 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1313 if(fRecoPrimVtxSkippingTrks) {
1316 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
1318 event->GetDiamondCovXY(diamondcovxy);
1319 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1320 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1321 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1322 vertexer->SetVtxStart(diamond);
1323 delete diamond; diamond=NULL;
1324 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
1325 vertexer->SetOnlyFitter();
1327 Int_t skipped[1000];
1328 Int_t nTrksToSkip=0,id;
1329 AliExternalTrackParam *t = 0;
1330 for(
Int_t i=0; i<nTrks; i++) {
1331 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1332 id = (
Int_t)t->GetID();
1334 skipped[nTrksToSkip++] = id;
1339 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
1340 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
1341 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
1342 id = (
Int_t)vtrack->GetID();
1344 skipped[nTrksToSkip++] = id;
1347 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
1349 vertexer->SetSkipTracks(nTrksToSkip,skipped);
1350 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1352 }
else if(fRmTrksFromPrimVtx && nTrks>0) {
1357 AliESDtrack *esdTrack = 0;
1359 for(
Int_t i=0; i<nTrks; i++) {
1360 t = (AliESDtrack*)trkArray->UncheckedAt(i);
1361 esdTrack =
new AliESDtrack(*t);
1362 rmArray.AddLast(esdTrack);
1363 if(esdTrack->GetID()>=0) {
1364 rmId[i]=(
UShort_t)esdTrack->GetID();
1369 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
1370 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
1371 delete [] rmId; rmId=NULL;
1376 delete vertexer; vertexer=NULL;
1377 if(!vertexESD)
return vertexAOD;
1378 if(vertexESD->GetNContributors()<=0) {
1380 delete vertexESD; vertexESD=NULL;
1389 vertexESD->GetXYZ(pos);
1390 vertexESD->GetCovMatrix(cov);
1391 chi2perNDF = vertexESD->GetChi2toNDF();
1392 delete vertexESD; vertexESD=NULL;
1394 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
1406 AliESDVertex *vertexESD = 0;
1407 AliAODVertex *vertexAOD = 0;
1409 AliVertexerTracks *fVertexerTracks =
new AliVertexerTracks(
fBzkG);
1411 fVertexerTracks->SetVtxStart(
fV1);
1412 vertexESD = (AliESDVertex*)fVertexerTracks->VertexForSelectedESDTracks(trkArray);
1414 delete fVertexerTracks; fVertexerTracks=NULL;
1416 if(!vertexESD)
return vertexAOD;
1418 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
1420 delete vertexESD; vertexESD=NULL;
1424 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
1427 delete vertexESD; vertexESD=NULL;
1434 vertexESD->GetXYZ(pos);
1435 vertexESD->GetCovMatrix(cov);
1436 chi2perNDF = vertexESD->GetChi2toNDF();
1437 dispersion = vertexESD->GetDispersion();
1438 delete vertexESD; vertexESD=NULL;
1440 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
1441 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
1456 AliAODVertex *primVertexAOD;
1457 Bool_t unsetvtx = kFALSE;
1461 primVertexAOD =
fVtx1;
1466 primVertexAOD =
fVtx1;
1468 if(!primVertexAOD)
return 0x0;
1469 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
1475 AliESDtrack *esdtrack1 =
new AliESDtrack((AliVTrack*)part1);
1476 AliESDtrack *esdtrack2 =
new AliESDtrack((AliVTrack*)part2);
1478 xyz[0]=casc->DecayVertexXiX();
1479 xyz[1]=casc->DecayVertexXiY();
1480 xyz[2]=casc->DecayVertexXiZ();
1481 pxpypz[0]=casc->MomXiX();
1482 pxpypz[1]=casc->MomXiY();
1483 pxpypz[2]=casc->MomXiZ();
1484 casc->GetCovarianceXYZPxPyPz(cv);
1485 sign=casc->ChargeXi();
1486 AliExternalTrackParam *trackCasc =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
1489 Double_t dcap1p2 = esdtrack1->GetDCA(esdtrack2,
fBzkG,xdummy,ydummy);
1490 Double_t dcap1casc = esdtrack1->GetDCA(trackCasc,
fBzkG,xdummy,ydummy);
1491 Double_t dcap2casc = esdtrack2->GetDCA(trackCasc,
fBzkG,xdummy,ydummy);
1492 Double_t dca[3]={dcap1casc,dcap2casc,dcap1p2};
1499 Double_t secR = TMath::Sqrt(secVert->GetX()*secVert->GetX()+secVert->GetY()*secVert->GetY());
1501 part1->PropagateToDCA(secVert,
fBzkG,kVeryBig,d0z0,covd0z0);
1502 part2->PropagateToDCA(secVert,
fBzkG,kVeryBig,d0z0,covd0z0);
1503 trackCasc->PropagateToDCA(secVert,
fBzkG,kVeryBig);
1505 part1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1506 part2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1507 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig);
1510 Double_t momxi_new[3]={-9999,-9999,-9999.};
1511 trackCasc->GetPxPyPz(momxi_new);
1514 px[0] = part1->Px(); py[0] = part1->Py(); pz[0] = part1->Pz();
1515 px[1] = momxi_new[0]; py[1] = momxi_new[1]; pz[1] = momxi_new[2];
1516 px[2] = part2->Px(); py[2] = part2->Py(); pz[2] = part2->Pz();
1522 part1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1524 d0err[0] = TMath::Sqrt(covd0z0[0]);
1526 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1528 d0err[1] = TMath::Sqrt(covd0z0[0]);
1530 part2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1532 d0err[2] = TMath::Sqrt(covd0z0[0]);
1545 AliAODRecoCascadeHF3Prong *theCascade =
new AliAODRecoCascadeHF3Prong(secVert,charge,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23);
1548 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1549 if(esdtrack1)
delete esdtrack1;
1550 if(esdtrack2)
delete esdtrack2;
1551 if(trackCasc)
delete trackCasc;
1558 theCascade->GetSecondaryVtx()->AddDaughter(part1);
1559 theCascade->GetSecondaryVtx()->AddDaughter(casc);
1560 theCascade->GetSecondaryVtx()->AddDaughter(part2);
1562 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1563 if(esdtrack1)
delete esdtrack1;
1564 if(esdtrack2)
delete esdtrack2;
1565 if(trackCasc)
delete trackCasc;
Double_t fBzkG
primary vertex
Double_t InvMassPiXiPi() const
Xic invariant mass.
Double_t GetPionProbabilityTPCTOF(AliAODTrack *trk)
Double_t CascCosPointingAngleV0() const
TList * fListCuts
! User output slot 2 // Cuts
AliAODTrack * GetBachelor2() const
Bool_t SingleCascadeCutsRef(AliAODcascade *casc, Double_t *vert)
Bool_t fReconstructPrimVert
AliAODVertex * PrimaryVertex(const TObjArray *trkArray, AliVEvent *event)
void SelectTrack(const AliVEvent *event, Int_t trkEntries, Int_t &nSeleTrks, Bool_t *seleFlags)
TH1F * fHistoPiPt
! Pion pT
Bool_t SingleTrkCuts(AliAODTrack *trk)
Bool_t fIsCent
is semi-central trigger event
TH2F * fHistoXiMassvsPtRef3
! Reference Xi mass spectra
void UnsetOwnPrimaryVtx()
TH1F * fHCentrality
Histograms to check trigger.
virtual ~AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks()
Float_t fTriggerCheck
centrality
TH1F * fHistoXicCosPAXY
! Xic cosine pointing angle
TH2F * fHistoXiMassvsPtRef6
! Reference Xi mass spectra
Double_t CascCosPointingAngle() const
Double_t CascMassXi() const
void DefineTreeVariables()
AliAODVertex * CallReconstructSecondaryVertex(AliAODTrack *trk1, AliAODTrack *trk2, Double_t &disp)
void DefineGeneralHistograms()
TList * fOutputAll
! User output slot 3 // Analysis histos
virtual void Terminate(Option_t *option)
void SelectCascade(const AliVEvent *event, Int_t nCascades, Int_t &nSeleCasc, Bool_t *seleCascFlags)
Double_t CascDcaXiDaughters() const
AliAODcascade * GetCascade() const
TH1F * fHistoLikeDecayLength
! Decay length
Double_t GetMaxVtxZ() const
Double_t CascDcaV0Daughters() const
virtual void UserExec(Option_t *option)
AliAODPidHF * GetPidHF() const
AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks()
Bool_t fIsMB
Reconstruct primary vertex excluding candidate tracks.
Double_t BachelorsCosPointingAngle() const
AliAODVertex * ReconstructSecondaryVertex(TObjArray *trkArray, Double_t &dispersion, Bool_t useTRefArray=kTRUE)
TH2F * fHistoXiMassvsPtRef
! Reference Xi mass spectra
virtual void UserCreateOutputObjects()
Implementation of interface methods.
TH1F * fHistoCascDcaV0ToPrimVertex
! DCA of v0 to primary vertex
void MakeAnalysis(AliAODEvent *aod, TClonesArray *mcArray)
TH2F * fHistoXiMassvsPtRef2
! Reference Xi mass spectra
Bool_t fIsINT7
is central trigger event
Double_t CascDcaV0ToPrimVertex() const
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
AliAODTrack * GetBachelor1() const
AliAODVertex * GetOwnPrimaryVtx() const
Float_t fCentrality
magnetic field value [kG]
AliAODVertex * CallPrimaryVertex(AliAODcascade *casc, AliAODTrack *trk1, AliAODTrack *trk2, AliAODEvent *evt)
void SetProngIDs(Int_t nIDs, UShort_t *id)
Double_t CascDcaBachToPrimVertex() const
Double_t CascDcaPosToPrimVertex() const
TH1F * fHistoCascDcaPosToPrimVertex
! DCA of positive track to primary vertex
TH1F * fHistonSigmaTPCpi
! nSigma of TPC pion
TH1F * fHistoCascDcaXiDaughters
! DCA of xi daughgers
AliPIDResponse * GetPidResponse() const
Bool_t fIsEventSelected
Cuts - sent to output slot 2.
TH1F * fHistoXiMass
! mass of xi
void GetDCAs(Double_t dca[3]) const
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Double_t DecayLengthXY() const
TH1F * fHistoProbPion
! Probability to be pion
TH1F * fHistoCascDcaBachToPrimVertex
! DCA of bachelor track to primary vertex
AliAODRecoCascadeHF3Prong * MakeCascadeHF3Prong(AliAODcascade *casc, AliAODTrack *trk1, AliAODTrack *trk2, AliAODEvent *aod, AliAODVertex *secvert, Double_t dispersion)
Bool_t SingleCascadeCuts(AliAODcascade *casc, Double_t *vert)
Bool_t fIsSemi
Is MB event.
AliRDHFCutsXicPlustoXiPiPifromAODtracks * fAnalCuts
histogram to check centrality
Bool_t IsEventSelected(AliVEvent *event)
AliESDVertex * fV1
primary vertex
Int_t MatchToMC(Int_t pdgabs, Int_t pdgabscasc, Int_t *pdgDg, Int_t *pdgDgcasc, Int_t *pdgDgv0, TClonesArray *mcArray) const
Double_t XicCosPointingAngle() const
Double_t CascDecayLength() const
void DefineAnalysisHistograms()
TH1F * fHTrigger
Histogram to check selected events.
void FillROOTObjects(AliAODRecoCascadeHF3Prong *xicobj, AliAODMCParticle *mcpart, AliAODMCParticle *mcdau1, AliAODMCParticle *mcdau2, AliAODMCParticle *mcdauxi, Int_t mcnused)
TH2F * fHistoXiMassvsPtRef5
! Reference Xi mass spectra
Double_t CascDcaNegToPrimVertex() const
TH1F * fHistoCascCosPAXiPrim
! Cosine pointing angle of Xi to primary vertex
TH1F * fHistoLikeDecayLengthXY
! Decay length in XY
TH2F * fHistoXiMassvsPtRef4
! Reference Xi mass spectra
Bool_t SelectWithRoughCuts(AliAODcascade *casc, AliAODTrack *trk1, AliAODTrack *trk2)
Bool_t GetIsUsePID() const
TList * fOutput
Use MC info.
Bool_t IsEventRejectedDueToTrigger() const
TH1F * fHistoCascDcaV0Daughters
! DCA of v0 daughters
Bool_t SelectLikeSign(AliAODTrack *trk1, AliAODTrack *trk2)
Double_t CascDecayLengthV0() const
TH1F * fHistonSigmaTOFpi
! nSigma of TOF pion
TH1F * fHistoDcaPi1Pi2
! DCA between pions
TH1F * fHistoPiPtRef
! Reference pi spectra
TH1F * fHistoCascDcaNegToPrimVertex
! DCA of negative track to primary vertex
TH1F * fHistoDcaPiCasc
! DCA between pi and cascade
THnSparse * fHistoXicMass
Trigger information.
Double_t DecayLength() const
TH1F * fHistoPid0
! pion d0
Bool_t fWriteVariableTree
flag for event selected
Bool_t fIsEMC7
is int7 trigger event
Float_t * fCandidateVariables
is emc7 trigger event
TTree * fVariablesTree
flag to decide whether to write the candidate variables on a tree variables