@@ -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 ());
0 commit comments