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>
54 #include "AliMCEvent.h"
55 #include "AliAnalysisManager.h"
56 #include "AliAODMCHeader.h"
57 #include "AliAODHandler.h"
59 #include "AliExternalTrackParam.h"
60 #include "AliAODVertex.h"
61 #include "AliESDVertex.h"
62 #include "AliAODRecoDecay.h"
65 #include "AliESDtrack.h"
66 #include "AliAODTrack.h"
68 #include "AliAODcascade.h"
69 #include "AliAODMCParticle.h"
70 #include "AliAnalysisTaskSE.h"
72 #include "AliPIDResponse.h"
73 #include "AliPIDCombined.h"
74 #include "AliTOFPIDResponse.h"
76 #include "AliInputEventHandler.h"
77 #include "AliESDtrackCuts.h"
78 #include "AliNeutralTrackParam.h"
79 #include "AliKFParticle.h"
80 #include "AliKFVertex.h"
81 #include "AliExternalTrackParam.h"
82 #include "AliESDtrack.h"
83 #include "AliCentrality.h"
84 #include "AliVertexerTracks.h"
107 fIsEventSelected(kFALSE),
108 fWriteVariableTree(kFALSE),
109 fWriteEachVariableTree(kFALSE),
110 fWriteMCVariableTree(kFALSE),
112 fProtonVariablesTree(0),
115 fMCProtonVariablesTree(0),
116 fMCV0VariablesTree(0),
117 fReconstructPrimVert(kFALSE),
123 fCandidateVariables(),
124 fCandidateProtonVariables(),
125 fCandidateV0Variables(),
126 fCandidateMCVariables(),
127 fCandidateMCProtonVariables(),
128 fCandidateMCV0Variables(),
137 fUseCentralityV0M(kFALSE),
140 fHistonEvtvsRunNumber(0),
141 fHistonProtonvsRunNumber(0),
142 fHistonK0svsRunNumber(0),
145 fHistoLcK0SpMassMix(0),
146 fHistoLcK0SpMassCoarse(0),
147 fHistoLcK0SpMassMixCoarse(0),
148 fHistoK0spCorrelation(0),
149 fHistoK0spCorrelationMix(0),
150 fHistoK0spCorrelationMCS(0),
151 fHistoLcK0SpMassMCS(0),
152 fHistoLcK0SpPi0MassMCS(0),
153 fHistoLcKPluspMass(0),
154 fHistoLcKMinuspMass(0),
155 fHistoLcKPluspMassMix(0),
156 fHistoLcKMinuspMassMix(0),
159 fHistoBachPtMCGen(0),
162 fHistoKaonPtMCGen(0),
163 fHistoK0sMassvsPt(0),
164 fHistoK0sMassvsPtMCS(0),
165 fHistoK0sMassvsPtMCGen(0),
171 fHistoDecayLength(0),
173 fHistoMassTagV0Min(0),
174 fHistoMassTagV0SameSignMin(0),
175 fHistoResponseLcPt(0),
176 fHistoResponseLcPt1(0),
177 fHistoResponseLcPt2(0),
178 fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
180 fNumberOfEventsForMixing (5),
189 fProtonCutVarsArray(0x0),
200 Bool_t writeVariableTree) :
211 fIsEventSelected(kFALSE),
212 fWriteVariableTree(writeVariableTree),
213 fWriteEachVariableTree(kFALSE),
214 fWriteMCVariableTree(kFALSE),
216 fProtonVariablesTree(0),
219 fMCProtonVariablesTree(0),
220 fMCV0VariablesTree(0),
221 fReconstructPrimVert(kFALSE),
227 fCandidateVariables(),
228 fCandidateProtonVariables(),
229 fCandidateV0Variables(),
230 fCandidateMCVariables(),
231 fCandidateMCProtonVariables(),
232 fCandidateMCV0Variables(),
241 fUseCentralityV0M(kFALSE),
244 fHistonEvtvsRunNumber(0),
245 fHistonProtonvsRunNumber(0),
246 fHistonK0svsRunNumber(0),
249 fHistoLcK0SpMassMix(0),
250 fHistoLcK0SpMassCoarse(0),
251 fHistoLcK0SpMassMixCoarse(0),
252 fHistoK0spCorrelation(0),
253 fHistoK0spCorrelationMix(0),
254 fHistoK0spCorrelationMCS(0),
255 fHistoLcK0SpMassMCS(0),
256 fHistoLcK0SpPi0MassMCS(0),
257 fHistoLcKPluspMass(0),
258 fHistoLcKMinuspMass(0),
259 fHistoLcKPluspMassMix(0),
260 fHistoLcKMinuspMassMix(0),
263 fHistoBachPtMCGen(0),
266 fHistoKaonPtMCGen(0),
267 fHistoK0sMassvsPt(0),
268 fHistoK0sMassvsPtMCS(0),
269 fHistoK0sMassvsPtMCGen(0),
275 fHistoDecayLength(0),
277 fHistoMassTagV0Min(0),
278 fHistoMassTagV0SameSignMin(0),
279 fHistoResponseLcPt(0),
280 fHistoResponseLcPt1(0),
281 fHistoResponseLcPt2(0),
282 fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
284 fNumberOfEventsForMixing (5),
293 fProtonCutVarsArray(0x0),
299 Info(
"AliAnalysisTaskSELc2pK0sfromAODtracks",
"Calling Constructor");
301 DefineOutput(1,TList::Class());
302 DefineOutput(2,TList::Class());
303 DefineOutput(3,TList::Class());
304 DefineOutput(4,TTree::Class());
305 DefineOutput(5,TTree::Class());
306 DefineOutput(6,TTree::Class());
307 DefineOutput(7,TTree::Class());
308 DefineOutput(8,AliNormalizationCounter::Class());
309 DefineOutput(9,TTree::Class());
310 DefineOutput(10,TTree::Class());
318 Info(
"~AliAnalysisTaskSELc2pK0sfromAODtracks",
"Calling Destructor");
404 if (fDebug > 1) AliInfo(
"Init");
423 AliError(
"NO EVENT FOUND!");
434 AliKFParticle::SetField(
fBzkG);
435 if (TMath::Abs(
fBzkG)<0.001) {
447 TClonesArray *mcArray = 0;
448 AliAODMCHeader *mcHeader=0;
451 mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
453 AliError(
"Could not find Monte-Carlo in AOD");
459 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
461 AliError(
"AliAnalysisTaskSELc2pK0sfromAODtracks::UserExec: MC header branch not found!\n");
466 Double_t zMCVertex = mcHeader->GetVtxZ();
468 AliDebug(2,Form(
"Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,
fAnalCuts->
GetMaxVtxZ()));
482 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
487 fVtx1->GetCovarianceMatrix(cov);
488 fV1 =
new AliESDVertex(pos,cov,100.,100,
fVtx1->GetName());
492 if(!fIsTriggerNotOK)
fCEvents->Fill(3);
500 fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
501 fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
502 fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
503 fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
504 fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
518 AliCentrality *cent = aodEvent->GetCentrality();
519 fCentrality = cent->GetCentralityPercentile(
"V0M");
523 if(fCentrality<0.||fCentrality>100.-0.0000001) {
530 Int_t runnumber_offset = 0;
531 Int_t runnumber = aodEvent->GetRunNumber();
532 if(runnumber<=131000&&runnumber>=114000){
533 runnumber_offset = 114000;
534 }
else if(runnumber<=196000&&runnumber>=195000){
535 runnumber_offset = 195000;
536 }
else if(runnumber<=170593&&runnumber>=167902){
537 runnumber_offset = 167902;
579 AliAnalysisTaskSE::Terminate();
583 AliError(
"fOutput not available");
589 AliError(
"fOutputAll not available");
638 TString normName=
"NormalizationCounter";
639 AliAnalysisDataContainer *cont = GetOutputSlot(8)->GetContainer();
640 if(cont)normName=(
TString)cont->GetName();
658 fEventBuffer[i]=
new TTree(Form(
"EventBuffer_%d",i),
"Temporary buffer for event mixing");
684 if(fProtonTracks) fProtonTracks->Delete();
685 if(fV0Tracks) fV0Tracks->Delete();
686 if(fProtonCutVarsArray) fProtonCutVarsArray->Delete();
687 if(fV0CutVarsArray) fV0CutVarsArray->Delete();
690 ResetGlobalTrackReference();
692 for (
Int_t iTrack=0;iTrack<aodEvent->GetNumberOfTracks();iTrack++){
694 AliAODTrack *track =
dynamic_cast<AliAODTrack *
>(aodEvent->GetTrack(iTrack));
695 if (!track)
continue;
698 StoreGlobalTrackReference(track,iTrack);
702 Int_t nV0s= aodEvent->GetNumberOfV0s();
703 Int_t nTracks= aodEvent->GetNumberOfTracks();
705 Int_t seleTrkFlags[nTracks];
707 SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags,mcArray);
711 SelectV0(aodEvent,nV0s,nSeleV0,seleV0Flags,mcArray);
716 for (
Int_t iv0 = 0; iv0<nV0s; iv0++) {
717 if(!seleV0Flags[iv0])
continue;
718 AliAODv0 *v0 = aodEvent->GetV0(iv0);
721 AliAODTrack *cptrack = (AliAODTrack*)(v0->GetDaughter(0));
722 AliAODTrack *cntrack = (AliAODTrack*)(v0->GetDaughter(1));
727 for (
Int_t itrk = 0; itrk<nTracks; itrk++) {
728 if(seleTrkFlags[itrk]!=1)
continue;
729 AliAODTrack *trk = (AliAODTrack*)aodEvent->GetTrack(itrk);
735 AliAODTrack *trkpid = 0;
736 if(fAnalCuts->GetProdAODFilterBit()==7){
737 trkpid = fGTI[-trk->GetID()-1];
742 Int_t cpid = cptrack->GetID();
743 Int_t cnid = cntrack->GetID();
744 Int_t lpid = trkpid->GetID();
745 if((cpid==lpid)||(cnid==lpid))
continue;
747 if(!fAnalCuts->SelectWithRoughCuts(v0,trk))
continue;
749 AliAODVertex *secVert = ReconstructSecondaryVertex(v0,trk,aodEvent);
750 if(!secVert)
continue;
757 FillROOTObjects(lcobj,v0,trk,trkpid,aodEvent,mcArray);
759 lcobj->GetSecondaryVtx()->RemoveDaughters();
761 delete lcobj;lcobj=NULL;
767 fEventInfo->SetString(Form(
"Ev%d_esd%d_E%d_V%d",AliAnalysisManager::GetAnalysisManager()->GetNcalls(),((AliAODHeader*)aodEvent->GetHeader())->GetEventNumberESDFile(),fProtonTracks->GetEntries(),fV0Tracks->GetEntries()));
768 Int_t ind=GetPoolIndex(fVtxZ,fCentrality,fReactionPlane);
769 if(ind>=0 && ind<fNOfPools){
770 if(fEventBuffer[ind]->GetEntries() >= fNumberOfEventsForMixing){
771 DoEventMixingWithPools(ind);
772 if(fEventBuffer[ind]->GetEntries() >= 20*fNumberOfEventsForMixing){
776 fEventBuffer[ind]->Fill();
792 Double_t mprPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
793 Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
794 Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
796 for(
Int_t i=0;i<54;i++){
803 Double_t momp = sqrt(pxp*pxp+pyp*pyp+pzp*pzp);
804 Double_t Ep = sqrt(momp*momp+mprPDG*mprPDG);
809 Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
811 Double_t Ev = sqrt(momv*momv+mv*mv);
813 Double_t cosoa = (pxp*pxv+pyp*pyv+pzp*pzv)/momp/momv;
854 Double_t pose = sqrt(pospx*pospx+pospy*pospy+pospz*pospz+0.000511*0.000511);
858 Double_t nege = sqrt(negpx*negpx+negpy*negpy+negpz*negpz+0.000511*0.000511);
859 Double_t massPhoton = sqrt(pow(pose+nege,2)-pow(pospx+negpx,2)-pow(pospy+negpy,2)-pow(pospz+negpz,2));
868 AliAODMCParticle *mclc = 0;
869 AliAODMCParticle *mcpr = 0;
870 AliAODMCParticle *mcv0 = 0;
872 Int_t mcpdgpr_array[100];
873 Int_t mcpdgv0_array[100];
874 Int_t mclabelpr_array[100];
875 Int_t mclabelv0_array[100];
876 Int_t mcngen_pr=-9999;
877 Int_t mcngen_v0=-9999;
878 Bool_t islambdac = kFALSE;
879 Bool_t islambdac3body = kFALSE;
887 mclablc =
MatchToMC(lcobj,mcArray,mcpdgpr_array, mcpdgv0_array,mclabelpr_array,mclabelv0_array,mcngen_pr,mcngen_v0);
889 mclc = (AliAODMCParticle*) mcArray->At(mclablc);
890 if(mclabelpr_array[0]>=0)
891 mcpr = (AliAODMCParticle*) mcArray->At(mclabelpr_array[0]);
892 if(mclabelv0_array[0]>=0)
893 mcv0 = (AliAODMCParticle*) mcArray->At(mclabelv0_array[0]);
896 Int_t pdgcode = mclc->GetPdgCode();
897 if(abs(pdgcode)==4122 && abs(mcpdgpr_array[1])==4122 && abs(mcpdgv0_array[1])==311 && abs(mcpdgv0_array[2])==4122 && mclc->GetNDaughters()==2){
900 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){
901 islambdac3body = kTRUE;
903 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){
904 islambdac3body = kTRUE;
906 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){
907 islambdac3body = kTRUE;
909 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){
910 islambdac3body = kTRUE;
912 genvertx_mc = mclc->Xv();
913 genverty_mc = mclc->Yv();
914 genvertz_mc = mclc->Zv();
917 decayvertx_mc = mcpr->Xv();
918 decayverty_mc = mcpr->Yv();
919 decayvertz_mc = mcpr->Zv();
926 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
929 trk->PropagateToDCA(
fVtx1,
fBzkG,kVeryBig,d0z0,covd0z0);
941 Double_t pt1 = sqrt(px1*px1+py1*py1);
952 a0 = 1./Delta * (py1 * dx - px1 * dy);
957 Double_t neovertz = z0 + TMath::Abs(a0)*trk->Pz()/trk->Pt();
975 Double_t x1_k0s = v0->DecayVertexV0X();
976 Double_t y1_k0s = v0->DecayVertexV0Y();
979 Double_t pt1_k0s = sqrt(px1_k0s*px1_k0s+py1_k0s*py1_k0s);
980 px1_k0s = px1_k0s/pt1_k0s;
981 py1_k0s = py1_k0s/pt1_k0s;
986 Double_t Delta_k0s = -px0*py1_k0s+py0*px1_k0s;
990 a0_k0s = 1./Delta_k0s * (py1_k0s * dx_k0s - px1_k0s * dy_k0s);
992 Double_t neovertx_k0s = x0 + a0_k0s * px0;
993 Double_t neoverty_k0s = y0 + a0_k0s * py0;
1016 Double_t deltaphi = phi_assoc-phi_trig;
1017 if(deltaphi<-M_PI/2.) deltaphi += 2 * M_PI;
1018 if(deltaphi>3*M_PI/2.) deltaphi -= 2 * M_PI;
1019 cont_correlation[0] = deltaphi;
1020 cont_correlation[1] = eta_assoc-eta_trig;
1021 cont_correlation[2] = trk->Pt();
1022 cont_correlation[3] = v0->Pt();
1028 cont[1] = lcobj->Pt();
1038 fHistod0d0->Fill(lcobj->Getd0Prong(0)*lcobj->Getd0Prong(1));
1069 for(
Int_t i=0;i<54;i++){
1076 Double_t momp = sqrt(pxp*pxp+pyp*pyp+pzp*pzp);
1077 Double_t Ep = sqrt(momp*momp+0.938272*0.938272);
1082 Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
1084 Double_t Ev = sqrt(momv*momv+mv*mv);
1086 Double_t cosoa = (pxp*pxv+pyp*pyv+pzp*pzv)/momp/momv;
1092 Double_t mpk0s = sqrt(Esum*Esum-pxsum*pxsum-pysum*pysum-pzsum*pzsum);
1100 Double_t deltaphi = phi_assoc-phi_trig;
1101 if(deltaphi<-M_PI/2.) deltaphi += 2 * M_PI;
1102 if(deltaphi>3*M_PI/2.) deltaphi -= 2 * M_PI;
1103 cont_correlation[0] = deltaphi;
1104 cont_correlation[1] = eta_assoc-eta_trig;
1105 cont_correlation[2] = trkp->Pt();
1106 cont_correlation[3] = v0->Pt();
1125 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
1144 a0 = 1./Delta * (py1 * dx - px1 * dy);
1156 rdhfcutvars[0] = mpk0s;
1157 rdhfcutvars[1] = sqrt(pxsum*pxsum+pysum*pysum);
1158 rdhfcutvars[2] = (*prvars)[7];
1159 rdhfcutvars[3] = (*prvars)[8];
1160 rdhfcutvars[4] = a0;
1161 rdhfcutvars[5] = (*prvars)[0];
1162 rdhfcutvars[6] = (*v0vars)[0];
1168 cont[1] = sqrt(pxsum*pxsum+pysum*pysum);
1184 const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName();
1190 fCandidateVariableNames[ 0]=
"InvMassLc2pK0s";
1191 fCandidateVariableNames[ 1]=
"LcPx";
1192 fCandidateVariableNames[ 2]=
"LcPy";
1193 fCandidateVariableNames[ 3]=
"LcPz";
1194 fCandidateVariableNames[ 4]=
"massK0Short";
1195 fCandidateVariableNames[ 5]=
"BachPx";
1196 fCandidateVariableNames[ 6]=
"BachPy";
1197 fCandidateVariableNames[ 7]=
"BachPz";
1198 fCandidateVariableNames[ 8]=
"V0Px";
1199 fCandidateVariableNames[ 9]=
"V0Py";
1200 fCandidateVariableNames[10]=
"V0Pz";
1201 fCandidateVariableNames[11]=
"PrimVertx";
1202 fCandidateVariableNames[12]=
"PrimVerty";
1203 fCandidateVariableNames[13]=
"PrimVertz";
1204 fCandidateVariableNames[14]=
"Centrality";
1205 fCandidateVariableNames[15]=
"DecayLengthXY";
1206 fCandidateVariableNames[16]=
"LcCosPAXY";
1207 fCandidateVariableNames[17]=
"nSigmaTPCpr";
1208 fCandidateVariableNames[18]=
"nSigmaTOFpr";
1209 fCandidateVariableNames[19]=
"probProton";
1210 fCandidateVariableNames[20]=
"Mixing";
1211 fCandidateVariableNames[21]=
"Bachd0";
1212 fCandidateVariableNames[22]=
"V0d0";
1213 fCandidateVariableNames[23]=
"massLambda";
1214 fCandidateVariableNames[24]=
"massAntiLambda";
1215 fCandidateVariableNames[25]=
"massPhoton";
1216 fCandidateVariableNames[26]=
"DcaPosToPrimVtx";
1217 fCandidateVariableNames[27]=
"DcaNegToPrimVtx";
1218 fCandidateVariableNames[28]=
"DcaV0ToPrimVtx";
1219 fCandidateVariableNames[29]=
"DcaV0Daughters";
1220 fCandidateVariableNames[30]=
"IsLambdac";
1221 fCandidateVariableNames[31]=
"SecVertX";
1222 fCandidateVariableNames[32]=
"SecVertY";
1223 fCandidateVariableNames[33]=
"SecVertZ";
1224 fCandidateVariableNames[34]=
"islambdac3body";
1225 fCandidateVariableNames[35]=
"SecVertXMC";
1226 fCandidateVariableNames[36]=
"SecVertYMC";
1227 fCandidateVariableNames[37]=
"SecVertZMC";
1228 fCandidateVariableNames[38]=
"LcPxMC";
1229 fCandidateVariableNames[39]=
"LcPyMC";
1230 fCandidateVariableNames[40]=
"LcPzMC";
1231 fCandidateVariableNames[41]=
"PrimVertXMC";
1232 fCandidateVariableNames[42]=
"PrimVertYMC";
1233 fCandidateVariableNames[43]=
"PrimVertZMC";
1234 fCandidateVariableNames[44]=
"SecVertXK0s";
1235 fCandidateVariableNames[45]=
"SecVertYK0s";
1236 fCandidateVariableNames[46]=
"DcaBachV0";
1237 fCandidateVariableNames[47]=
"MatchedPDG";
1238 fCandidateVariableNames[48]=
"ProtonPDG";
1239 fCandidateVariableNames[49]=
"MotherProtonPDG";
1240 fCandidateVariableNames[50]=
"GrMotherProtonPDG";
1241 fCandidateVariableNames[51]=
"V0PDG";
1242 fCandidateVariableNames[52]=
"MotherV0PDG";
1243 fCandidateVariableNames[53]=
"GrMotherV0PDG";
1258 fCEvents =
new TH1F(
"fCEvents",
"conter",18,-0.5,17.5);
1260 fCEvents->GetXaxis()->SetBinLabel(1,
"X1");
1261 fCEvents->GetXaxis()->SetBinLabel(2,
"Analyzed events");
1262 fCEvents->GetXaxis()->SetBinLabel(3,
"AliAODVertex exists");
1263 fCEvents->GetXaxis()->SetBinLabel(4,
"TriggerOK");
1264 fCEvents->GetXaxis()->SetBinLabel(5,
"IsEventSelected");
1265 fCEvents->GetXaxis()->SetBinLabel(6,
"CascadesHF exists");
1266 fCEvents->GetXaxis()->SetBinLabel(7,
"MCarray exists");
1267 fCEvents->GetXaxis()->SetBinLabel(8,
"MCheader exists");
1268 fCEvents->GetXaxis()->SetBinLabel(9,
"triggerClass!=CINT1");
1269 fCEvents->GetXaxis()->SetBinLabel(10,
"triggerMask!=kAnyINT");
1270 fCEvents->GetXaxis()->SetBinLabel(11,
"triggerMask!=kAny");
1271 fCEvents->GetXaxis()->SetBinLabel(12,
"vtxTitle.Contains(Z)");
1272 fCEvents->GetXaxis()->SetBinLabel(13,
"vtxTitle.Contains(3D)");
1273 fCEvents->GetXaxis()->SetBinLabel(14,
"vtxTitle.Doesn'tContain(Z-3D)");
1275 fCEvents->GetXaxis()->SetBinLabel(16,
"!IsEventSelected");
1276 fCEvents->GetXaxis()->SetBinLabel(17,
"triggerMask!=kAnyINT || triggerClass!=CINT1");
1279 fCEvents->GetYaxis()->SetTitle(
"counts");
1281 fHTrigger =
new TH1F(
"fHTrigger",
"counter",18,-0.5,17.5);
1283 fHTrigger->GetXaxis()->SetBinLabel(1,
"X1");
1284 fHTrigger->GetXaxis()->SetBinLabel(2,
"kMB");
1285 fHTrigger->GetXaxis()->SetBinLabel(3,
"kSemiCentral");
1286 fHTrigger->GetXaxis()->SetBinLabel(4,
"kCentral");
1287 fHTrigger->GetXaxis()->SetBinLabel(5,
"kINT7");
1288 fHTrigger->GetXaxis()->SetBinLabel(6,
"kEMC7");
1290 fHTrigger->GetXaxis()->SetBinLabel(8,
"kMB|kSemiCentral|kCentral");
1291 fHTrigger->GetXaxis()->SetBinLabel(9,
"kINT7|kEMC7");
1292 fHTrigger->GetXaxis()->SetBinLabel(11,
"kMB&kSemiCentral");
1293 fHTrigger->GetXaxis()->SetBinLabel(12,
"kMB&kCentral");
1294 fHTrigger->GetXaxis()->SetBinLabel(13,
"kINT7&kEMC7");
1296 fHCentrality =
new TH1F(
"fHCentrality",
"conter",100,0.,100.);
1316 Int_t bins_base[3]= {200 ,20 ,10};
1317 Double_t xmin_base[3]={2.286-0.5,0 ,0.00};
1318 Double_t xmax_base[3]={2.286+0.5,20. ,100};
1319 fHistoLcK0SpMass =
new THnSparseF(
"fHistoLcK0SpMass",
"",3,bins_base,xmin_base,xmax_base);
1321 fHistoLcK0SpMassMix =
new THnSparseF(
"fHistoLcK0SpMassMix",
"",3,bins_base,xmin_base,xmax_base);
1323 fHistoLcK0SpMassMCS =
new THnSparseF(
"fHistoLcK0SpMassMCS",
"",3,bins_base,xmin_base,xmax_base);
1327 fHistoLcKPluspMass =
new THnSparseF(
"fHistoLcKPluspMass",
"",3,bins_base,xmin_base,xmax_base);
1329 fHistoLcKMinuspMass =
new THnSparseF(
"fHistoLcKMinuspMass",
"",3,bins_base,xmin_base,xmax_base);
1336 Int_t bins_lcmcgen[3]= {100 ,20 ,10};
1337 Double_t xmin_lcmcgen[3]={0.,-1.0 ,0.0};
1338 Double_t xmax_lcmcgen[3]={20.,1.0 ,100};
1339 fHistoLcMCGen =
new THnSparseF(
"fHistoLcMCGen",
"",3,bins_lcmcgen,xmin_lcmcgen,xmax_lcmcgen);
1342 Int_t bins_coarse[3]= {160 ,20 ,10};
1343 Double_t xmin_coarse[3]={1.,0 ,0.00};
1344 Double_t xmax_coarse[3]={5.8,20. ,100};
1345 fHistoLcK0SpMassCoarse =
new THnSparseF(
"fHistoLcK0SpMassCoarse",
"",3,bins_coarse,xmin_coarse,xmax_coarse);
1350 Int_t bins_correlation[5]= {40 ,20,20,20,10};
1351 Double_t xmin_correlation[5]={-M_PI/2.,-2.4,0.,0.,0.0};
1352 Double_t xmax_correlation[5]={1.5*M_PI,2.4,10.,10.,100};
1353 fHistoK0spCorrelation =
new THnSparseF(
"fHistoK0spCorrelation",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1355 fHistoK0spCorrelationMix =
new THnSparseF(
"fHistoK0spCorrelationMix",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1357 fHistoK0spCorrelationMCS =
new THnSparseF(
"fHistoK0spCorrelationMCS",
"",5,bins_correlation,xmin_correlation,xmax_correlation);
1364 fHistoBachPt =
new TH2F(
"fHistoBachPt",
"Bachelor p_{T}",100,0.0,10.0,20,-1.,1.);
1371 fHistoKaonPt =
new TH2F(
"fHistoKaonPt",
"Kaon p_{T}",100,0.0,10.0,20,-1.,1.);
1378 fHistoK0sMassvsPt=
new TH3F(
"fHistoK0sMassvsPt",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1380 fHistoK0sMassvsPtMCS=
new TH3F(
"fHistoK0sMassvsPtMCS",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1382 fHistoK0sMassvsPtMCGen=
new TH3F(
"fHistoK0sMassvsPtMCGen",
"K0s mass",100,0.497-0.05,0.497+0.05,20,0.,10.,20,-1.,1.);
1385 fHistod0Bach =
new TH1F(
"fHistod0Bach",
"Bachelor d_{0}",100,-0.5,0.5);
1387 fHistod0V0 =
new TH1F(
"fHistod0V0",
"V_{0} d_{0}",100,-0.5,0.5);
1389 fHistod0d0 =
new TH1F(
"fHistod0d0",
"d_{0} d_{0}",100,-0.5,0.5);
1391 fHistoV0CosPA=
new TH1F(
"fHistoV0CosPA",
"V0->Second vertex cospa",100,-1.,1.0);
1397 fHistoK0SMass=
new TH1F(
"fHistoK0SMass",
"K0S mass",100,0.497-0.05,0.497+0.05);
1430 if(!part)
return 0x0;
1431 if(!partpid)
return 0x0;
1432 if(!aod)
return 0x0;
1437 AliAODVertex *primVertexAOD;
1438 Bool_t unsetvtx = kFALSE;
1442 primVertexAOD =
fVtx1;
1447 primVertexAOD =
fVtx1;
1449 if(!primVertexAOD)
return 0x0;
1450 Double_t posprim[3]; primVertexAOD->GetXYZ(posprim);
1455 AliESDtrack *esdtrack =
new AliESDtrack((AliVTrack*)partpid);
1457 AliNeutralTrackParam *trackV0=NULL;
1458 const AliVTrack *trackVV0 =
dynamic_cast<const AliVTrack*
>(v0);
1459 if(trackVV0) trackV0 =
new AliNeutralTrackParam(trackVV0);
1462 Double_t dca = esdtrack->GetDCA(trackV0,
fBzkG,xdummy,ydummy);
1469 Double_t d0z0bach[2],covd0z0bach[3];
1477 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1478 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig);
1479 Double_t momv0_new[3]={-9999,-9999,-9999.};
1480 trackV0->GetPxPyPz(momv0_new);
1483 px[0] = part->Px(); py[0] = part->Py(); pz[0] = part->Pz();
1484 px[1] = momv0_new[0]; py[1] = momv0_new[1]; pz[1] = momv0_new[2];
1491 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1493 d0err[0] = TMath::Sqrt(covd0z0bach[0]);
1496 trackV0->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0v0,covd0z0v0);
1498 d0err[1] = TMath::Sqrt(covd0z0v0[0]);
1507 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1508 if(esdtrack)
delete esdtrack;
1509 if(trackV0)
delete trackV0;
1516 theCascade->GetSecondaryVtx()->AddDaughter(partpid);
1517 theCascade->GetSecondaryVtx()->AddDaughter(v0);
1519 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1520 if(esdtrack)
delete esdtrack;
1521 if(trackV0)
delete trackV0;
1536 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk);
1537 TrackArray->AddAt(cptrk1,0);
1539 AliESDtrack *cascptrack =
new AliESDtrack((AliVTrack*)v0->GetDaughter(0));
1540 TrackArray->AddAt(cascptrack,1);
1541 AliESDtrack *cascntrack =
new AliESDtrack((AliVTrack*)v0->GetDaughter(1));
1542 TrackArray->AddAt(cascntrack,2);
1546 for(
Int_t i=0;i<3;i++)
1548 AliESDtrack *tesd = (AliESDtrack*)TrackArray->UncheckedAt(i);
1551 TrackArray->Clear();
1566 Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
1567 Bool_t fRmTrksFromPrimVtx = kFALSE;
1569 AliESDVertex *vertexESD = 0;
1570 AliAODVertex *vertexAOD = 0;
1575 if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
1578 vertexESD =
new AliESDVertex(*
fV1);
1583 Int_t nTrks = trkArray->GetEntriesFast();
1584 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1586 if(fRecoPrimVtxSkippingTrks) {
1589 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
1591 event->GetDiamondCovXY(diamondcovxy);
1592 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1593 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1594 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1595 vertexer->SetVtxStart(diamond);
1596 delete diamond; diamond=NULL;
1597 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
1598 vertexer->SetOnlyFitter();
1600 Int_t skipped[1000];
1601 Int_t nTrksToSkip=0,id;
1602 AliExternalTrackParam *t = 0;
1603 for(
Int_t i=0; i<nTrks; i++) {
1604 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1605 id = (
Int_t)t->GetID();
1607 skipped[nTrksToSkip++] = id;
1612 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
1613 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
1614 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
1615 id = (
Int_t)vtrack->GetID();
1617 skipped[nTrksToSkip++] = id;
1620 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
1622 vertexer->SetSkipTracks(nTrksToSkip,skipped);
1623 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1625 }
else if(fRmTrksFromPrimVtx && nTrks>0) {
1630 AliESDtrack *esdTrack = 0;
1632 for(
Int_t i=0; i<nTrks; i++) {
1633 t = (AliESDtrack*)trkArray->UncheckedAt(i);
1634 esdTrack =
new AliESDtrack(*t);
1635 rmArray.AddLast(esdTrack);
1636 if(esdTrack->GetID()>=0) {
1637 rmId[i]=(
UShort_t)esdTrack->GetID();
1642 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
1643 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
1644 delete [] rmId; rmId=NULL;
1649 delete vertexer; vertexer=NULL;
1650 if(!vertexESD)
return vertexAOD;
1651 if(vertexESD->GetNContributors()<=0) {
1653 delete vertexESD; vertexESD=NULL;
1662 vertexESD->GetXYZ(pos);
1663 vertexESD->GetCovMatrix(cov);
1664 chi2perNDF = vertexESD->GetChi2toNDF();
1665 delete vertexESD; vertexESD=NULL;
1667 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
1681 AliAODVertex *primVertexAOD;
1682 Bool_t unsetvtx = kFALSE;
1686 primVertexAOD =
fVtx1;
1691 primVertexAOD =
fVtx1;
1693 if(!primVertexAOD)
return 0x0;
1699 Double_t LcPx = part->Px()+v0->Px();
1700 Double_t LcPy = part->Py()+v0->Py();
1701 Double_t LcPt = TMath::Sqrt(LcPx*LcPx+LcPy*LcPy);
1704 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0,covd0z0);
1705 Double_t x0 = primVertexAOD->GetX();
1706 Double_t y0 = primVertexAOD->GetY();
1713 part->GetPxPyPz(tx);
1716 Double_t pt1 = sqrt(px1*px1+py1*py1);
1727 a0 = 1./Delta * (py1 * dx - px1 * dy);
1731 Double_t z0 = primVertexAOD->GetZ();
1732 Double_t neovertz = z0 + TMath::Abs(a0)*part->Pz()/part->Pt();
1734 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1747 AliAODVertex *secVert =
new AliAODVertex(pos,cov,chi2perNDF);
1794 if(trkEntries==0)
return;
1797 for(
Int_t i=0; i<trkEntries; i++) {
1801 track = (AliVTrack*)event->GetTrack(i);
1805 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
1808 AliAODTrack *aodt = (AliAODTrack*)track;
1813 if(!aodt->TestFilterBit(BIT(filterbit)))
continue;
1815 if(!aodt->TestFilterMask(BIT(filterbit)))
continue;
1819 AliAODTrack *aodtpid = 0;
1821 aodtpid =
fGTI[-aodt->GetID()-1];
1834 if(isv0) seleFlags[i] = 0;
1850 for(
Int_t iv0=0;iv0<nV0s;iv0++)
1852 seleV0Flags[iv0] = kFALSE;
1857 seleV0Flags[iv0] = kTRUE;
1872 const char* nameoutput = GetOutputSlot(5)->GetContainer()->GetName();
1878 fCandidateVariableNames[ 0]=
"PrPx";
1879 fCandidateVariableNames[ 1]=
"PrPy";
1880 fCandidateVariableNames[ 2]=
"PrPz";
1898 vpr.SetXYZM(trk->Px(),trk->Py(),trk->Pz(),0.938272);
1901 fProtonTracks->AddLast(
new TLorentzVector(trk->Px(),trk->Py(),trk->Pz(),trk->Charge()));
1904 trk->PropagateToDCA(
fVtx1,
fBzkG,kVeryBig,d0z0,covd0z0);
1912 Double_t pt1 = sqrt(px1*px1+py1*py1);
1916 TVector *varvec =
new TVector(9);
1917 (*varvec)[0] = d0z0[0];
1922 (*varvec)[5] =
fVtx1->GetX();
1923 (*varvec)[6] =
fVtx1->GetY();
1929 Int_t pdgPr = -9999;
1932 Int_t labPr = trk->GetLabel();
1934 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labPr);
1936 pdgPr = mcetrk->GetPdgCode();
1937 if(abs(pdgPr)!=2212)
return;
1948 const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName();
1954 fCandidateVariableNames[ 0]=
"V0Px";
1955 fCandidateVariableNames[ 1]=
"V0Py";
1956 fCandidateVariableNames[ 2]=
"V0Pz";
1973 vk0.SetXYZM(v0->Px(),v0->Py(),v0->Pz(),v0->MassK0Short());
1977 Double_t ev0 = sqrt(v0->P2()+pow(v0->MassK0Short(),2));
1978 fV0Tracks->AddLast(
new TLorentzVector(v0->Px(),v0->Py(),v0->Pz(),ev0));
1980 TVector *varvec =
new TVector(1);
1981 (*varvec)[0] = v0->DcaV0ToPrimVertex();
1985 Int_t v0pdgcode = -9999;
1988 Int_t pdgdgv0[2]={211,211};
1989 Int_t labV0 = v0->MatchToMC(310,mcArray,2,pdgdgv0);
1991 AliAODMCParticle *mcv0trk = (AliAODMCParticle*)mcArray->At(labV0);
1992 if(!mcv0trk)
return;
2003 if(theBinZ<0 || theBinZ>=
fNzVtxBins)
return -1;
2005 if(theBinM<0 || theBinM>=
fNCentBins)
return -1;
2007 if(theBinR<0 || theBinR>=
fNRPBins)
return -1;
2015 if(poolIndex<0 || poolIndex>=
fNOfPools)
return;
2017 fEventBuffer[poolIndex]=
new TTree(Form(
"EventBuffer_%d",poolIndex),
"Temporary buffer for event mixing");
2040 if(nPro!=nPro_test){
2041 cout<<
"Something wrong in mixing machinery"<<endl;
2048 TObjString* eventInfo=0x0;
2049 fEventBuffer[poolIndex]->SetBranchAddress(
"eventInfo",&eventInfo);
2050 fEventBuffer[poolIndex]->SetBranchAddress(
"zVertex", &zVertex);
2051 fEventBuffer[poolIndex]->SetBranchAddress(
"centrality", ¢);
2052 fEventBuffer[poolIndex]->SetBranchAddress(
"v1array", &v1array);
2053 fEventBuffer[poolIndex]->SetBranchAddress(
"v1varsarray", &v1varsarray);
2054 for (
Int_t i=0; i<nPro; i++)
2056 TLorentzVector* trke=(TLorentzVector*)
fProtonTracks->At(i);
2061 fEventBuffer[poolIndex]->GetEvent(iEv + nEvents - fNumberOfEventsForMixing);
2062 Int_t nV01=v1array->GetEntries();
2063 for(
Int_t iTr1=0; iTr1<nV01; iTr1++){
2064 TLorentzVector* v01=(TLorentzVector*)v1array->At(iTr1);
2068 TVector *v0varsarray = (TVector*) v1varsarray->At(iTr1);
2083 const char* nameoutput = GetOutputSlot(7)->GetContainer()->GetName();
2089 fCandidateVariableNames[ 0]=
"Centrality";
2103 if(!mcepart)
return;
2104 if(!mcv0part)
return;
2109 contmc[0] = mcpart->Pt();
2110 contmc[1] = mcpart->Y();
2122 const char* nameoutput = GetOutputSlot(9)->GetContainer()->GetName();
2128 fCandidateVariableNames[ 0]=
"Centrality";
2141 if(!mcepart)
return;
2150 const char* nameoutput = GetOutputSlot(10)->GetContainer()->GetName();
2156 fCandidateVariableNames[ 0]=
"Centrality";
2169 if(!mcv0part)
return;
2177 Int_t nmcpart = mcArray->GetEntriesFast();
2179 for(
Int_t i=0;i<nmcpart;i++)
2181 AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(i);
2182 if(TMath::Abs(mcpart->GetPdgCode())==4122){
2185 Bool_t k0s_flag = kFALSE;
2186 AliAODMCParticle *mcepart = 0;
2187 AliAODMCParticle *mcv0part = 0;
2188 Int_t ndau = mcpart->GetLastDaughter()-mcpart->GetFirstDaughter()+1;
2190 for(
Int_t idau=mcpart->GetFirstDaughter();idau<mcpart->GetLastDaughter()+1;idau++)
2193 AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
2194 if(!mcdau)
continue;
2195 if(TMath::Abs(mcdau->GetPdgCode())==2212){
2199 if(TMath::Abs(mcdau->GetPdgCode())==311){
2206 Int_t decaytype = -9999;
2207 if(p_flag && k0s_flag) decaytype = 0;
2212 if(TMath::Abs(mcpart->GetPdgCode())==2212 && mcpart->GetStatus()==1){
2215 esdcuts->GetEtaRange(etamin,etamax);
2216 if(fabs(mcpart->Eta())<etamax){
2221 if(TMath::Abs(mcpart->GetPdgCode())==321 && mcpart->GetStatus()==1){
2224 esdcuts->GetEtaRange(etamin,etamax);
2225 if(fabs(mcpart->Eta())<etamax){
2229 if(TMath::Abs(mcpart->GetPdgCode())==310){
2233 if((fabs(mcpart->Y())<rapmax) && (fabs(mcpart->Eta())<etamax)){
2248 for(
Int_t i=0;i<100;i++){
2249 pdgarray_pr[i] = -9999;
2250 labelarray_pr[i] = -9999;
2251 pdgarray_v0[i] = -9999;
2252 labelarray_v0[i] = -9999;
2257 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(elobj->
GetBachelor());
2259 Int_t labPr = trk->GetLabel();
2260 if(labPr<0)
return -1;
2261 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labPr);
2262 if(!mcetrk)
return -1;
2263 labelarray_pr[0] = labPr;
2264 pdgarray_pr[0] = mcetrk->GetPdgCode();
2267 AliAODMCParticle *mcprimpr=0;
2269 while(mcprimpr->GetMother()>=0) {
2270 Int_t labprim_pr=mcprimpr->GetMother();
2271 AliAODMCParticle *tmcprimpr = (AliAODMCParticle*)mcArray->At(labprim_pr);
2276 mcprimpr = tmcprimpr;
2277 pdgarray_pr[ngen_pr] = mcprimpr->GetPdgCode();
2278 labelarray_pr[ngen_pr] = labprim_pr;
2280 if(ngen_pr==100)
break;
2283 AliAODv0 *theV0 =
dynamic_cast<AliAODv0*
>(elobj->
Getv0());
2284 if(!theV0)
return -1;
2285 Int_t pdgdgv0[2]={211,211};
2286 Int_t labV0 = theV0->MatchToMC(310,mcArray,2,pdgdgv0);
2287 if(labV0<0)
return -1;
2288 AliAODMCParticle *mcv0 = (AliAODMCParticle*)mcArray->At(labV0);
2289 if(!mcv0)
return -1;
2290 labelarray_v0[0] = labV0;
2291 pdgarray_v0[0] = mcv0->GetPdgCode();
2294 AliAODMCParticle *mcprimv0=0;
2296 while(mcprimv0->GetMother()>=0) {
2297 Int_t labprim_v0=mcprimv0->GetMother();
2298 AliAODMCParticle *tmcprimv0 = (AliAODMCParticle*)mcArray->At(labprim_v0);
2303 mcprimv0 = tmcprimv0;
2304 pdgarray_v0[ngen_v0] = mcprimv0->GetPdgCode();
2305 labelarray_v0[ngen_v0] = labprim_v0;
2307 if(ngen_v0==100)
break;
2310 Bool_t same_flag = kFALSE;
2311 Int_t matchedlabel=-9999;
2312 for(
Int_t iemc=0;iemc<ngen_pr;iemc++){
2313 for(
Int_t ivmc=0;ivmc<ngen_v0;ivmc++){
2314 if(labelarray_pr[iemc]==labelarray_v0[ivmc]){
2316 matchedlabel = labelarray_pr[iemc];
2320 if(same_flag)
break;
2323 return matchedlabel;
2335 if(track->GetID()<0){
2342 printf(
"Warning: track ID too big for buffer: ID: %d, buffer %d\n"
2348 if(
fGTI[track->GetID()]){
2351 if( (!track->GetFilterMap()) &&
2352 (!track->GetTPCNcls()) )
2360 if(
fGTI[track->GetID()]->GetFilterMap() ||
2361 fGTI[track->GetID()]->GetTPCNcls() ){
2363 printf(
"Warning! global track info already there!");
2364 printf(
" TPCNcls track1 %u track2 %u",
2365 (
fGTI[track->GetID()])->GetTPCNcls(),track->GetTPCNcls());
2366 printf(
" FilterMap track1 %u track2 %u\n",
2367 (
fGTI[track->GetID()])->GetFilterMap(),track->GetFilterMap());
2379 (
fGTI[track->GetID()]) = track;
2380 (
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
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.
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
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