39 #include <TParticle.h>
40 #include <TParticlePDG.h>
46 #include <THnSparse.h>
47 #include <TLorentzVector.h>
50 #include <TDatabasePDG.h>
51 #include <AliAnalysisDataSlot.h>
52 #include <AliAnalysisDataContainer.h>
53 #include "AliMCEvent.h"
54 #include "AliAnalysisManager.h"
55 #include "AliAODMCHeader.h"
56 #include "AliAODHandler.h"
58 #include "AliExternalTrackParam.h"
59 #include "AliAODVertex.h"
60 #include "AliESDVertex.h"
61 #include "AliAODRecoDecay.h"
64 #include "AliESDtrack.h"
65 #include "AliAODTrack.h"
67 #include "AliAODcascade.h"
68 #include "AliAODMCParticle.h"
69 #include "AliAnalysisTaskSE.h"
71 #include "AliPIDResponse.h"
72 #include "AliPIDCombined.h"
73 #include "AliTOFPIDResponse.h"
75 #include "AliInputEventHandler.h"
76 #include "AliESDtrackCuts.h"
77 #include "AliNeutralTrackParam.h"
78 #include "AliKFParticle.h"
79 #include "AliKFVertex.h"
80 #include "AliExternalTrackParam.h"
81 #include "AliESDtrack.h"
82 #include "AliCentrality.h"
83 #include "AliVertexerTracks.h"
106 fIsEventSelected(kFALSE),
107 fWriteVariableTree(kFALSE),
108 fWriteEachVariableTree(kFALSE),
109 fWriteMCVariableTree(kFALSE),
111 fProtonVariablesTree(0),
114 fMCProtonVariablesTree(0),
115 fMCV0VariablesTree(0),
116 fReconstructPrimVert(kFALSE),
122 fCandidateVariables(),
123 fCandidateProtonVariables(),
124 fCandidateV0Variables(),
125 fCandidateMCVariables(),
126 fCandidateMCProtonVariables(),
127 fCandidateMCV0Variables(),
136 fUseCentralityV0M(kFALSE),
139 fHistonEvtvsRunNumber(0),
140 fHistonProtonvsRunNumber(0),
141 fHistonK0svsRunNumber(0),
144 fHistoLcK0SpMassMix(0),
145 fHistoLcK0SpMassCoarse(0),
146 fHistoLcK0SpMassMixCoarse(0),
147 fHistoK0spCorrelation(0),
148 fHistoK0spCorrelationMix(0),
149 fHistoK0spCorrelationMCS(0),
150 fHistoLcK0SpMassMCS(0),
151 fHistoLcK0SpPi0MassMCS(0),
152 fHistoLcKPluspMass(0),
153 fHistoLcKMinuspMass(0),
154 fHistoLcKPluspMassMix(0),
155 fHistoLcKMinuspMassMix(0),
158 fHistoBachPtMCGen(0),
161 fHistoKaonPtMCGen(0),
162 fHistoK0sMassvsPt(0),
163 fHistoK0sMassvsPtMCS(0),
164 fHistoK0sMassvsPtMCGen(0),
170 fHistoDecayLength(0),
172 fHistoMassTagV0Min(0),
173 fHistoMassTagV0SameSignMin(0),
174 fHistoResponseLcPt(0),
175 fHistoResponseLcPt1(0),
176 fHistoResponseLcPt2(0),
177 fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
179 fNumberOfEventsForMixing (5),
188 fProtonCutVarsArray(0x0),
199 Bool_t writeVariableTree) :
210 fIsEventSelected(kFALSE),
211 fWriteVariableTree(writeVariableTree),
212 fWriteEachVariableTree(kFALSE),
213 fWriteMCVariableTree(kFALSE),
215 fProtonVariablesTree(0),
218 fMCProtonVariablesTree(0),
219 fMCV0VariablesTree(0),
220 fReconstructPrimVert(kFALSE),
226 fCandidateVariables(),
227 fCandidateProtonVariables(),
228 fCandidateV0Variables(),
229 fCandidateMCVariables(),
230 fCandidateMCProtonVariables(),
231 fCandidateMCV0Variables(),
240 fUseCentralityV0M(kFALSE),
243 fHistonEvtvsRunNumber(0),
244 fHistonProtonvsRunNumber(0),
245 fHistonK0svsRunNumber(0),
248 fHistoLcK0SpMassMix(0),
249 fHistoLcK0SpMassCoarse(0),
250 fHistoLcK0SpMassMixCoarse(0),
251 fHistoK0spCorrelation(0),
252 fHistoK0spCorrelationMix(0),
253 fHistoK0spCorrelationMCS(0),
254 fHistoLcK0SpMassMCS(0),
255 fHistoLcK0SpPi0MassMCS(0),
256 fHistoLcKPluspMass(0),
257 fHistoLcKMinuspMass(0),
258 fHistoLcKPluspMassMix(0),
259 fHistoLcKMinuspMassMix(0),
262 fHistoBachPtMCGen(0),
265 fHistoKaonPtMCGen(0),
266 fHistoK0sMassvsPt(0),
267 fHistoK0sMassvsPtMCS(0),
268 fHistoK0sMassvsPtMCGen(0),
274 fHistoDecayLength(0),
276 fHistoMassTagV0Min(0),
277 fHistoMassTagV0SameSignMin(0),
278 fHistoResponseLcPt(0),
279 fHistoResponseLcPt1(0),
280 fHistoResponseLcPt2(0),
281 fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
283 fNumberOfEventsForMixing (5),
292 fProtonCutVarsArray(0x0),
298 Info(
"AliAnalysisTaskSELc2pK0sfromAODtracks",
"Calling Constructor");
300 DefineOutput(1,TList::Class());
301 DefineOutput(2,TList::Class());
302 DefineOutput(3,TList::Class());
303 DefineOutput(4,TTree::Class());
304 DefineOutput(5,TTree::Class());
305 DefineOutput(6,TTree::Class());
306 DefineOutput(7,TTree::Class());
307 DefineOutput(8,AliNormalizationCounter::Class());
308 DefineOutput(9,TTree::Class());
309 DefineOutput(10,TTree::Class());
317 Info(
"~AliAnalysisTaskSELc2pK0sfromAODtracks",
"Calling Destructor");
403 if (fDebug > 1) AliInfo(
"Init");
422 AliError(
"NO EVENT FOUND!");
433 AliKFParticle::SetField(
fBzkG);
434 if (TMath::Abs(
fBzkG)<0.001) {
446 TClonesArray *mcArray = 0;
447 AliAODMCHeader *mcHeader=0;
450 mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
452 AliError(
"Could not find Monte-Carlo in AOD");
458 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
460 AliError(
"AliAnalysisTaskSELc2pK0sfromAODtracks::UserExec: MC header branch not found!\n");
465 Double_t zMCVertex = mcHeader->GetVtxZ();
467 AliDebug(2,Form(
"Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,
fAnalCuts->
GetMaxVtxZ()));
481 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
486 fVtx1->GetCovarianceMatrix(cov);
487 fV1 =
new AliESDVertex(pos,cov,100.,100,
fVtx1->GetName());
491 if(!fIsTriggerNotOK)
fCEvents->Fill(3);
499 fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
500 fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
501 fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
502 fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
503 fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
517 AliCentrality *cent = aodEvent->GetCentrality();
518 fCentrality = cent->GetCentralityPercentile(
"V0M");
522 if(fCentrality<0.||fCentrality>100.-0.0000001) {
529 Int_t runnumber_offset = 0;
530 Int_t runnumber = aodEvent->GetRunNumber();
531 if(runnumber<=131000&&runnumber>=114000){
532 runnumber_offset = 114000;
533 }
else if(runnumber<=196000&&runnumber>=195000){
534 runnumber_offset = 195000;
535 }
else if(runnumber<=170593&&runnumber>=167902){
536 runnumber_offset = 167902;
578 AliAnalysisTaskSE::Terminate();
582 AliError(
"fOutput not available");
588 AliError(
"fOutputAll not available");
637 TString normName=
"NormalizationCounter";
638 AliAnalysisDataContainer *cont = GetOutputSlot(8)->GetContainer();
639 if(cont)normName=(
TString)cont->GetName();
657 fEventBuffer[i]=
new TTree(Form(
"EventBuffer_%d",i),
"Temporary buffer for event mixing");
683 if(fProtonTracks) fProtonTracks->Delete();
684 if(fV0Tracks) fV0Tracks->Delete();
685 if(fProtonCutVarsArray) fProtonCutVarsArray->Delete();
686 if(fV0CutVarsArray) fV0CutVarsArray->Delete();
689 ResetGlobalTrackReference();
691 for (
Int_t iTrack=0;iTrack<aodEvent->GetNumberOfTracks();iTrack++){
693 AliAODTrack *track =
dynamic_cast<AliAODTrack *
>(aodEvent->GetTrack(iTrack));
694 if (!track)
continue;
697 StoreGlobalTrackReference(track,iTrack);
701 Int_t nV0s= aodEvent->GetNumberOfV0s();
702 Int_t nTracks= aodEvent->GetNumberOfTracks();
704 Int_t seleTrkFlags[nTracks];
706 SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags,mcArray);
710 SelectV0(aodEvent,nV0s,nSeleV0,seleV0Flags,mcArray);
715 for (
Int_t iv0 = 0; iv0<nV0s; iv0++) {
716 if(!seleV0Flags[iv0])
continue;
717 AliAODv0 *v0 = aodEvent->GetV0(iv0);
720 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
721 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
726 for (
Int_t itrk = 0; itrk<nTracks; itrk++) {
727 if(seleTrkFlags[itrk]!=1)
continue;
728 AliAODTrack *trk = (AliAODTrack*)aodEvent->GetTrack(itrk);
734 AliAODTrack *trkpid = 0;
735 if(fAnalCuts->GetProdAODFilterBit()==7){
736 trkpid = fGTI[-trk->GetID()-1];
741 Int_t cpid = cptrack->GetID();
742 Int_t cnid = cntrack->GetID();
743 Int_t lpid = trkpid->GetID();
744 if((cpid==lpid)||(cnid==lpid))
continue;
746 if(!fAnalCuts->SelectWithRoughCuts(v0,trk))
continue;
748 AliAODVertex *secVert = ReconstructSecondaryVertex(v0,trk,aodEvent);
749 if(!secVert)
continue;
756 FillROOTObjects(lcobj,v0,trk,trkpid,aodEvent,mcArray);
758 lcobj->GetSecondaryVtx()->RemoveDaughters();
760 delete lcobj;lcobj=NULL;
766 fEventInfo->SetString(Form(
"Ev%d_esd%d_E%d_V%d",AliAnalysisManager::GetAnalysisManager()->GetNcalls(),((AliAODHeader*)aodEvent->GetHeader())->GetEventNumberESDFile(),fProtonTracks->GetEntries(),fV0Tracks->GetEntries()));
767 Int_t ind=GetPoolIndex(fVtxZ,fCentrality,fReactionPlane);
768 if(ind>=0 && ind<fNOfPools){
769 if(fEventBuffer[ind]->GetEntries() >= fNumberOfEventsForMixing){
770 DoEventMixingWithPools(ind);
771 if(fEventBuffer[ind]->GetEntries() >= 20*fNumberOfEventsForMixing){
775 fEventBuffer[ind]->Fill();
791 Double_t mprPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
792 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
793 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
795 for(
Int_t i=0;i<54;i++){
802 Double_t momp = sqrt(pxp*pxp+pyp*pyp+pzp*pzp);
803 Double_t Ep = sqrt(momp*momp+mprPDG*mprPDG);
808 Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
810 Double_t Ev = sqrt(momv*momv+mv*mv);
812 Double_t cosoa = (pxp*pxv+pyp*pyv+pzp*pzv)/momp/momv;
853 Double_t pose = sqrt(pospx*pospx+pospy*pospy+pospz*pospz+0.000511*0.000511);
857 Double_t nege = sqrt(negpx*negpx+negpy*negpy+negpz*negpz+0.000511*0.000511);
858 Double_t massPhoton = sqrt(pow(pose+nege,2)-pow(pospx+negpx,2)-pow(pospy+negpy,2)-pow(pospz+negpz,2));
867 AliAODMCParticle *mclc = 0;
868 AliAODMCParticle *mcpr = 0;
869 AliAODMCParticle *mcv0 = 0;
871 Int_t mcpdgpr_array[100];
872 Int_t mcpdgv0_array[100];
873 Int_t mclabelpr_array[100];
874 Int_t mclabelv0_array[100];
875 Int_t mcngen_pr=-9999;
876 Int_t mcngen_v0=-9999;
877 Bool_t islambdac = kFALSE;
878 Bool_t islambdac3body = kFALSE;
886 mclablc =
MatchToMC(lcobj,mcArray,mcpdgpr_array, mcpdgv0_array,mclabelpr_array,mclabelv0_array,mcngen_pr,mcngen_v0);
888 mclc = (AliAODMCParticle*) mcArray->At(mclablc);
889 if(mclabelpr_array[0]>=0)
890 mcpr = (AliAODMCParticle*) mcArray->At(mclabelpr_array[0]);
891 if(mclabelv0_array[0]>=0)
892 mcv0 = (AliAODMCParticle*) mcArray->At(mclabelv0_array[0]);
895 Int_t pdgcode = mclc->GetPdgCode();
896 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==4122 && mclc->GetNDaughters()==2){
899 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==2214 && abs(mcpdgpr_array[2])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==4122 && mclc->GetNDaughters()==2){
900 islambdac3body = kTRUE;
902 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==3222 && abs(mcpdgpr_array[2])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==4122 && mclc->GetNDaughters()==2){
903 islambdac3body = kTRUE;
905 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==3222 && abs(mcpdgpr_array[2])==3224 && abs(mcpdgpr_array[3])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==4122 && mclc->GetNDaughters()==2){
906 islambdac3body = kTRUE;
908 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==313 && abs(mcpdgv0_array[3])==4122 && mclc->GetNDaughters()==2){
909 islambdac3body = kTRUE;
911 genvertx_mc = mclc->Xv();
912 genverty_mc = mclc->Yv();
913 genvertz_mc = mclc->Zv();
916 decayvertx_mc = mcpr->Xv();
917 decayverty_mc = mcpr->Yv();
918 decayvertz_mc = mcpr->Zv();
925 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
928 trk->PropagateToDCA(
fVtx1,
fBzkG,kVeryBig,d0z0,covd0z0);
940 Double_t pt1 = sqrt(px1*px1+py1*py1);
951 a0 = 1./Delta * (py1 * dx - px1 * dy);
956 Double_t neovertz = z0 + TMath::Abs(a0)*trk->Pz()/trk->Pt();
974 Double_t x1_k0s = v0->DecayVertexV0X();
975 Double_t y1_k0s = v0->DecayVertexV0Y();
978 Double_t pt1_k0s = sqrt(px1_k0s*px1_k0s+py1_k0s*py1_k0s);
979 px1_k0s = px1_k0s/pt1_k0s;
980 py1_k0s = py1_k0s/pt1_k0s;
985 Double_t Delta_k0s = -px0*py1_k0s+py0*px1_k0s;
989 a0_k0s = 1./Delta_k0s * (py1_k0s * dx_k0s - px1_k0s * dy_k0s);
991 Double_t neovertx_k0s = x0 + a0_k0s * px0;
992 Double_t neoverty_k0s = y0 + a0_k0s * py0;
1015 Double_t deltaphi = phi_assoc-phi_trig;
1016 if(deltaphi<-M_PI/2.) deltaphi += 2 * M_PI;
1017 if(deltaphi>3*M_PI/2.) deltaphi -= 2 * M_PI;
1018 cont_correlation[0] = deltaphi;
1019 cont_correlation[1] = eta_assoc-eta_trig;
1020 cont_correlation[2] = trk->Pt();
1021 cont_correlation[3] = v0->Pt();
1027 cont[1] = lcobj->Pt();
1037 fHistod0d0->Fill(lcobj->Getd0Prong(0)*lcobj->Getd0Prong(1));
1068 for(
Int_t i=0;i<54;i++){
1075 Double_t momp = sqrt(pxp*pxp+pyp*pyp+pzp*pzp);
1076 Double_t Ep = sqrt(momp*momp+0.938272*0.938272);
1081 Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
1083 Double_t Ev = sqrt(momv*momv+mv*mv);
1085 Double_t cosoa = (pxp*pxv+pyp*pyv+pzp*pzv)/momp/momv;
1091 Double_t mpk0s = sqrt(Esum*Esum-pxsum*pxsum-pysum*pysum-pzsum*pzsum);
1099 Double_t deltaphi = phi_assoc-phi_trig;
1100 if(deltaphi<-M_PI/2.) deltaphi += 2 * M_PI;
1101 if(deltaphi>3*M_PI/2.) deltaphi -= 2 * M_PI;
1102 cont_correlation[0] = deltaphi;
1103 cont_correlation[1] = eta_assoc-eta_trig;
1104 cont_correlation[2] = trkp->Pt();
1105 cont_correlation[3] = v0->Pt();
1124 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
1143 a0 = 1./Delta * (py1 * dx - px1 * dy);
1155 rdhfcutvars[0] = mpk0s;
1156 rdhfcutvars[1] = sqrt(pxsum*pxsum+pysum*pysum);
1157 rdhfcutvars[2] = (*prvars)[7];
1158 rdhfcutvars[3] = (*prvars)[8];
1159 rdhfcutvars[4] = a0;
1160 rdhfcutvars[5] = (*prvars)[0];
1161 rdhfcutvars[6] = (*v0vars)[0];
1167 cont[1] = sqrt(pxsum*pxsum+pysum*pysum);
1183 const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName();
1189 fCandidateVariableNames[ 0]=
"InvMassLc2pK0s";
1190 fCandidateVariableNames[ 1]=
"LcPx";
1191 fCandidateVariableNames[ 2]=
"LcPy";
1192 fCandidateVariableNames[ 3]=
"LcPz";
1193 fCandidateVariableNames[ 4]=
"massK0Short";
1194 fCandidateVariableNames[ 5]=
"BachPx";
1195 fCandidateVariableNames[ 6]=
"BachPy";
1196 fCandidateVariableNames[ 7]=
"BachPz";
1197 fCandidateVariableNames[ 8]=
"V0Px";
1198 fCandidateVariableNames[ 9]=
"V0Py";
1199 fCandidateVariableNames[10]=
"V0Pz";
1200 fCandidateVariableNames[11]=
"PrimVertx";
1201 fCandidateVariableNames[12]=
"PrimVerty";
1202 fCandidateVariableNames[13]=
"PrimVertz";
1203 fCandidateVariableNames[14]=
"Centrality";
1204 fCandidateVariableNames[15]=
"DecayLengthXY";
1205 fCandidateVariableNames[16]=
"LcCosPAXY";
1206 fCandidateVariableNames[17]=
"nSigmaTPCpr";
1207 fCandidateVariableNames[18]=
"nSigmaTOFpr";
1208 fCandidateVariableNames[19]=
"probProton";
1209 fCandidateVariableNames[20]=
"Mixing";
1210 fCandidateVariableNames[21]=
"Bachd0";
1211 fCandidateVariableNames[22]=
"V0d0";
1212 fCandidateVariableNames[23]=
"massLambda";
1213 fCandidateVariableNames[24]=
"massAntiLambda";
1214 fCandidateVariableNames[25]=
"massPhoton";
1215 fCandidateVariableNames[26]=
"DcaPosToPrimVtx";
1216 fCandidateVariableNames[27]=
"DcaNegToPrimVtx";
1217 fCandidateVariableNames[28]=
"DcaV0ToPrimVtx";
1218 fCandidateVariableNames[29]=
"DcaV0Daughters";
1219 fCandidateVariableNames[30]=
"IsLambdac";
1220 fCandidateVariableNames[31]=
"SecVertX";
1221 fCandidateVariableNames[32]=
"SecVertY";
1222 fCandidateVariableNames[33]=
"SecVertZ";
1223 fCandidateVariableNames[34]=
"islambdac3body";
1224 fCandidateVariableNames[35]=
"SecVertXMC";
1225 fCandidateVariableNames[36]=
"SecVertYMC";
1226 fCandidateVariableNames[37]=
"SecVertZMC";
1227 fCandidateVariableNames[38]=
"LcPxMC";
1228 fCandidateVariableNames[39]=
"LcPyMC";
1229 fCandidateVariableNames[40]=
"LcPzMC";
1230 fCandidateVariableNames[41]=
"PrimVertXMC";
1231 fCandidateVariableNames[42]=
"PrimVertYMC";
1232 fCandidateVariableNames[43]=
"PrimVertZMC";
1233 fCandidateVariableNames[44]=
"SecVertXK0s";
1234 fCandidateVariableNames[45]=
"SecVertYK0s";
1235 fCandidateVariableNames[46]=
"DcaBachV0";
1236 fCandidateVariableNames[47]=
"MatchedPDG";
1237 fCandidateVariableNames[48]=
"ProtonPDG";
1238 fCandidateVariableNames[49]=
"MotherProtonPDG";
1239 fCandidateVariableNames[50]=
"GrMotherProtonPDG";
1240 fCandidateVariableNames[51]=
"V0PDG";
1241 fCandidateVariableNames[52]=
"MotherV0PDG";
1242 fCandidateVariableNames[53]=
"GrMotherV0PDG";
1257 fCEvents =
new TH1F(
"fCEvents",
"conter",18,-0.5,17.5);
1259 fCEvents->GetXaxis()->SetBinLabel(1,
"X1");
1260 fCEvents->GetXaxis()->SetBinLabel(2,
"Analyzed events");
1261 fCEvents->GetXaxis()->SetBinLabel(3,
"AliAODVertex exists");
1262 fCEvents->GetXaxis()->SetBinLabel(4,
"TriggerOK");
1263 fCEvents->GetXaxis()->SetBinLabel(5,
"IsEventSelected");
1264 fCEvents->GetXaxis()->SetBinLabel(6,
"CascadesHF exists");
1265 fCEvents->GetXaxis()->SetBinLabel(7,
"MCarray exists");
1266 fCEvents->GetXaxis()->SetBinLabel(8,
"MCheader exists");
1267 fCEvents->GetXaxis()->SetBinLabel(9,
"triggerClass!=CINT1");
1268 fCEvents->GetXaxis()->SetBinLabel(10,
"triggerMask!=kAnyINT");
1269 fCEvents->GetXaxis()->SetBinLabel(11,
"triggerMask!=kAny");
1270 fCEvents->GetXaxis()->SetBinLabel(12,
"vtxTitle.Contains(Z)");
1271 fCEvents->GetXaxis()->SetBinLabel(13,
"vtxTitle.Contains(3D)");
1272 fCEvents->GetXaxis()->SetBinLabel(14,
"vtxTitle.Doesn'tContain(Z-3D)");
1274 fCEvents->GetXaxis()->SetBinLabel(16,
"!IsEventSelected");
1275 fCEvents->GetXaxis()->SetBinLabel(17,
"triggerMask!=kAnyINT || triggerClass!=CINT1");
1278 fCEvents->GetYaxis()->SetTitle(
"counts");
1280 fHTrigger =
new TH1F(
"fHTrigger",
"counter",18,-0.5,17.5);
1282 fHTrigger->GetXaxis()->SetBinLabel(1,
"X1");
1283 fHTrigger->GetXaxis()->SetBinLabel(2,
"kMB");
1284 fHTrigger->GetXaxis()->SetBinLabel(3,
"kSemiCentral");
1285 fHTrigger->GetXaxis()->SetBinLabel(4,
"kCentral");
1286 fHTrigger->GetXaxis()->SetBinLabel(5,
"kINT7");
1287 fHTrigger->GetXaxis()->SetBinLabel(6,
"kEMC7");
1289 fHTrigger->GetXaxis()->SetBinLabel(8,
"kMB|kSemiCentral|kCentral");
1290 fHTrigger->GetXaxis()->SetBinLabel(9,
"kINT7|kEMC7");
1291 fHTrigger->GetXaxis()->SetBinLabel(11,
"kMB&kSemiCentral");
1292 fHTrigger->GetXaxis()->SetBinLabel(12,
"kMB&kCentral");
1293 fHTrigger->GetXaxis()->SetBinLabel(13,
"kINT7&kEMC7");
1295 fHCentrality =
new TH1F(
"fHCentrality",
"conter",100,0.,100.);
1315 Int_t bins_base[3]= {200 ,20 ,10};
1316 Double_t xmin_base[3]={2.286-0.5,0 ,0.00};
1317 Double_t xmax_base[3]={2.286+0.5,20. ,100};
1318 fHistoLcK0SpMass =
new THnSparseF(
"fHistoLcK0SpMass",
"",3,bins_base,xmin_base,xmax_base);
1320 fHistoLcK0SpMassMix =
new THnSparseF(
"fHistoLcK0SpMassMix",
"",3,bins_base,xmin_base,xmax_base);
1322 fHistoLcK0SpMassMCS =
new THnSparseF(
"fHistoLcK0SpMassMCS",
"",3,bins_base,xmin_base,xmax_base);
1326 fHistoLcKPluspMass =
new THnSparseF(
"fHistoLcKPluspMass",
"",3,bins_base,xmin_base,xmax_base);
1328 fHistoLcKMinuspMass =
new THnSparseF(
"fHistoLcKMinuspMass",
"",3,bins_base,xmin_base,xmax_base);
1335 Int_t bins_lcmcgen[3]= {100 ,20 ,10};
1336 Double_t xmin_lcmcgen[3]={0.,-1.0 ,0.0};
1337 Double_t xmax_lcmcgen[3]={20.,1.0 ,100};
1338 fHistoLcMCGen =
new THnSparseF(
"fHistoLcMCGen",
"",3,bins_lcmcgen,xmin_lcmcgen,xmax_lcmcgen);
1341 Int_t bins_coarse[3]= {160 ,20 ,10};
1342 Double_t xmin_coarse[3]={1.,0 ,0.00};
1343 Double_t xmax_coarse[3]={5.8,20. ,100};
1344 fHistoLcK0SpMassCoarse =
new THnSparseF(
"fHistoLcK0SpMassCoarse",
"",3,bins_coarse,xmin_coarse,xmax_coarse);
1349 Int_t bins_correlation[5]= {40 ,20,20,20,10};
1350 Double_t xmin_correlation[5]={-M_PI/2.,-2.4,0.,0.,0.0};
1351 Double_t xmax_correlation[5]={1.5*M_PI,2.4,10.,10.,100};
1352 fHistoK0spCorrelation =
new THnSparseF(
"fHistoK0spCorrelation",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1354 fHistoK0spCorrelationMix =
new THnSparseF(
"fHistoK0spCorrelationMix",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1356 fHistoK0spCorrelationMCS =
new THnSparseF(
"fHistoK0spCorrelationMCS",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1363 fHistoBachPt =
new TH2F(
"fHistoBachPt",
"Bachelor p_{T}",100,0.0,10.0,20,-1.,1.);
1370 fHistoKaonPt =
new TH2F(
"fHistoKaonPt",
"Kaon p_{T}",100,0.0,10.0,20,-1.,1.);
1377 fHistoK0sMassvsPt=
new TH3F(
"fHistoK0sMassvsPt",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1379 fHistoK0sMassvsPtMCS=
new TH3F(
"fHistoK0sMassvsPtMCS",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1381 fHistoK0sMassvsPtMCGen=
new TH3F(
"fHistoK0sMassvsPtMCGen",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1384 fHistod0Bach =
new TH1F(
"fHistod0Bach",
"Bachelor d_{0}",100,-0.5,0.5);
1386 fHistod0V0 =
new TH1F(
"fHistod0V0",
"V_{0} d_{0}",100,-0.5,0.5);
1388 fHistod0d0 =
new TH1F(
"fHistod0d0",
"d_{0} d_{0}",100,-0.5,0.5);
1390 fHistoV0CosPA=
new TH1F(
"fHistoV0CosPA",
"V0->Second vertex cospa",100,-1.,1.0);
1396 fHistoK0SMass=
new TH1F(
"fHistoK0SMass",
"K0S mass",100,0.497-0.05,0.497+0.05);
1429 if(!part)
return 0x0;
1430 if(!partpid)
return 0x0;
1431 if(!aod)
return 0x0;
1436 AliAODVertex *primVertexAOD;
1437 Bool_t unsetvtx = kFALSE;
1441 primVertexAOD =
fVtx1;
1446 primVertexAOD =
fVtx1;
1448 if(!primVertexAOD)
return 0x0;
1449 Double_t posprim[3]; primVertexAOD->GetXYZ(posprim);
1454 AliESDtrack *esdtrack =
new AliESDtrack((AliVTrack*)partpid);
1456 AliNeutralTrackParam *trackV0=NULL;
1457 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1458 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1461 Double_t dca = esdtrack->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
1468 Double_t d0z0bach[2],covd0z0bach[3];
1476 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1477 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig);
1478 Double_t momv0_new[3]={-9999,-9999,-9999.};
1479 trackV0->GetPxPyPz(momv0_new);
1482 px[0] = part->Px(); py[0] = part->Py(); pz[0] = part->Pz();
1483 px[1] = momv0_new[0]; py[1] = momv0_new[1]; pz[1] = momv0_new[2];
1490 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1492 d0err[0] = TMath::Sqrt(covd0z0bach[0]);
1495 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0v0,covd0z0v0);
1497 d0err[1] = TMath::Sqrt(covd0z0v0[0]);
1506 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1507 if(esdtrack)
delete esdtrack;
1508 if(trackV0)
delete trackV0;
1515 theCascade->GetSecondaryVtx()->AddDaughter(partpid);
1516 theCascade->GetSecondaryVtx()->AddDaughter(v0);
1518 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1519 if(esdtrack)
delete esdtrack;
1520 if(trackV0)
delete trackV0;
1535 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk);
1536 TrackArray->AddAt(cptrk1,0);
1538 AliESDtrack *cascptrack =
new AliESDtrack((AliVTrack*)v0->GetDaughter(0));
1539 TrackArray->AddAt(cascptrack,1);
1540 AliESDtrack *cascntrack =
new AliESDtrack((AliVTrack*)v0->GetDaughter(1));
1541 TrackArray->AddAt(cascntrack,2);
1545 for(
Int_t i=0;i<3;i++)
1547 AliESDtrack *tesd = (AliESDtrack*)TrackArray->UncheckedAt(i);
1550 TrackArray->Clear();
1565 Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
1566 Bool_t fRmTrksFromPrimVtx = kFALSE;
1568 AliESDVertex *vertexESD = 0;
1569 AliAODVertex *vertexAOD = 0;
1574 if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
1577 vertexESD =
new AliESDVertex(*
fV1);
1582 Int_t nTrks = trkArray->GetEntriesFast();
1583 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1585 if(fRecoPrimVtxSkippingTrks) {
1588 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
1590 event->GetDiamondCovXY(diamondcovxy);
1591 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1592 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1593 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1594 vertexer->SetVtxStart(diamond);
1595 delete diamond; diamond=NULL;
1596 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
1597 vertexer->SetOnlyFitter();
1599 Int_t skipped[1000];
1600 Int_t nTrksToSkip=0,id;
1601 AliExternalTrackParam *t = 0;
1602 for(
Int_t i=0; i<nTrks; i++) {
1603 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1604 id = (
Int_t)t->GetID();
1606 skipped[nTrksToSkip++] = id;
1611 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
1612 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
1613 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
1614 id = (
Int_t)vtrack->GetID();
1616 skipped[nTrksToSkip++] = id;
1619 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
1621 vertexer->SetSkipTracks(nTrksToSkip,skipped);
1622 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1624 }
else if(fRmTrksFromPrimVtx && nTrks>0) {
1629 AliESDtrack *esdTrack = 0;
1631 for(
Int_t i=0; i<nTrks; i++) {
1632 t = (AliESDtrack*)trkArray->UncheckedAt(i);
1633 esdTrack =
new AliESDtrack(*t);
1634 rmArray.AddLast(esdTrack);
1635 if(esdTrack->GetID()>=0) {
1636 rmId[i]=(
UShort_t)esdTrack->GetID();
1641 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
1642 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
1643 delete [] rmId; rmId=NULL;
1648 delete vertexer; vertexer=NULL;
1649 if(!vertexESD)
return vertexAOD;
1650 if(vertexESD->GetNContributors()<=0) {
1652 delete vertexESD; vertexESD=NULL;
1661 vertexESD->GetXYZ(pos);
1662 vertexESD->GetCovMatrix(cov);
1663 chi2perNDF = vertexESD->GetChi2toNDF();
1664 delete vertexESD; vertexESD=NULL;
1666 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
1680 AliAODVertex *primVertexAOD;
1681 Bool_t unsetvtx = kFALSE;
1685 primVertexAOD =
fVtx1;
1690 primVertexAOD =
fVtx1;
1692 if(!primVertexAOD)
return 0x0;
1698 Double_t LcPx = part->Px()+v0->Px();
1699 Double_t LcPy = part->Py()+v0->Py();
1700 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
1703 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1704 Double_t x0 = primVertexAOD->GetX();
1705 Double_t y0 = primVertexAOD->GetY();
1712 part->GetPxPyPz(tx);
1715 Double_t pt1 = sqrt(px1*px1+py1*py1);
1726 a0 = 1./Delta * (py1 * dx - px1 * dy);
1730 Double_t z0 = primVertexAOD->GetZ();
1731 Double_t neovertz = z0 + TMath::Abs(a0)*part->Pz()/part->Pt();
1733 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1746 AliAODVertex *secVert =
new AliAODVertex(pos,cov,chi2perNDF);
1793 if(trkEntries==0)
return;
1796 for(
Int_t i=0; i<trkEntries; i++) {
1800 track = (AliVTrack*)event->GetTrack(i);
1804 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1807 AliAODTrack *aodt = (AliAODTrack*)track;
1812 if(!aodt->TestFilterBit(BIT(filterbit)))
continue;
1814 if(!aodt->TestFilterMask(BIT(filterbit)))
continue;
1818 AliAODTrack *aodtpid = 0;
1820 aodtpid =
fGTI[-aodt->GetID()-1];
1833 if(isv0) seleFlags[i] = 0;
1849 for(
Int_t iv0=0;iv0<nV0s;iv0++)
1851 seleV0Flags[iv0] = kFALSE;
1856 seleV0Flags[iv0] = kTRUE;
1871 const char* nameoutput = GetOutputSlot(5)->GetContainer()->GetName();
1877 fCandidateVariableNames[ 0]=
"PrPx";
1878 fCandidateVariableNames[ 1]=
"PrPy";
1879 fCandidateVariableNames[ 2]=
"PrPz";
1897 vpr.SetXYZM(trk->Px(),trk->Py(),trk->Pz(),0.938272);
1900 fProtonTracks->AddLast(
new TLorentzVector(trk->Px(),trk->Py(),trk->Pz(),trk->Charge()));
1903 trk->PropagateToDCA(
fVtx1,
fBzkG,kVeryBig,d0z0,covd0z0);
1911 Double_t pt1 = sqrt(px1*px1+py1*py1);
1915 TVector *varvec =
new TVector(9);
1916 (*varvec)[0] = d0z0[0];
1921 (*varvec)[5] =
fVtx1->GetX();
1922 (*varvec)[6] =
fVtx1->GetY();
1928 Int_t pdgPr = -9999;
1931 Int_t labPr = trk->GetLabel();
1933 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labPr);
1935 pdgPr = mcetrk->GetPdgCode();
1936 if(abs(pdgPr)!=2212)
return;
1947 const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName();
1953 fCandidateVariableNames[ 0]=
"V0Px";
1954 fCandidateVariableNames[ 1]=
"V0Py";
1955 fCandidateVariableNames[ 2]=
"V0Pz";
1972 vk0.SetXYZM(v0->Px(),v0->Py(),v0->Pz(),v0->MassK0Short());
1976 Double_t ev0 = sqrt(v0->P2()+pow(v0->MassK0Short(),2));
1977 fV0Tracks->AddLast(
new TLorentzVector(v0->Px(),v0->Py(),v0->Pz(),ev0));
1979 TVector *varvec =
new TVector(1);
1980 (*varvec)[0] = v0->DcaV0ToPrimVertex();
1984 Int_t v0pdgcode = -9999;
1987 Int_t pdgdgv0[2]={211,211};
1988 Int_t labV0 = v0->MatchToMC(310,mcArray,2,pdgdgv0);
1990 AliAODMCParticle *mcv0trk = (AliAODMCParticle*)mcArray->At(labV0);
1991 if(!mcv0trk)
return;
2002 if(theBinZ<0 || theBinZ>=
fNzVtxBins)
return -1;
2004 if(theBinM<0 || theBinM>=
fNCentBins)
return -1;
2006 if(theBinR<0 || theBinR>=
fNRPBins)
return -1;
2014 if(poolIndex<0 || poolIndex>=
fNOfPools)
return;
2016 fEventBuffer[poolIndex]=
new TTree(Form(
"EventBuffer_%d",poolIndex),
"Temporary buffer for event mixing");
2039 if(nPro!=nPro_test){
2040 cout<<
"Something wrong in mixing machinery"<<endl;
2047 TObjString* eventInfo=0x0;
2048 fEventBuffer[poolIndex]->SetBranchAddress(
"eventInfo",&eventInfo);
2049 fEventBuffer[poolIndex]->SetBranchAddress(
"zVertex", &zVertex);
2050 fEventBuffer[poolIndex]->SetBranchAddress(
"centrality", ¢);
2051 fEventBuffer[poolIndex]->SetBranchAddress(
"v1array", &v1array);
2052 fEventBuffer[poolIndex]->SetBranchAddress(
"v1varsarray", &v1varsarray);
2053 for (
Int_t i=0; i<nPro; i++)
2055 TLorentzVector* trke=(TLorentzVector*)
fProtonTracks->At(i);
2060 fEventBuffer[poolIndex]->GetEvent(iEv + nEvents - fNumberOfEventsForMixing);
2061 Int_t nV01=v1array->GetEntries();
2062 for(
Int_t iTr1=0; iTr1<nV01; iTr1++){
2063 TLorentzVector* v01=(TLorentzVector*)v1array->At(iTr1);
2067 TVector *v0varsarray = (TVector*) v1varsarray->At(iTr1);
2082 const char* nameoutput = GetOutputSlot(7)->GetContainer()->GetName();
2088 fCandidateVariableNames[ 0]=
"Centrality";
2102 if(!mcepart)
return;
2103 if(!mcv0part)
return;
2108 contmc[0] = mcpart->Pt();
2109 contmc[1] = mcpart->Y();
2121 const char* nameoutput = GetOutputSlot(9)->GetContainer()->GetName();
2127 fCandidateVariableNames[ 0]=
"Centrality";
2140 if(!mcepart)
return;
2149 const char* nameoutput = GetOutputSlot(10)->GetContainer()->GetName();
2155 fCandidateVariableNames[ 0]=
"Centrality";
2168 if(!mcv0part)
return;
2176 Int_t nmcpart = mcArray->GetEntriesFast();
2178 for(
Int_t i=0;i<nmcpart;i++)
2180 AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(i);
2181 if(TMath::Abs(mcpart->GetPdgCode())==4122){
2184 Bool_t k0s_flag = kFALSE;
2185 AliAODMCParticle *mcepart = 0;
2186 AliAODMCParticle *mcv0part = 0;
2187 Int_t ndau = mcpart->GetLastDaughter()-mcpart->GetFirstDaughter()+1;
2189 for(
Int_t idau=mcpart->GetFirstDaughter();idau<mcpart->GetLastDaughter()+1;idau++)
2192 AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
2193 if(!mcdau)
continue;
2194 if(TMath::Abs(mcdau->GetPdgCode())==2212){
2198 if(TMath::Abs(mcdau->GetPdgCode())==311){
2205 Int_t decaytype = -9999;
2206 if(p_flag && k0s_flag) decaytype = 0;
2211 if(TMath::Abs(mcpart->GetPdgCode())==2212 && mcpart->GetStatus()==1){
2214 esdcuts->GetEtaRange(etamin,etamax);
2215 if(fabs(mcpart->Eta())<etamax){
2220 if(TMath::Abs(mcpart->GetPdgCode())==321 && mcpart->GetStatus()==1){
2223 esdcuts->GetEtaRange(etamin,etamax);
2224 if(fabs(mcpart->Eta())<etamax){
2228 if(TMath::Abs(mcpart->GetPdgCode())==310){
2232 if((fabs(mcpart->Y())<rapmax) && (fabs(mcpart->Eta())<etamax)){
2247 for(
Int_t i=0;i<100;i++){
2248 pdgarray_pr[i] = -9999;
2249 labelarray_pr[i] = -9999;
2250 pdgarray_v0[i] = -9999;
2251 labelarray_v0[i] = -9999;
2256 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(elobj->
GetBachelor());
2258 Int_t labPr = trk->GetLabel();
2259 if(labPr<0)
return -1;
2260 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labPr);
2261 if(!mcetrk)
return -1;
2262 labelarray_pr[0] = labPr;
2263 pdgarray_pr[0] = mcetrk->GetPdgCode();
2266 AliAODMCParticle *mcprimpr=0;
2268 while(mcprimpr->GetMother()>=0) {
2269 Int_t labprim_pr=mcprimpr->GetMother();
2270 AliAODMCParticle *tmcprimpr = (AliAODMCParticle*)mcArray->At(labprim_pr);
2275 mcprimpr = tmcprimpr;
2276 pdgarray_pr[ngen_pr] = mcprimpr->GetPdgCode();
2277 labelarray_pr[ngen_pr] = labprim_pr;
2279 if(ngen_pr==100)
break;
2282 AliAODv0 *theV0 =
dynamic_cast<AliAODv0*
>(elobj->
Getv0());
2283 if(!theV0)
return -1;
2284 Int_t pdgdgv0[2]={211,211};
2285 Int_t labV0 = theV0->MatchToMC(310,mcArray,2,pdgdgv0);
2286 if(labV0<0)
return -1;
2287 AliAODMCParticle *mcv0 = (AliAODMCParticle*)mcArray->At(labV0);
2288 if(!mcv0)
return -1;
2289 labelarray_v0[0] = labV0;
2290 pdgarray_v0[0] = mcv0->GetPdgCode();
2293 AliAODMCParticle *mcprimv0=0;
2295 while(mcprimv0->GetMother()>=0) {
2296 Int_t labprim_v0=mcprimv0->GetMother();
2297 AliAODMCParticle *tmcprimv0 = (AliAODMCParticle*)mcArray->At(labprim_v0);
2302 mcprimv0 = tmcprimv0;
2303 pdgarray_v0[ngen_v0] = mcprimv0->GetPdgCode();
2304 labelarray_v0[ngen_v0] = labprim_v0;
2306 if(ngen_v0==100)
break;
2309 Bool_t same_flag = kFALSE;
2310 Int_t matchedlabel=-9999;
2311 for(
Int_t iemc=0;iemc<ngen_pr;iemc++){
2312 for(
Int_t ivmc=0;ivmc<ngen_v0;ivmc++){
2313 if(labelarray_pr[iemc]==labelarray_v0[ivmc]){
2315 matchedlabel = labelarray_pr[iemc];
2319 if(same_flag)
break;
2322 return matchedlabel;
2334 if(track->GetID()<0){
2341 printf(
"Warning: track ID too big for buffer: ID: %d, buffer %d\n"
2347 if(
fGTI[track->GetID()]){
2350 if( (!track->GetFilterMap()) &&
2351 (!track->GetTPCNcls()) )
2359 if(
fGTI[track->GetID()]->GetFilterMap() ||
2360 fGTI[track->GetID()]->GetTPCNcls() ){
2362 printf(
"Warning! global track info already there!");
2363 printf(
" TPCNcls track1 %u track2 %u",
2364 (
fGTI[track->GetID()])->GetTPCNcls(),track->GetTPCNcls());
2365 printf(
" FilterMap track1 %u track2 %u\n",
2366 (
fGTI[track->GetID()])->GetFilterMap(),track->GetFilterMap());
2378 (
fGTI[track->GetID()]) = track;
2379 (
fGTIndex[track->GetID()]) = index;
TTree * fMCVariablesTree
! tree of the candidate variables after track selection on output slot 7
void FillProtonROOTObjects(AliAODTrack *trk, TClonesArray *mcArray)
void DefineMCV0TreeVariables()
Float_t fTriggerCheck
Run Number.
TList * fOutput
Use MC info.
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODTrack *trkpid, AliAODVertex *vtx)
Int_t MatchToMC(AliAODRecoCascadeHF *elobj, TClonesArray *mcArray, Int_t *pdgarray_pr, Int_t *pdgarray_v0, Int_t *labelarray_pr, Int_t *labelarray_v0, Int_t &ngen_pr, Int_t &ngen_v0)
THnSparse * fHistoLcK0SpMassMix
! Lc mass spectra
TH2F * fHistoBachPtMCGen
! Bachelor pT histogram (efficiency denominator)
TObjArray * fProtonTracks
unique event id for mixed event check
THnSparse * fHistoLcKMinuspMass
! Lc mass spectra
TH2D * fHistoResponseLcPt2
! Response function Lc pT
void UnsetOwnPrimaryVtx()
THnSparse * fHistoLcKPluspMassMix
! Lc mass spectra
THnSparse * fHistoLcKPluspMass
! Lc mass spectra
void SelectTrack(const AliVEvent *event, Int_t trkEntries, Int_t &nSeleTrks, Int_t *seleFlags, TClonesArray *mcArray)
AliAODVertex * PrimaryVertex(const TObjArray *trkArray, AliVEvent *event)
TH1F * fHistoProbProton
! Probability to be proton histogram
TH1F * fHReactionPlane
! Histogram to check Reaction plane
Bool_t MakeMCAnalysis(TClonesArray *mcArray)
Float_t * fCandidateProtonVariables
! variables to be written to the tree
void ResetPool(Int_t poolIndex)
TTree * fVariablesTree
flag to decide whether to write the candidate variables on a tree variables
TList * fListCuts
! User output slot 2 // Cuts
Bool_t fUseCentralityV0M
Stores trigger information.
void DoEventMixingWithPools(Int_t index)
void GetProdV0EtaRange(Double_t &a, Double_t &b)
TH1F * fHistoMassTagV0Min
! electron-any mass
Double_t fRPBins[100]
number of rp bins
void DefineAnalysisHistograms()
Float_t fVtxZ
primary vertex
TH1F * fHistod0Bach
! Bachelor d0 histogram
TH1F * fHistonK0svsRunNumber
! QA histogram
TH2F * fHistoKaonPtMCGen
! Kaon pT histogram (efficiency denominator)
Double_t GetMaxVtxZ() const
TH2F * fHistoKaonPtMCS
! Kaon pT histogram (efficiency numerator)
Float_t fReactionPlane
Centrality.
Bool_t fIsCent
SemiCentral trigger event.
Bool_t SingleV0Cuts(AliAODv0 *v0, AliAODVertex *vert)
Double_t InvMassLctoK0sP() const
Double_t GetProtonProbabilityTPCTOF(AliAODTrack *trk)
AliAODPidHF * GetPidHF() const
Float_t * fCandidateV0Variables
! variables to be written to the tree
void DefineMCProtonTreeVariables()
TH1F * fHistonEvtvsRunNumber
! QA histogram
TH3F * fHistoK0sMassvsPt
! K0s mass vs pt histogram
TH3F * fHistoK0sMassvsPtMCGen
! K0s mass vs pt histogram
virtual void UserExec(Option_t *option)
TH1F * fHistoDecayLength
! Decay length histogram
TH1F * fHCentrality
! Histogram to check Centrality
TH1F * fHistoK0SMass
! K0s mass histogram
TTree * fMCProtonVariablesTree
! tree of the candidate variables after track selection on output slot 9
TH1F * fHistod0V0
! V0 d0 histogram
Int_t fRunNumber
ReactionPlane.
THnSparse * fHistoK0spCorrelationMix
! Lc mass spectra
TTree * fMCV0VariablesTree
! tree of the candidate variables after track selection on output slot 10
Int_t fNumberOfEventsForMixing
flag for event mixing
const UShort_t fTrackBuffSize
Array of integers to keep the index of tpc only track.
THnSparse * fHistoLcK0SpMassMCS
! Lc mass spectra
AliAODRecoCascadeHF * MakeCascadeHF(AliAODv0 *casc, AliAODTrack *trk, AliAODTrack *trkpid, AliAODEvent *aod, AliAODVertex *vert)
void DefineGeneralHistograms()
TTree * fProtonVariablesTree
! tree of the candidate variables after track selection on output slot 5
Double_t CalculateLcCosPAXY(AliAODRecoDecayHF *obj)
virtual void UserCreateOutputObjects()
Implementation of interface methods.
virtual ~AliAnalysisTaskSELc2pK0sfromAODtracks()
THnSparse * fHistoK0spCorrelation
! Lc mass spectra
void StoreGlobalTrackReference(AliAODTrack *track, Int_t)
void MakeAnalysis(AliAODEvent *aod, TClonesArray *mcArray)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
AliAODTrack * GetBachelor() const
TH2F * fHistoBachPtMCS
! Bachelor pT histogram (efficiency numerator)
THnSparse * fHistoK0spCorrelationMCS
! Lc mass spectra
Float_t * fCandidateVariables
EMC7 trigger event.
TObjArray * fV0CutVarsArray
array of RDHF cut information
AliESDtrackCuts * GetTrackCuts() const
void FillMCV0ROOTObjects(AliAODMCParticle *mcv0part, TClonesArray *mcArray)
void SetProngIDs(Int_t nIDs, UShort_t *id)
Double_t fZvtxBins[100]
number of z vrtx bins
void GetProdV0RapRange(Double_t &a, Double_t &b)
TH1F * fHistoMassTagV0SameSignMin
! electron-any mass
AliRDHFCutsLctopK0sfromAODtracks * fAnalCuts
Double_t nEvents
plot quality messages
void SetMagneticField(Double_t a)
THnSparse * fHistoLcK0SpMass
! Lc mass spectra
virtual void Terminate(Option_t *option)
AliPIDResponse * GetPidResponse() const
THnSparse * fHistoLcK0SpMassCoarse
! Lc mass spectra
void SetPrimaryVertex(Double_t *a)
Int_t GetPoolIndex(Double_t zvert, Double_t mult, Double_t rp)
void SelectV0(const AliVEvent *event, Int_t nV0, Int_t &nSeleV0, Bool_t *seleV0Flags, TClonesArray *mcArray)
TH2D * fHistoResponseLcPt1
! Response function Lc pT
Double_t CosV0PointingAngle() 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)
Bool_t IsEventRejectedDuePhysicsSelection() const
void FillROOTObjects(AliAODRecoCascadeHF *lcobj, AliAODv0 *v0, AliAODTrack *trk, AliAODTrack *trkpid, AliAODEvent *aod, TClonesArray *mcarray)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Int_t GetProdAODFilterBit()
TH1F * fHistonProtonvsRunNumber
! QA histogram
Double_t DecayLengthXY() const
void ResetGlobalTrackReference()
void DefineMCTreeVariables()
TH2F * fHistoBachPt
! Bachelor pT histogram
TTree * fV0VariablesTree
! tree of the candidate variables after track selection on output slot 6
Int_t fNzVtxBins
maximum number of events to be used in event mixing
void FillV0ROOTObjects(AliAODv0 *v0, TClonesArray *mcArray)
Float_t * fCandidateMCVariables
! variables to be written to the tree
void FillMixROOTObjects(TLorentzVector *pt, TLorentzVector *ev, TVector *tinfo, TVector *vinfo)
Bool_t fIsEMC7
INT7 trigger event.
Bool_t IsEventSelected(AliVEvent *event)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
void FillMCROOTObjects(AliAODMCParticle *part, AliAODMCParticle *mcepart, AliAODMCParticle *mcv0part, Int_t decaytype)
AliESDVertex * fV1
primary vertex
Bool_t fIsMB
Reconstruct primary vertex excluding candidate tracks.
AliAnalysisTaskSELc2pK0sfromAODtracks()
TH2D * fHistoResponseLcPt
! Response function Lc pT
TList * fOutputAll
! User Output slot 3 //analysis histograms
Bool_t fIsINT7
Central trigger event.
Bool_t TagV0(AliAODTrack *etrk, AliAODEvent *evt, Int_t ntrk, Double_t &minmass)
void DefineTreeVariables()
TH2F * fHistoKaonPt
! Kaon pT histogram
Float_t * fCandidateMCV0Variables
! variables to be written to the tree
Bool_t SelectWithRoughCuts(AliAODv0 *v0, AliAODTrack *trk1)
Int_t fEvNumberCounter
Stores trigger information.
TH1F * fHistod0d0
! Bachelor d0 * V0 d0 histogram
TH1F * fHTrigger
! Histogram to check Trigger
Bool_t GetIsUsePID() const
TH1F * fCEvents
! Histogram to check selected events
THnSparse * fHistoLcKMinuspMassMix
! Lc mass spectra
Float_t fCentrality
magnetic field value [kG]
Bool_t IsEventRejectedDueToTrigger() const
Float_t * fCandidateMCProtonVariables
! variables to be written to the tree
TH3F * fHistoK0sMassvsPtMCS
! K0s mass vs pt histogram
void FillMCProtonROOTObjects(AliAODMCParticle *mcepart, TClonesArray *mcArray)
Double_t fCentBins[100]
number of centrality bins
THnSparse * fHistoLcMCGen
! Lc Generation
AliNormalizationCounter * fCounter
EvNumber counter.
AliAODVertex * CallPrimaryVertex(AliAODv0 *v0, AliAODTrack *trk, AliAODEvent *evt)
TObjArray * fV0Tracks
array of electron-compatible tracks
Int_t * fGTIndex
Array of pointers, just nicely sorted according to the id.
THnSparse * fHistoLcK0SpPi0MassMCS
! Lc mass spectra
Bool_t fIsEventSelected
Cuts - sent to output slot 2.
Bool_t fIsSemi
MB trigger event.
void DefineProtonTreeVariables()
AliAODVertex * ReconstructSecondaryVertex(AliAODv0 *casc, AliAODTrack *trk, AliAODEvent *aod)
void DefineV0TreeVariables()
Int_t fDoEventMixing
Size of the above array, ~12000 for PbPb.
Bool_t fWriteVariableTree
flag for event selected
TTree ** fEventBuffer
number of pools
TH1F * fHistoV0CosPA
! V0 cosine pointing angle to primary vertex
TObjArray * fProtonCutVarsArray
array of lambda-compatible tracks
Bool_t GetProdUseAODFilterBit()
Bool_t fReconstructPrimVert
THnSparse * fHistoLcK0SpMassMixCoarse
! Lc mass spectra