33 #include <TParticle.h>
34 #include <TParticlePDG.h>
38 #include <THnSparse.h>
39 #include <TLorentzVector.h>
42 #include <TDatabasePDG.h>
43 #include <AliAnalysisDataSlot.h>
44 #include <AliAnalysisDataContainer.h>
46 #include "AliMCEvent.h"
47 #include "AliAnalysisManager.h"
48 #include "AliAODMCHeader.h"
49 #include "AliAODHandler.h"
51 #include "AliExternalTrackParam.h"
52 #include "AliAODVertex.h"
53 #include "AliESDVertex.h"
54 #include "AliAODRecoDecay.h"
57 #include "AliESDtrack.h"
58 #include "AliAODTrack.h"
60 #include "AliAODcascade.h"
61 #include "AliAODMCParticle.h"
62 #include "AliAnalysisTaskSE.h"
64 #include "AliPIDResponse.h"
65 #include "AliPIDCombined.h"
66 #include "AliTOFPIDResponse.h"
68 #include "AliInputEventHandler.h"
69 #include "AliESDtrackCuts.h"
70 #include "AliNeutralTrackParam.h"
71 #include "AliKFParticle.h"
72 #include "AliKFVertex.h"
73 #include "AliExternalTrackParam.h"
74 #include "AliESDtrack.h"
75 #include "AliCentrality.h"
76 #include "AliVertexerTracks.h"
77 #include "AliEventPoolManager.h"
98 fIsEventSelected(kFALSE),
99 fWriteVariableTree(kFALSE),
100 fWriteEachVariableTree(kFALSE),
101 fWriteMCVariableTree(kFALSE),
103 fEleVariablesTree(0),
104 fCascVariablesTree(0),
106 fReconstructPrimVert(kFALSE),
112 fCandidateVariables(),
113 fCandidateEleVariables(),
114 fCandidateCascVariables(),
115 fCandidateMCVariables(),
122 fUseCentralityV0M(kFALSE),
124 fHistoEleOmegaMass(0),
125 fHistoEleOmegaMassRS(0),
126 fHistoEleOmegaMassWS(0),
127 fHistoEleOmegaMassRSMix(0),
128 fHistoEleOmegaMassWSMix(0),
129 fHistoEleOmegaMassvsElePtRS(0),
130 fHistoEleOmegaMassvsElePtWS(0),
131 fHistoEleOmegaMassvsElePtRSMix(0),
132 fHistoEleOmegaMassvsElePtWSMix(0),
137 fHistoEleOmegaMassMCS(0),
138 fHistoEleOmegaMassMCGen(0),
139 fHistoEleOmegaMassvsElePtMCS(0),
140 fHistoEleOmegaMassvsElePtMCGen(0),
143 fHistoElePtvsEtaRS(0),
144 fHistoElePtvsEtaWS(0),
145 fHistoElePtvsEtaRSMix(0),
146 fHistoElePtvsEtaWSMix(0),
147 fHistoElePtvsEtaMCS(0),
148 fHistoElePtvsEtaMCGen(0),
149 fHistoElePtvsOmegaPtRS(0),
150 fHistoElePtvsOmegaPtWS(0),
151 fHistoElePtvsOmegaPtRSMix(0),
152 fHistoElePtvsOmegaPtWSMix(0),
153 fHistoElePtvsOmegaPtMCS(0),
154 fHistoElePtvsOmegaPtMCGen(0),
155 fHistoElePtvsd0RS(0),
156 fHistoElePtvsd0WS(0),
157 fHistoElePtvsd0RSMix(0),
158 fHistoElePtvsd0WSMix(0),
159 fHistoElePtvsd0MCS(0),
162 fHistoBachPtMCGen(0),
165 fHistoOmegaMassvsPt(0),
166 fHistoOmegaMassvsPtMCS(0),
167 fHistoOmegaMassvsPtMCGen(0),
168 fHistoElectronTPCPID(0),
169 fHistoElectronTOFPID(0),
170 fHistoElectronTPCSelPID(0),
171 fHistoElectronTOFSelPID(0),
172 fHistoElectronTPCPIDSelTOF(0),
173 fHistoElectronTPCPIDSelTOFSmallEta(0),
174 fHistoElectronTPCPIDSelTOFLargeEta(0),
176 fHistonEvtvsRunNumber(0),
177 fHistonElevsRunNumber(0),
178 fHistonOmegavsRunNumber(0),
180 fNumberOfEventsForMixing (5),
196 Bool_t writeVariableTree) :
206 fIsEventSelected(kFALSE),
207 fWriteVariableTree(writeVariableTree),
208 fWriteEachVariableTree(kFALSE),
209 fWriteMCVariableTree(kFALSE),
211 fEleVariablesTree(0),
212 fCascVariablesTree(0),
214 fReconstructPrimVert(kFALSE),
220 fCandidateVariables(),
221 fCandidateEleVariables(),
222 fCandidateCascVariables(),
223 fCandidateMCVariables(),
230 fUseCentralityV0M(kFALSE),
232 fHistoEleOmegaMass(0),
233 fHistoEleOmegaMassRS(0),
234 fHistoEleOmegaMassWS(0),
235 fHistoEleOmegaMassRSMix(0),
236 fHistoEleOmegaMassWSMix(0),
237 fHistoEleOmegaMassvsElePtRS(0),
238 fHistoEleOmegaMassvsElePtWS(0),
239 fHistoEleOmegaMassvsElePtRSMix(0),
240 fHistoEleOmegaMassvsElePtWSMix(0),
245 fHistoEleOmegaMassMCS(0),
246 fHistoEleOmegaMassMCGen(0),
247 fHistoEleOmegaMassvsElePtMCS(0),
248 fHistoEleOmegaMassvsElePtMCGen(0),
251 fHistoElePtvsEtaRS(0),
252 fHistoElePtvsEtaWS(0),
253 fHistoElePtvsEtaRSMix(0),
254 fHistoElePtvsEtaWSMix(0),
255 fHistoElePtvsEtaMCS(0),
256 fHistoElePtvsEtaMCGen(0),
257 fHistoElePtvsOmegaPtRS(0),
258 fHistoElePtvsOmegaPtWS(0),
259 fHistoElePtvsOmegaPtRSMix(0),
260 fHistoElePtvsOmegaPtWSMix(0),
261 fHistoElePtvsOmegaPtMCS(0),
262 fHistoElePtvsOmegaPtMCGen(0),
263 fHistoElePtvsd0RS(0),
264 fHistoElePtvsd0WS(0),
265 fHistoElePtvsd0RSMix(0),
266 fHistoElePtvsd0WSMix(0),
267 fHistoElePtvsd0MCS(0),
270 fHistoBachPtMCGen(0),
273 fHistoOmegaMassvsPt(0),
274 fHistoOmegaMassvsPtMCS(0),
275 fHistoOmegaMassvsPtMCGen(0),
276 fHistoElectronTPCPID(0),
277 fHistoElectronTOFPID(0),
278 fHistoElectronTPCSelPID(0),
279 fHistoElectronTOFSelPID(0),
280 fHistoElectronTPCPIDSelTOF(0),
281 fHistoElectronTPCPIDSelTOFSmallEta(0),
282 fHistoElectronTPCPIDSelTOFLargeEta(0),
284 fHistonEvtvsRunNumber(0),
285 fHistonElevsRunNumber(0),
286 fHistonOmegavsRunNumber(0),
288 fNumberOfEventsForMixing (5),
299 Info(
"AliAnalysisTaskSEOmegac2eleOmegafromAODtracks",
"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());
316 Info(
"~AliAnalysisTaskSEOmegac2eleOmegafromAODtracks",
"Calling Destructor");
368 if (fDebug > 1) AliInfo(
"Init");
387 AliError(
"NO EVENT FOUND!");
399 AliKFParticle::SetField(
fBzkG);
400 if (TMath::Abs(
fBzkG)<0.001) {
411 TClonesArray *mcArray = 0;
412 AliAODMCHeader *mcHeader=0;
415 mcArray =
dynamic_cast<TClonesArray*
>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
417 AliError(
"Could not find Monte-Carlo in AOD");
423 mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
425 AliError(
"AliAnalysisTaskSEOmegac2eleOmegafromAODtracks::UserExec: MC header branch not found!\n");
430 Double_t zMCVertex = mcHeader->GetVtxZ();
432 AliDebug(2,Form(
"Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,
fAnalCuts->
GetMaxVtxZ()));
445 fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
450 fVtx1->GetCovarianceMatrix(cov);
451 fV1 =
new AliESDVertex(pos,cov,100.,100,
fVtx1->GetName());
455 if(!fIsTriggerNotOK)
fCEvents->Fill(3);
462 fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
463 fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
464 fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
465 fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
466 fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
480 AliCentrality *cent = aodEvent->GetCentrality();
481 fCentrality = cent->GetCentralityPercentile(
"V0M");
485 if(fCentrality<0.||fCentrality>100.-0.0000001) {
492 Int_t runnumber_offset = 0;
493 Int_t runnumber = aodEvent->GetRunNumber();
494 if(runnumber<=117222&&runnumber>=114931){
495 runnumber_offset = 114931;
496 }
else if(runnumber<=120829&&runnumber>=119159){
497 runnumber_offset = 119159;
498 }
else if(runnumber<=126437&&runnumber>=122374){
499 runnumber_offset = 122374;
500 }
else if(runnumber<=130840&&runnumber>=127712){
501 runnumber_offset = 127712;
502 }
else if(runnumber<=195483&&runnumber>=195344){
503 runnumber_offset = 195344;
504 }
else if(runnumber<=195677&&runnumber>=195529){
505 runnumber_offset = 195529;
506 }
else if(runnumber<=170593&&runnumber>=167902){
507 runnumber_offset = 167902;
546 AliAnalysisTaskSE::Terminate();
550 AliError(
"fOutput not available");
556 AliError(
"fOutputAll not available");
599 TString normName=
"NormalizationCounter";
600 AliAnalysisDataContainer *cont = GetOutputSlot(8)->GetContainer();
601 if(cont)normName=(
TString)cont->GetName();
613 fEventBuffer[i]=
new TTree(Form(
"EventBuffer_%d",i),
"Temporary buffer for event mixing");
637 if(fDoEventMixing && fElectronTracks) fElectronTracks->Delete();
639 Int_t nCascs= aodEvent->GetNumberOfCascades();
640 Int_t nTracks= aodEvent->GetNumberOfTracks();
642 Bool_t seleTrkFlags[nTracks];
644 SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags,mcArray);
646 Bool_t seleCascFlags[nCascs];
648 SelectCascade(aodEvent,nCascs,nSeleCasc,seleCascFlags,mcArray);
650 Int_t runnumber_offset = 0;
651 Int_t runnumber = aodEvent->GetRunNumber();
652 if(runnumber<=117222&&runnumber>=114931){
653 runnumber_offset = 114931;
654 }
else if(runnumber<=120829&&runnumber>=119159){
655 runnumber_offset = 119159;
656 }
else if(runnumber<=126437&&runnumber>=122374){
657 runnumber_offset = 122374;
658 }
else if(runnumber<=130840&&runnumber>=127712){
659 runnumber_offset = 127712;
660 }
else if(runnumber<=195483&&runnumber>=195344){
661 runnumber_offset = 195344;
662 }
else if(runnumber<=195677&&runnumber>=195529){
663 runnumber_offset = 195529;
664 }
else if(runnumber<=170593&&runnumber>=167902){
665 runnumber_offset = 167902;
667 fHistonElevsRunNumber->Fill(runnumber-runnumber_offset,nSeleTrks);
668 fHistonOmegavsRunNumber->Fill(runnumber-runnumber_offset,nSeleCasc);
673 for (
Int_t icasc = 0; icasc<nCascs; icasc++) {
674 if(!seleCascFlags[icasc])
continue;
675 AliAODcascade *casc = aodEvent->GetCascade(icasc);
678 AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
679 AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
680 AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
685 for (
Int_t itrk = 0; itrk<nTracks; itrk++) {
686 if(!seleTrkFlags[itrk])
continue;
687 AliAODTrack *trk = (AliAODTrack*)aodEvent->GetTrack(itrk);
688 if(trk->GetID()<0)
continue;
690 Int_t cpid = cptrack->GetID();
691 Int_t cnid = cntrack->GetID();
692 Int_t cbid = cbtrack->GetID();
693 Int_t lpid = trk->GetID();
694 if((cpid==lpid)||(cnid==lpid)||(cbid==lpid))
continue;
698 AliAODVertex *secVert = ReconstructSecondaryVertex(casc,trk,aodEvent);
699 if(!secVert)
continue;
706 FillROOTObjects(exobj, casc,trk,mcArray,
false);
708 exobj->GetSecondaryVtx()->RemoveDaughters();
710 delete exobj;exobj=NULL;
716 fEventInfo->SetString(Form(
"Ev%d_esd%d_E%d",AliAnalysisManager::GetAnalysisManager()->GetNcalls(),((AliAODHeader*)aodEvent->GetHeader())->GetEventNumberESDFile(),fElectronTracks->GetEntries()));
717 Int_t ind=GetPoolIndex(fVtxZ,fCentrality);
718 if(ind>=0 && ind<fNOfPools){
719 if(fEventBuffer[ind]->GetEntries() >= fNumberOfEventsForMixing){
720 DoEventMixingWithPools(ind,aodEvent,seleCascFlags);
723 fEventBuffer[ind]->Fill();
736 const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName();
742 fCandidateVariableNames[ 0]=
"Centrality";
743 fCandidateVariableNames[ 1]=
"InvMassEleOmega";
744 fCandidateVariableNames[ 2]=
"EleOmegaPt";
745 fCandidateVariableNames[ 3]=
"EleOmegaPx";
746 fCandidateVariableNames[ 4]=
"EleOmegaPy";
747 fCandidateVariableNames[ 5]=
"EleOmegaPz";
748 fCandidateVariableNames[ 6]=
"ElePx";
749 fCandidateVariableNames[ 7]=
"ElePy";
750 fCandidateVariableNames[ 8]=
"ElePz";
751 fCandidateVariableNames[ 9]=
"OmegaPx";
752 fCandidateVariableNames[10]=
"OmegaPy";
753 fCandidateVariableNames[11]=
"OmegaPz";
754 fCandidateVariableNames[12]=
"OmegaCharge";
755 fCandidateVariableNames[13]=
"MassOmega";
756 fCandidateVariableNames[14]=
"MassLambda";
757 fCandidateVariableNames[15]=
"Eled0";
758 fCandidateVariableNames[16]=
"Omegad0";
759 fCandidateVariableNames[17]=
"nSigmaTPCele";
760 fCandidateVariableNames[18]=
"nSigmaTOFele";
761 fCandidateVariableNames[19]=
"nSigmaTPCpr_etrk";
762 fCandidateVariableNames[20]=
"nSigmaTOFpr_etrk";
763 fCandidateVariableNames[21]=
"nSigmaTPCka_etrk";
764 fCandidateVariableNames[22]=
"nSigmaTOFka_etrk";
765 fCandidateVariableNames[23]=
"nSigmaTPCv0pr";
766 fCandidateVariableNames[24]=
"nSigmaTOFv0pr";
767 fCandidateVariableNames[25]=
"nSigmaTPCv0pi";
768 fCandidateVariableNames[26]=
"nSigmaTOFv0pi";
769 fCandidateVariableNames[27]=
"nSigmaTPCbachka";
770 fCandidateVariableNames[28]=
"nSigmaTOFbachka";
771 fCandidateVariableNames[29]=
"EleCharge";
772 fCandidateVariableNames[30]=
"Mixing";
773 fCandidateVariableNames[31]=
"DcaOmegaDaughters";
774 fCandidateVariableNames[32]=
"DcaV0Daughters";
775 fCandidateVariableNames[33]=
"DecayLengthXi";
776 fCandidateVariableNames[34]=
"CosPointingAngleXi";
777 fCandidateVariableNames[35]=
"DcaV0toPrimVertex";
778 fCandidateVariableNames[36]=
"DcaPostoPrimVertex";
779 fCandidateVariableNames[37]=
"DcaNegtoPrimVertex";
780 fCandidateVariableNames[38]=
"DcaBachtoPrimVertex";
781 fCandidateVariableNames[39]=
"DecayLengthV0";
782 fCandidateVariableNames[40]=
"CosPointingAngleV0";
784 fCandidateVariableNames[41]=
"mcpdgomegac";
785 fCandidateVariableNames[42]=
"mclabomegac";
786 fCandidateVariableNames[43]=
"mcomegacpx";
787 fCandidateVariableNames[44]=
"mcomegacpy";
788 fCandidateVariableNames[45]=
"mcomegacpz";
789 fCandidateVariableNames[46]=
"mcelepx";
790 fCandidateVariableNames[47]=
"mcelepy";
791 fCandidateVariableNames[48]=
"mcelepz";
792 fCandidateVariableNames[49]=
"mccascpx";
793 fCandidateVariableNames[50]=
"mccascpy";
794 fCandidateVariableNames[51]=
"mccascpz";
796 fCandidateVariableNames[52]=
"mcpdgele";
797 fCandidateVariableNames[53]=
"mcpdgcasc";
798 fCandidateVariableNames[54]=
"mcpdgmomele";
799 fCandidateVariableNames[55]=
"mcpdgmomcasc";
800 fCandidateVariableNames[56]=
"mcpdggrmomele";
801 fCandidateVariableNames[57]=
"mcpdggrmomcasc";
802 fCandidateVariableNames[58]=
"mcngenele";
803 fCandidateVariableNames[59]=
"mcngencasc";
805 fCandidateVariableNames[60]=
"nSigmaTPCpi_etrk";
806 fCandidateVariableNames[61]=
"nSigmaTOFpi_etrk";
807 fCandidateVariableNames[62]=
"MassXi";
809 fCandidateVariableNames[63]=
"EvNumber";
827 for(
Int_t i=0;i<64;i++){
832 AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
833 AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
834 AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
836 fVtx1->GetXYZ(posVtx);
840 UInt_t pdgdg[2]={11,3334};
854 if(casc->ChargeXi()<0)
890 if(casc->ChargeXi()>0){
925 AliAODMCParticle *mcomegac = 0;
926 AliAODMCParticle *mcele = 0;
927 AliAODMCParticle *mccasc = 0;
928 Int_t mclabomegac = 0;
929 Int_t mcpdgele_array[100];
930 Int_t mcpdgcasc_array[100];
931 Int_t mclabelele_array[100];
932 Int_t mclabelcasc_array[100];
933 Int_t mcngen_ele = -9999;
934 Int_t mcngen_casc = -9999;
938 mclabomegac =
MatchToMC(exobj,mcArray,mcpdgele_array, mcpdgcasc_array,mclabelele_array,mclabelcasc_array,mcngen_ele,mcngen_casc);
941 mcomegac = (AliAODMCParticle*) mcArray->At(mclabomegac);
942 if(mclabelele_array[0]>=0)
943 mcele = (AliAODMCParticle*) mcArray->At(mclabelele_array[0]);
944 if(mclabelcasc_array[0]>=0)
945 mccasc = (AliAODMCParticle*) mcArray->At(mclabelcasc_array[0]);
984 cont[0] = exobj->InvMass(2,pdgdg);
985 cont[1] = exobj->Pt();
990 cont2[0] = exobj->InvMass(2,pdgdg);
991 cont2[1] = trk->Pt();
995 cont_eleptvseta[0] = trk->Pt();
996 cont_eleptvseta[1] = trk->Eta();
1000 cont_eleptvsomegapt[0] = trk->Pt();
1001 cont_eleptvsomegapt[1] = sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY());
1005 cont_eleptvsd0[0] = trk->Pt();
1006 cont_eleptvsd0[1] = exobj->Getd0Prong(0);
1010 if(trk->Charge()*casc->ChargeXi()<0){
1030 if(trk->Charge()*casc->ChargeXi()<0){
1053 Int_t pdgcode = mcomegac->GetPdgCode();
1054 if(abs(pdgcode)==4332 && abs(mcpdgele_array[1])==4332 && abs(mcpdgcasc_array[1])==4332){
1078 const char* nameoutput = GetOutputSlot(5)->GetContainer()->GetName();
1084 fCandidateVariableNames[ 0]=
"ElePx";
1085 fCandidateVariableNames[ 1]=
"ElePy";
1086 fCandidateVariableNames[ 2]=
"ElePz";
1087 fCandidateVariableNames[ 3]=
"TPCChi2overNDF";
1088 fCandidateVariableNames[ 4]=
"ITSNcls";
1089 fCandidateVariableNames[ 5]=
"TPCNcls";
1090 fCandidateVariableNames[ 6]=
"TPCNclsPID";
1091 fCandidateVariableNames[ 7]=
"TPCNclsRatio";
1092 fCandidateVariableNames[ 8]=
"d0R";
1093 fCandidateVariableNames[ 9]=
"d0Z";
1094 fCandidateVariableNames[10]=
"ITSClusterMap";
1095 fCandidateVariableNames[11]=
"nSigmaTPCele";
1096 fCandidateVariableNames[12]=
"nSigmaTOFele";
1097 fCandidateVariableNames[13]=
"nSigmaTPCpi";
1098 fCandidateVariableNames[14]=
"nSigmaTPCka";
1099 fCandidateVariableNames[15]=
"nSigmaTPCpr";
1100 fCandidateVariableNames[16]=
"EvNumber";
1101 fCandidateVariableNames[17]=
"EleCharge";
1102 fCandidateVariableNames[18]=
"Centrality";
1123 Int_t labEle = trk->GetLabel();
1125 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labEle);
1127 Int_t pdgEle = mcetrk->GetPdgCode();
1128 if(abs(pdgEle)==11){
1137 for(
Int_t i=0;i<19;i++){
1148 if(trk->GetTPCNclsF()>0)
1152 trk->PropagateToDCA(
fVtx1,
fBzkG,kVeryBig,d0z0,covd0z0);
1156 Int_t itsmap = trk->GetITSClusterMap();
1159 Bool_t spdfirst = (itsmap & bit1) == bit1;
1160 Bool_t spdsecond = (itsmap & bit2) == bit2;
1191 const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName();
1197 fCandidateVariableNames[ 0]=
"Centrality";
1198 fCandidateVariableNames[ 1]=
"InvMassOmega";
1199 fCandidateVariableNames[ 2]=
"OmegaPx";
1200 fCandidateVariableNames[ 3]=
"OmegaPy";
1201 fCandidateVariableNames[ 4]=
"OmegaPz";
1202 fCandidateVariableNames[ 5]=
"InvMassLambda";
1203 fCandidateVariableNames[ 6]=
"DcaOmegaDaughters";
1204 fCandidateVariableNames[ 7]=
"DcaV0Daughters";
1205 fCandidateVariableNames[ 8]=
"DecayLengthOmega";
1206 fCandidateVariableNames[ 9]=
"CosPointingAngleOmega";
1207 fCandidateVariableNames[10]=
"DcaV0toPrimVertex";
1208 fCandidateVariableNames[11]=
"DcaPostoPrimVertex";
1209 fCandidateVariableNames[12]=
"DcaNegtoPrimVertex";
1210 fCandidateVariableNames[13]=
"DcaBachtoPrimVertex";
1211 fCandidateVariableNames[14]=
"DecayLengthV0";
1212 fCandidateVariableNames[15]=
"CosPointingAngleV0";
1213 fCandidateVariableNames[16]=
"OmegaCharge";
1229 fHistoXiMassvsPt->Fill(casc->MassXi(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
1230 fHistoOmegaMassvsPt->Fill(casc->MassOmega(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
1233 Int_t pdgDgcasc[2]={321,3122};
1234 Int_t pdgDgv0[2]={2212,211};
1237 fHistoOmegaMassvsPtMCS->Fill(casc->MassOmega(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
1244 for(
Int_t i=0;i<16;i++){
1248 fVtx1->GetXYZ(posVtx);
1255 if(casc->ChargeXi()<0)
1282 const char* nameoutput = GetOutputSlot(7)->GetContainer()->GetName();
1288 fCandidateVariableNames[ 0]=
"Centrality";
1289 fCandidateVariableNames[ 1]=
"DecayType";
1290 fCandidateVariableNames[ 2]=
"LcPx";
1291 fCandidateVariableNames[ 3]=
"LcPy";
1292 fCandidateVariableNames[ 4]=
"LcPz";
1293 fCandidateVariableNames[ 5]=
"ElePx";
1294 fCandidateVariableNames[ 6]=
"ElePy";
1295 fCandidateVariableNames[ 7]=
"ElePz";
1296 fCandidateVariableNames[ 8]=
"CascPx";
1297 fCandidateVariableNames[ 9]=
"CascPy";
1298 fCandidateVariableNames[10]=
"CascPz";
1299 fCandidateVariableNames[11]=
"PdgCode";
1300 fCandidateVariableNames[12]=
"ElePdgCode";
1301 fCandidateVariableNames[13]=
"CascPdgCode";
1315 if(!mcepart)
return;
1316 if(!mccascpart)
return;
1318 for(
Int_t i=0;i<14;i++){
1340 Double_t eE = sqrt(epx*epx+epy*epy+epz*epz+0.000511*0.000511);
1341 Double_t cascpx = mccascpart->Px();
1342 Double_t cascpy = mccascpart->Py();
1343 Double_t cascpz = mccascpart->Pz();
1344 Double_t cascE = sqrt(cascpx*cascpx+cascpy*cascpy+cascpz*cascpz+1.67245*1.67245);
1346 Double_t InvMassEleOmega = sqrt(pow(eE+cascE,2)-pow(epx+cascpx,2)-pow(epy+cascpy,2)-pow(epz+cascpz,2));
1349 cont[0] = InvMassEleOmega;
1350 cont[1] = mcpart->Pt();
1353 cont2[0] = InvMassEleOmega;
1354 cont2[1] = mcepart->Pt();
1357 cont_eleptvseta[0] = mcepart->Pt();
1358 cont_eleptvseta[1] = mcepart->Eta();
1361 cont_eleptvsomegapt[0] = mcepart->Pt();
1362 cont_eleptvsomegapt[1] = mccascpart->Pt();
1367 esdcuts->GetEtaRange(etamin,etamax);
1371 if(fabs(mcepart->Eta())<etamax){
1373 if(InvMassEleOmega<2.7){
1391 fCEvents =
new TH1F(
"fCEvents",
"conter",18,-0.5,17.5);
1393 fCEvents->GetXaxis()->SetBinLabel(1,
"X1");
1394 fCEvents->GetXaxis()->SetBinLabel(2,
"Analyzed events");
1395 fCEvents->GetXaxis()->SetBinLabel(3,
"AliAODVertex exists");
1396 fCEvents->GetXaxis()->SetBinLabel(4,
"TriggerOK");
1397 fCEvents->GetXaxis()->SetBinLabel(5,
"IsEventSelected");
1398 fCEvents->GetXaxis()->SetBinLabel(6,
"CascadesHF exists");
1399 fCEvents->GetXaxis()->SetBinLabel(7,
"MCarray exists");
1400 fCEvents->GetXaxis()->SetBinLabel(8,
"MCheader exists");
1401 fCEvents->GetXaxis()->SetBinLabel(9,
"triggerClass!=CINT1");
1402 fCEvents->GetXaxis()->SetBinLabel(10,
"triggerMask!=kAnyINT");
1403 fCEvents->GetXaxis()->SetBinLabel(11,
"triggerMask!=kAny");
1404 fCEvents->GetXaxis()->SetBinLabel(12,
"vtxTitle.Contains(Z)");
1405 fCEvents->GetXaxis()->SetBinLabel(13,
"vtxTitle.Contains(3D)");
1406 fCEvents->GetXaxis()->SetBinLabel(14,
"vtxTitle.Doesn'tContain(Z-3D)");
1408 fCEvents->GetXaxis()->SetBinLabel(16,
"!IsEventSelected");
1409 fCEvents->GetXaxis()->SetBinLabel(17,
"triggerMask!=kAnyINT || triggerClass!=CINT1");
1412 fCEvents->GetYaxis()->SetTitle(
"counts");
1414 fHTrigger =
new TH1F(
"fHTrigger",
"counter",18,-0.5,17.5);
1416 fHTrigger->GetXaxis()->SetBinLabel(1,
"X1");
1417 fHTrigger->GetXaxis()->SetBinLabel(2,
"kMB");
1418 fHTrigger->GetXaxis()->SetBinLabel(3,
"kSemiCentral");
1419 fHTrigger->GetXaxis()->SetBinLabel(4,
"kCentral");
1420 fHTrigger->GetXaxis()->SetBinLabel(5,
"kINT7");
1421 fHTrigger->GetXaxis()->SetBinLabel(6,
"kEMC7");
1423 fHTrigger->GetXaxis()->SetBinLabel(8,
"kMB|kSemiCentral|kCentral");
1424 fHTrigger->GetXaxis()->SetBinLabel(9,
"kINT7|kEMC7");
1425 fHTrigger->GetXaxis()->SetBinLabel(11,
"kMB&kSemiCentral");
1426 fHTrigger->GetXaxis()->SetBinLabel(12,
"kMB&kCentral");
1427 fHTrigger->GetXaxis()->SetBinLabel(13,
"kINT7&kEMC7");
1429 fHCentrality =
new TH1F(
"fHCentrality",
"conter",100,0.,100.);
1447 Int_t bins_base[3]= {16 ,100 ,10};
1448 Double_t xmin_base[3]={1.6,0 ,0.00};
1449 Double_t xmax_base[3]={3.6,10. ,100};
1450 fHistoEleOmegaMass =
new THnSparseF(
"fHistoEleOmegaMass",
"",3,bins_base,xmin_base,xmax_base);
1452 fHistoEleOmegaMassRS =
new THnSparseF(
"fHistoEleOmegaMassRS",
"",3,bins_base,xmin_base,xmax_base);
1454 fHistoEleOmegaMassWS =
new THnSparseF(
"fHistoEleOmegaMassWS",
"",3,bins_base,xmin_base,xmax_base);
1470 fHistoElePtRS=
new TH2F(
"fHistoElePtRS",
"Right-sign e pt",100,0.,10.,10,0.,100.);
1472 fHistoElePtWS=
new TH2F(
"fHistoElePtWS",
"Wrong-sign e pt",100,0.,10.,10,0.,100.);
1492 Int_t bins_eleptvseta[3]= {50,20 ,10};
1493 Double_t xmin_eleptvseta[3]={0.,-1. ,0.0};
1494 Double_t xmax_eleptvseta[3]={5.,1. ,100};
1496 fHistoElePtvsEtaRS =
new THnSparseF(
"fHistoElePtvsEtaRS",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1498 fHistoElePtvsEtaWS =
new THnSparseF(
"fHistoElePtvsEtaWS",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1500 fHistoElePtvsEtaRSMix =
new THnSparseF(
"fHistoElePtvsEtaRSMix",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1502 fHistoElePtvsEtaWSMix =
new THnSparseF(
"fHistoElePtvsEtaWSMix",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1504 fHistoElePtvsEtaMCS =
new THnSparseF(
"fHistoElePtvsEtaMCS",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1506 fHistoElePtvsEtaMCGen =
new THnSparseF(
"fHistoElePtvsEtaMCGen",
"",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
1509 Int_t bins_eleptvsomegapt[3]= {50,20 ,10};
1510 Double_t xmin_eleptvsomegapt[3]={0.,0. ,0.0};
1511 Double_t xmax_eleptvsomegapt[3]={5.,5. ,100};
1513 fHistoElePtvsOmegaPtRS =
new THnSparseF(
"fHistoElePtvsOmegaPtRS",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1515 fHistoElePtvsOmegaPtWS =
new THnSparseF(
"fHistoElePtvsOmegaPtWS",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1517 fHistoElePtvsOmegaPtRSMix =
new THnSparseF(
"fHistoElePtvsOmegaPtRSMix",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1519 fHistoElePtvsOmegaPtWSMix =
new THnSparseF(
"fHistoElePtvsOmegaPtWSMix",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1521 fHistoElePtvsOmegaPtMCS =
new THnSparseF(
"fHistoElePtvsOmegaPtMCS",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1523 fHistoElePtvsOmegaPtMCGen =
new THnSparseF(
"fHistoElePtvsOmegaPtMCGen",
"",3,bins_eleptvsomegapt,xmin_eleptvsomegapt,xmax_eleptvsomegapt);
1526 Int_t bins_eleptvsd0[3]= {50 ,50 ,10};
1527 Double_t xmin_eleptvsd0[3]={0.,-0.2 ,0.0};
1528 Double_t xmax_eleptvsd0[3]={5.,0.2 ,100};
1530 fHistoElePtvsd0RS =
new THnSparseF(
"fHistoElePtvsd0RS",
"",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
1532 fHistoElePtvsd0WS =
new THnSparseF(
"fHistoElePtvsd0WS",
"",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
1534 fHistoElePtvsd0RSMix =
new THnSparseF(
"fHistoElePtvsd0RSMix",
"",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
1536 fHistoElePtvsd0WSMix =
new THnSparseF(
"fHistoElePtvsd0WSMix",
"",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
1538 fHistoElePtvsd0MCS =
new THnSparseF(
"fHistoElePtvsd0MCS",
"",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
1544 fHistoBachPt =
new TH1F(
"fHistoBachPt",
"Bachelor p_{T}",100,0.0,5.0);
1546 fHistoBachPtMCS =
new TH1F(
"fHistoBachPtMCS",
"Bachelor p_{T}",100,0.0,5.0);
1550 fHistod0Bach =
new TH1F(
"fHistod0Bach",
"Bachelor d_{0}",100,-0.5,0.5);
1593 if(!casc)
return 0x0;
1594 if(!part)
return 0x0;
1595 if(!aod)
return 0x0;
1600 AliAODVertex *primVertexAOD;
1601 Bool_t unsetvtx = kFALSE;
1605 primVertexAOD =
fVtx1;
1610 primVertexAOD =
fVtx1;
1612 if(!primVertexAOD)
return 0x0;
1613 Double_t posprim[3]; primVertexAOD->GetXYZ(posprim);
1618 AliESDtrack *esdtrack =
new AliESDtrack((AliVTrack*)part);
1621 xyz[0]=casc->DecayVertexXiX();
1622 xyz[1]=casc->DecayVertexXiY();
1623 xyz[2]=casc->DecayVertexXiZ();
1624 pxpypz[0]=casc->MomXiX();
1625 pxpypz[1]=casc->MomXiY();
1626 pxpypz[2]=casc->MomXiZ();
1627 casc->GetCovarianceXYZPxPyPz(cv);
1628 sign=casc->ChargeXi();
1629 AliExternalTrackParam *trackCasc =
new AliExternalTrackParam(xyz,pxpypz,cv,sign);
1632 Double_t dca = esdtrack->GetDCA(trackCasc,
fBzkG,xdummy,ydummy);
1639 Double_t d0z0bach[2],covd0z0bach[3];
1640 if(sqrt(pow(secVert->GetX(),2)+pow(secVert->GetY(),2))<1.){
1641 part->PropagateToDCA(secVert,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1642 trackCasc->PropagateToDCA(secVert,
fBzkG,kVeryBig);
1644 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1645 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig);
1647 Double_t momcasc_new[3]={-9999,-9999,-9999.};
1648 trackCasc->GetPxPyPz(momcasc_new);
1651 px[0] = part->Px(); py[0] = part->Py(); pz[0] = part->Pz();
1652 px[1] = momcasc_new[0]; py[1] = momcasc_new[1]; pz[1] = momcasc_new[2];
1659 part->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0bach,covd0z0bach);
1661 d0err[0] = TMath::Sqrt(covd0z0bach[0]);
1663 Double_t d0z0casc[2],covd0z0casc[3];
1664 trackCasc->PropagateToDCA(primVertexAOD,
fBzkG,kVeryBig,d0z0casc,covd0z0casc);
1666 d0err[1] = TMath::Sqrt(covd0z0casc[0]);
1675 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1676 if(esdtrack)
delete esdtrack;
1677 if(trackCasc)
delete trackCasc;
1685 theCascade->GetSecondaryVtx()->AddDaughter(part);
1686 theCascade->GetSecondaryVtx()->AddDaughter(casc);
1689 if(unsetvtx)
delete primVertexAOD; primVertexAOD=NULL;
1690 if(esdtrack)
delete esdtrack;
1691 if(trackCasc)
delete trackCasc;
1706 AliESDtrack *cptrk1 =
new AliESDtrack((AliVTrack*)trk);
1707 TrackArray->AddAt(cptrk1,0);
1709 AliESDtrack *cascptrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(0));
1710 TrackArray->AddAt(cascptrack,1);
1711 AliESDtrack *cascntrack =
new AliESDtrack((AliVTrack*)casc->GetDaughter(1));
1712 TrackArray->AddAt(cascntrack,2);
1713 AliESDtrack *cascbtrack =
new AliESDtrack((AliVTrack*)casc->GetDecayVertexXi()->GetDaughter(0));
1714 TrackArray->AddAt(cascbtrack,3);
1718 for(
Int_t i=0;i<4;i++)
1720 AliESDtrack *tesd = (AliESDtrack*)TrackArray->UncheckedAt(i);
1723 TrackArray->Clear();
1738 Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
1739 Bool_t fRmTrksFromPrimVtx = kFALSE;
1741 AliESDVertex *vertexESD = 0;
1742 AliAODVertex *vertexAOD = 0;
1747 if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
1750 vertexESD =
new AliESDVertex(*
fV1);
1755 Int_t nTrks = trkArray->GetEntriesFast();
1756 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1758 if(fRecoPrimVtxSkippingTrks) {
1761 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraint")) {
1763 event->GetDiamondCovXY(diamondcovxy);
1764 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1765 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1766 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1767 vertexer->SetVtxStart(diamond);
1768 delete diamond; diamond=NULL;
1769 if(strstr(
fV1->GetTitle(),
"VertexerTracksWithConstraintOnlyFitter"))
1770 vertexer->SetOnlyFitter();
1772 Int_t skipped[1000];
1773 Int_t nTrksToSkip=0,id;
1774 AliExternalTrackParam *t = 0;
1775 for(
Int_t i=0; i<nTrks; i++) {
1776 t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
1777 id = (
Int_t)t->GetID();
1779 skipped[nTrksToSkip++] = id;
1784 for(
Int_t j=0; j<
event->GetNumberOfTracks(); j++) {
1785 AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
1786 if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
1787 id = (
Int_t)vtrack->GetID();
1789 skipped[nTrksToSkip++] = id;
1792 for(
Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
1794 vertexer->SetSkipTracks(nTrksToSkip,skipped);
1795 vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1797 }
else if(fRmTrksFromPrimVtx && nTrks>0) {
1802 AliESDtrack *esdTrack = 0;
1804 for(
Int_t i=0; i<nTrks; i++) {
1805 t = (AliESDtrack*)trkArray->UncheckedAt(i);
1806 esdTrack =
new AliESDtrack(*t);
1807 rmArray.AddLast(esdTrack);
1808 if(esdTrack->GetID()>=0) {
1809 rmId[i]=(
UShort_t)esdTrack->GetID();
1814 Float_t diamondxy[2]={
static_cast<Float_t>(
event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
1815 vertexESD = vertexer->RemoveTracksFromVertex(
fV1,&rmArray,rmId,diamondxy);
1816 delete [] rmId; rmId=NULL;
1821 delete vertexer; vertexer=NULL;
1822 if(!vertexESD)
return vertexAOD;
1823 if(vertexESD->GetNContributors()<=0) {
1825 delete vertexESD; vertexESD=NULL;
1834 vertexESD->GetXYZ(pos);
1835 vertexESD->GetCovMatrix(cov);
1836 chi2perNDF = vertexESD->GetChi2toNDF();
1837 delete vertexESD; vertexESD=NULL;
1839 vertexAOD =
new AliAODVertex(pos,cov,chi2perNDF);
1851 AliAODVertex *primVertexAOD;
1852 Bool_t unsetvtx = kFALSE;
1856 primVertexAOD =
fVtx1;
1861 primVertexAOD =
fVtx1;
1863 if(!primVertexAOD)
return 0x0;
1865 AliESDVertex * vertexESD =
new AliESDVertex(*
fV1);
1868 vertexESD->GetXYZ(pos);
1869 vertexESD->GetCovMatrix(cov);
1870 chi2perNDF = vertexESD->GetChi2toNDF();
1871 delete vertexESD; vertexESD=NULL;
1873 AliAODVertex *secVert =
new AliAODVertex(pos,cov,chi2perNDF);
1883 for(
Int_t i=0;i<100;i++){
1884 pdgarray_ele[i] = -9999;
1885 labelarray_ele[i] = -9999;
1886 pdgarray_casc[i] = -9999;
1887 labelarray_casc[i] = -9999;
1892 AliVTrack *trk =
dynamic_cast<AliVTrack*
>(exobj->
GetBachelor());
1894 Int_t labEle = trk->GetLabel();
1895 if(labEle<0)
return -1;
1896 AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labEle);
1897 if(!mcetrk)
return -1;
1898 labelarray_ele[0] = labEle;
1899 pdgarray_ele[0] = mcetrk->GetPdgCode();
1902 AliAODMCParticle *mcprimele=0;
1904 while(mcprimele->GetMother()>=0) {
1905 Int_t labprim_ele=mcprimele->GetMother();
1906 AliAODMCParticle *tmcprimele = (AliAODMCParticle*)mcArray->At(labprim_ele);
1911 mcprimele = tmcprimele;
1912 pdgarray_ele[ngen_ele] = mcprimele->GetPdgCode();
1913 labelarray_ele[ngen_ele] = labprim_ele;
1915 if(ngen_ele==100)
break;
1918 AliAODcascade *theCascade =
dynamic_cast<AliAODcascade*
>(exobj->
GetCascade());
1919 if(!theCascade)
return -1;
1921 Int_t pdgDgcasc[2]={321,3122};
1922 Int_t pdgDgv0[2]={2212,211};
1924 if(labcasc<0)
return -1;
1926 AliAODMCParticle *mccasc = (AliAODMCParticle*)mcArray->At(labcasc);
1927 if(!mccasc)
return -1;
1928 labelarray_casc[0] = labcasc;
1929 pdgarray_casc[0] = mccasc->GetPdgCode();
1932 AliAODMCParticle *mcprimcasc=0;
1933 mcprimcasc = mccasc;
1934 while(mcprimcasc->GetMother()>=0) {
1935 Int_t labprim_casc=mcprimcasc->GetMother();
1936 AliAODMCParticle *tmcprimcasc = (AliAODMCParticle*)mcArray->At(labprim_casc);
1941 mcprimcasc = tmcprimcasc;
1942 pdgarray_casc[ngen_casc] = mcprimcasc->GetPdgCode();
1943 labelarray_casc[ngen_casc] = labprim_casc;
1945 if(ngen_casc==100)
break;
1948 Bool_t same_flag = kFALSE;
1949 Int_t matchedlabel=-9999;
1950 for(
Int_t iemc=0;iemc<ngen_ele;iemc++){
1951 for(
Int_t ivmc=0;ivmc<ngen_casc;ivmc++){
1952 if(labelarray_ele[iemc]==labelarray_casc[ivmc]){
1954 matchedlabel = labelarray_ele[iemc];
1958 if(same_flag)
break;
1961 return matchedlabel;
1971 AliAODTrack *cptrack = (AliAODTrack*) theCascade->GetDaughter(0);
1972 if(!cptrack)
return -1;
1973 Int_t label_p = cptrack->GetLabel();
1974 if(label_p<0)
return -1;
1975 AliAODTrack *cntrack = (AliAODTrack*) theCascade->GetDaughter(1);
1976 if(!cntrack)
return -1;
1977 Int_t label_n = cntrack->GetLabel();
1978 if(label_n<0)
return -1;
1979 Int_t labv0 = theCascade->MatchToMC(pdgDgcasc[1],mcArray,2,pdgDgv0);
1980 if(labv0<0)
return -1;
1981 AliAODMCParticle *mcpartv0= (AliAODMCParticle*) mcArray->At(labv0);
1983 AliAODTrack *cbtrack = (AliAODTrack*) theCascade->GetDecayVertexXi()->GetDaughter(0);
1984 if(!cbtrack)
return -1;
1986 Int_t label_b = cbtrack->GetLabel();
1987 if(label_b<0)
return -1;
1989 AliAODMCParticle *mcpartb= (AliAODMCParticle*) mcArray->At(label_b);
1990 Int_t pdgb = TMath::Abs(mcpartb->GetPdgCode());
1991 if(pdgb!=pdgDgcasc[0])
return -1;
1993 AliAODMCParticle *mcmotherv0=mcpartv0;
1994 Bool_t isFromXiv0 = kFALSE;
1995 Int_t labxiv0 = mcmotherv0->GetMother();
1996 if(labxiv0<0)
return -1;
1997 mcmotherv0 = (AliAODMCParticle*) mcArray->At(labxiv0);
1999 Int_t pdg = TMath::Abs(mcmotherv0 ->GetPdgCode());
2000 if(pdg==pdgabscasc){
2004 if(!isFromXiv0)
return -1;
2006 AliAODMCParticle *mcmotherb=mcpartb;
2007 Bool_t isFromXib = kFALSE;
2008 Int_t labxib = mcmotherb->GetMother();
2009 if(labxib<0)
return -1;
2010 mcmotherb = (AliAODMCParticle*) mcArray->At(labxib);
2012 Int_t pdg = TMath::Abs(mcmotherb ->GetPdgCode());
2013 if(pdg==pdgabscasc){
2017 if(!isFromXib)
return -1;
2019 if(labxiv0!=labxib)
return -1;
2031 if(trkEntries==0)
return;
2034 for(
Int_t i=0; i<trkEntries; i++) {
2035 seleFlags[i] = kFALSE;
2038 track = (AliVTrack*)event->GetTrack(i);
2040 if(track->GetID()<0)
continue;
2042 if(!track->GetCovarianceXYZPxPyPz(covtest))
continue;
2044 AliAODTrack *aodt = (AliAODTrack*)track;
2065 if(fabs(nsigma_tofele)<3.){
2068 if(fabs(eleeta)<0.6)
2070 if(fabs(eleeta)>0.6 && fabs(eleeta)<0.8)
2083 fVtx1->GetXYZ(primVtx);
2086 for(
Int_t icasc=0;icasc<nCascs;icasc++)
2088 seleCascFlags[icasc] = kFALSE;
2089 AliAODcascade *casc = ((
AliAODEvent*)event)->GetCascade(icasc);
2093 seleCascFlags[icasc] = kTRUE;
2107 if(theBinZ<0 || theBinZ>=
fNzVtxBins)
return -1;
2109 if(theBinM<0 || theBinM>=
fNCentBins)
return -1;
2117 if(poolIndex<0 || poolIndex>=
fNOfPools)
return;
2119 fEventBuffer[poolIndex]=
new TTree(Form(
"EventBuffer_%d",poolIndex),
"Temporary buffer for event mixing");
2142 TObjString* eventInfo=0x0;
2143 fEventBuffer[poolIndex]->SetBranchAddress(
"earray", &earray);
2144 fEventBuffer[poolIndex]->SetBranchAddress(
"eventInfo",&eventInfo);
2145 fEventBuffer[poolIndex]->SetBranchAddress(
"zVertex", &zVertex);
2146 fEventBuffer[poolIndex]->SetBranchAddress(
"centrality", ¢);
2147 for (
Int_t i=0; i<aodEvent->GetNumberOfCascades(); i++)
2149 if(!seleFlags[i])
continue;
2150 AliAODcascade* casc = aodEvent->GetCascade(i);
2154 fEventBuffer[poolIndex]->GetEvent(iEv + nEvents - fNumberOfEventsForMixing);
2158 Int_t nElectrons=earray1->GetEntries();
2166 for(
Int_t iTr1=0; iTr1<nElectrons; iTr1++){
2167 AliAODTrack* trk1=(AliAODTrack*)earray1->At(iTr1);
2171 if(!secVert)
continue;
2178 TClonesArray *fake = 0;
2181 exobj->GetSecondaryVtx()->RemoveDaughters();
2183 delete exobj;exobj=NULL;
2199 Int_t nmcpart = mcArray->GetEntriesFast();
2200 for(
Int_t i=0;i<nmcpart;i++)
2202 AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(i);
2203 if(TMath::Abs(mcpart->GetPdgCode())==4332){
2206 AliAODMCParticle *mcepart = 0;
2207 AliAODMCParticle *mccascpart = 0;
2208 for(
Int_t idau=mcpart->GetFirstDaughter();idau<mcpart->GetLastDaughter()+1;idau++)
2211 AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
2212 if(!mcdau)
continue;
2213 if(TMath::Abs(mcdau->GetPdgCode())==11){
2217 if(TMath::Abs(mcdau->GetPdgCode())==3334){
2223 Int_t decaytype = -9999;
2224 if(e_flag && xi_flag) decaytype = 0;
2228 if(TMath::Abs(mcpart->GetPdgCode())==11 && mcpart->GetStatus()==1){
2231 esdcuts->GetEtaRange(etamin,etamax);
2232 if(fabs(mcpart->Eta())<etamax)
2235 if(TMath::Abs(mcpart->GetPdgCode())==3334){
2240 if((fabs(mcpart->Y())<rapmax) && (fabs(mcpart->Eta())<etamax))
TH2F * fHistoElePtRSMix
! e spectra (right-sign, mix)
THnSparse * fHistoEleOmegaMassRSMix
! e-Omega mass spectra (right-sign)
THnSparse * fHistoEleOmegaMassvsElePtWSMix
! e-Omega mass-ept spectra (wrong-sign)
virtual Int_t IsSelected(TObject *obj, Int_t selectionLevel)
THnSparse * fHistoEleOmegaMassRS
! e-Omega mass spectra (right-sign)
TH2F * fHistoElePtMCS
! e spectra (Efficiency numerator)
void FillCascROOTObjects(AliAODcascade *casc, TClonesArray *mcArray)
TH2F * fHistoXiMassvsPt
! Xi mass vs pt histogram
THnSparse * fHistoEleOmegaMassMCGen
! e-Omega mass spectra (Efficiency denominator)
THnSparse * fHistoElePtvsOmegaPtMCGen
! e-Omega spectra (wrong-sign) efficiency denominator
THnSparse * fHistoEleOmegaMassvsElePtMCGen
! e-Omega mass-ept spectra (Efficiency denominator)
AliESDVertex * fV1
primary vertex
TH2F * fHistoElectronTPCPIDSelTOFSmallEta
! TPC electron PID after TOF 3 sigma cut (|eta|<0.6)
Bool_t SingleCascadeCuts(AliAODcascade *casc, Double_t *vert)
TH2F * fHistoElePtWS
! e spectra (wrong-sign)
Bool_t GetUseCascadePID()
TList * fOutput
Use MC info.
TH1F * fHTrigger
! Histogram to check Trigger
void DefineTreeVariables()
AliNormalizationCounter * fCounter
!Counter for normalization
Bool_t fReconstructPrimVert
void DefineGeneralHistograms()
Bool_t fIsINT7
Central trigger event.
AliRDHFCutsOmegactoeleOmegafromAODtracks * fAnalCuts
void UnsetOwnPrimaryVtx()
TTree ** fEventBuffer
number of pools
TH2F * fHistoElectronTPCPIDSelTOF
! TPC electron PID after TOF 3 sigma cut
AliAODPidHF * GetPidCascPr() const
TH2F * fHistoOmegaMassvsPt
! Omega mass vs pt histogram
Int_t GetPoolIndex(Double_t zvert, Double_t mult)
TH1F * fHistoBachPt
! Bachelor pT histogram
Int_t fEvNumberCounter
Stores trigger information.
TH1F * fHistonOmegavsRunNumber
! nOmega vs runnumber
void DefineCascTreeVariables()
TH2F * fHistoElectronTOFSelPID
! TOF electron PID after selection
AliAODVertex * CallPrimaryVertex(AliAODcascade *casc, AliAODTrack *trk, AliAODEvent *evt)
Int_t MatchToMCCascade(AliAODcascade *theCascade, Int_t pdgabscasc, Int_t *pdgDgcasc, Int_t *pdgDgv0, TClonesArray *mcArray) const
void DefineAnalysisHistograms()
Int_t fNzVtxBins
maximum number of events to be used in event mixing
virtual void Terminate(Option_t *option)
AliAODRecoCascadeHF * MakeCascadeHF(AliAODcascade *casc, AliAODTrack *trk, AliAODEvent *aod, AliAODVertex *vert, Bool_t mixing)
virtual ~AliAnalysisTaskSEOmegac2eleOmegafromAODtracks()
THnSparse * fHistoElePtvsEtaRS
! e spectra (right-sign)
TH1F * fHCentrality
! Histogram to check Centrality
void GetProdCascEtaRange(Double_t &a, Double_t &b)
void DefineMCTreeVariables()
Bool_t fWriteMCVariableTree
flag to decide whether to write the candidate variables on a tree variables
TH2F * fHistoElectronTPCPID
! TPC electron PID
TTree * fMCVariablesTree
! tree of the candidate variables after track selection on output slot 4
Float_t * fCandidateVariables
EMC7 trigger event.
Double_t GetMaxVtxZ() const
TH2F * fHistoOmegaMassvsPtMCS
! Omega mass vs pt histogram
Double_t fZvtxBins[100]
number of z vrtx bins
THnSparse * fHistoElePtvsd0MCS
! e pt-d0 spectra (right-sign)
TH1F * fHistonElevsRunNumber
! nele vs runnumber
void FillElectronROOTObjects(AliAODTrack *trk, TClonesArray *mcArray)
Bool_t fIsCent
SemiCentral trigger event.
void FillMCROOTObjects(AliAODMCParticle *part, AliAODMCParticle *mcepart, AliAODMCParticle *mcv0part, Int_t decaytype)
AliAODVertex * PrimaryVertex(const TObjArray *trkArray, AliVEvent *event)
AliAODPidHF * GetPidHF() const
TH2F * fHistoElePtRS
! e spectra (right-sign)
THnSparse * fHistoEleOmegaMassvsElePtMCS
! e-Omega mass-ept spectra (Efficiency numerator)
TTree * fEleVariablesTree
flag to decide whether to write the candidate variables on a tree variables
THnSparse * fHistoElePtvsEtaMCGen
! e spectra (wrong-sign) efficiency denominator
AliAODPidHF * GetPidCascPi() const
void GetProdCascRapRange(Double_t &a, Double_t &b)
THnSparse * fHistoElePtvsEtaWSMix
! e spectra (wrong-sign, mix)
THnSparse * fHistoElePtvsEtaWS
! e spectra (wrong-sign)
Bool_t fUseCentralityV0M
Stores trigger information.
THnSparse * fHistoEleOmegaMassWSMix
! e-Omega mass spectra (wrong-sign)
Float_t * fCandidateEleVariables
! variables to be written to the tree
THnSparse * fHistoElePtvsOmegaPtRSMix
! e-Omega spectra (right-sign, mix)
Int_t MatchToMC(AliAODRecoCascadeHF *elobj, TClonesArray *mcArray, Int_t *pdgarray_ele, Int_t *pdgarray_casc, Int_t *labelarray_ele, Int_t *labelarray_casc, Int_t &ngen_ele, Int_t &ngen_casc)
void SelectCascade(const AliVEvent *event, Int_t nCasc, Int_t &nSeleCasc, Bool_t *seleCascFlags, TClonesArray *mcArray)
TH1F * fHistod0Bach
! Bachelor d0 histogram
Double_t fCentBins[100]
number of centrality bins
virtual void UserCreateOutputObjects()
Implementation of interface methods.
Float_t fCentrality
magnetic field value [kG]
THnSparse * fHistoElePtvsEtaMCS
! e spectra (right-sign) efficiency numerator
Float_t fVtxZ
primary vertex
THnSparse * fHistoEleOmegaMassMCS
! e-Omega mass spectra (Efficiency numerator)
Bool_t fWriteEachVariableTree
THnSparse * fHistoElePtvsOmegaPtWSMix
! e-Omega spectra (wrong-sign, mix)
THnSparse * fHistoEleOmegaMassvsElePtWS
! e-Omega mass spectra (wrong-sign)
TH2F * fHistoElePtMCGen
! e spectra (Efficiency denominator)
TH2F * fHistoElectronTPCSelPID
! TPC electron PID after selection
AliAODTrack * GetBachelor() const
void MakeMCAnalysis(TClonesArray *mcArray)
AliESDtrackCuts * GetTrackCuts() const
void SetProngIDs(Int_t nIDs, UShort_t *id)
Int_t fNumberOfEventsForMixing
flag for event mixing
TH2F * fHistoElePtWSMix
! e spectra (wrong-sign, mix)
TObjArray * fElectronTracks
unique event id for mixed event check
Float_t * fCandidateCascVariables
! variables to be written to the tree
Float_t fTriggerCheck
Centrality.
AliPIDResponse * GetPidResponse() const
AliAnalysisTaskSEOmegac2eleOmegafromAODtracks()
virtual void UserExec(Option_t *option)
Float_t * fCandidateMCVariables
! variables to be written to the tree
void SelectTrack(const AliVEvent *event, Int_t trkEntries, Int_t &nSeleTrks, Bool_t *seleFlags, TClonesArray *mcArray)
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)
TTree * fVariablesTree
! tree of the candidate variables after track selection on output slot 4
Bool_t IsEventRejectedDuePhysicsSelection() const
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
TH2F * fHistoElectronTOFPID
! TOF electron PID
AliAODcascade * GetCascade() const
TH1F * fHistoBachPtMCGen
! Bachelor pT histogram (efficiency denominator)
Bool_t fWriteVariableTree
TList * fListCuts
! User output slot 2 // Cuts
THnSparse * fHistoEleOmegaMass
EvNumber counter.
THnSparse * fHistoEleOmegaMassWS
! e-Omega mass spectra (wrong-sign)
Bool_t SingleTrkCuts(AliAODTrack *trk, AliAODVertex *primvert)
void DefineEleTreeVariables()
Bool_t IsEventSelected(AliVEvent *event)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
TH1F * fHistoBachPtMCS
! Bachelor pT histogram (efficiency numerator)
void ResetPool(Int_t poolIndex)
THnSparse * fHistoElePtvsOmegaPtWS
! e-Omega spectra (wrong-sign)
TTree * fCascVariablesTree
! tree of the candidate variables after track selection on output slot 4
TH1F * fCEvents
! Histogram to check selected events
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TH1F * fHistonEvtvsRunNumber
! nevt vs runnumber
TList * fOutputAll
! User Output slot 3 //analysis histograms
THnSparse * fHistoElePtvsOmegaPtMCS
! e-Omega spectra (right-sign) efficiency numerator
THnSparse * fHistoEleOmegaMassvsElePtRS
! e-Omega mass spectra (right-sign)
THnSparse * fHistoElePtvsd0RS
! e pt-d0 spectra (right-sign)
Bool_t GetIsUsePID() const
void MakeAnalysis(AliAODEvent *aod, TClonesArray *mcArray)
Bool_t IsEventRejectedDueToTrigger() const
THnSparse * fHistoElePtvsd0WSMix
! e pt-d0 spectra (wrong-sign, mix)
Bool_t fIsEMC7
INT7 trigger event.
THnSparse * fHistoElePtvsd0RSMix
! e pt-d0 spectra (right-sign, mix)
Bool_t fIsSemi
MB trigger event.
void FillROOTObjects(AliAODRecoCascadeHF *elobj, AliAODcascade *casc, AliAODTrack *trk, TClonesArray *mcArray, Bool_t mixing)
TH2F * fHistoOmegaMassvsPtMCGen
! Omega mass vs pt histogram
THnSparse * fHistoElePtvsEtaRSMix
! e spectra (right-sign, mix)
TH2F * fHistoElectronTPCPIDSelTOFLargeEta
! TPC electron PID after TOF 3 sigma cut (0.8>|eta|>0.6)
THnSparse * fHistoElePtvsd0WS
! e pt-d0 spectra (wrong-sign)
void DoEventMixingWithPools(Int_t index, AliAODEvent *aodEvent, Bool_t *seleFlags)
AliAODVertex * ReconstructSecondaryVertex(AliAODcascade *casc, AliAODTrack *trk, AliAODEvent *aod)
THnSparse * fHistoElePtvsOmegaPtRS
! e-Omega spectra (right-sign)
THnSparse * fHistoEleOmegaMassvsElePtRSMix
! e-Omega mass-ept spectra (right-sign)