Skip to content

Commit 4099de3

Browse files
[PWGDQ] Fixes in dqEfficiency_withassoc and adding muon refit in tableMakerMC (#6815)
* Fixes for dqEff * Clang format * Global muon refit in tableMakerMC * Fixing typo * Fixing comilation issue * Fix typo Co-authored-by: Sergio Garcia <47090312+singiamtel@users.noreply.github.com> * Fix typo Co-authored-by: Sergio Garcia <47090312+singiamtel@users.noreply.github.com> * Fix typo Co-authored-by: Sergio Garcia <47090312+singiamtel@users.noreply.github.com> * Fix typo Co-authored-by: Sergio Garcia <47090312+singiamtel@users.noreply.github.com> * Merge * Fixing logic of parameter recomputation * Fix dca calculation for muons --------- Co-authored-by: Sergio Garcia <47090312+singiamtel@users.noreply.github.com>
1 parent c3ae264 commit 4099de3

4 files changed

Lines changed: 81 additions & 37 deletions

File tree

PWGDQ/Core/VarManager.h

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2164,15 +2164,12 @@ void VarManager::FillTrackCollision(T const& track, C const& collision, float* v
21642164
}
21652165
if constexpr ((fillMap & MuonCov) > 0 || (fillMap & ReducedMuonCov) > 0) {
21662166

2167-
o2::dataformats::GlobalFwdTrack propmuon = PropagateMuon(track, collision);
21682167
o2::dataformats::GlobalFwdTrack propmuonAtDCA = PropagateMuon(track, collision, kToDCA);
21692168

21702169
float dcaX = (propmuonAtDCA.getX() - collision.posX());
21712170
float dcaY = (propmuonAtDCA.getY() - collision.posY());
21722171
float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY);
21732172
values[kMuonPDca] = track.p() * dcaXY;
2174-
values[kMuonDCAx] = dcaX;
2175-
values[kMuonDCAy] = dcaY;
21762173
}
21772174
}
21782175

@@ -2703,14 +2700,7 @@ void VarManager::FillPairVertexing(C const& collision, T const& t1, T const& t2,
27032700
t2.c1PtX(), t2.c1PtY(), t2.c1PtPhi(), t2.c1PtTgl(), t2.c1Pt21Pt2()};
27042701
SMatrix55 t2covs(v2.begin(), v2.end());
27052702
o2::track::TrackParCovFwd pars2{t2.z(), t2pars, t2covs, chi22};
2706-
if (std::abs(t2.cXX()) < 1.0e-6) {
2707-
// TODO: Some rare fwd-tracks have very small covariances and the DCAFitter throws a fatal!
2708-
// This is a protection, but please check for the reason and eventually change the behaviour.
2709-
// At the moment, when these tracks are encountered, the vertexing quantities are initialized to default values (-999)
2710-
procCode = 0;
2711-
} else {
2712-
procCode = fgFitterTwoProngFwd.process(pars1, pars2);
2713-
}
2703+
procCode = fgFitterTwoProngFwd.process(pars1, pars2);
27142704
} else {
27152705
return;
27162706
}

