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>
50 #include "AliMCEvent.h"
51 #include "AliAnalysisManager.h"
52 #include "AliAODMCHeader.h"
53 #include "AliAODHandler.h"
55 #include "AliExternalTrackParam.h"
56 #include "AliAODVertex.h"
57 #include "AliESDVertex.h"
58 #include "AliAODRecoDecay.h"
61 #include "AliESDtrack.h"
62 #include "AliAODTrack.h"
64 #include "AliAODcascade.h"
65 #include "AliAODMCParticle.h"
66 #include "AliAnalysisTaskSE.h"
68 #include "AliPIDResponse.h"
69 #include "AliPIDCombined.h"
71 #include "AliInputEventHandler.h"
72 #include "AliESDtrackCuts.h"
73 #include "AliNeutralTrackParam.h"
74 #include "AliKFParticle.h"
75 #include "AliKFVertex.h"
76 #include "AliExternalTrackParam.h"
77 #include "AliCentrality.h"
78 #include "AliVertexerTracks.h"
98 fIsEventSelected(kFALSE),
99 fWriteVariableTree(kFALSE),
101 fReconstructPrimVert(kFALSE),
107 fCandidateVariables(),
116 fHistoLikeDecayLength(0),
117 fHistoLikeDecayLengthXY(0),
120 fHistoCascDcaXiDaughters(0),
121 fHistoCascDcaV0Daughters(0),
122 fHistoCascDcaV0ToPrimVertex(0),
123 fHistoCascDcaPosToPrimVertex(0),
124 fHistoCascDcaNegToPrimVertex(0),
125 fHistoCascDcaBachToPrimVertex(0),
126 fHistoCascCosPAXiPrim(0),
130 fHistonSigmaTPCpi(0),
131 fHistonSigmaTOFpi(0),
133 fHistoXiMassvsPtRef(0),
134 fHistoXiMassvsPtRef2(0),
135 fHistoXiMassvsPtRef3(0),
136 fHistoXiMassvsPtRef4(0),
137 fHistoXiMassvsPtRef5(0),
138 fHistoXiMassvsPtRef6(0),
149 Bool_t writeVariableTree) :
159 fIsEventSelected(kFALSE),
160 fWriteVariableTree(writeVariableTree),
162 fReconstructPrimVert(kFALSE),
168 fCandidateVariables(),
177 fHistoLikeDecayLength(0),
178 fHistoLikeDecayLengthXY(0),
181 fHistoCascDcaXiDaughters(0),
182 fHistoCascDcaV0Daughters(0),
183 fHistoCascDcaV0ToPrimVertex(0),
184 fHistoCascDcaPosToPrimVertex(0),
185 fHistoCascDcaNegToPrimVertex(0),
186 fHistoCascDcaBachToPrimVertex(0),
187 fHistoCascCosPAXiPrim(0),
191 fHistonSigmaTPCpi(0),
192 fHistonSigmaTOFpi(0),
194 fHistoXiMassvsPtRef(0),
195 fHistoXiMassvsPtRef2(0),
196 fHistoXiMassvsPtRef3(0),
197 fHistoXiMassvsPtRef4(0),
198 fHistoXiMassvsPtRef5(0),
199 fHistoXiMassvsPtRef6(0),
205 Info(
"AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks",
"Calling Constructor");
207 DefineOutput(1,TList::Class());
208 DefineOutput(2,TList::Class());
209 if(writeVariableTree){
210 DefineOutput(3,TTree::Class());
212 DefineOutput(3,TList::Class());
221 Info(
"~AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks",
"Calling Destructor");
268 if (fDebug > 1) AliInfo(
"Init");
287 AliError(
"NO EVENT FOUND!");
297 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
302 fVtx1->GetCovarianceMatrix(cov);
303 fV1 =
new AliESDVertex(pos,cov,100.,100,
fVtx1->GetName());
306 AliKFParticle::SetField(fBzkG);
307 if (TMath::Abs(fBzkG)<0.001) {
317 if(!fIsTriggerNotOK)
fCEvents->Fill(3);
330 fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
331 fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
332 fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
333 fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
334 fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
347 AliCentrality *cent = aodEvent->GetCentrality();
348 fCentrality = cent->GetCentralityPercentile(
"V0M");
354 Int_t ncasc = aodEvent->GetNumberOfCascades();
355 Int_t nselecasc = 0.;
356 for(
Int_t ic=0;ic<ncasc;ic++){
357 AliAODcascade *casc = aodEvent->GetCascade(ic);
372 TClonesArray *mcArray = 0;
373 AliAODMCHeader *mcHeader=0;
376 mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
378 AliError(
"Could not find Monte-Carlo in AOD");
385 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
387 AliError(
"AliAnalysisTaskSEXicPlus2XiPiPifromAODtracks::UserExec: MC header branch not found!\n");
393 Double_t zMCVertex = mcHeader->GetVtxZ();
395 AliDebug(2,Form(
"Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,
fAnalCuts->
GetMaxVtxZ()));
429 AliAnalysisTaskSE::Terminate();
433 AliError(
"fOutput not available");
440 AliError(
"fOutputAll not available");
455 AliInfo(Form(
"CreateOutputObjects of task %s\n", GetName()));
491 Int_t nCascades= aodEvent->GetNumberOfCascades();
495 Int_t nTracks= aodEvent->GetNumberOfTracks();
503 Bool_t seleTrkFlags[nTracks];
505 SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags);
506 Bool_t seleCascFlags[nCascades];
508 SelectCascade(aodEvent,nCascades,nSeleCasc,seleCascFlags);
511 Int_t nusedmclab[20];
512 for(
Int_t i=0;i<20;i++) {
520 for (
Int_t icasc = 0; icasc<nCascades; icasc++) {
521 if(!seleCascFlags[icasc])
continue;
522 AliAODcascade *casc = aodEvent->GetCascade(icasc);
525 AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
526 AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
527 AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
528 if(!cptrack || !cntrack || !cbtrack)
continue;
530 Int_t cpid = cptrack->GetID();
531 Int_t cnid = cntrack->GetID();
532 Int_t cbid = cbtrack->GetID();
534 if(cptrack->Charge()==0)
continue;
535 if(cntrack->Charge()==0)
continue;
536 if(cbtrack->Charge()==0)
continue;
538 Short_t charge_casc = cptrack->Charge() + cntrack->Charge() + cbtrack->Charge();
543 for (
Int_t itrk1 = 0; itrk1<nTracks-1; itrk1++) {
544 if(!seleTrkFlags[itrk1])
continue;
545 AliAODTrack *trk1 = (AliAODTrack*)aodEvent->GetTrack(itrk1);
546 if(!trk1||trk1->GetID()<0)
continue;
551 for (
Int_t itrk2 = itrk1+1; itrk2<nTracks; itrk2++) {
552 if(!seleTrkFlags[itrk2])
continue;
553 AliAODTrack *trk2 = (AliAODTrack*)aodEvent->GetTrack(itrk2);
554 if(!trk2||trk2->GetID()<0)
continue;
556 if(!SelectLikeSign(trk1,trk2))
continue;
558 Int_t lpid1 = trk1->GetID();
559 Int_t lpid2 = trk2->GetID();
560 if((cpid==lpid1)||(cpid==lpid2)||(cnid==lpid1)||(cnid==lpid2)||(cbid==lpid1)||(cbid==lpid2))
continue;
563 Short_t charge_like1 = trk1->Charge();
564 Short_t charge_like2 = trk2->Charge();
565 Bool_t ok_charge = kFALSE;
566 if((charge_casc==-1)&&(charge_like1==1)&&(charge_like2==1)) ok_charge = kTRUE;
567 if((charge_casc==1)&&(charge_like1==-1)&&(charge_like2==-1)) ok_charge = kTRUE;
568 if(!ok_charge)
continue;
573 if(!fAnalCuts->SelectWithRoughCuts(casc,trk1,trk2))
continue;
579 AliAODVertex *secVert = CallReconstructSecondaryVertex(trk1,trk2,dispersion);
580 if(!secVert)
continue;
587 AliAODMCParticle *mcxic = 0;
588 AliAODMCParticle *mcdaughter1 = 0;
589 AliAODMCParticle *mcdaughter2 = 0;
590 AliAODMCParticle *mcdaughterxi = 0;
595 Int_t pdgDg[3]={211,3312,211};
596 Int_t pdgDgcasc[2]={211,3122};
597 Int_t pdgDgv0[2]={2212,211};
598 mclabxic = xicobj->
MatchToMC(4232,pdgDg[1],pdgDg,pdgDgcasc,pdgDgv0,mcArray);
600 mcxic = (AliAODMCParticle*) mcArray->At(mclabxic);
601 for(
Int_t ia=0;ia<20;ia++){
602 if(usedmclab[ia]==mclabxic){
604 nmclabxic = nusedmclab[ia];
607 if(usedmclab[ia]==-9999){
608 usedmclab[ia]=mclabxic;
610 nmclabxic = nusedmclab[ia];
615 Int_t pi_counter = 0;
616 for(
Int_t idau=mcxic->GetFirstDaughter();idau<mcxic->GetLastDaughter()+1;idau++)
620 AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(idau);
621 Int_t pdgcode = TMath::Abs(mcpart->GetPdgCode());
622 if(pdgcode==211 && pi_counter==0){
623 mcdaughter1 = mcpart;
625 }
else if(pdgcode==211 && pi_counter==1){
626 mcdaughter2 = mcpart;
628 }
else if(pdgcode==3312){
629 mcdaughterxi = mcpart;
640 FillROOTObjects(xicobj,mcxic,mcdaughter1,mcdaughter2,mcdaughterxi,nmclabxic);
642 xicobj->GetSecondaryVtx()->RemoveDaughters();
644 delete xicobj;xicobj=NULL;
766 if(mcdaughter1&&mcdaughter2&&mcdaughterxi){
767 Double_t mcprimvertx = mcpart->Xv();
768 Double_t mcprimverty = mcpart->Yv();
769 Double_t mcsecvertx = mcdaughter1->Xv();
770 Double_t mcsecverty = mcdaughter1->Yv();
771 Double_t recosecvertx = xicobj->GetSecondaryVtx()->GetX();
772 Double_t recosecverty = xicobj->GetSecondaryVtx()->GetY();
773 fCandidateVariables[51] = TMath::Sqrt((mcsecvertx-mcprimvertx)*(mcsecvertx-mcprimvertx)+(mcsecverty-mcprimverty)*(mcsecverty-mcprimverty));
774 fCandidateVariables[52] = TMath::Sqrt((recosecvertx-mcprimvertx)*(recosecvertx-mcprimvertx)+(recosecverty-mcprimverty)*(recosecverty-mcprimverty));
775 Double_t vecx_vert = recosecvertx-mcprimvertx;
776 Double_t vecy_vert = recosecverty-mcprimverty;
777 Double_t vecl_vert = TMath::Sqrt(vecx_vert*vecx_vert+vecy_vert*vecy_vert);
781 if(vecl_vert>0.&&vecl_mom>0.)
807 if(TMath::Abs(casc->MassLambda()-1.115683)<0.02){
840 cont[1] = xicobj->Pt();
881 const char* nameoutput = GetOutputSlot(3)->GetContainer()->GetName();
887 fCandidateVariableNames[ 0]=
"InvMassXic";
888 fCandidateVariableNames[ 1]=
"XicPx";
889 fCandidateVariableNames[ 2]=
"XicPy";
890 fCandidateVariableNames[ 3]=
"XicPz";
891 fCandidateVariableNames[ 4]=
"Pi1Px";
892 fCandidateVariableNames[ 5]=
"Pi1Py";
893 fCandidateVariableNames[ 6]=
"Pi1Pz";
894 fCandidateVariableNames[ 7]=
"Pi2Px";
895 fCandidateVariableNames[ 8]=
"Pi2Py";
896 fCandidateVariableNames[ 9]=
"Pi2Pz";
897 fCandidateVariableNames[10]=
"MassXi";
898 fCandidateVariableNames[11]=
"XiPx";
899 fCandidateVariableNames[12]=
"XiPy";
900 fCandidateVariableNames[13]=
"XiPz";
901 fCandidateVariableNames[14]=
"MassLambda";
902 fCandidateVariableNames[15]=
"MassAntiLambda";
904 fCandidateVariableNames[16]=
"Centrality";
905 fCandidateVariableNames[17]=
"PrimVtxX";
906 fCandidateVariableNames[18]=
"PrimVtxY";
907 fCandidateVariableNames[19]=
"PrimVtxZ";
908 fCandidateVariableNames[20]=
"NewPrimVtxX";
909 fCandidateVariableNames[21]=
"NewPrimVtxY";
910 fCandidateVariableNames[22]=
"NewPrimVtxZ";
912 fCandidateVariableNames[23]=
"CascDcaXiDaughters";
913 fCandidateVariableNames[24]=
"CascDcaV0Daughters";
914 fCandidateVariableNames[25]=
"CascDecayLengthXi";
915 fCandidateVariableNames[26]=
"CascCosPointingAngleXi";
916 fCandidateVariableNames[27]=
"CascDcaV0ToPrimVertex";
917 fCandidateVariableNames[28]=
"CascDcaPosToPrimVertex";
918 fCandidateVariableNames[29]=
"CascDcaNegToPrimVertex";
919 fCandidateVariableNames[30]=
"CascDcaBachToPrimVertex";
920 fCandidateVariableNames[31]=
"CascDecayLengthV0";
921 fCandidateVariableNames[32]=
"CascCosPointingAngleV0";
923 fCandidateVariableNames[33]=
"DcaPi1Casc";
924 fCandidateVariableNames[34]=
"DcaPi2Casc";
925 fCandidateVariableNames[35]=
"DcaPi1Pi2";
927 fCandidateVariableNames[36]=
"Pi1d0";
928 fCandidateVariableNames[37]=
"Pi2d0";
929 fCandidateVariableNames[38]=
"Cascd0";
931 fCandidateVariableNames[39]=
"DecayLength";
932 fCandidateVariableNames[40]=
"DecayLengthXY";
933 fCandidateVariableNames[41]=
"XicCosPAXY";
935 fCandidateVariableNames[42]=
"nSigmaTPCpi1";
936 fCandidateVariableNames[43]=
"nSigmaTPCpi2";
937 fCandidateVariableNames[44]=
"nSigmaTOFpi1";
938 fCandidateVariableNames[45]=
"nSigmaTOFpi2";
939 fCandidateVariableNames[46]=
"probPion1";
940 fCandidateVariableNames[47]=
"probPion2";
942 fCandidateVariableNames[48]=
"mcxicID";
943 fCandidateVariableNames[49]=
"mcnused";
944 fCandidateVariableNames[50]=
"mcpdgcode";
945 fCandidateVariableNames[51]=
"mcdecaylength";
946 fCandidateVariableNames[52]=
"mcdecaylength_secsmear";
947 fCandidateVariableNames[53]=
"mcxiccospaxy";
948 fCandidateVariableNames[54]=
"mcxicpt";
949 fCandidateVariableNames[55]=
"mcpi1pt";
950 fCandidateVariableNames[56]=
"mcpi2pt";
951 fCandidateVariableNames[57]=
"mcxipt";
953 fCandidateVariableNames[58]=
"LambdaPx";
954 fCandidateVariableNames[59]=
"LambdaPy";
955 fCandidateVariableNames[60]=
"LambdaPz";
956 fCandidateVariableNames[61]=
"ProtonPx";
957 fCandidateVariableNames[62]=
"ProtonPy";
958 fCandidateVariableNames[63]=
"ProtonPz";
959 fCandidateVariableNames[64]=
"BachelorsCosPAXY";
961 fCandidateVariableNames[65]=
"mcxicpx";
962 fCandidateVariableNames[66]=
"mcxicpy";
963 fCandidateVariableNames[67]=
"mcxicpz";
964 fCandidateVariableNames[68]=
"mcpi1px";
965 fCandidateVariableNames[69]=
"mcpi1py";
966 fCandidateVariableNames[70]=
"mcpi1pz";
967 fCandidateVariableNames[71]=
"mcpi2px";
968 fCandidateVariableNames[72]=
"mcpi2py";
969 fCandidateVariableNames[73]=
"mcpi2pz";
970 fCandidateVariableNames[74]=
"mcxipx";
971 fCandidateVariableNames[75]=
"mcxipy";
972 fCandidateVariableNames[76]=
"mcxipz";
974 fCandidateVariableNames[77]=
"LambdaVertX";
975 fCandidateVariableNames[78]=
"LambdaVertY";
976 fCandidateVariableNames[79]=
"LambdaVertZ";
977 fCandidateVariableNames[80]=
"XiVertX";
978 fCandidateVariableNames[81]=
"XiVertY";
979 fCandidateVariableNames[82]=
"XiVertZ";
980 fCandidateVariableNames[83]=
"XicVertX";
981 fCandidateVariableNames[84]=
"XicVertY";
982 fCandidateVariableNames[85]=
"XicVertZ";
998 fCEvents =
new TH1F(
"fCEvents",
"conter",18,-0.5,17.5);
1000 fCEvents->GetXaxis()->SetBinLabel(1,
"X1");
1001 fCEvents->GetXaxis()->SetBinLabel(2,
"Analyzed events");
1002 fCEvents->GetXaxis()->SetBinLabel(3,
"AliAODVertex exists");
1003 fCEvents->GetXaxis()->SetBinLabel(4,
"TriggerOK");
1004 fCEvents->GetXaxis()->SetBinLabel(5,
"IsEventSelected");
1005 fCEvents->GetXaxis()->SetBinLabel(6,
"CascadesHF exists");
1006 fCEvents->GetXaxis()->SetBinLabel(7,
"MCarray exists");
1007 fCEvents->GetXaxis()->SetBinLabel(8,
"MCheader exists");
1008 fCEvents->GetXaxis()->SetBinLabel(9,
"triggerClass!=CINT1");
1009 fCEvents->GetXaxis()->SetBinLabel(10,
"triggerMask!=kAnyINT");
1010 fCEvents->GetXaxis()->SetBinLabel(11,
"triggerMask!=kAny");
1011 fCEvents->GetXaxis()->SetBinLabel(12,
"vtxTitle.Contains(Z)");
1012 fCEvents->GetXaxis()->SetBinLabel(13,
"vtxTitle.Contains(3D)");
1013 fCEvents->GetXaxis()->SetBinLabel(14,
"vtxTitle.Doesn'tContain(Z-3D)");
1015 fCEvents->GetXaxis()->SetBinLabel(16,
"!IsEventSelected");
1016 fCEvents->GetXaxis()->SetBinLabel(17,
"triggerMask!=kAnyINT || triggerClass!=CINT1");
1019 fCEvents->GetYaxis()->SetTitle(
"counts");
1021 fHTrigger =
new TH1F(
"fHTrigger",
"counter",18,-0.5,17.5);
1023 fHTrigger->GetXaxis()->SetBinLabel(1,
"X1");
1024 fHTrigger->GetXaxis()->SetBinLabel(2,
"kMB");
1025 fHTrigger->GetXaxis()->SetBinLabel(3,
"kSemiCentral");
1026 fHTrigger->GetXaxis()->SetBinLabel(4,
"kCentral");
1027 fHTrigger->GetXaxis()->SetBinLabel(5,
"kINT7");
1028 fHTrigger->GetXaxis()->SetBinLabel(6,
"kEMC7");
1030 fHTrigger->GetXaxis()->SetBinLabel(8,
"kMB|kSemiCentral|kCentral");
1031 fHTrigger->GetXaxis()->SetBinLabel(9,
"kINT7|kEMC7");
1032 fHTrigger->GetXaxis()->SetBinLabel(11,
"kMB&kSemiCentral");
1033 fHTrigger->GetXaxis()->SetBinLabel(12,
"kMB&kCentral");
1034 fHTrigger->GetXaxis()->SetBinLabel(13,
"kINT7&kEMC7");
1036 fHCentrality =
new TH1F(
"fHCentrality",
"conter",100,0.,100.);
1039 for(
Int_t ib=0;ib<101;ib++){
1040 binx[ib] = 1.322-0.05 + 0.1/100.*(
Double_t)ib ;
1042 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.};
1049 fHistoPiPtRef =
new TH1F(
"fHistoPiPtRef",
"Reference #pi spectrum",20,0.,10.);
1075 Int_t bins_base[3]= {80 ,20 ,10};
1076 Double_t xmin_base[3]={2.468-0.2,0 ,0.00};
1077 Double_t xmax_base[3]={2.468+0.2,20. ,100};
1078 fHistoXicMass =
new THnSparseF(
"fHistoXicMass",
"",3,bins_base,xmin_base,xmax_base);
1084 fHistoDcaPi1Pi2 =
new TH1F(
"fHistoDcaPi1Pi2",
"DCA (#pi_{1}-#pi_{2})",100,0.0,1.0);
1086 fHistoDcaPiCasc =
new TH1F(
"fHistoDcaPiCasc",
"DCA (#pi-#Xi)",100,0.0,1.0);
1092 fHistoXicCosPAXY =
new TH1F(
"fHistoXicCosPAXY",
"#Xi_{c} cos(pa) ",100,-1.0,1.0);
1094 fHistoXiMass=
new TH1F(
"fHistoXiMass",
"#Xi^{-} Mass",100,1.322-0.05,1.322+0.05);
1110 fHistoXiPt=
new TH1F(
"fHistoXiPt",
"#Xi^{-} p_{T}",100,0.,10.);
1112 fHistoPiPt=
new TH1F(
"fHistoPiPt",
"#pi p_{T}",100,0.,10);
1114 fHistoPid0=
new TH1F(
"fHistoPid0",
"#pi d_{0}",100,-0.1,0.1);
1116 fHistonSigmaTPCpi=
new TH1F(
"fHistonSigmaTPCpi",
"n#sigma (TPC, pion)",100,-10.,10.);
1118 fHistonSigmaTOFpi=
new TH1F(
"fHistonSigmaTOFpi",
"n#sigma (TOF, pion)",100,-10.,10.);
1120 fHistoProbPion=
new TH1F(
"fHistoProbPion",
"Bayse Prob",100,0.0,1.);
1134 if(trkEntries==0)
return;
1137 for(
Int_t i=0; i<trkEntries; i++) {
1138 seleFlags[i] = kFALSE;
1141 track = (AliVTrack*)event->GetTrack(i);
1143 if(track->GetID()<0)
continue;
1145 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1147 AliAODTrack *aodt = (AliAODTrack*)track;
1166 fVtx1->GetXYZ(primVtx);
1169 for(
Int_t icasc=0;icasc<nCascades;icasc++)
1171 seleCascFlags[icasc] = kFALSE;
1172 AliAODcascade *casc = ((
AliAODEvent*)event)->GetCascade(icasc);
1176 seleCascFlags[icasc] = kTRUE;
1182 if(rapxi>-1.5&&rapxi<-1.0){
1185 if(rapxi>-1.0&&rapxi<-0.5){
1188 if(rapxi>-0.5&&rapxi<0.0){
1189 fHistoXiMassvsPtRef->Fill(casc->MassXi(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
1191 if(rapxi>0.0&&rapxi<0.5){
1194 if(rapxi>0.5&&rapxi<1.0){
1197 if(rapxi>1.0&&rapxi<1.5){
1211 if(trk1->Charge()!=trk2->Charge())
return kFALSE;
1212 if(trk1->GetID()==trk2->GetID())
return kFALSE;
1226 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk1);
1227 twoTrackArrayPlusXi->AddAt(cptrk1,0);
1228 AliESDtrack *cptrk2 =
new AliESDtrack((AliVTrack*)trk2);
1229 twoTrackArrayPlusXi->AddAt(cptrk2,1);
1231 AliESDtrack *cascptrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(0));
1232 twoTrackArrayPlusXi->AddAt(cascptrack,2);
1233 AliESDtrack *cascntrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(1));
1234 twoTrackArrayPlusXi->AddAt(cascntrack,3);
1235 AliESDtrack *cascbtrack =
new AliESDtrack((AliVTrack*)casc->GetDecayVertexXi()->GetDaughter(0));
1236 twoTrackArrayPlusXi->AddAt(cascbtrack,4);
1238 AliAODVertex *newvert =
PrimaryVertex(twoTrackArrayPlusXi,aod);
1240 for(
Int_t i=0;i<5;i++)
1242 AliESDtrack *tesd = (AliESDtrack*)twoTrackArrayPlusXi->UncheckedAt(i);
1245 twoTrackArrayPlusXi->Clear();
1246 delete twoTrackArrayPlusXi;
1261 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk1);
1262 trkArray->AddAt(cptrk1,0);
1263 AliESDtrack *cptrk2 =
new AliESDtrack((AliVTrack*)trk2);
1264 trkArray->AddAt(cptrk2,1);
1267 Double_t dcap1p2 = cptrk1->GetDCA(cptrk2,
fBzkG,xdummy,ydummy);
1269 AliAODVertex *secvertex=0;
1270 if(dcap1p2<fAnalCuts->GetProdLikeSignDcaMax()){
1274 for(
Int_t i=0;i<2;i++)
1276 AliESDtrack *tesd = (AliESDtrack*)trkArray->UncheckedAt(i);
1294 Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
1295 Bool_t fRmTrksFromPrimVtx = kFALSE;
1297 AliESDVertex *vertexESD = 0;
1298 AliAODVertex *vertexAOD = 0;
1303 if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
1306 vertexESD =
new AliESDVertex(*
fV1);
1311 Int_t nTrks = trkArray->GetEntriesFast();
1312 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1314 if(fRecoPrimVtxSkippingTrks) {
1317 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
1319 event->GetDiamondCovXY(diamondcovxy);
1320 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1321 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1322 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1323 vertexer->SetVtxStart(diamond);
1324 delete diamond; diamond=NULL;
1325 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
1326 vertexer->SetOnlyFitter();
1328 Int_t skipped[1000];
1329 Int_t nTrksToSkip=0,id;
1330 AliExternalTrackParam *t = 0;
1331 for(
Int_t i=0; i<nTrks; i++) {
1332 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1333 id = (
Int_t)t->GetID();
1335 skipped[nTrksToSkip++] = id;
1340 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
1341 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
1342 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
1343 id = (
Int_t)vtrack->GetID();
1345 skipped[nTrksToSkip++] = id;
1348 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
1350 vertexer->SetSkipTracks(nTrksToSkip,skipped);
1351 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1353 }
else if(fRmTrksFromPrimVtx && nTrks>0) {
1358 AliESDtrack *esdTrack = 0;
1360 for(
Int_t i=0; i<nTrks; i++) {
1361 t = (AliESDtrack*)trkArray->UncheckedAt(i);
1362 esdTrack =
new AliESDtrack(*t);
1363 rmArray.AddLast(esdTrack);
1364 if(esdTrack->GetID()>=0) {
1365 rmId[i]=(
UShort_t)esdTrack->GetID();
1370 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
1371 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
1372 delete [] rmId; rmId=NULL;
1377 delete vertexer; vertexer=NULL;
1378 if(!vertexESD)
return vertexAOD;
1379 if(vertexESD->GetNContributors()<=0) {
1381 delete vertexESD; vertexESD=NULL;
1390 vertexESD->GetXYZ(pos);
1391 vertexESD->GetCovMatrix(cov);
1392 chi2perNDF = vertexESD->GetChi2toNDF();
1393 delete vertexESD; vertexESD=NULL;
1395 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
1407 AliESDVertex *vertexESD = 0;
1408 AliAODVertex *vertexAOD = 0;
1410 AliVertexerTracks *fVertexerTracks =
new AliVertexerTracks(
fBzkG);
1412 fVertexerTracks->SetVtxStart(
fV1);
1413 vertexESD = (AliESDVertex*)fVertexerTracks->VertexForSelectedESDTracks(trkArray);
1415 delete fVertexerTracks; fVertexerTracks=NULL;
1417 if(!vertexESD)
return vertexAOD;
1419 if(vertexESD->GetNContributors()!=trkArray->GetEntriesFast()) {
1421 delete vertexESD; vertexESD=NULL;
1425 Double_t vertRadius2=vertexESD->GetX()*vertexESD->GetX()+vertexESD->GetY()*vertexESD->GetY();
1428 delete vertexESD; vertexESD=NULL;
1435 vertexESD->GetXYZ(pos);
1436 vertexESD->GetCovMatrix(cov);
1437 chi2perNDF = vertexESD->GetChi2toNDF();
1438 dispersion = vertexESD->GetDispersion();
1439 delete vertexESD; vertexESD=NULL;
1441 Int_t nprongs= (useTRefArray ? 0 : trkArray->GetEntriesFast());
1442 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF,0x0,-1,AliAODVertex::kUndef,nprongs);
1457 AliAODVertex *primVertexAOD;
1458 Bool_t unsetvtx = kFALSE;
1462 primVertexAOD =
fVtx1;
1467 primVertexAOD =
fVtx1;
1469 if(!primVertexAOD)
return 0x0;
1470 Double_t pos[3]; primVertexAOD->GetXYZ(pos);
1476 AliESDtrack *esdtrack1 =
new AliESDtrack((AliVTrack*)part1);
1477 AliESDtrack *esdtrack2 =
new AliESDtrack((AliVTrack*)part2);
1479 xyz[0]=casc->DecayVertexXiX();
1480 xyz[1]=casc->DecayVertexXiY();
1481 xyz[2]=casc->DecayVertexXiZ();
1482 pxpypz[0]=casc->MomXiX();
1483 pxpypz[1]=casc->MomXiY();
1484 pxpypz[2]=casc->MomXiZ();
1485 casc->GetCovarianceXYZPxPyPz(cv);
1486 sign=casc->ChargeXi();
1487 AliExternalTrackParam *trackCasc =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
1490 Double_t dcap1p2 = esdtrack1->GetDCA(esdtrack2,
fBzkG,xdummy,ydummy);
1491 Double_t dcap1casc = esdtrack1->GetDCA(trackCasc,
fBzkG,xdummy,ydummy);
1492 Double_t dcap2casc = esdtrack2->GetDCA(trackCasc,
fBzkG,xdummy,ydummy);
1493 Double_t dca[3]={dcap1casc,dcap2casc,dcap1p2};
1500 Double_t secR = TMath::Sqrt(secVert->GetX()*secVert->GetX()+secVert->GetY()*secVert->GetY());
1502 part1->PropagateToDCA(secVert,
fBzkG,kVeryBig,d0z0,covd0z0);
1503 part2->PropagateToDCA(secVert,
fBzkG,kVeryBig,d0z0,covd0z0);
1504 trackCasc->PropagateToDCA(secVert,
fBzkG,kVeryBig);
1506 part1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1507 part2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1508 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig);
1511 Double_t momxi_new[3]={-9999,-9999,-9999.};
1512 trackCasc->GetPxPyPz(momxi_new);
1515 px[0] = part1->Px(); py[0] = part1->Py(); pz[0] = part1->Pz();
1516 px[1] = momxi_new[0]; py[1] = momxi_new[1]; pz[1] = momxi_new[2];
1517 px[2] = part2->Px(); py[2] = part2->Py(); pz[2] = part2->Pz();
1523 part1->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1525 d0err[0] = TMath::Sqrt(covd0z0[0]);
1527 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1529 d0err[1] = TMath::Sqrt(covd0z0[0]);
1531 part2->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1533 d0err[2] = TMath::Sqrt(covd0z0[0]);
1546 AliAODRecoCascadeHF3Prong *theCascade =
new AliAODRecoCascadeHF3Prong(secVert,charge,px,py,pz,d0,d0err,dca,dispersion,dist12,dist23);
1549 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1550 if(esdtrack1)
delete esdtrack1;
1551 if(esdtrack2)
delete esdtrack2;
1552 if(trackCasc)
delete trackCasc;
1559 theCascade->GetSecondaryVtx()->AddDaughter(part1);
1560 theCascade->GetSecondaryVtx()->AddDaughter(casc);
1561 theCascade->GetSecondaryVtx()->AddDaughter(part2);
1563 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1564 if(esdtrack1)
delete esdtrack1;
1565 if(esdtrack2)
delete esdtrack2;
1566 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
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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 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