AliPhysics  9c66e61 (9c66e61)
AliAnalysisTaskSEPicoV0MakerMC.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
17 //
18 // AliAnalysisTaskSE for RecoDecay object (K0 short, Lambda,
19 // D mesons ...) filtering
20 //
21 // Author: X-M. Zhang, xmzhang@lbl.gov
23 
24 #include <TH2D.h>
25 #include <TMath.h>
26 #include <TString.h>
27 #include <TClonesArray.h>
28 #include <TParticle.h>
29 
30 #include "AliStack.h"
31 #include "AliESDEvent.h"
32 #include "AliAODEvent.h"
33 #include "AliMCEvent.h"
34 
35 #include "AliHeader.h"
36 #include "AliInputEventHandler.h"
37 #include "AliGenDPMjetEventHeader.h"
38 
39 #include "AliAODv0.h"
40 #include "AliESDv0.h"
41 #include "AliV0vertexer.h"
42 
43 #include "AliESDtrack.h"
44 #include "AliAODTrack.h"
45 #include "AliMCParticle.h"
46 #include "AliAODMCParticle.h"
47 
48 #include "AliPIDResponse.h"
49 #include "AliAnalysisUtils.h"
50 
51 #include "AliCentrality.h"
52 #include "AliMultSelection.h"
53 
54 #include "AliPicoBase.h"
55 #include "AliPicoV0MC.h"
57 
59 //=============================================================================
60 
63 fTriggerMask(0),
64 fCollisionType(0),
65 fUseAnaUtils(kFALSE),
66 fIsDPMjetMC(kFALSE),
67 fMultEst(""),
68 fMultMin(0.),
69 fMultMax(0.),
70 fMultOld(kFALSE),
71 fIsSkipFastOnly(kFALSE),
72 fIsRefitV0sESD(kFALSE),
73 fCutMinV0Pt(0.),
74 fCutMaxV0Pt(0.),
75 fCutMinV0Rap(0.),
76 fCutMaxV0Rap(0.),
77 fCutMinDauPt(0.),
78 fCutMinDauEta(0.),
79 fCutMaxDauEta(0.),
80 fCutMaxV0Chi2(0.),
81 fCutMinV0Radius(0.),
82 fCutMaxV0Radius(0.),
83 fCutMaxDausDCA(0.),
84 fCutMinDauDCAtoPV(0.),
85 fCutMinDauXrowsTPC(0.),
86 fCutMinDauXrowsOverFindableClusTPC(0.),
87 fCutMaxKshortSigmaTPC(0.),
88 fCutMinKshortCosPA(0.),
89 fCutMaxKshortCtau(0.),
90 fCutMaxKshortArmFrac(0.),
91 fCutMinKshortDeltaM(0.),
92 fCutMaxLambdaSigmaTPC(0.),
93 fCutMinLambdaCosPA(0.),
94 fCutMaxLambdaCtau(0.),
95 fCutMaxLambdaArmFrac(0.),
96 fCutMinLambdaDeletaM(0.),
97 fEventAOD(0),
98 fEventESD(0),
99 fRespoPID(0),
100 fEventAcptMask(0),
101 fPicoV0sClArr(0),
102 fListUserOutputs(0)
103 {
104 //
105 // Default constructor
106 //
107 
108  for (auto &d : fPrimaryVtx) d = -999.;
109 }
110 
111 //_____________________________________________________________________________
113 AliAnalysisTaskSE(name),
114 fTriggerMask(AliVEvent::kAny),
115 fCollisionType(AliPicoBase::kPP),
116 fUseAnaUtils(kFALSE),
117 fIsDPMjetMC(kFALSE),
118 fMultEst(""),
119 fMultMin(-99999.),
120 fMultMax(999999.),
121 fMultOld(kFALSE),
122 fIsSkipFastOnly(kFALSE),
123 fIsRefitV0sESD(kFALSE),
124 fCutMinV0Pt(0.),
125 fCutMaxV0Pt(100.),
126 fCutMinV0Rap(-10.),
127 fCutMaxV0Rap(10.),
128 fCutMinDauPt(0.),
129 fCutMinDauEta(-10.),
130 fCutMaxDauEta(10.),
131 fCutMaxV0Chi2(33.),
132 fCutMinV0Radius(0.5),
133 fCutMaxV0Radius(200.),
134 fCutMaxDausDCA(1.),
135 fCutMinDauDCAtoPV(0.06),
136 fCutMinDauXrowsTPC(70.),
137 fCutMinDauXrowsOverFindableClusTPC(0.8),
138 fCutMaxKshortSigmaTPC(5.),
139 fCutMinKshortCosPA(0.97),
140 fCutMaxKshortCtau(20.),
141 fCutMaxKshortArmFrac(-1.),
142 fCutMinKshortDeltaM(0.005),
143 fCutMaxLambdaSigmaTPC(5.),
144 fCutMinLambdaCosPA(0.995),
145 fCutMaxLambdaCtau(30.),
146 fCutMaxLambdaArmFrac(-1.),
147 fCutMinLambdaDeletaM(0.01),
148 fEventAOD(0),
149 fEventESD(0),
150 fRespoPID(0),
151 fEventAcptMask(0),
152 fPicoV0sClArr(0),
153 fListUserOutputs(0)
154 {
155 //
156 // Constructor
157 //
158 
159  for (auto &d : fPrimaryVtx) d = -999.;
160  DefineOutput(1, TList::Class());
161 }
162 
163 //_____________________________________________________________________________
165 {
166 //
167 // Default destructor
168 //
169 
170  if (fEventAOD) { delete fEventAOD; fEventAOD = 0; }
171  if (fEventESD) { delete fEventESD; fEventESD = 0; }
172  if (fRespoPID) { delete fRespoPID; fRespoPID = 0; }
173 
174  if (fPicoV0sClArr) { delete fPicoV0sClArr; fPicoV0sClArr = 0; }
176 }
177 
178 //_____________________________________________________________________________
180 {
181 //
182 // AliAnalysisTaskSEPicoV0MakerMC::Init
183 //
184 
185  return;
186 }
187 
188 //_____________________________________________________________________________
190 {
191 //
192 // AliAnalysisTaskSEPicoV0MakerMC::UserCreateOutputObjects
193 //
194 
195  InitAnalysis();
196 //=============================================================================
197 
198  if (fPicoV0sClArr) {
199  delete fPicoV0sClArr;
200  fPicoV0sClArr = nullptr;
201  }
202 
203  fPicoV0sClArr = new TClonesArray("AliPicoV0MC");
204  fPicoV0sClArr->SetName("PicoV0s");
205 //=============================================================================
206 
207  if (fListUserOutputs) {
208  delete fListUserOutputs;
209  fListUserOutputs = nullptr;
210  }
211 
212  fListUserOutputs = new TList();
213  fListUserOutputs->SetOwner();
214 
216  PostData(1, fListUserOutputs);
217 //=============================================================================
218 
219  return;
220 }
221 
222 //_____________________________________________________________________________
224 {
225 //
226 // AliAnalysisTaskSEPicoV0MakerMC::UserExec
227 //
228 
229  fPicoV0sClArr->Delete();
230  if (!(InputEvent()->FindListObject("PicoV0s"))) InputEvent()->AddObject(fPicoV0sClArr);
231 //=============================================================================
232 
233  if (IsEventNotAcpt()) return;
234 //=============================================================================
235 
236  FillHistograms(); if (IsEventNotMBsa()) return;
237 //=============================================================================
238 
239  FillPicoV0s();
240  return;
241 }
242 
243 //_____________________________________________________________________________
245 {
246 //
247 // AliAnalysisTaskSEPicoV0MakerMC::Terminate
248 //
249 
250  return;
251 }
252 
253 //_____________________________________________________________________________
255 {
256 //
257 // AliAnalysisTaskSEPicoV0MakerMC::NotifyRun
258 //
259 
260  return;
261 }
262 
263 //_____________________________________________________________________________
265 {
266 //
267 // AliAnalysisTaskSEPicoV0MakerMC::FillPicoRecoV0s
268 //
269 
270  const auto nV0s(fEventAOD ? fEventAOD->GetNumberOfV0s() :
271  fEventESD->GetNumberOfV0s());
272 
273  if (nV0s<=0) return;
274 //=============================================================================
275 
276  auto nAt(fPicoV0sClArr->GetEntriesFast());
277  auto hKshortPtInvM(static_cast<TH2D*>(fListUserOutputs->FindObject("hKshortPtInvM")));
278  auto hLambdaPtInvM(static_cast<TH2D*>(fListUserOutputs->FindObject("hLambdaPtInvM")));
279  auto hAntiLaPtInvM(static_cast<TH2D*>(fListUserOutputs->FindObject("hAntiLaPtInvM")));
280 //=============================================================================
281 
282  for (auto iV0=0; iV0<nV0s; iV0++) {
283  AliPicoV0MC *pV0MC(nullptr);
284 
285  if (fEventAOD) {
286  auto pV0(fEventAOD->GetV0(iV0));
287  if (!pV0) continue;
288 
289  pV0MC = SelectV0Candidate(pV0);
290  }
291 
292  if (fEventESD) {
293  auto pV0(fEventESD->GetV0(iV0));
294  if (!pV0) continue;
295 
296  pV0MC = SelectV0Candidate(pV0);
297  }
298 
299  if (pV0MC) {
300  pV0MC->FillKshortPtInvM(hKshortPtInvM);
301  pV0MC->FillLambdaPtInvM(hLambdaPtInvM);
302  pV0MC->FillAntiLaPtInvM(hAntiLaPtInvM);
303  new ((*fPicoV0sClArr)[nAt++]) AliPicoV0MC(*pV0MC);
304  delete pV0MC; pV0MC = nullptr;
305  }
306  }
307 //=============================================================================
308 
309  return;
310 }
311 
312 //_____________________________________________________________________________
314 {
315 //
316 // AliAnalysisTaskSEPicoV0MakerMC::SelectV0Candidate
317 //
318 
319  if (pV0RD->GetOnFlyStatus()) return nullptr;
320  if ((pV0RD->Chi2V0())>fCutMaxV0Chi2) return nullptr;
321 
322  const auto dV0Pt(pV0RD->Pt()); if ((dV0Pt<fCutMinV0Pt) || (dV0Pt>fCutMaxV0Pt)) return nullptr;
323 //=============================================================================
324 
325  Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx);
326  const auto dV0Radius(TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]));
327  if ((dV0Radius<fCutMinV0Radius) || (dV0Radius>fCutMaxV0Radius)) return nullptr;
328 
329  const auto dDausDCA(pV0RD->DcaV0Daughters()); if (dDausDCA>fCutMaxDausDCA) return nullptr;
330  const auto dPosDCAtoPV(pV0RD->DcaPosToPrimVertex()); if (dPosDCAtoPV<fCutMinDauDCAtoPV) return nullptr;
331  const auto dNegDCAtoPV(pV0RD->DcaNegToPrimVertex()); if (dNegDCAtoPV<fCutMinDauDCAtoPV) return nullptr;
332 //=============================================================================
333 
334  auto pDauPosRD(static_cast<AliAODTrack*>(pV0RD->GetDaughter(0))); if (!pDauPosRD) return nullptr;
335  auto pDauNegRD(static_cast<AliAODTrack*>(pV0RD->GetDaughter(1))); if (!pDauNegRD) return nullptr;
336 
337  if (!(pDauPosRD->GetStatus() & AliESDtrack::kTPCrefit)) return nullptr;
338  if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit)) return nullptr;
339 
340  if ((pDauPosRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return nullptr;
341  if ((pDauNegRD->GetProdVertex()->GetType())==((Char_t)AliAODVertex::kKink)) return nullptr;
342 
343  const auto dPosXrowsTPC = pDauPosRD->GetTPCClusterInfo(2,1);
344  const auto dNegXrowsTPC = pDauNegRD->GetTPCClusterInfo(2,1);
345  const auto dDauXrowsTPC(dPosXrowsTPC<dNegXrowsTPC ? dPosXrowsTPC : dNegXrowsTPC);
346  if (dDauXrowsTPC<fCutMinDauXrowsTPC) return nullptr;
347 
348  const auto wPosTPCNClsF(pDauPosRD->GetTPCNclsF()); if (wPosTPCNClsF<=0) return nullptr;
349  const auto wNegTPCNClsF(pDauNegRD->GetTPCNclsF()); if (wNegTPCNClsF<=0) return nullptr;
350  const auto dPosXrowsOverFindableClusTPC( ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF) );
351  const auto dNegXrowsOverFindableClusTPC( ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF) );
352 
353  const auto dDauXrowsOverFindableClusTPC(dPosXrowsOverFindableClusTPC<dNegXrowsOverFindableClusTPC ?
354  dPosXrowsOverFindableClusTPC :
355  dNegXrowsOverFindableClusTPC);
356  if (dDauXrowsOverFindableClusTPC<fCutMinDauXrowsOverFindableClusTPC) return nullptr;
357 //=============================================================================
358 
359  const auto nPosCharge(pDauPosRD->Charge());
360  const auto nNegCharge(pDauNegRD->Charge());
361  if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return nullptr;
362 
363  Double_t dPosPxPyPz[3] = { 0., 0., 0. };
364  Double_t dNegPxPyPz[3] = { 0., 0., 0. };
365  if ((nPosCharge<0) && (nNegCharge>0)) {
366  pDauPosRD = (AliAODTrack*)pV0RD->GetDaughter(1);
367  pDauNegRD = (AliAODTrack*)pV0RD->GetDaughter(0);
368 
369  dPosPxPyPz[0] = pV0RD->MomNegX(); dPosPxPyPz[1] = pV0RD->MomNegY(); dPosPxPyPz[2] = pV0RD->MomNegZ();
370  dNegPxPyPz[0] = pV0RD->MomPosX(); dNegPxPyPz[1] = pV0RD->MomPosY(); dNegPxPyPz[2] = pV0RD->MomPosZ();
371  } else {
372  dPosPxPyPz[0] = pV0RD->MomPosX(); dPosPxPyPz[1] = pV0RD->MomPosY(); dPosPxPyPz[2] = pV0RD->MomPosZ();
373  dNegPxPyPz[0] = pV0RD->MomNegX(); dNegPxPyPz[1] = pV0RD->MomNegY(); dNegPxPyPz[2] = pV0RD->MomNegZ();
374  }
375 
376  const TVector3 v3Pos(dPosPxPyPz);
377  const TVector3 v3Neg(dNegPxPyPz);
378  if ((v3Pos.Pt()<fCutMinDauPt) || (v3Neg.Pt()<fCutMinDauPt)) return nullptr;
379  Double_t dPosEta = v3Pos.Eta(); if ((dPosEta<fCutMinDauEta) || (dPosEta>fCutMaxDauEta)) return nullptr;
380  Double_t dNegEta = v3Neg.Eta(); if ((dNegEta<fCutMinDauEta) || (dNegEta>fCutMaxDauEta)) return nullptr;
381 //=============================================================================
382 
383  const auto inp(TMath::Abs(pDauPosRD->GetLabel())); if (inp<0) return nullptr;
384  auto pDauPosMC(static_cast<AliAODMCParticle*>(MCEvent()->GetTrack(inp))); if (!pDauPosMC) return nullptr;
385  const auto imp(pDauPosMC->GetMother()); if (imp<0) return nullptr;
386 
387  const auto inn(TMath::Abs(pDauNegRD->GetLabel())); if (inn<0) return nullptr;
388  auto pDauNegMC(static_cast<AliAODMCParticle*>(MCEvent()->GetTrack(inn))); if (!pDauNegMC) return nullptr;
389  const auto imn(pDauNegMC->GetMother()); if (imn<0) return nullptr;
390 
391  if (imp != imn) return nullptr;
392  const auto pV0MC(static_cast<AliAODMCParticle*>(MCEvent()->GetTrack(imp))); if (!pV0MC) return nullptr;
393  if (((pV0MC->Y())<fCutMinV0Rap) || ((pV0MC->Y())>fCutMaxV0Rap)) return nullptr;
394 
395  const auto idvMC(pV0MC->GetPdgCode());
396  const auto idp(pDauPosMC->GetPdgCode());
397  const auto idn(pDauNegMC->GetPdgCode());
398  auto bIsKshort((idp==211) && (idn==-211) && (idvMC== 310));
399  auto bIsLambda((idp==2212) && (idn==-211) && (idvMC== 3122));
400  auto bIsAntiLa((idp==211) && (idn==-2212) && (idvMC==-3122));
401  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
402 //=============================================================================
403 
404  UInt_t wsvMC(0);
405  if (pV0MC->IsPrimary()) wsvMC |= AliPicoBase::kPrimary;
406  if (pV0MC->IsPhysicalPrimary()) wsvMC |= AliPicoBase::kPhysicalPrimary;
407  if (pV0MC->IsSecondaryFromWeakDecay()) wsvMC |= AliPicoBase::kSecondaryFromWeakDecay;
408  if (pV0MC->IsSecondaryFromMaterial()) wsvMC |= AliPicoBase::kSecondaryFromMaterial;
409 
410  auto idmMC(0);
411  UInt_t wsmMC = 0;
412  auto dMotherPt(0.);
413  auto dMotherEta(0.);
414  auto dMotherRap(0.);
415  if (bIsLambda || bIsAntiLa) {
416  const auto imv(pV0MC->GetMother());
417 
418  if (imv>=0) {
419  const auto pMother(static_cast<AliAODMCParticle*>(MCEvent()->GetTrack(imv)));
420 
421  if (pMother) {
422  idmMC = pMother->GetPdgCode();
423  if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) ||
424  (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) {
425  dMotherPt = pMother->Pt();
426  dMotherEta = pMother->Eta();
427  dMotherRap = pMother->Y();
428 
429  if (pMother->IsPrimary()) wsmMC |= AliPicoBase::kPrimary;
430  if (pMother->IsPhysicalPrimary()) wsmMC |= AliPicoBase::kPhysicalPrimary;
431  if (pMother->IsSecondaryFromWeakDecay()) wsmMC |= AliPicoBase::kSecondaryFromWeakDecay;
432  if (pMother->IsSecondaryFromMaterial()) wsmMC |= AliPicoBase::kSecondaryFromMaterial;
433  }
434  }
435  }
436  }
437 //=============================================================================
438 
439  const auto dV0CosPA(pV0RD->CosPointingAngle(fPrimaryVtx));
440 
441  if (bIsKshort) if (dV0CosPA<fCutMinKshortCosPA) {
442  bIsKshort = kFALSE;
443  }
444 
445  if (bIsLambda || bIsAntiLa) if (dV0CosPA<fCutMinLambdaCosPA) {
446  bIsLambda = kFALSE;
447  bIsAntiLa = kFALSE;
448  }
449 
450  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
451 //=============================================================================
452 
453  auto dV0DistToPV(0.);
454  for (auto i=0; i<3; ++i) dV0DistToPV += ((dV0Vtx[i]-fPrimaryVtx[i]) * (dV0Vtx[i]-fPrimaryVtx[i]));
455  const auto dV0DistToPVoverP(TMath::Sqrt(dV0DistToPV) / (pV0RD->P()+1e-10));
456 
457  if (bIsKshort) if ((dV0DistToPVoverP*AliPicoBase::MassKshort())>fCutMaxKshortCtau) {
458  bIsKshort = kFALSE;
459  }
460 
461  if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*AliPicoBase::MassLambda())>fCutMaxLambdaCtau) {
462  bIsLambda = kFALSE;
463  bIsAntiLa = kFALSE;
464  }
465 
466  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
467 //=============================================================================
468 
469  const auto dV0ArmFrac(pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12));
470 
471  if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) {
472  bIsKshort = kFALSE;
473  }
474 
475  if ((bIsLambda || bIsAntiLa) && fCutMaxLambdaArmFrac>0.) if (dV0ArmFrac>fCutMaxLambdaArmFrac) {
476  bIsLambda = kFALSE;
477  bIsAntiLa = kFALSE;
478  }
479 
480  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
481 //=============================================================================
482 
483  UInt_t wMask(0);
484  if (bIsKshort) {
485  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
486  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
487 
488  const auto dKshortInvM((vPosPion + vNegPion).M());
489  if ((dKshortInvM<(0.430006 - 0.0110029*dV0Pt)) ||
490  (dKshortInvM>(0.563707 + 0.0114979*dV0Pt))) return nullptr;
491 
492  if (fCutMinKshortDeltaM>0.) {
493  TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, AliPicoBase::MassProton());
494  TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, AliPicoBase::MassProton());
495  if ((TMath::Abs((vPosProton+vNegPion).M()-AliPicoBase::MassLambda())<fCutMinKshortDeltaM) ||
496  (TMath::Abs((vNegProton+vPosPion).M()-AliPicoBase::MassLambda())<fCutMinKshortDeltaM)) return nullptr;
497  }
498 
499  wMask = AliPicoBase::kKshort;
500  }
501 
502  if (bIsLambda) {
503  TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, AliPicoBase::MassProton());
504  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
505 
506  const auto dLambdaInvM((vPosProton+vNegPion).M());
507  if ((dLambdaInvM<(1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt))) ||
508  (dLambdaInvM>(1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt)))) return nullptr;
509 
510  if (fCutMinLambdaDeletaM>0.) {
511  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
512  if ((TMath::Abs((vPosPion+vNegPion).M()-AliPicoBase::MassKshort())<fCutMinLambdaDeletaM)) return nullptr;
513  }
514 
515  wMask = AliPicoBase::kLambda;
516  }
517 
518  if (bIsAntiLa) {
519  TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, AliPicoBase::MassProton());
520  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
521 
522  const auto dAntiLaInvM((vNegProton+vPosPion).M());
523  if ((dAntiLaInvM<(1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt))) ||
524  (dAntiLaInvM>(1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt)))) return nullptr;
525 
526  if (fCutMinLambdaDeletaM>0.) {
527  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
528  if ((TMath::Abs((vPosPion+vNegPion).M()-AliPicoBase::MassKshort())<fCutMinLambdaDeletaM)) return nullptr;
529  }
530 
531  wMask = AliPicoBase::kAntiLambda;
532  }
533 //=============================================================================
534 
535  auto bPosInJC(kFALSE);
536  auto bNegInJC(kFALSE);
537  return (new AliPicoV0MC(wMask,
538  dV0Radius,
539  dV0CosPA,
540  dV0DistToPVoverP,
541  dDausDCA,
542  dPosDCAtoPV,
543  dNegDCAtoPV,
544  dDauXrowsTPC,
545  dDauXrowsOverFindableClusTPC,
546  v3Pos.Px(), v3Pos.Py(), v3Pos.Pz(),
547  v3Neg.Px(), v3Neg.Py(), v3Neg.Pz(),
548  bPosInJC, bNegInJC,
549  idvMC, wsvMC, pV0MC->Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->E(),
550  idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap));
551 }
552 
553 //_____________________________________________________________________________
555 {
556 //
557 // AliAnalysisTaskSEPicoV0MakerMC::SelectV0Candidate
558 //
559 
560  auto pStack(MCEvent()->Stack()); if (!pStack) return nullptr;
561 //=============================================================================
562 
563  if (pV0RD->GetOnFlyStatus()) return nullptr;
564  if (pV0RD->GetChi2V0()>fCutMaxV0Chi2) return nullptr;
565 
566  const auto dV0Pt(pV0RD->Pt()); if ((dV0Pt<fCutMinV0Pt) || (dV0Pt>fCutMaxV0Pt)) return nullptr;
567 //=============================================================================
568 
569  Double_t dV0Vtx[3]; pV0RD->GetXYZ(dV0Vtx[0], dV0Vtx[1], dV0Vtx[2]);
570  const auto dV0Radius(TMath::Sqrt(dV0Vtx[0]*dV0Vtx[0] + dV0Vtx[1]*dV0Vtx[1]));
571  if ((dV0Radius<fCutMinV0Radius) || (dV0Radius>fCutMaxV0Radius)) return nullptr;
572 
573  const auto dDausDCA(pV0RD->GetDcaV0Daughters()); if (dDausDCA>fCutMaxDausDCA) return nullptr;
574 //=============================================================================
575 
576  const auto nPosIndex(TMath::Abs(pV0RD->GetPindex())); if (nPosIndex<0) return nullptr;
577  const auto nNegIndex(TMath::Abs(pV0RD->GetNindex())); if (nNegIndex<0) return nullptr;
578 
579  auto pDauPosRD(fEventESD->GetTrack(nPosIndex)); if (!pDauPosRD) return nullptr;
580  auto pDauNegRD(fEventESD->GetTrack(nNegIndex)); if (!pDauNegRD) return nullptr;
581 
582  const auto dMegField(fEventESD->GetMagneticField());
583  const auto dPosDCAtoPV(TMath::Abs(pDauPosRD->GetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)));
584  if (dPosDCAtoPV<fCutMinDauDCAtoPV) return nullptr;
585 
586  const auto dNegDCAtoPV(TMath::Abs(pDauNegRD->GetD(fPrimaryVtx[0],fPrimaryVtx[1],dMegField)));
587  if (dNegDCAtoPV<fCutMinDauDCAtoPV) return nullptr;
588 //=============================================================================
589 
590  if (!(pDauPosRD->GetStatus() & AliESDtrack::kTPCrefit)) return nullptr;
591  if (!(pDauNegRD->GetStatus() & AliESDtrack::kTPCrefit)) return nullptr;
592  if ((pDauPosRD->GetKinkIndex(0)>0) || (pDauNegRD->GetKinkIndex(0)>0)) return nullptr;
593 
594  const auto dPosXrowsTPC(pDauPosRD->GetTPCClusterInfo(2,1));
595  const auto dNegXrowsTPC(pDauNegRD->GetTPCClusterInfo(2,1));
596  const auto dDauXrowsTPC((dPosXrowsTPC<dNegXrowsTPC) ? dPosXrowsTPC : dNegXrowsTPC);
597  if (dDauXrowsTPC<fCutMinDauXrowsTPC) return nullptr;
598 
599  const auto wPosTPCNClsF(pDauPosRD->GetTPCNclsF()); if (wPosTPCNClsF<=0) return nullptr;
600  const auto wNegTPCNClsF(pDauNegRD->GetTPCNclsF()); if (wNegTPCNClsF<=0) return nullptr;
601  const auto dPosXrowsOverFindableClusTPC( ((Double_t)dPosXrowsTPC) / ((Double_t)wPosTPCNClsF) );
602  const auto dNegXrowsOverFindableClusTPC( ((Double_t)dNegXrowsTPC) / ((Double_t)wNegTPCNClsF) );
603 
604  const auto dDauXrowsOverFindableClusTPC((dPosXrowsOverFindableClusTPC<dNegXrowsOverFindableClusTPC) ?
605  dPosXrowsOverFindableClusTPC :
606  dNegXrowsOverFindableClusTPC);
607  if (dDauXrowsOverFindableClusTPC<fCutMinDauXrowsOverFindableClusTPC) return nullptr;
608 //=============================================================================
609 
610  const auto nPosCharge(pDauPosRD->Charge());
611  const auto nNegCharge(pDauNegRD->Charge());
612  if ((nPosCharge==0) || (nNegCharge==0) || (nPosCharge==nNegCharge)) return nullptr;
613 
614  Double_t dPosPxPyPz[3] = { 0., 0., 0. };
615  Double_t dNegPxPyPz[3] = { 0., 0., 0. };
616  if ((nPosCharge<0) && (nNegCharge>0)) {
617  pDauPosRD = fEventESD->GetTrack(nNegIndex);
618  pDauNegRD = fEventESD->GetTrack(nPosIndex);
619 
620  pV0RD->GetNPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]);
621  pV0RD->GetPPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]);
622  } else {
623  pV0RD->GetPPxPyPz(dPosPxPyPz[0], dPosPxPyPz[1], dPosPxPyPz[2]);
624  pV0RD->GetNPxPyPz(dNegPxPyPz[0], dNegPxPyPz[1], dNegPxPyPz[2]);
625  }
626 
627  const TVector3 v3Pos(dPosPxPyPz);
628  const TVector3 v3Neg(dNegPxPyPz);
629  if ((v3Pos.Pt()<fCutMinDauPt) || (v3Neg.Pt()<fCutMinDauPt)) return nullptr;
630  const auto dPosEta(v3Pos.Eta()); if ((dPosEta<fCutMinDauEta) || (dPosEta>fCutMaxDauEta)) return nullptr;
631  const auto dNegEta(v3Neg.Eta()); if ((dNegEta<fCutMinDauEta) || (dNegEta>fCutMaxDauEta)) return nullptr;
632 //=============================================================================
633 
634  AliMCParticle *pDauTmpMC(nullptr);
635  const auto inp(TMath::Abs(pDauPosRD->GetLabel())); if (inp<0) return nullptr;
636  pDauTmpMC = static_cast<AliMCParticle*>(MCEvent()->GetTrack(inp)); if (!pDauTmpMC) return nullptr;
637  const auto pDauPosMC(pDauTmpMC->Particle()); if (!pDauPosMC) return nullptr;
638  const auto imp(pDauPosMC->GetFirstMother()); if (imp<0) return nullptr;
639 
640  const auto inn(TMath::Abs(pDauNegRD->GetLabel())); if (inn<0) return nullptr;
641  pDauTmpMC = static_cast<AliMCParticle*>(MCEvent()->GetTrack(inn)); if (!pDauTmpMC) return nullptr;
642  const auto pDauNegMC(pDauTmpMC->Particle()); if (!pDauNegMC) return nullptr;
643  const auto imn(pDauNegMC->GetFirstMother()); if (imn<0) return nullptr;
644 
645  if (imp != imn) return nullptr;
646  pDauTmpMC = static_cast<AliMCParticle*>(MCEvent()->GetTrack(imp)); if (!pDauTmpMC) return nullptr;
647  const auto pV0MC(pDauTmpMC->Particle()); if (!pV0MC) return nullptr;
648  if (((pV0MC->Y())<fCutMinV0Rap) || ((pV0MC->Y())>fCutMaxV0Rap)) return nullptr;
649 
650  const auto idvMC(pV0MC->GetPdgCode());
651  const auto idp(pDauPosMC->GetPdgCode());
652  const auto idn(pDauNegMC->GetPdgCode());
653  auto bIsKshort((idp==211) && (idn==-211) && (idvMC== 310));
654  auto bIsLambda((idp==2212) && (idn==-211) && (idvMC== 3122));
655  auto bIsAntiLa((idp==211) && (idn==-2212) && (idvMC==-3122));
656  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
657 //=============================================================================
658 
659  UInt_t wsvMC(0);
660  if (imp<pStack->GetNprimary()) wsvMC |= AliPicoBase::kPrimary;
661  if (pStack->IsPhysicalPrimary(imp)) wsvMC |= AliPicoBase::kPhysicalPrimary;
662  if (pStack->IsSecondaryFromWeakDecay(imp)) wsvMC |= AliPicoBase::kSecondaryFromWeakDecay;
663  if (pStack->IsSecondaryFromMaterial(imp)) wsvMC |= AliPicoBase::kSecondaryFromMaterial;
664 
665  auto idmMC(0);
666  UInt_t wsmMC(0);
667  auto dMotherPt(0.);
668  auto dMotherEta(0.);
669  auto dMotherRap(0.);
670  if (bIsLambda || bIsAntiLa) {
671  const auto imv(pV0MC->GetFirstMother());
672 
673  if (imv>=0) {
674  pDauTmpMC = static_cast<AliMCParticle*>(MCEvent()->GetTrack(imv));
675 
676  if (pDauTmpMC) {
677  auto pMother(pDauTmpMC->Particle());
678 
679  if (pMother) {
680  idmMC = pMother->GetPdgCode();
681  if ((bIsLambda && ((idmMC== 3312) || (idmMC== 3322))) ||
682  (bIsAntiLa && ((idmMC==-3312) || (idmMC==-3322)))) {
683  dMotherPt = pMother->Pt();
684  dMotherEta = pMother->Eta();
685  dMotherRap = pMother->Y();
686 
687  if (imp<pStack->GetNprimary()) wsmMC |= AliPicoBase::kPrimary;
688  if (pStack->IsPhysicalPrimary(imv)) wsmMC |= AliPicoBase::kPhysicalPrimary;
689  if (pStack->IsSecondaryFromWeakDecay(imv)) wsmMC |= AliPicoBase::kSecondaryFromWeakDecay;
690  if (pStack->IsSecondaryFromMaterial(imv)) wsmMC |= AliPicoBase::kSecondaryFromMaterial;
691  }
692  }
693  }
694  }
695  }
696 //=============================================================================
697 
698  const auto dV0CosPA(pV0RD->GetV0CosineOfPointingAngle(fPrimaryVtx[0],fPrimaryVtx[1],fPrimaryVtx[2]));
699 
700  if (bIsKshort) if (dV0CosPA<fCutMinKshortCosPA) {
701  bIsKshort = kFALSE;
702  }
703 
704  if (bIsLambda || bIsAntiLa) if (dV0CosPA<fCutMinLambdaCosPA) {
705  bIsLambda = kFALSE;
706  bIsAntiLa = kFALSE;
707  }
708 
709  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
710 //=============================================================================
711 
712  Double_t dV0DistToPV(0.);
713  for (auto i=0; i<3; ++i) dV0DistToPV += ((dV0Vtx[i]-fPrimaryVtx[i]) * (dV0Vtx[i]-fPrimaryVtx[i]));
714  const auto dV0DistToPVoverP(TMath::Sqrt(dV0DistToPV) / (pV0RD->P()+1e-10));
715 
716  if (bIsKshort) if ((dV0DistToPVoverP*AliPicoBase::MassKshort())>fCutMaxKshortCtau) {
717  bIsKshort = kFALSE;
718  }
719 
720  if (bIsLambda || bIsAntiLa) if ((dV0DistToPVoverP*AliPicoBase::MassLambda())>fCutMaxLambdaCtau) {
721  bIsLambda = kFALSE;
722  bIsAntiLa = kFALSE;
723  }
724 
725  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
726 //=============================================================================
727 
728  const auto dV0ArmFrac(pV0RD->PtArmV0() / (TMath::Abs(pV0RD->AlphaV0())+1e-12));
729 
730  if (bIsKshort && (fCutMaxKshortArmFrac>0.)) if (dV0ArmFrac>fCutMaxKshortArmFrac) {
731  bIsKshort = kFALSE;
732  }
733 
734  if ((bIsLambda && bIsAntiLa) && (fCutMaxLambdaArmFrac>0.)) if (dV0ArmFrac>fCutMaxLambdaArmFrac) {
735  bIsLambda = kFALSE;
736  bIsAntiLa = kFALSE;
737  }
738 
739  if (!(bIsKshort || bIsLambda || bIsAntiLa)) return nullptr;
740 //=============================================================================
741 
742  UInt_t wMask(0);
743  if (bIsKshort) {
744  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
745  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
746 
747  const auto dKshortInvM((vPosPion+vNegPion).M());
748  if ((dKshortInvM<(0.430006 - 0.0110029*dV0Pt)) ||
749  (dKshortInvM>(0.563707 + 0.0114979*dV0Pt))) return nullptr;
750 
751  if (fCutMinKshortDeltaM>0.) {
752  TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, AliPicoBase::MassProton());
753  TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, AliPicoBase::MassProton());
754  if ((TMath::Abs((vPosProton+vNegPion).M()-AliPicoBase::MassLambda())<fCutMinKshortDeltaM) ||
755  (TMath::Abs((vNegProton+vPosPion).M()-AliPicoBase::MassLambda())<fCutMinKshortDeltaM)) return nullptr;
756  }
757 
758  wMask = AliPicoBase::kKshort;
759  }
760 
761  if (bIsLambda) {
762  TLorentzVector vPosProton; vPosProton.SetVectM(v3Pos, AliPicoBase::MassProton());
763  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
764 
765  const auto dLambdaInvM((vPosProton+vNegPion).M());
766  if ((dLambdaInvM<(1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt))) ||
767  (dLambdaInvM>(1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt)))) return nullptr;
768 
769  if (fCutMinLambdaDeletaM>0.) {
770  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
771  if ((TMath::Abs((vPosPion+vNegPion).M()-AliPicoBase::MassKshort())<fCutMinLambdaDeletaM)) return nullptr;
772  }
773 
774  wMask = AliPicoBase::kLambda;
775  }
776 
777  if (bIsAntiLa) {
778  TLorentzVector vNegProton; vNegProton.SetVectM(v3Neg, AliPicoBase::MassProton());
779  TLorentzVector vPosPion; vPosPion.SetVectM(v3Pos, AliPicoBase::MassPion());
780 
781  const auto dAntiLaInvM((vNegProton+vPosPion).M());
782  if ((dAntiLaInvM<(1.09501 - 0.00523272*dV0Pt - 0.075269*TMath::Exp(-3.46339*dV0Pt))) ||
783  (dAntiLaInvM>(1.13688 + 0.00527838*dV0Pt + 0.084222*TMath::Exp(-3.80595*dV0Pt)))) return nullptr;
784 
785  if (fCutMinLambdaDeletaM>0.) {
786  TLorentzVector vNegPion; vNegPion.SetVectM(v3Neg, AliPicoBase::MassPion());
787  if ((TMath::Abs((vPosPion+vNegPion).M()-AliPicoBase::MassKshort())<fCutMinLambdaDeletaM)) return nullptr;
788  }
789 
790  wMask = AliPicoBase::kAntiLambda;
791  }
792 //=============================================================================
793 
794  auto bPosInJC(kFALSE);
795  auto bNegInJC(kFALSE);
796  return (new AliPicoV0MC(wMask,
797  dV0Radius,
798  dV0CosPA,
799  dV0DistToPVoverP,
800  dDausDCA,
801  dPosDCAtoPV,
802  dNegDCAtoPV,
803  dDauXrowsTPC,
804  dDauXrowsOverFindableClusTPC,
805  v3Pos.Px(), v3Pos.Py(), v3Pos.Pz(),
806  v3Neg.Px(), v3Neg.Py(), v3Neg.Pz(),
807  bPosInJC, bNegInJC,
808  idvMC, wsvMC, pV0MC->Px(), pV0MC->Py(), pV0MC->Pz(), pV0MC->Energy(),
809  idmMC, wsmMC, dMotherPt, dMotherEta, dMotherRap));
810 }
811 
812 //_____________________________________________________________________________
814 {
815 //
816 // AliAnalysisTaskSEPicoV0MakerMC::IsEventNotAcpt
817 //
818 
819  fEventAcptMask = 0;
820  if (!InputEvent()) return kTRUE;
821  if (!fInputHandler) return kTRUE;
822 
823  fEventAOD = dynamic_cast<AliAODEvent*>(InputEvent());
824  fEventESD = dynamic_cast<AliESDEvent*>(InputEvent());
825  if ((!fEventAOD) && (!fEventESD)) return kTRUE;
826 //=============================================================================
827 
828  fRespoPID = fInputHandler->GetPIDResponse();
829  if (!fRespoPID) return kTRUE;
830 //=============================================================================
831 
832  if (MCEvent()) {
833  if (MCEvent()->GetNumberOfTracks()<=0) return kTRUE;
834  } else {
835  return kTRUE;
836  }
837 
838  const auto pHeader(MCEvent()->Header()); if (!pHeader) return kTRUE;
839 
840  if (fIsDPMjetMC) {
841  const auto pDPMjetH(dynamic_cast<AliGenDPMjetEventHeader*>(pHeader->GenEventHeader()));
842 
843  if (pDPMjetH) {
844  auto nd0(0), nd1(0), nd2(0);
845  pDPMjetH->GetNDiffractive(nd1, nd2, nd0);
846  if ((nd1+nd2) != (pDPMjetH->ProjectileParticipants() + pDPMjetH->TargetParticipants())) return kTRUE;
847  }
848  }
849 
851 //=============================================================================
852 
853  if (!fMultEst.IsNull()) {
854  Float_t dMult(-999.);
855 
856  if (fMultOld) {
857  auto pCentSel(InputEvent()->GetCentrality());
858  if (!pCentSel) { fEventAcptMask=0; return kTRUE; }
859  if (pCentSel->GetQuality()!=0) return kFALSE;
860  dMult = pCentSel->GetCentralityPercentile(fMultEst.Data());
861  } else {
862  auto pMultSel(static_cast<AliMultSelection*>(InputEvent()->FindListObject("MultSelection")));
863  if (!pMultSel) { fEventAcptMask=0; return kTRUE; }
864  dMult = pMultSel->GetMultiplicityPercentile(fMultEst.Data());
865  }
866 
867  if ((dMult<fMultMin) || (dMult>=fMultMax)) return kFALSE;
868  }
869 
871 //=============================================================================
872 
873  const UInt_t wMask(fInputHandler->IsEventSelected());
874  if ((wMask & fTriggerMask) != fTriggerMask) return kFALSE;
875  if (fIsSkipFastOnly) if ((wMask & AliVEvent::kFastOnly) == AliVEvent::kFastOnly) return kFALSE;
876 
878 //=============================================================================
879 
880  const auto pVertex(InputEvent()->GetPrimaryVertex());
881  if (!pVertex) return kFALSE;
882  pVertex->GetXYZ(fPrimaryVtx);
883 
884  if (fUseAnaUtils) {
885  auto pUtils(new AliAnalysisUtils());
886  if (!pUtils->IsVertexSelected2013pA(InputEvent())) return kFALSE;
887 // if (pUtils->IsSPDClusterVsTrackletBG(InputEvent())) return kFALSE;
888  if (pUtils->IsPileUpEvent(InputEvent())) return kFALSE;
889 
890  if ((fCollisionType==(AliPicoBase::kPA)) ||
892  if (pUtils->IsFirstEventInChunk(InputEvent())) return kFALSE;
893  }
894  }
895 
897 //=============================================================================
898 
899  if (fIsRefitV0sESD && fEventESD) {
900  Double_t dCuts[7] = { fCutMaxV0Chi2,
906  fCutMaxV0Radius };
907 
908  fEventESD->ResetV0s();
909  AliV0vertexer aV0vtxer;
910  aV0vtxer.SetDefaultCuts(dCuts);
911  aV0vtxer.Tracks2V0vertices(fEventESD);
912  }
913 //=============================================================================
914 
915  return kFALSE;
916 }
917 
918 //_____________________________________________________________________________
920 {
921 //
922 // AliAnalysisTaskSEPicoV0MakerMC::IsEventNotINEL
923 //
924 
925  if ((fEventAcptMask & AliPicoBase::kEventCheck) != AliPicoBase::kEventCheck) return kTRUE;
926  if ((fEventAcptMask & AliPicoBase::kEventMult) != AliPicoBase::kEventMult) return kTRUE;
927 
928  return kFALSE;
929 }
930 
931 //_____________________________________________________________________________
933 {
934 //
935 // AliAnalysisTaskSEPicoV0MakerMC::IsEventNotMBsa
936 //
937 
938  if (IsEventNotINEL()) return kTRUE;
939 
940  if ((fEventAcptMask & AliPicoBase::kEventTrigger) != AliPicoBase::kEventTrigger) return kTRUE;
941  if ((fEventAcptMask & AliPicoBase::kEventVertex) != AliPicoBase::kEventVertex) return kTRUE;
942 
943  return kFALSE;
944 }
945 
946 //_____________________________________________________________________________
948 {
949 //
950 // AliAnalysisTaskSEPicoV0MakerMC::FillHistograms
951 //
952 
953  const auto h(static_cast<TH1D*>(fListUserOutputs->FindObject("hEventCheck")));
954 
955  if (fEventAcptMask==0) h->Fill(0.);
956  if ((fEventAcptMask & AliPicoBase::kEventCheck) == AliPicoBase::kEventCheck) h->Fill(1.);
957  if ((fEventAcptMask & AliPicoBase::kEventMult) == AliPicoBase::kEventMult) h->Fill(2.);
958  if ((fEventAcptMask & AliPicoBase::kEventTrigger) == AliPicoBase::kEventTrigger) h->Fill(3.);
959  if ((fEventAcptMask & AliPicoBase::kEventVertex) == AliPicoBase::kEventVertex) h->Fill(4.);
960 
961  return;
962 }
963 
964 //_____________________________________________________________________________
966 {
967 //
968 // AliAnalysisTaskSEPicoV0MakerMC::CreateHistograms
969 //
970 
971  const auto b(TH1::AddDirectoryStatus());
972  TH1::AddDirectory(kFALSE);
973 //=============================================================================
974 
975  fListUserOutputs->Add(new TH1D("hEventCheck", "", 5, -0.5, 4.5));
976  fListUserOutputs->Add(new TH2D("hKshortPtInvM", "", 1000, 0., 100., 300, AliPicoBase::MassKshort()-0.15,
977  AliPicoBase::MassKshort()+0.15));
978 
979  fListUserOutputs->Add(new TH2D("hLambdaPtInvM", "", 1000, 0., 100., 200, AliPicoBase::MassLambda()-0.10,
980  AliPicoBase::MassLambda()+0.10));
981 
982  fListUserOutputs->Add(new TH2D("hAntiLaPtInvM", "", 1000, 0., 100., 200, AliPicoBase::MassLambda()-0.10,
983  AliPicoBase::MassLambda()+0.10));
984 
985  TH1 *h(nullptr);
986  TListIter nl(fListUserOutputs);
987  while ((h = static_cast<TH1*>(nl()))) h->Sumw2();
988 
989  TH1::AddDirectory(b);
990  return;
991 }
992 
993 //_____________________________________________________________________________
995 {
996 //
997 // AliAnalysisTaskSEPicoV0MakerMC::InitAnalysis
998 //
999  return;
1000 }
1001 
1002 //_____________________________________________________________________________
1004 {
1005 //
1006 // AliAnalysisTaskSEPicoV0MakerMC::SetCuts
1007 //
1008 
1009  fCutMinV0Radius = d[0];
1010  fCutMaxV0Radius = d[1];
1011 
1012  fCutMaxDausDCA = d[2];
1013  fCutMinDauDCAtoPV = d[3];
1014  fCutMinDauXrowsTPC = d[4];
1016 
1017  fCutMaxKshortSigmaTPC = d[6];
1018  fCutMinKshortCosPA = d[7];
1019  fCutMaxKshortCtau = d[8];
1020  fCutMinKshortDeltaM = d[9];
1021 
1022  fCutMaxLambdaSigmaTPC = d[10];
1023  fCutMinLambdaCosPA = d[11];
1024  fCutMaxLambdaCtau = d[12];
1025  fCutMinLambdaDeletaM = d[13];
1026 
1027  return;
1028 }
void FillLambdaPtInvM(TH2D *const h, Double_t const *dCuts=nullptr) const
Definition: AliPicoV0.cxx:260
double Double_t
Definition: External.C:58
void FillKshortPtInvM(TH2D *const h, Double_t const *dCuts=nullptr) const
Definition: AliPicoV0.cxx:242
char Char_t
Definition: External.C:18
Double_t MassLambda()
Definition: AliPicoBase.h:44
Double_t MassPion()
Definition: AliPicoBase.h:41
Double_t MassProton()
Definition: AliPicoBase.h:43
Double_t MassKshort()
Definition: AliPicoBase.h:42
void FillAntiLaPtInvM(TH2D *const h, Double_t const *dCuts=nullptr) const
Definition: AliPicoV0.cxx:278
unsigned int UInt_t
Definition: External.C:33
float Float_t
Definition: External.C:68
Definition: External.C:228
Definition: External.C:212
AliPicoV0MC * SelectV0Candidate(AliAODv0 const *pV0)
const char Option_t
Definition: External.C:48
bool Bool_t
Definition: External.C:53
Definition: External.C:196