PWGDQ/TableProducer/tableMakerMC_withAssoc.cxx

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,14 @@ struct TableMakerMC {
161161

162162
// CCDB connection configurables
163163
Configurable<std::string> fConfigCcdbUrl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"};
164-
Configurable<bool> fPropMuon{"cfgPropMuon", false, "Propgate muon tracks through absorber"};
165164
Configurable<std::string> geoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"};
166165
Configurable<std::string> grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"};
167166
Configurable<std::string> grpmagPathRun2{"grpmagPathRun2", "GLO/GRP/GRP", "CCDB path of the GRPObject (Usage for Run 2)"};
168167

168+
// Muon related options
169+
Configurable<bool> fPropMuon{"cfgPropMuon", true, "Propagate muon tracks through absorber (do not use if applying pairing)"};
170+
Configurable<bool> fRefitGlobalMuon{"cfgRefitGlobalMuon", true, "Correct global muon parameters"};
171+
169172
Service<o2::ccdb::BasicCCDBManager> fCCDB;
170173

171174
o2::parameters::GRPObject* grpmagrun2 = nullptr; // for run 2, we access the GRPObject from GLO/GRP/GRP
@@ -648,7 +651,7 @@ struct TableMakerMC {
648651
}
649652

650653
template <uint32_t TMuonFillMap, typename TEvent, typename TMuons>
651-
void skimMuons(TEvent const& collision, TMuons const& muons, FwdTrackAssoc const& muonAssocs, aod::McParticles const& mcTracks)
654+
void skimMuons(TEvent const& collision, TMuons const& muons, FwdTrackAssoc const& muonAssocs, aod::McParticles const& mcTracks, MFTTracks const& /*mftTracks*/)
652655
{
653656
// Skim the fwd-tracks (muons)
654657
// Loop over the collision-track associations, recompute track properties depending on the collision assigned, and apply track cuts for selection
@@ -670,7 +673,18 @@ struct TableMakerMC {
670673
VarManager::FillTrack<TMuonFillMap>(muon);
671674
// NOTE: If a muon is associated to multiple collisions, depending on the selections,
672675
// it may be accepted for some associations and rejected for other
673-
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
676+
if (fPropMuon) {
677+
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
678+
}
679+
// recalculte pDca and global muon kinematics
680+
if (static_cast<int>(muon.trackType()) < 2 && fRefitGlobalMuon) {
681+
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
682+
auto mfttrack = muon.template matchMFTTrack_as<MFTTracks>();
683+
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
684+
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
685+
} else {
686+
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
687+
}
674688

675689
if (fDoDetailedQA) {
676690
fHistMan->FillHistClass("Muons_BeforeCuts", VarManager::fgValues);
@@ -770,18 +784,31 @@ struct TableMakerMC {
770784
mftIdx = fMftIndexMap[muon.matchMFTTrackId()];
771785
}
772786
}
773-
muonBasic(reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap[muon.globalIndex()], muon.pt(), muon.eta(), muon.phi(), muon.sign(), 0);
774-
muonExtra(muon.nClusters(), muon.pDca(), muon.rAtAbsorberEnd(),
787+
VarManager::FillTrack<TMuonFillMap>(muon);
788+
if (fPropMuon) {
789+
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
790+
}
791+
// recalculte pDca and global muon kinematics
792+
if (static_cast<int>(muon.trackType()) < 2 && fRefitGlobalMuon) {
793+
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
794+
auto mfttrack = muon.template matchMFTTrack_as<MFTTracks>();
795+
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
796+
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
797+
} else {
798+
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
799+
}
800+
muonBasic(reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap[muon.globalIndex()], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], muon.sign(), 0);
801+
muonExtra(muon.nClusters(), VarManager::fgValues[VarManager::kMuonPDca], VarManager::fgValues[VarManager::kMuonRAtAbsorberEnd],
775802
muon.chi2(), muon.chi2MatchMCHMID(), muon.chi2MatchMCHMFT(),
776803
muon.matchScoreMCHMFT(),
777804
muon.mchBitMap(), muon.midBitMap(),
778-
muon.midBoards(), muon.trackType(), muon.fwdDcaX(), muon.fwdDcaY(),
805+
muon.midBoards(), muon.trackType(), VarManager::fgValues[VarManager::kMuonDCAx], VarManager::fgValues[VarManager::kMuonDCAy],
779806
muon.trackTime(), muon.trackTimeRes());
780807
if constexpr (static_cast<bool>(TMuonFillMap & VarManager::ObjTypes::MuonCov)) {
781-
muonCov(muon.x(), muon.y(), muon.z(), muon.phi(), muon.tgl(), muon.sign() / muon.pt(),
782-
muon.cXX(), muon.cXY(), muon.cYY(), muon.cPhiX(), muon.cPhiY(), muon.cPhiPhi(),
783-
muon.cTglX(), muon.cTglY(), muon.cTglPhi(), muon.cTglTgl(), muon.c1PtX(), muon.c1PtY(),
784-
muon.c1PtPhi(), muon.c1PtTgl(), muon.c1Pt21Pt2());
808+
muonCov(VarManager::fgValues[VarManager::kX], VarManager::fgValues[VarManager::kY], VarManager::fgValues[VarManager::kZ], VarManager::fgValues[VarManager::kPhi], VarManager::fgValues[VarManager::kTgl], muon.sign() / VarManager::fgValues[VarManager::kPt],
809+
VarManager::fgValues[VarManager::kMuonCXX], VarManager::fgValues[VarManager::kMuonCXY], VarManager::fgValues[VarManager::kMuonCYY], VarManager::fgValues[VarManager::kMuonCPhiX], VarManager::fgValues[VarManager::kMuonCPhiY], VarManager::fgValues[VarManager::kMuonCPhiPhi],
810+
VarManager::fgValues[VarManager::kMuonCTglX], VarManager::fgValues[VarManager::kMuonCTglY], VarManager::fgValues[VarManager::kMuonCTglPhi], VarManager::fgValues[VarManager::kMuonCTglTgl], VarManager::fgValues[VarManager::kMuonC1Pt2X], VarManager::fgValues[VarManager::kMuonC1Pt2Y],
811+
VarManager::fgValues[VarManager::kMuonC1Pt2Phi], VarManager::fgValues[VarManager::kMuonC1Pt2Tgl], VarManager::fgValues[VarManager::kMuonC1Pt21Pt2]);
785812
}
786813
if (muon.has_mcParticle()) {
787814
auto mctrack = muon.template mcParticle_as<aod::McParticles>();
@@ -874,9 +901,9 @@ struct TableMakerMC {
874901
auto groupedMFTIndices = mftAssocs.sliceBy(mfttrackIndicesPerCollision, origIdx);
875902
skimMFT<TMFTFillMap>(collision, mftTracks, groupedMFTIndices);
876903
}
877-
if constexpr (static_cast<bool>(TMuonFillMap)) {
904+
if constexpr (static_cast<bool>(TMuonFillMap) && static_cast<bool>(TMFTFillMap)) {
878905
auto groupedMuonIndices = fwdTrackAssocs.sliceBy(fwdtrackIndicesPerCollision, origIdx);
879-
skimMuons<TMuonFillMap>(collision, muons, groupedMuonIndices, mcParticles);
906+
skimMuons<TMuonFillMap>(collision, muons, groupedMuonIndices, mcParticles, mftTracks);
880907
}
881908
} // end loop over skimmed collisions
882909
}

PWGDQ/TableProducer/tableMaker_withAssoc.cxx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,8 @@ struct TableMaker {
215215
Configurable<bool> fPropTrack{"cfgPropTrack", true, "Propgate tracks to associated collision to recalculate DCA and momentum vector"};
216216

217217
// Muon related options
218-
Configurable<bool> fPropMuon{"cfgPropMuon", true, "Propgate muon tracks through absorber (do not use if applying pairing)"};
218+
Configurable<bool> fPropMuon{"cfgPropMuon", true, "Propagate muon tracks through absorber (do not use if applying pairing)"};
219+
Configurable<bool> fRefitGlobalMuon{"cfgRefitGlobalMuon", true, "Correct global muon parameters"};
219220

220221
Service<o2::ccdb::BasicCCDBManager> fCCDB;
221222

@@ -763,7 +764,7 @@ struct TableMaker {
763764
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
764765
}
765766
// recalculte pDca and global muon kinematics
766-
if (static_cast<int>(muon.trackType()) < 2) {
767+
if (static_cast<int>(muon.trackType()) < 2 && fRefitGlobalMuon) {
767768
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
768769
auto mfttrack = muon.template matchMFTTrack_as<MFTTracks>();
769770
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
@@ -832,6 +833,19 @@ struct TableMaker {
832833
mftIdx = fMftIndexMap[muon.matchMFTTrackId()];
833834
}
834835
}
836+
VarManager::FillTrack<TMuonFillMap>(muon);
837+
if (fPropMuon) {
838+
VarManager::FillPropagateMuon<TMuonFillMap>(muon, collision);
839+
}
840+
// recalculte pDca and global muon kinematics
841+
if (static_cast<int>(muon.trackType()) < 2 && fRefitGlobalMuon) {
842+
auto muontrack = muon.template matchMCHTrack_as<TMuons>();
843+
auto mfttrack = muon.template matchMFTTrack_as<MFTTracks>();
844+
VarManager::FillTrackCollision<TMuonFillMap>(muontrack, collision);
845+
VarManager::FillGlobalMuonRefit<TMuonFillMap>(muontrack, mfttrack, collision);
846+
} else {
847+
VarManager::FillTrackCollision<TMuonFillMap>(muon, collision);
848+
}
835849
muonBasic(reducedEventIdx, mchIdx, mftIdx, fFwdTrackFilterMap[muon.globalIndex()], VarManager::fgValues[VarManager::kPt], VarManager::fgValues[VarManager::kEta], VarManager::fgValues[VarManager::kPhi], muon.sign(), 0);
836850
muonExtra(muon.nClusters(), VarManager::fgValues[VarManager::kMuonPDca], VarManager::fgValues[VarManager::kMuonRAtAbsorberEnd],
837851
muon.chi2(), muon.chi2MatchMCHMID(), muon.chi2MatchMCHMFT(),

PWGDQ/Tasks/dqEfficiency_withAssoc.cxx

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,10 @@ struct AnalysisTrackSelection {
505505
int isig = 0;
506506
if (filterMap > 0) {
507507
for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) {
508-
if ((*sig).CheckSignal(false, track.reducedMCTrack())) {
509-
mcDecision |= (uint32_t(1) << isig);
508+
if (track.has_reducedMCTrack()) {
509+
if ((*sig).CheckSignal(false, track.reducedMCTrack())) {
510+
mcDecision |= (uint32_t(1) << isig);
511+
}
510512
}
511513
}
512514

@@ -771,8 +773,10 @@ struct AnalysisMuonSelection {
771773
int isig = 0;
772774
for (auto sig = fMCSignals.begin(); sig != fMCSignals.end(); sig++, isig++) {
773775
if constexpr ((TMuonFillMap & VarManager::ObjTypes::ReducedMuon) > 0) {
774-
if ((*sig).CheckSignal(false, track.reducedMCTrack())) {
775-
mcDecision |= (uint32_t(1) << isig);
776+
if (track.has_reducedMCTrack()) {
777+
if ((*sig).CheckSignal(false, track.reducedMCTrack())) {
778+
mcDecision |= (uint32_t(1) << isig);
779+
}
776780
}
777781
}
778782
}
@@ -1426,12 +1430,16 @@ struct AnalysisSameEventPairing {
14261430
int isig = 0;
14271431
mcDecision = 0;
14281432
for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) {
1429-
if ((*sig).CheckSignal(false, t1.reducedMCTrack(), t2.reducedMCTrack())) {
1430-
mcDecision |= (uint32_t(1) << isig);
1433+
if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
1434+
if ((*sig).CheckSignal(false, t1.reducedMCTrack(), t2.reducedMCTrack())) {
1435+
mcDecision |= (uint32_t(1) << isig);
1436+
}
14311437
}
14321438
} // end loop over MC signals
1433-
isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1434-
isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1439+
if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
1440+
isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1441+
isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1442+
}
14351443

14361444
VarManager::FillPair<TPairType, TTrackFillMap>(t1, t2);
14371445
if constexpr (TTwoProngFitter) {
@@ -1469,12 +1477,17 @@ struct AnalysisSameEventPairing {
14691477
int isig = 0;
14701478
mcDecision = 0;
14711479
for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) {
1472-
if ((*sig).CheckSignal(false, t1.reducedMCTrack(), t2.reducedMCTrack())) {
1473-
mcDecision |= (uint32_t(1) << isig);
1480+
if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
1481+
if ((*sig).CheckSignal(false, t1.reducedMCTrack(), t2.reducedMCTrack())) {
1482+
mcDecision |= (uint32_t(1) << isig);
1483+
}
14741484
}
14751485
} // end loop over MC signals
1476-
isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1477-
isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1486+
1487+
if (t1.has_reducedMCTrack() && t2.has_reducedMCTrack()) {
1488+
isCorrectAssoc_leg1 = (t1.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1489+
isCorrectAssoc_leg2 = (t2.reducedMCTrack().reducedMCevent() == event.reducedMCevent());
1490+
}
14781491

14791492
VarManager::FillPair<TPairType, TTrackFillMap>(t1, t2);
14801493
if constexpr (TTwoProngFitter) {

0 commit comments

Comments
 (0)