Skip to content

Commit 1802577

Browse files
committed
PWGEM/Dilepton: update treeCreatorMuonML.cxx
1 parent d41eb68 commit 1802577

File tree

1 file changed

+51
-13
lines changed

1 file changed

+51
-13
lines changed

PWGEM/Dilepton/TableProducer/treeCreatorMuonML.cxx

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ struct TreeCreatorMuonML {
252252
return true;
253253
}
254254

255-
template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks, typename TMFTTracksCov>
255+
template <bool withMFTCov, typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks, typename TMFTTracksCov>
256256
bool fillFwdTrackTable(TCollision const& collision, TFwdTrack const& fwdtrack, TFwdTracks const&, TMFTTracks const&, TMFTTracksCov const& mftCovs, const float hadronicRate)
257257
{
258258
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
@@ -325,15 +325,22 @@ struct TreeCreatorMuonML {
325325
float pDCA = mchtrack.p() * dcaXY_Matched;
326326
float rAtAbsorberEnd = fwdtrack.rAtAbsorberEnd(); // this works only for GlobalMuonTrack
327327

328-
auto mfttrackcov = mftCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
329-
o2::track::TrackParCovFwd mftsaAtMP = getTrackParCovFwdShift(mfttrack, mZShift, mfttrackcov); // values at innermost update
330-
mftsaAtMP.propagateToZhelix(glMuonCutGroup.matchingZ, mBz); // propagated to matching plane
331-
float xMatchedMFTatMP = mftsaAtMP.getX();
332-
float yMatchedMFTatMP = mftsaAtMP.getY();
333-
334-
auto muonAtMP = propagateMuon(mchtrack, mchtrack, collision, propagationPoint::kToMatchingPlane, glMuonCutGroup.matchingZ, mBz, mZShift); // propagated to matching plane
335-
float xMatchedMCHMIDatMP = muonAtMP.getX();
336-
float yMatchedMCHMIDatMP = muonAtMP.getY();
328+
float xMatchedMFTatMP = 999.f;
329+
float yMatchedMFTatMP = 999.f;
330+
float xMatchedMCHMIDatMP = 999.f;
331+
float yMatchedMCHMIDatMP = 999.f;
332+
333+
if constexpr (withMFTCov) {
334+
auto mfttrackcov = mftCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]);
335+
o2::track::TrackParCovFwd mftsaAtMP = getTrackParCovFwdShift(mfttrack, mZShift, mfttrackcov); // values at innermost update
336+
mftsaAtMP.propagateToZhelix(glMuonCutGroup.matchingZ, mBz); // propagated to matching plane
337+
xMatchedMFTatMP = mftsaAtMP.getX();
338+
yMatchedMFTatMP = mftsaAtMP.getY();
339+
340+
auto muonAtMP = propagateMuon(mchtrack, mchtrack, collision, propagationPoint::kToMatchingPlane, glMuonCutGroup.matchingZ, mBz, mZShift); // propagated to matching plane
341+
xMatchedMCHMIDatMP = muonAtMP.getX();
342+
yMatchedMCHMIDatMP = muonAtMP.getY();
343+
}
337344

338345
float deta = etaMatchedMCHMID - eta;
339346
float dphi = phiMatchedMCHMID - phi;
@@ -374,7 +381,7 @@ struct TreeCreatorMuonML {
374381
Preslice<aod::FwdTracks> perCollision = o2::aod::fwdtrack::collisionId;
375382

376383
std::unordered_map<int, int> map_mfttrackcovs;
377-
void processMatchingMFT(MyCollisionsMC const& collisions, aod::BCsWithTimestamps const&, MyFwdTracksMC const& fwdtracks, MyMFTTracksMC const& mfttracks, aod::MFTTracksCov const& mftCovs, aod::McParticles const&, aod::McCollisions const&)
384+
void processWithMFTCov(MyCollisionsMC const& collisions, aod::BCsWithTimestamps const&, MyFwdTracksMC const& fwdtracks, MyMFTTracksMC const& mfttracks, aod::MFTTracksCov const& mftCovs, aod::McParticles const&, aod::McCollisions const&)
378385
{
379386
for (const auto& mfttrackConv : mftCovs) {
380387
map_mfttrackcovs[mfttrackConv.matchMFTTrackId()] = mfttrackConv.globalIndex();
@@ -402,14 +409,45 @@ struct TreeCreatorMuonML {
402409
continue;
403410
}
404411

405-
fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, mftCovs, hadronicRate);
412+
fillFwdTrackTable<true>(collision, fwdtrack, fwdtracks, mfttracks, mftCovs, hadronicRate);
406413

407414
} // end of fwdtrack loop
408415
} // end of collision loop
409416

410417
map_mfttrackcovs.clear();
411418
}
412-
PROCESS_SWITCH(TreeCreatorMuonML, processMatchingMFT, "produce ML input for single track level", true);
419+
PROCESS_SWITCH(TreeCreatorMuonML, processWithMFTCov, "produce ML input for single track level", true);
420+
421+
void processWithoutMFTCov(MyCollisionsMC const& collisions, aod::BCsWithTimestamps const&, MyFwdTracksMC const& fwdtracks, MyMFTTracksMC const& mfttracks, aod::McParticles const&, aod::McCollisions const&)
422+
{
423+
for (const auto& collision : collisions) {
424+
auto bc = collision.template foundBC_as<aod::BCsWithTimestamps>();
425+
initCCDB(bc);
426+
427+
if (!collision.has_mcCollision()) {
428+
continue;
429+
}
430+
431+
if (!isSelectedCollision(collision)) {
432+
continue;
433+
}
434+
float hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSourceForCptFetcher) * 1.e-3; // kHz
435+
436+
auto fwdtracks_coll = fwdtracks.sliceBy(perCollision, collision.globalIndex());
437+
for (const auto& fwdtrack : fwdtracks_coll) {
438+
if (!fwdtrack.has_mcParticle()) {
439+
continue;
440+
}
441+
if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) {
442+
continue;
443+
}
444+
445+
fillFwdTrackTable<false>(collision, fwdtrack, fwdtracks, mfttracks, nullptr, hadronicRate);
446+
447+
} // end of fwdtrack loop
448+
} // end of collision loop
449+
}
450+
PROCESS_SWITCH(TreeCreatorMuonML, processWithoutMFTCov, "produce ML input for single track level", false);
413451
};
414452

415453
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)