2 #include <TClonesArray.h> 5 #include "AliAODEvent.h" 6 #include "AliESDEvent.h" 7 #include "AliMCEvent.h" 9 #include "AliMCParticle.h" 10 #include "AliAODMCParticle.h" 33 fTracksContRD(
nullptr),
34 fCaloClustersContRD(
nullptr),
36 fTracksContMC(
nullptr),
38 fHistoKshortInvM(
nullptr),
39 fHistoLambdaInvM(
nullptr),
40 fHistoAntiLaInvM(
nullptr),
41 fListUserOutputs(
nullptr)
75 DefineOutput(bHistos ? 2 : 1, TList::Class());
149 AliAnalysisTaskEmcalJet::Terminate(opt);
232 if (!fInitialized)
return;
235 fV0s =
dynamic_cast<TClonesArray*
>(InputEvent()->FindListObject(
"PicoV0s"));
238 AliError(Form(
"%s: Could not retrieve V0 %s!", GetName(),
"PicoV0s"));
239 fInitialized = kFALSE;
256 const auto b(TH1::AddDirectoryStatus());
257 TH1::AddDirectory(kFALSE);
274 const Int_t nV0Bin[nV0] = { 3, 4, 210, 210, 210, 210, 100, 1000 };
275 const Double_t dV0Min[nV0] = { -0.5, 0., -10., -10., -10., -10., -5., 0. };
276 const Double_t dV0Max[nV0] = { 2.5, 4., 200., 200., 200., 200., 5., 100. };
277 fListUserOutputs->Add(
new THnSparseD(
"hsReco",
"", nV0, nV0Bin, dV0Min, dV0Max));
278 fListUserOutputs->Add(
new THnSparseD(
"hsKine",
"", nV0, nV0Bin, dV0Min, dV0Max));
280 TH1::AddDirectory(b);
291 if (!
fV0s)
return kTRUE;
294 const auto dV0M(
fCentInfo->GetCentralityPercentile(
"V0M"));
295 const auto dV0A(
fCentInfo->GetCentralityPercentile(
"V0A"));
296 const auto dCL1(
fCentInfo->GetCentralityPercentile(
"CL1"));
297 const auto dZNA(
fCentInfo->GetCentralityPercentile(
"ZNA"));
302 for (
auto i=0; i<
fV0s->GetEntriesFast(); ++i) {
303 const auto pV0(static_cast<AliPicoV0MC*>(
fV0s->At(i)));
if (!pV0)
continue;
305 if (!pV0->IsV0PhysicalPrimary())
continue;
308 const auto bKshort(pV0->IsKshortMC());
309 const auto bLambda(pV0->IsLambdaMC());
310 const auto bAntiLa(pV0->IsAntiLaMC());
311 if (!(bKshort || bLambda || bAntiLa))
continue;
314 const auto vV0(pV0->KineMC().Vect());
315 const auto dPt(vV0.Pt());
321 const auto k(histo->FindBin(dPt));
if (k<=0)
continue;
322 const auto dMean(histo->GetBinContent(k));
323 const auto dSigma(histo->GetBinError(k));
326 const auto dUpperL(dMean - (dCutNS * dSigma));
327 const auto dLowerR(dMean + (dCutNS * dSigma));
329 auto dInvM(pV0->KineKshort().M());
330 if (bLambda) dInvM = pV0->KineLambda().M();
331 if (bAntiLa) dInvM = pV0->KineAntiLa().M();
332 if ((dInvM<dUpperL) || (dInvM>=dLowerR))
continue;
336 if (bKshort) dVar[0] = 0.;
337 if (bLambda) dVar[0] = 1.;
338 if (bAntiLa) dVar[0] = 2.;
345 if (dVar[1]<0.)
continue;
369 const auto dV0M(
fCentInfo->GetCentralityPercentile(
"V0M"));
370 const auto dV0A(
fCentInfo->GetCentralityPercentile(
"V0A"));
371 const auto dCL1(
fCentInfo->GetCentralityPercentile(
"CL1"));
372 const auto dZNA(
fCentInfo->GetCentralityPercentile(
"ZNA"));
377 AliStack *pStack(
nullptr);
380 pStack = MCEvent()->Stack();
381 if (!pStack)
return kTRUE;
385 for (
Int_t i=0; i<MCEvent()->GetNumberOfTracks(); ++i) {
386 TParticle *pESD(
nullptr);
387 AliMCParticle *pTmp(
nullptr);
388 AliAODMCParticle *pAOD(
nullptr);
391 pAOD =
static_cast<AliAODMCParticle*
>(MCEvent()->GetTrack(i));
396 pTmp =
static_cast<AliMCParticle*
>(MCEvent()->GetTrack(i));
399 pESD = pTmp->Particle();
404 const auto bPhy(pAOD ? pAOD->IsPhysicalPrimary() : pStack->IsPhysicalPrimary(i));
407 const auto dEta(pAOD ? pAOD->Eta() : pESD->Eta());
412 const auto id(pAOD ? pAOD->GetPdgCode() : pESD->GetPdgCode());
415 if (
id== 310 ) dVar[0] = 0.;
416 if (
id== 3122) dVar[0] = 1.;
417 if (
id==-3122) dVar[0] = 2.;
418 if (dVar[0]<-0.5)
continue;
422 if (pAOD) vV0.SetXYZ(pAOD->Px(), pAOD->Py(), pAOD->Pz());
423 if (pESD) vV0.SetXYZ(pESD->Px(), pESD->Py(), pESD->Pz());
430 if (dVar[1]<0.)
continue;
438 if (pAOD) dVar[7] = pAOD->Pt();
439 if (pESD) dVar[7] = pESD->Pt();
465 vJet.SetPtEtaPhi(dPt, pJet->Eta(), pJet->Phi());
466 if (vJet.DeltaR(vV0)<dJetRadius)
return kTRUE;
virtual Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
AliJetContainer * fJetsContRD
Bool_t IsV0InJet(TVector3 vV0, Double_t dJetPtMin)
AliJetContainer * GetJetContainer(Int_t i=0) const
AliParticleContainer * fTracksContMC
AliClusterContainer * GetClusterContainer() const
virtual Bool_t Run()
Run function. This is the core function of the analysis and contains the user code. Therefore users have to implement this function.
Bool_t fGeneralHistograms
whether or not it should fill some general histograms
Bool_t RetrieveEventObjects()
virtual void UserCreateOutputObjects()
virtual Bool_t RetrieveEventObjects()
Retrieve common objects from event.
void CreateUserOutputHistograms()
AliParticleContainer * GetParticleContainer() const
virtual Bool_t FillHistograms()
Function filling histograms.
virtual Bool_t FillHistograms()
Function filling histograms.
AliJetContainer * fJetsContMC
AliClusterContainer * fCaloClustersContRD
virtual Bool_t FillGeneralHistograms()
Filling general histograms.
AliAnalysisTaskEmcalJetV0CF()
AliParticleContainer * fTracksContRD
AliEmcalJet * GetNextAcceptJet()
virtual Bool_t IsEventSelected()
Performing event selection.
Float_t GetJetRadius() const
virtual Bool_t IsEventSelected()
Performing event selection.
Bool_t fCreateHisto
whether or not create histograms
Base task in the EMCAL jet framework.
void UserCreateOutputObjects()
Main initialization function on the worker.
virtual Bool_t FillGeneralHistograms()
Filling general histograms.
virtual void ExecOnce()
Perform steps needed to initialize the analysis.
virtual void Terminate(Option_t *opt)
AliCentrality * fCentInfo
virtual ~AliAnalysisTaskEmcalJetV0CF()
Double_t GetJetPtCorr(Int_t i) const