Skip to content

Commit c83380e

Browse files
authored
[PWGEM/Dilepton] add mc label of MFTTracks (#11993)
1 parent 67b8b94 commit c83380e

File tree

2 files changed

+86
-23
lines changed

2 files changed

+86
-23
lines changed

PWGEM/Dilepton/DataModel/dileptonTables.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,17 @@ DECLARE_SOA_TABLE(EMPrimaryMuonMCLabels, "AOD", "EMPRMMUMCLABEL", //!
377377
emprimarymuonmclabel::EMMCParticleId, emprimarymuonmclabel::McMask);
378378
using EMPrimaryMuonMCLabel = EMPrimaryMuonMCLabels::iterator;
379379

380+
namespace emmftmclabel
381+
{
382+
DECLARE_SOA_INDEX_COLUMN(EMMCParticle, emmcparticle); //!
383+
DECLARE_SOA_COLUMN(McMask, mcMask, uint16_t);
384+
} // namespace emmftmclabel
385+
386+
// NOTE: MC labels. This table has one entry for each reconstructed track (joinable with EMPrimaryMuons table)
387+
DECLARE_SOA_TABLE(EMMFTMCLabels, "AOD", "EMMFTMCLABEL", //!
388+
emmftmclabel::EMMCParticleId, emmftmclabel::McMask);
389+
using EMMFTMCLabel = EMMFTMCLabels::iterator;
390+
380391
namespace emprimaryelectron
381392
{
382393
DECLARE_SOA_INDEX_COLUMN(EMEvent, emevent); //!

PWGEM/Dilepton/TableProducer/associateMCinfoDilepton.cxx

Lines changed: 75 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,21 @@
1414
// This code produces reduced events for photon analyses.
1515
// Please write to: daiki.sekihata@cern.ch
1616

17-
#include <map>
18-
#include <vector>
19-
#include <iostream>
17+
#include "PWGEM/Dilepton/DataModel/dileptonTables.h"
18+
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
19+
20+
#include "Common/Core/TableHelper.h"
2021

21-
#include <random>
22-
#include "Framework/runDataProcessing.h"
23-
#include "Framework/AnalysisTask.h"
24-
#include "Framework/AnalysisDataModel.h"
2522
#include "Framework/ASoAHelpers.h"
23+
#include "Framework/AnalysisDataModel.h"
24+
#include "Framework/AnalysisTask.h"
25+
#include "Framework/runDataProcessing.h"
2626
#include "ReconstructionDataFormats/Track.h"
27-
#include "Common/Core/TableHelper.h"
28-
#include "PWGEM/Dilepton/DataModel/dileptonTables.h"
29-
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
27+
28+
#include <iostream>
29+
#include <map>
30+
#include <random>
31+
#include <vector>
3032

3133
using namespace o2;
3234
using namespace o2::framework;
@@ -43,6 +45,7 @@ struct AssociateMCInfoDilepton {
4345
using MyCollisionsMC = soa::Join<aod::Collisions, aod::McCollisionLabels, aod::EvSels, aod::EMEvSels>;
4446
using TracksMC = soa::Join<aod::TracksIU, aod::McTrackLabels>;
4547
using FwdTracksMC = soa::Join<aod::FwdTracks, aod::McFwdTrackLabels>;
48+
using MFTTracksMC = soa::Join<aod::MFTTracks, aod::McMFTTrackLabels>;
4649

4750
Produces<o2::aod::EMMCEvents> mcevents;
4851
Produces<o2::aod::EMMCEventLabels> mceventlabels;
@@ -51,6 +54,7 @@ struct AssociateMCInfoDilepton {
5154
Produces<o2::aod::V0LegMCLabels> v0legmclabels;
5255
Produces<o2::aod::EMPrimaryElectronMCLabels> emprimaryelectronmclabels;
5356
Produces<o2::aod::EMPrimaryMuonMCLabels> emprimarymuonmclabels;
57+
Produces<o2::aod::EMMFTMCLabels> emmftmclabels;
5458
Produces<o2::aod::EMDummyDatas> emdummydata;
5559

5660
Configurable<int> n_dummy_loop{"n_dummy_loop", 0, "for loop runs over n times"};
@@ -135,8 +139,8 @@ struct AssociateMCInfoDilepton {
135139
Partition<aod::McParticles> mcmuons = nabs(o2::aod::mcparticle::pdgCode) == 13 && min_eta_gen_primary_fwd < o2::aod::mcparticle::eta && o2::aod::mcparticle::eta < max_eta_gen_primary_fwd;
136140
Partition<aod::McParticles> mcvectormesons = o2::aod::mcparticle::pdgCode == 223 || o2::aod::mcparticle::pdgCode == 333;
137141

138-
template <uint8_t system, typename TTracks, typename TFwdTracks, typename TPCMs, typename TPCMLegs, typename TEMPrimaryElectrons, typename TEMPrimaryMuons>
139-
void skimmingMC(MyCollisionsMC const& collisions, aod::BCs const&, aod::McCollisions const& mcCollisions, aod::McParticles const& mcTracks, TTracks const& o2tracks, TFwdTracks const& o2fwdtracks, TPCMs const& v0photons, TPCMLegs const& /*v0legs*/, TEMPrimaryElectrons const& emprimaryelectrons, TEMPrimaryMuons const& emprimarymuons)
142+
template <uint8_t system, typename TTracks, typename TFwdTracks, typename TMFTTracks, typename TPCMs, typename TPCMLegs, typename TEMPrimaryElectrons, typename TEMPrimaryMuons>
143+
void skimmingMC(MyCollisionsMC const& collisions, aod::BCs const&, aod::McCollisions const& mcCollisions, aod::McParticles const& mcTracks, TTracks const& o2tracks, TFwdTracks const& o2fwdtracks, TMFTTracks const&, TPCMs const& v0photons, TPCMLegs const&, TEMPrimaryElectrons const& emprimaryelectrons, TEMPrimaryMuons const& emprimarymuons)
140144
{
141145
// temporary variables used for the indexing of the skimmed MC stack
142146
std::map<uint64_t, int> fNewLabels;
@@ -358,8 +362,8 @@ struct AssociateMCInfoDilepton {
358362
continue;
359363
}
360364

361-
auto ele = v0.template negTrack_as<aod::V0Legs>();
362-
auto pos = v0.template posTrack_as<aod::V0Legs>();
365+
auto ele = v0.template negTrack_as<TPCMLegs>();
366+
auto pos = v0.template posTrack_as<TPCMLegs>();
363367

364368
auto o2track_ele = o2tracks.iteratorAt(ele.trackId());
365369
auto o2track_pos = o2tracks.iteratorAt(pos.trackId());
@@ -521,6 +525,54 @@ struct AssociateMCInfoDilepton {
521525
}
522526
} // end of mother chain loop
523527

528+
// mc label for tracks registered in MFT in global muons
529+
if (o2track.matchMFTTrackId() > -1) {
530+
const auto& o2mfttrack = o2track.template matchMFTTrack_as<TMFTTracks>();
531+
if (!o2mfttrack.has_mcParticle()) {
532+
emmftmclabels(-1, 0);
533+
break;
534+
}
535+
536+
const auto& mco2mfttrack = o2mfttrack.template mcParticle_as<aod::McParticles>();
537+
if (!(fNewLabels.find(mco2mfttrack.globalIndex()) != fNewLabels.end())) {
538+
fNewLabels[mco2mfttrack.globalIndex()] = fCounters[0];
539+
fNewLabelsReversed[fCounters[0]] = mco2mfttrack.globalIndex();
540+
// fMCFlags[mco2mfttrack.globalIndex()] = mcflags;
541+
fEventIdx[mco2mfttrack.globalIndex()] = fEventLabels.find(mco2mfttrack.mcCollisionId())->second;
542+
fCounters[0]++;
543+
}
544+
emmftmclabels(fNewLabels.find(mco2mfttrack.index())->second, o2track.mcMask());
545+
546+
// Next, store mother-chain of this reconstructed track.
547+
int motherid = -999; // first mother index
548+
if (mctrack.has_mothers()) {
549+
motherid = mctrack.mothersIds()[0]; // first mother index
550+
}
551+
while (motherid > -1) {
552+
if (motherid < mcTracks.size()) { // protect against bad mother indices. why is this needed?
553+
auto mp = mcTracks.iteratorAt(motherid);
554+
555+
// if the MC truth particle corresponding to this reconstructed track which is not already written, add it to the skimmed MC stack
556+
if (!(fNewLabels.find(mp.globalIndex()) != fNewLabels.end())) {
557+
fNewLabels[mp.globalIndex()] = fCounters[0];
558+
fNewLabelsReversed[fCounters[0]] = mp.globalIndex();
559+
// fMCFlags[mp.globalIndex()] = mcflags;
560+
fEventIdx[mp.globalIndex()] = fEventLabels.find(mp.mcCollisionId())->second;
561+
fCounters[0]++;
562+
}
563+
564+
if (mp.has_mothers()) {
565+
motherid = mp.mothersIds()[0]; // first mother index
566+
} else {
567+
motherid = -999;
568+
}
569+
} else {
570+
motherid = -999;
571+
}
572+
} // end of mother chain loop
573+
} else {
574+
emmftmclabels(-1, 0);
575+
}
524576
} // end of em primary muon loop
525577
}
526578

@@ -612,36 +664,36 @@ struct AssociateMCInfoDilepton {
612664
void processMC_Electron(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, aod::EMPrimaryElectrons const& emprimaryelectrons)
613665
{
614666
const uint8_t sysflag = kElectron;
615-
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, nullptr, nullptr, emprimaryelectrons, nullptr);
667+
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, nullptr, nullptr, nullptr, emprimaryelectrons, nullptr);
616668
}
617669

618-
void processMC_FwdMuon(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, FwdTracksMC const& o2fwdtracks, aod::EMPrimaryMuons const& emprimarymuons)
670+
void processMC_FwdMuon(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, FwdTracksMC const& o2fwdtracks, MFTTracksMC const& o2mfttracks, aod::EMPrimaryMuons const& emprimarymuons)
619671
{
620672
const uint8_t sysflag = kFwdMuon;
621-
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, nullptr, o2fwdtracks, nullptr, nullptr, nullptr, emprimarymuons);
673+
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, nullptr, o2fwdtracks, o2mfttracks, nullptr, nullptr, nullptr, emprimarymuons);
622674
}
623675

