@@ -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
415453WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments