|
14 | 14 | // This code will create data table for inputs to machine learning for electrons. |
15 | 15 | // Please write to: [email protected] |
16 | 16 |
|
17 | | -#include "Common/Core/CollisionTypeHelper.cxx" |
18 | | - |
19 | 17 | #include "PWGEM/Dilepton/DataModel/lmeeMLTables.h" |
20 | 18 |
|
21 | 19 | #include "Common/CCDB/RCTSelectionFlags.h" |
22 | 20 | #include "Common/CCDB/ctpRateFetcher.h" |
| 21 | +#include "Common/Core/CollisionTypeHelper.h" |
23 | 22 | #include "Common/Core/RecoDecay.h" |
24 | 23 | #include "Common/Core/TrackSelection.h" |
25 | 24 | #include "Common/Core/fwdtrackUtilities.h" |
@@ -252,7 +251,7 @@ struct TreeCreatorMuonML { |
252 | 251 | return true; |
253 | 252 | } |
254 | 253 |
|
255 | | - template <typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks, typename TMFTTracksCov> |
| 254 | + template <bool withMFTCov, typename TCollision, typename TFwdTrack, typename TFwdTracks, typename TMFTTracks, typename TMFTTracksCov> |
256 | 255 | bool fillFwdTrackTable(TCollision const& collision, TFwdTrack const& fwdtrack, TFwdTracks const&, TMFTTracks const&, TMFTTracksCov const& mftCovs, const float hadronicRate) |
257 | 256 | { |
258 | 257 | if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) { |
@@ -325,15 +324,22 @@ struct TreeCreatorMuonML { |
325 | 324 | float pDCA = mchtrack.p() * dcaXY_Matched; |
326 | 325 | float rAtAbsorberEnd = fwdtrack.rAtAbsorberEnd(); // this works only for GlobalMuonTrack |
327 | 326 |
|
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(); |
| 327 | + float xMatchedMFTatMP = 999.f; |
| 328 | + float yMatchedMFTatMP = 999.f; |
| 329 | + float xMatchedMCHMIDatMP = 999.f; |
| 330 | + float yMatchedMCHMIDatMP = 999.f; |
| 331 | + |
| 332 | + if constexpr (withMFTCov) { |
| 333 | + auto mfttrackcov = mftCovs.rawIteratorAt(map_mfttrackcovs[mfttrack.globalIndex()]); |
| 334 | + o2::track::TrackParCovFwd mftsaAtMP = getTrackParCovFwdShift(mfttrack, mZShift, mfttrackcov); // values at innermost update |
| 335 | + mftsaAtMP.propagateToZhelix(glMuonCutGroup.matchingZ, mBz); // propagated to matching plane |
| 336 | + xMatchedMFTatMP = mftsaAtMP.getX(); |
| 337 | + yMatchedMFTatMP = mftsaAtMP.getY(); |
| 338 | + |
| 339 | + auto muonAtMP = propagateMuon(mchtrack, mchtrack, collision, propagationPoint::kToMatchingPlane, glMuonCutGroup.matchingZ, mBz, mZShift); // propagated to matching plane |
| 340 | + xMatchedMCHMIDatMP = muonAtMP.getX(); |
| 341 | + yMatchedMCHMIDatMP = muonAtMP.getY(); |
| 342 | + } |
337 | 343 |
|
338 | 344 | float deta = etaMatchedMCHMID - eta; |
339 | 345 | float dphi = phiMatchedMCHMID - phi; |
@@ -374,7 +380,7 @@ struct TreeCreatorMuonML { |
374 | 380 | Preslice<aod::FwdTracks> perCollision = o2::aod::fwdtrack::collisionId; |
375 | 381 |
|
376 | 382 | 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&) |
| 383 | + void processWithMFTCov(MyCollisionsMC const& collisions, aod::BCsWithTimestamps const&, MyFwdTracksMC const& fwdtracks, MyMFTTracksMC const& mfttracks, aod::MFTTracksCov const& mftCovs, aod::McParticles const&, aod::McCollisions const&) |
378 | 384 | { |
379 | 385 | for (const auto& mfttrackConv : mftCovs) { |
380 | 386 | map_mfttrackcovs[mfttrackConv.matchMFTTrackId()] = mfttrackConv.globalIndex(); |
@@ -402,14 +408,45 @@ struct TreeCreatorMuonML { |
402 | 408 | continue; |
403 | 409 | } |
404 | 410 |
|
405 | | - fillFwdTrackTable(collision, fwdtrack, fwdtracks, mfttracks, mftCovs, hadronicRate); |
| 411 | + fillFwdTrackTable<true>(collision, fwdtrack, fwdtracks, mfttracks, mftCovs, hadronicRate); |
406 | 412 |
|
407 | 413 | } // end of fwdtrack loop |
408 | 414 | } // end of collision loop |
409 | 415 |
|
410 | 416 | map_mfttrackcovs.clear(); |
411 | 417 | } |
412 | | - PROCESS_SWITCH(TreeCreatorMuonML, processMatchingMFT, "produce ML input for single track level", true); |
| 418 | + PROCESS_SWITCH(TreeCreatorMuonML, processWithMFTCov, "produce ML input for single track level", true); |
| 419 | + |
| 420 | + void processWithoutMFTCov(MyCollisionsMC const& collisions, aod::BCsWithTimestamps const&, MyFwdTracksMC const& fwdtracks, MyMFTTracksMC const& mfttracks, aod::McParticles const&, aod::McCollisions const&) |
| 421 | + { |
| 422 | + for (const auto& collision : collisions) { |
| 423 | + auto bc = collision.template foundBC_as<aod::BCsWithTimestamps>(); |
| 424 | + initCCDB(bc); |
| 425 | + |
| 426 | + if (!collision.has_mcCollision()) { |
| 427 | + continue; |
| 428 | + } |
| 429 | + |
| 430 | + if (!isSelectedCollision(collision)) { |
| 431 | + continue; |
| 432 | + } |
| 433 | + float hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), bc.runNumber(), irSourceForCptFetcher) * 1.e-3; // kHz |
| 434 | + |
| 435 | + auto fwdtracks_coll = fwdtracks.sliceBy(perCollision, collision.globalIndex()); |
| 436 | + for (const auto& fwdtrack : fwdtracks_coll) { |
| 437 | + if (!fwdtrack.has_mcParticle()) { |
| 438 | + continue; |
| 439 | + } |
| 440 | + if (fwdtrack.trackType() != o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) { |
| 441 | + continue; |
| 442 | + } |
| 443 | + |
| 444 | + fillFwdTrackTable<false>(collision, fwdtrack, fwdtracks, mfttracks, nullptr, hadronicRate); |
| 445 | + |
| 446 | + } // end of fwdtrack loop |
| 447 | + } // end of collision loop |
| 448 | + } |
| 449 | + PROCESS_SWITCH(TreeCreatorMuonML, processWithoutMFTCov, "produce ML input for single track level", false); |
413 | 450 | }; |
414 | 451 |
|
415 | 452 | WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) |
|
0 commit comments