624-
void processMC_Electron_FwdMuon(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, FwdTracksMC const& o2fwdtracks, aod::EMPrimaryElectrons const& emprimaryelectrons, aod::EMPrimaryMuons const& emprimarymuons)
676+
void processMC_Electron_FwdMuon(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, FwdTracksMC const& o2fwdtracks, MFTTracksMC const& o2mfttracks, aod::EMPrimaryElectrons const& emprimaryelectrons, aod::EMPrimaryMuons const& emprimarymuons)
625677
{
626678
const uint8_t sysflag = kElectron | kFwdMuon;
627-
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, o2fwdtracks, nullptr, nullptr, emprimaryelectrons, emprimarymuons);
679+
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, o2fwdtracks, o2mfttracks, nullptr, nullptr, emprimaryelectrons, emprimarymuons);
628680
}
629681

630-
void processMC_Electron_FwdMuon_PCM(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, FwdTracksMC const& o2fwdtracks, aod::V0PhotonsKF const& v0photons, aod::V0Legs const& v0legs, aod::EMPrimaryElectrons const& emprimaryelectrons, aod::EMPrimaryMuons const& emprimarymuons)
682+
void processMC_Electron_FwdMuon_PCM(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, FwdTracksMC const& o2fwdtracks, MFTTracksMC const& o2mfttracks, aod::V0PhotonsKF const& v0photons, aod::V0Legs const& v0legs, aod::EMPrimaryElectrons const& emprimaryelectrons, aod::EMPrimaryMuons const& emprimarymuons)
631683
{
632684
const uint8_t sysflag = kPCM | kElectron | kFwdMuon;
633-
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, o2fwdtracks, v0photons, v0legs, emprimaryelectrons, emprimarymuons);
685+
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, o2fwdtracks, o2mfttracks, v0photons, v0legs, emprimaryelectrons, emprimarymuons);
634686
}
635687

636688
void processMC_Electron_PCM(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, aod::V0PhotonsKF const& v0photons, aod::V0Legs const& v0legs, aod::EMPrimaryElectrons const& emprimaryelectrons)
637689
{
638690
const uint8_t sysflag = kPCM | kElectron;
639-
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, v0photons, v0legs, emprimaryelectrons, nullptr);
691+
skimmingMC<sysflag>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, nullptr, v0photons, v0legs, emprimaryelectrons, nullptr);
640692
}
641693

642694
void processMC_PCM(MyCollisionsMC const& collisions, aod::BCs const& bcs, aod::McCollisions const& mccollisions, aod::McParticles const& mcTracks, TracksMC const& o2tracks, aod::V0PhotonsKF const& v0photons, aod::V0Legs const& v0legs)
643695
{
644-
skimmingMC<kPCM>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, v0photons, v0legs, nullptr, nullptr);
696+
skimmingMC<kPCM>(collisions, bcs, mccollisions, mcTracks, o2tracks, nullptr, nullptr, v0photons, v0legs, nullptr, nullptr);
645697
}
646698

647699
void processGenDummy(MyCollisionsMC const&)

0 commit comments

Comments
 (0)