Skip to content

Commit 9f78022

Browse files
authored
Add bach-baryon cuts, tuning (#2751)
* Add bach-baryon cuts, tuning * Clang-format fixes --------- Co-authored-by: David Dobrigkeit Chinellato <david.dobrigkeit.chinellato.cern.ch>
1 parent 19b240f commit 9f78022

3 files changed

Lines changed: 85 additions & 4 deletions

File tree

PWGLF/DataModel/LFStrangenessTables.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ DECLARE_SOA_COLUMN(DCAZCascToPV, dcaZCascToPV, float); //!
334334
DECLARE_SOA_COLUMN(PositionCovMat, positionCovMat, float[6]); //! covariance matrix elements
335335
DECLARE_SOA_COLUMN(MomentumCovMat, momentumCovMat, float[6]); //! covariance matrix elements
336336

337+
// Selection to avoid spurious invariant mass correlation
338+
// bachelor-baryon cosine of pointing angle / DCA to PV
339+
DECLARE_SOA_COLUMN(BachBaryonCosPA, bachBaryonCosPA, float); //! avoid bach-baryon correlated inv mass structure in analysis
340+
DECLARE_SOA_COLUMN(BachBaryonDCAxyToPV, bachBaryonDCAxyToPV, float); //! avoid bach-baryon correlated inv mass structure in analysis
341+
337342
// Saved from strangeness tracking
338343
DECLARE_SOA_COLUMN(MatchingChi2, matchingChi2, float); //!
339344
DECLARE_SOA_COLUMN(TopologyChi2, topologyChi2, float); //!
@@ -401,6 +406,7 @@ DECLARE_SOA_TABLE(StoredCascDatas, "AOD", "CASCDATA", //!
401406
cascdata::Px, cascdata::Py, cascdata::Pz,
402407
cascdata::DCAV0Daughters, cascdata::DCACascDaughters,
403408
cascdata::DCAPosToPV, cascdata::DCANegToPV, cascdata::DCABachToPV, cascdata::DCAXYCascToPV, cascdata::DCAZCascToPV,
409+
cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV,
404410

405411
// Dynamic columns
406412
cascdata::Pt<cascdata::Px, cascdata::Py>,
@@ -431,6 +437,7 @@ DECLARE_SOA_TABLE(StoredTraCascDatas, "AOD", "TRACASCDATA", //!
431437
cascdata::Px, cascdata::Py, cascdata::Pz,
432438
cascdata::DCAV0Daughters, cascdata::DCACascDaughters,
433439
cascdata::DCAPosToPV, cascdata::DCANegToPV, cascdata::DCABachToPV, cascdata::DCAXYCascToPV, cascdata::DCAZCascToPV,
440+
cascdata::BachBaryonCosPA, cascdata::BachBaryonDCAxyToPV,
434441
cascdata::MatchingChi2, cascdata::TopologyChi2, cascdata::ItsClsSize,
435442

436443
// Dynamic columns

PWGLF/TableProducer/cascadebuilder.cxx

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ struct cascadeBuilder {
124124
Configurable<bool> d_GenerateOnlyTrackedCascades{"d_GenerateOnlyTrackedCascades", false, "Skip cascades that aren't tracked"};
125125
Configurable<bool> d_QA_checkMC{"d_QA_checkMC", true, "check MC truth in QA"};
126126
Configurable<bool> d_QA_checkdEdx{"d_QA_checkdEdx", false, "check dEdx in QA"};
127+
Configurable<bool> calculateBachBaryonVars{"calculateBachBaryonVars", false, "calculate variables for removing cascade inv mass bump"};
127128

128129
// CCDB options
129130
Configurable<std::string> ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
@@ -196,6 +197,8 @@ struct cascadeBuilder {
196197
float mOmega;
197198
float yXi;
198199
float yOmega;
200+
float bachBaryonCosPA;
201+
float bachBaryonDCAxyToPV;
199202
} cascadecandidate;
200203

201204
o2::track::TrackParCov lBachelorTrack;
@@ -518,6 +521,10 @@ struct cascadeBuilder {
518521
matCorrCascade = o2::base::Propagator::MatCorrType::USEMatCorrTGeo;
519522
if (useMatCorrTypeCasc == 2)
520523
matCorrCascade = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
524+
525+
// initialize bach baryon variables just in case
526+
cascadecandidate.bachBaryonCosPA = 1; // would ordinarily reject all
527+
cascadecandidate.bachBaryonDCAxyToPV = 0; // would ordinarily reject all
521528
}
522529

523530
void initCCDB(aod::BCsWithTimestamps::iterator const& bc)
@@ -568,6 +575,60 @@ struct cascadeBuilder {
568575
}
569576
}
570577

578+
template <typename TCollision, typename TTrack>
579+
void processBachBaryonVariables(TCollision const& collision, TTrack const& track1, TTrack const& track2)
580+
{
581+
cascadecandidate.bachBaryonCosPA = 0; // would ordinarily accept all
582+
cascadecandidate.bachBaryonDCAxyToPV = 1e+3; // would ordinarily accept all
583+
584+
// create tracks from table rows
585+
o2::track::TrackParCov tr1 = getTrackParCov(track1);
586+
o2::track::TrackParCov tr2 = getTrackParCov(track2);
587+
588+
//---/---/---/
589+
// Move close to minima
590+
int nCand = 0;
591+
try {
592+
nCand = fitter.process(tr1, tr2);
593+
} catch (...) {
594+
registry.fill(HIST("hCaughtExceptions"), 0.5f);
595+
LOG(error) << "Exception caught in DCA fitter process call!";
596+
return;
597+
}
598+
if (nCand == 0)
599+
return; // variables are such that candidate is accepted (not obvious...)
600+
601+
// Calculate DCAxy of the cascade (with bending)
602+
o2::track::TrackPar wrongV0 = fitter.createParentTrackPar();
603+
wrongV0.setAbsCharge(0); // charge zero
604+
gpu::gpustd::array<float, 2> dcaInfo;
605+
dcaInfo[0] = 999;
606+
dcaInfo[1] = 999;
607+
608+
// bachelor-baryon DCAxy to PV
609+
o2::base::Propagator::Instance()->propagateToDCABxByBz({collision.posX(), collision.posY(), collision.posZ()}, wrongV0, 2.f, matCorr, &dcaInfo);
610+
cascadecandidate.bachBaryonDCAxyToPV = dcaInfo[0];
611+
612+
const auto& vtx = fitter.getPCACandidate();
613+
if (!fitter.isPropagateTracksToVertexDone())
614+
return;
615+
616+
std::array<float, 3> tr1p;
617+
std::array<float, 3> tr2p;
618+
619+
fitter.getTrack(1).getPxPyPzGlo(tr1p);
620+
fitter.getTrack(2).getPxPyPzGlo(tr2p);
621+
622+
// bachelor-baryon CosPA
623+
cascadecandidate.bachBaryonCosPA = RecoDecay::cpa(
624+
array{collision.posX(), collision.posY(), collision.posZ()},
625+
array{vtx[0], vtx[1], vtx[2]},
626+
array{tr1p[0] + tr2p[0], tr1p[1] + tr2p[1], tr1p[2] + tr2p[2]});
627+
628+
// Potentially also to be considered: bachelor-baryon DCA (between the two tracks)
629+
// to be added here as complementary information in the future
630+
}
631+
571632
template <class TTrackTo, typename TCascObject>
572633
bool buildCascadeCandidate(TCascObject const& cascade)
573634
{
@@ -582,6 +643,16 @@ struct cascadeBuilder {
582643
auto negTrack = v0.template negTrack_as<TTrackTo>();
583644
auto const& collision = cascade.collision();
584645

646+
if (calculateBachBaryonVars) {
647+
// Calculates properties of the V0 comprised of bachelor and baryon in the cascade
648+
// baryon: distinguished via bachelor charge
649+
if (bachTrack.sign() < 0) {
650+
processBachBaryonVariables(collision, bachTrack, posTrack);
651+
} else {
652+
processBachBaryonVariables(collision, bachTrack, negTrack);
653+
}
654+
}
655+
585656
// value 0.5: any considered cascade
586657
statisticsRegistry.cascstats[kCascAll]++;
587658

@@ -785,7 +856,8 @@ struct cascadeBuilder {
785856
cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2], // <--- redundant but ok
786857
cascadecandidate.v0dcadau, cascadecandidate.dcacascdau,
787858
cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv,
788-
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz); // <--- no corresponding stratrack information available
859+
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz, // <--- no corresponding stratrack information available
860+
cascadecandidate.bachBaryonCosPA, cascadecandidate.bachBaryonDCAxyToPV);
789861

790862
// populate cascade covariance matrices if required by any other task
791863
if (createCascCovMats) {
@@ -853,7 +925,8 @@ struct cascadeBuilder {
853925
cascadecandidate.bachP[2] + cascadecandidate.v0mompos[2] + cascadecandidate.v0momneg[2],
854926
cascadecandidate.v0dcadau, cascadecandidate.dcacascdau,
855927
cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv,
856-
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz);
928+
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz,
929+
cascadecandidate.bachBaryonCosPA, cascadecandidate.bachBaryonDCAxyToPV);
857930

858931
// populate cascade covariance matrices if required by any other task
859932
if (createCascCovMats) {
@@ -1003,6 +1076,7 @@ struct cascadeBuilder {
10031076
cascadecandidate.v0dcadau, cascadecandidate.dcacascdau,
10041077
cascadecandidate.v0dcapostopv, cascadecandidate.v0dcanegtopv,
10051078
cascadecandidate.bachDCAxy, cascadecandidate.cascDCAxy, cascadecandidate.cascDCAz, // <--- stratrack (cascDCAxy/z)
1079+
cascadecandidate.bachBaryonCosPA, cascadecandidate.bachBaryonDCAxyToPV, // <--- anti-inv-mass structure
10061080
trackedCascade.matchingChi2(), trackedCascade.topologyChi2(), trackedCascade.itsClsSize()); // <--- stratrack fit info
10071081
}
10081082
}

PWGLF/TableProducer/cascadefinder.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ struct cascadefinder {
267267
v0.dcapostopv(),
268268
v0.dcanegtopv(),
269269
t0id.dcaXY(),
270-
dcaInfo[0], dcaInfo[1]);
270+
dcaInfo[0], dcaInfo[1], 0, 1e+3);
271271
} // end if cascade recoed
272272
} // end loop over bachelor
273273
} // end if v0 recoed
@@ -357,7 +357,7 @@ struct cascadefinder {
357357
v0.dcapostopv(),
358358
v0.dcanegtopv(),
359359
t0id.dcaXY(),
360-
dcaInfo[0], dcaInfo[1]);
360+
dcaInfo[0], dcaInfo[1], 0, 1e+3);
361361
} // end if cascade recoed
362362
} // end loop over bachelor
363363
} // end if v0 recoed

0 commit comments

Comments
 (0)