Skip to content

Commit ec867e6

Browse files
committed
unify lifetime cut
1 parent 3ecdc71 commit ec867e6

File tree

2 files changed

+59
-39
lines changed

2 files changed

+59
-39
lines changed

PWGLF/Tasks/Strangeness/derivedupcanalysis.cxx

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ struct Derivedupcanalysis {
128128
Configurable<float> armPodCut{"armPodCut", 5.0f, "pT * (cut) > |alpha|, AP cut. Negative: no cut"};
129129
Configurable<int> v0TypeSelection{"v0TypeSelection", 1, "select on a certain V0 type (leave negative if no selection desired)"};
130130
} v0cuts;
131-
static constexpr float kLifetimeCutsV0[1][2] = {{30., 20.}};
132-
Configurable<LabeledArray<float>> lifetimecutV0{"lifetimecutV0", {kLifetimeCutsV0[0], 2, {"lifetimecutLambda", "lifetimecutK0S"}}, "lifetimecutV0"};
131+
static constexpr float kNCtauCutsV0[1][2] = {{6, 6.}};
132+
Configurable<LabeledArray<float>> nCtauCutV0{"nCtauCutV0", {kNCtauCutsV0[0], 2, {"lifetimecutLambda", "lifetimecutK0S"}}, "nCtauCutV0"};
133133

134134
// Standard cascade topological criteria
135135
struct : ConfigurableGroup {
@@ -212,7 +212,7 @@ struct Derivedupcanalysis {
212212
Configurable<bool> calculateFeeddownMatrix{"calculateFeeddownMatrix", true, "fill feeddown matrix if MC"};
213213
ConfigurableAxis axisGeneratorIds{"axisGeneratorIds", {256, -0.5f, 255.5f}, "axis for generatorIds"};
214214
Configurable<bool> checkNeutronsInMC{"checkNeutronsInMC", true, "require no neutrons for single-gap in MC"};
215-
Configurable<float> neutronEtaCut{"neutronEtaCut", 0.8, "ZN acceptance"};
215+
Configurable<float> neutronEtaCut{"neutronEtaCut", 8.8, "ZN acceptance"};
216216

217217
// Occupancy cut
218218
Configurable<float> minOccupancy{"minOccupancy", -1, "minimum occupancy from neighbouring collisions"};
@@ -278,13 +278,14 @@ struct Derivedupcanalysis {
278278

279279
// Topological variable QA axes
280280
ConfigurableAxis axisDCAtoPV{"axisDCAtoPV", {80, -4.0f, 4.0f}, "DCA (cm)"};
281-
ConfigurableAxis axisDCAdau{"axisDCAdau", {24, 0.0f, 1.2f}, "DCA (cm)"};
281+
ConfigurableAxis axisDCAdau{"axisDCAdau", {48, 0.0f, 1.2f}, "DCA (cm)"};
282282
ConfigurableAxis axisPointingAngle{"axisPointingAngle", {100, 0.0f, 0.5f}, "pointing angle (rad)"};
283-
ConfigurableAxis axisV0Radius{"axisV0Radius", {60, 0.0f, 60.0f}, "V0 2D radius (cm)"};
283+
ConfigurableAxis axisCosPA{"axisCosPA", {300, 0.97f, 1.0f}, "cosPA"};
284+
ConfigurableAxis axisV0Radius{"axisV0Radius", {100, 0.0f, 10.0f}, "V0 2D radius (cm)"};
284285
ConfigurableAxis axisNsigmaTPC{"axisNsigmaTPC", {200, -10.0f, 10.0f}, "N sigma TPC"};
285286
ConfigurableAxis axisTPCsignal{"axisTPCsignal", {200, 0.0f, 200.0f}, "TPC signal"};
286287
ConfigurableAxis axisTOFdeltaT{"axisTOFdeltaT", {200, -5000.0f, 5000.0f}, "TOF Delta T (ps)"};
287-
ConfigurableAxis axisNctau{"axisNctau", {100, 0.0f, 10.0f}, "n c x tau"};
288+
ConfigurableAxis axisNctau{"axisNctau", {200, 0.0f, 20.0f}, "c x tau (cm)"};
288289

289290
static constexpr std::string_view kParticlenames[] = {"K0Short", "Lambda", "AntiLambda", "Xi", "AntiXi", "Omega", "AntiOmega"};
290291

@@ -321,9 +322,11 @@ struct Derivedupcanalysis {
321322
histos.add(Form("%s/hNegDCAToPV", kParticlenames[partID].data()), "hNegDCAToPV", kTH1F, {axisDCAtoPV});
322323
histos.add(Form("%s/hDCADaughters", kParticlenames[partID].data()), "hDCADaughters", kTH1F, {axisDCAdau});
323324
histos.add(Form("%s/hPointingAngle", kParticlenames[partID].data()), "hPointingAngle", kTH1F, {axisPointingAngle});
325+
histos.add(Form("%s/hCosPA", kParticlenames[partID].data()), "hCosPA", kTH1F, {axisCosPA});
324326
histos.add(Form("%s/hV0Radius", kParticlenames[partID].data()), "hV0Radius", kTH1F, {axisV0Radius});
325327
histos.add(Form("%s/h2dPositiveITSvsTPCpts", kParticlenames[partID].data()), "h2dPositiveITSvsTPCpts", kTH2F, {axisTPCrows, axisITSclus});
326328
histos.add(Form("%s/h2dNegativeITSvsTPCpts", kParticlenames[partID].data()), "h2dNegativeITSvsTPCpts", kTH2F, {axisTPCrows, axisITSclus});
329+
histos.add(Form("%s/hNctau", kParticlenames[partID].data()), "hNctau", kTH2F, {axisPtCoarse, axisNctau});
327330
}
328331
}
329332

@@ -437,15 +440,18 @@ struct Derivedupcanalysis {
437440
void fillHistogramsV0(TCand cand, TCollision coll, int gap)
438441
{
439442
float invMass = 0;
440-
float centrality = -1.f;
443+
float ft0ampl = -1.f;
441444
if (gap == 0) {
442-
centrality = coll.totalFT0AmplitudeC();
445+
ft0ampl = coll.totalFT0AmplitudeC();
443446
} else if (gap == 1) {
444-
centrality = coll.totalFT0AmplitudeA();
447+
ft0ampl = coll.totalFT0AmplitudeA();
445448
}
446449
float pT = cand.pt();
447450
float rapidity = 1e6;
448451

452+
// c x tau
453+
float ctau = 0;
454+
449455
float tpcNsigmaPos = 0;
450456
float tpcNsigmaNeg = 0;
451457
float tofDeltaTPos = 0;
@@ -466,6 +472,7 @@ struct Derivedupcanalysis {
466472
histos.fill(HIST("generalQA/h2dArmenterosSelected"), cand.alpha(), cand.qtarm());
467473
invMass = cand.mK0Short();
468474
rapidity = cand.yK0Short();
475+
ctau = cand.distovertotmom(coll.posX(), coll.posY(), coll.posZ()) * o2::constants::physics::MassK0Short;
469476
if (PIDConfigurations.doTOFQA) {
470477
tofDeltaTPos = cand.posTOFDeltaTK0Pi();
471478
tofDeltaTNeg = cand.negTOFDeltaTK0Pi();
@@ -477,6 +484,7 @@ struct Derivedupcanalysis {
477484
} else if (partID == 1) {
478485
invMass = cand.mLambda();
479486
rapidity = cand.yLambda();
487+
ctau = cand.distovertotmom(coll.posX(), coll.posY(), coll.posZ()) * o2::constants::physics::MassLambda0;
480488
if (PIDConfigurations.doTOFQA) {
481489
tofDeltaTPos = cand.posTOFDeltaTLaPr();
482490
tofDeltaTNeg = cand.negTOFDeltaTLaPi();
@@ -488,6 +496,7 @@ struct Derivedupcanalysis {
488496
} else if (partID == 2) {
489497
invMass = cand.mAntiLambda();
490498
rapidity = cand.yLambda();
499+
ctau = cand.distovertotmom(coll.posX(), coll.posY(), coll.posZ()) * o2::constants::physics::MassLambda0Bar;
491500
if (PIDConfigurations.doTOFQA) {
492501
tofDeltaTPos = cand.posTOFDeltaTLaPi();
493502
tofDeltaTNeg = cand.negTOFDeltaTLaPr();
@@ -501,7 +510,7 @@ struct Derivedupcanalysis {
501510
}
502511

503512
histos.fill(HIST(kParticlenames[partID]) + HIST("/h2dMass"), invMass, gap);
504-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h7dMass"), centrality, pT, invMass, gap, coll.multNTracksGlobal(), rapidity, cand.eta());
513+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h7dMass"), ft0ampl, pT, invMass, gap, coll.multNTracksGlobal(), rapidity, cand.eta());
505514
if (doKienmaticQA) {
506515
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosEtaPt"), pT, cand.positiveeta(), gap);
507516
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegEtaPt"), pT, cand.negativeeta(), gap);
@@ -512,41 +521,43 @@ struct Derivedupcanalysis {
512521
histos.fill(HIST(kParticlenames[partID]) + HIST("/hNegDCAToPV"), cand.dcanegtopv());
513522
histos.fill(HIST(kParticlenames[partID]) + HIST("/hDCADaughters"), cand.dcaV0daughters());
514523
histos.fill(HIST(kParticlenames[partID]) + HIST("/hPointingAngle"), std::acos(cand.v0cosPA()));
524+
histos.fill(HIST(kParticlenames[partID]) + HIST("/hCosPA"), cand.v0cosPA());
515525
histos.fill(HIST(kParticlenames[partID]) + HIST("/hV0Radius"), cand.v0radius());
516526
histos.fill(HIST(kParticlenames[partID]) + HIST("/h2dPositiveITSvsTPCpts"), posTrackExtra.tpcCrossedRows(), posTrackExtra.itsNCls());
517527
histos.fill(HIST(kParticlenames[partID]) + HIST("/h2dNegativeITSvsTPCpts"), negTrackExtra.tpcCrossedRows(), negTrackExtra.itsNCls());
528+
histos.fill(HIST(kParticlenames[partID]) + HIST("/hNctau"), pT, ctau);
518529
}
519530
if (doDetectPropQA == 1) {
520-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h6dDetectPropVsCentrality"), centrality, posDetMap, posITSclusMap, negDetMap, negITSclusMap, pT);
521-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h4dPosDetectPropVsCentrality"), centrality, posTrackExtra.detectorMap(), posTrackExtra.itsClusterMap(), pT);
522-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h4dNegDetectPropVsCentrality"), centrality, negTrackExtra.detectorMap(), negTrackExtra.itsClusterMap(), pT);
531+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h6dDetectPropVsCentrality"), ft0ampl, posDetMap, posITSclusMap, negDetMap, negITSclusMap, pT);
532+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h4dPosDetectPropVsCentrality"), ft0ampl, posTrackExtra.detectorMap(), posTrackExtra.itsClusterMap(), pT);
533+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h4dNegDetectPropVsCentrality"), ft0ampl, negTrackExtra.detectorMap(), negTrackExtra.itsClusterMap(), pT);
523534
}
524535
if (doDetectPropQA == 2) {
525-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h7dPosDetectPropVsCentrality"), centrality, posDetMap, posITSclusMap, negDetMap, negITSclusMap, pT, invMass);
526-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h5dPosDetectPropVsCentrality"), centrality, posTrackExtra.detectorMap(), posTrackExtra.itsClusterMap(), pT, invMass);
527-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h5dNegDetectPropVsCentrality"), centrality, negTrackExtra.detectorMap(), negTrackExtra.itsClusterMap(), pT, invMass);
536+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h7dPosDetectPropVsCentrality"), ft0ampl, posDetMap, posITSclusMap, negDetMap, negITSclusMap, pT, invMass);
537+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h5dPosDetectPropVsCentrality"), ft0ampl, posTrackExtra.detectorMap(), posTrackExtra.itsClusterMap(), pT, invMass);
538+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h5dNegDetectPropVsCentrality"), ft0ampl, negTrackExtra.detectorMap(), negTrackExtra.itsClusterMap(), pT, invMass);
528539
}
529540
if (PIDConfigurations.doTPCQA) {
530-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignal"), centrality, pT, posTrackExtra.tpcSignal());
531-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignal"), centrality, pT, negTrackExtra.tpcSignal());
532-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignalVsTrackPtot"), centrality, cand.positivept() * std::cosh(cand.positiveeta()), posTrackExtra.tpcSignal());
533-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignalVsTrackPtot"), centrality, cand.negativept() * std::cosh(cand.negativeeta()), negTrackExtra.tpcSignal());
534-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignalVsTrackPt"), centrality, cand.positivept(), posTrackExtra.tpcSignal());
535-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignalVsTrackPt"), centrality, cand.negativept(), negTrackExtra.tpcSignal());
536-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPCvsTrackPt"), centrality, cand.positivept(), posTrackExtra.tpcNSigmaPi());
537-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPCvsTrackPt"), centrality, cand.negativept(), negTrackExtra.tpcNSigmaPi());
538-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPCvsTrackPtot"), centrality, cand.positivept() * std::cosh(cand.positiveeta()), tpcNsigmaPos);
539-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPCvsTrackPtot"), centrality, cand.negativept() * std::cosh(cand.negativeeta()), tpcNsigmaNeg);
540-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPC"), centrality, pT, tpcNsigmaPos);
541-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPC"), centrality, pT, tpcNsigmaNeg);
541+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignal"), ft0ampl, pT, posTrackExtra.tpcSignal());
542+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignal"), ft0ampl, pT, negTrackExtra.tpcSignal());
543+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignalVsTrackPtot"), ft0ampl, cand.positivept() * std::cosh(cand.positiveeta()), posTrackExtra.tpcSignal());
544+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignalVsTrackPtot"), ft0ampl, cand.negativept() * std::cosh(cand.negativeeta()), negTrackExtra.tpcSignal());
545+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTPCsignalVsTrackPt"), ft0ampl, cand.positivept(), posTrackExtra.tpcSignal());
546+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTPCsignalVsTrackPt"), ft0ampl, cand.negativept(), negTrackExtra.tpcSignal());
547+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPCvsTrackPt"), ft0ampl, cand.positivept(), posTrackExtra.tpcNSigmaPi());
548+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPCvsTrackPt"), ft0ampl, cand.negativept(), negTrackExtra.tpcNSigmaPi());
549+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPCvsTrackPtot"), ft0ampl, cand.positivept() * std::cosh(cand.positiveeta()), tpcNsigmaPos);
550+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPCvsTrackPtot"), ft0ampl, cand.negativept() * std::cosh(cand.negativeeta()), tpcNsigmaNeg);
551+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosNsigmaTPC"), ft0ampl, pT, tpcNsigmaPos);
552+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegNsigmaTPC"), ft0ampl, pT, tpcNsigmaNeg);
542553
}
543554
if (PIDConfigurations.doTOFQA) {
544-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaTvsTrackPt"), centrality, cand.positivept(), tofDeltaTPos);
545-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaTvsTrackPt"), centrality, cand.negativept(), tofDeltaTNeg);
546-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaT"), centrality, pT, tofDeltaTPos);
547-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaT"), centrality, pT, tofDeltaTNeg);
548-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaTvsTrackPtot"), centrality, cand.positivept() * std::cosh(cand.positiveeta()), tofDeltaTPos);
549-
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaTvsTrackPtot"), centrality, cand.negativept() * std::cosh(cand.negativeeta()), tofDeltaTNeg);
555+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaTvsTrackPt"), ft0ampl, cand.positivept(), tofDeltaTPos);
556+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaTvsTrackPt"), ft0ampl, cand.negativept(), tofDeltaTNeg);
557+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaT"), ft0ampl, pT, tofDeltaTPos);
558+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaT"), ft0ampl, pT, tofDeltaTNeg);
559+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dPosTOFdeltaTvsTrackPtot"), ft0ampl, cand.positivept() * std::cosh(cand.positiveeta()), tofDeltaTPos);
560+
histos.fill(HIST(kParticlenames[partID]) + HIST("/h3dNegTOFdeltaTvsTrackPtot"), ft0ampl, cand.negativept() * std::cosh(cand.negativeeta()), tofDeltaTNeg);
550561
}
551562
}
552563

@@ -955,6 +966,7 @@ struct Derivedupcanalysis {
955966
histos.add("generalQA/hNegDCAToPV", "hNegDCAToPV", kTH1F, {axisDCAtoPV});
956967
histos.add("generalQA/hDCADaughters", "hDCADaughters", kTH1F, {axisDCAdau});
957968
histos.add("generalQA/hPointingAngle", "hPointingAngle", kTH1F, {axisPointingAngle});
969+
histos.add("generalQA/hCosPA", "hCosPA", kTH1F, {axisCosPA});
958970
histos.add("generalQA/hV0Radius", "hV0Radius", kTH1F, {axisV0Radius});
959971
histos.add("generalQA/h2dPositiveITSvsTPCpts", "h2dPositiveITSvsTPCpts", kTH2F, {axisTPCrows, axisITSclus});
960972
histos.add("generalQA/h2dNegativeITSvsTPCpts", "h2dNegativeITSvsTPCpts", kTH2F, {axisTPCrows, axisITSclus});
@@ -1427,6 +1439,10 @@ struct Derivedupcanalysis {
14271439
if (std::fabs(v0.positiveeta()) < daughterEtaCut)
14281440
bitMap.set(selPosEta);
14291441

1442+
// c x tau
1443+
float ctauK0short = v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassK0Short;
1444+
float ctauLambda = v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassLambda0;
1445+
14301446
auto posTrackExtra = v0.template posTrackExtra_as<DauTracks>();
14311447
auto negTrackExtra = v0.template negTrackExtra_as<DauTracks>();
14321448

@@ -1510,9 +1526,9 @@ struct Derivedupcanalysis {
15101526
bitMap.set(selNegNotTPCOnly);
15111527

15121528
// proper lifetime
1513-
if (v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassLambda0 < lifetimecutV0->get("lifetimecutLambda"))
1529+
if (ctauLambda < nCtauCutV0->get("lifetimecutLambda") * ctaulambdaPDG)
15141530
bitMap.set(selLambdaCTau);
1515-
if (v0.distovertotmom(collision.posX(), collision.posY(), collision.posZ()) * o2::constants::physics::MassK0Short < lifetimecutV0->get("lifetimecutK0S"))
1531+
if (ctauK0short < nCtauCutV0->get("lifetimecutK0S") * ctauk0shortPDG)
15161532
bitMap.set(selK0ShortCTau);
15171533

15181534
// armenteros
@@ -1674,6 +1690,7 @@ struct Derivedupcanalysis {
16741690
histos.fill(HIST("generalQA/hNegDCAToPV"), v0.dcanegtopv());
16751691
histos.fill(HIST("generalQA/hDCADaughters"), v0.dcaV0daughters());
16761692
histos.fill(HIST("generalQA/hPointingAngle"), std::acos(v0.v0cosPA()));
1693+
histos.fill(HIST("generalQA/hCosPA"), v0.v0cosPA());
16771694
histos.fill(HIST("generalQA/hV0Radius"), v0.v0radius());
16781695
histos.fill(HIST("generalQA/h2dPositiveITSvsTPCpts"), posTrackExtra.tpcCrossedRows(), posTrackExtra.itsNCls());
16791696
histos.fill(HIST("generalQA/h2dNegativeITSvsTPCpts"), negTrackExtra.tpcCrossedRows(), negTrackExtra.itsNCls());

PWGLF/Utils/strangenessMasks.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,12 @@ enum SelectionsCombined : int { selV0CosPA = 0,
119119

120120
static constexpr int kSelNum = static_cast<int>(SelectionsCombined::selCount);
121121

122-
// constants
123-
const float ctauxiPDG = 4.91; // from PDG
124-
const float ctauomegaPDG = 2.461; // from PDG
122+
// constants in cm
123+
const float ctauxiPDG = 4.91;
124+
const float ctauomegaPDG = 2.46;
125+
126+
const float ctauk0shortPDG = 2.68;
127+
const float ctaulambdaPDG = 7.85;
125128

126129
// bit masks
127130
std::bitset<kSelNum> maskTopologicalV0;

0 commit comments

Comments
 (0)