Skip to content

Commit 01d19d9

Browse files
authored
[PWGEM/Dilepton] implement max diff chi2MatchingMCHMFT (#16803)
1 parent fd09f35 commit 01d19d9

11 files changed

Lines changed: 228 additions & 96 deletions

File tree

PWGEM/Dilepton/Core/Dilepton.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ struct Dilepton {
306306
o2::framework::Configurable<float> cfg_max_dcaxy{"cfg_max_dcaxy", 1e+10, "max dca XY for single track in cm"};
307307
o2::framework::Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
308308
o2::framework::Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
309+
o2::framework::Configurable<float> cfg_max_diff_chi2_mftmch{"cfg_max_diff_chi2_mftmch", -1.f, "max. diff chi2MatchingMCHMFT between the best and the 2nd best matched candidates"};
309310
o2::framework::Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
310311
o2::framework::Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
311312
o2::framework::Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
@@ -829,6 +830,7 @@ struct Dilepton {
829830
fDimuonCut.SetChi2(0.f, dimuoncuts.cfg_max_chi2);
830831
fDimuonCut.SetChi2MFT(0.f, dimuoncuts.cfg_max_chi2mft);
831832
// fDimuonCut.SetMatchingChi2MCHMFT(0.f, dimuoncuts.cfg_max_matching_chi2_mftmch);
833+
fDimuonCut.SetMaxDiffMatchingChi2MCHMFT(dimuoncuts.cfg_max_diff_chi2_mftmch);
832834
fDimuonCut.SetMaxMatchingChi2MCHMFTPtDep([&](float pt) { return (pt < dimuoncuts.cfg_border_pt_for_chi2mchmft ? dimuoncuts.cfg_max_matching_chi2_mftmch_lowPt : dimuoncuts.cfg_max_matching_chi2_mftmch_highPt); });
833835
fDimuonCut.SetMatchingChi2MCHMID(0.f, dimuoncuts.cfg_max_matching_chi2_mchmid);
834836
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);

PWGEM/Dilepton/Core/DileptonMC.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,7 @@ struct DileptonMC {
306306
o2::framework::Configurable<float> cfg_max_dcaxy{"cfg_max_dcaxy", 1e+10, "max dca XY for single track in cm"};
307307
o2::framework::Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
308308
o2::framework::Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
309+
o2::framework::Configurable<float> cfg_max_diff_chi2_mftmch{"cfg_max_diff_chi2_mftmch", -1.f, "max. diff chi2MatchingMCHMFT between the best and the 2nd best matched candidates"};
309310
o2::framework::Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
310311
o2::framework::Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
311312
o2::framework::Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
@@ -805,6 +806,7 @@ struct DileptonMC {
805806
fDimuonCut.SetChi2(0.f, dimuoncuts.cfg_max_chi2);
806807
fDimuonCut.SetChi2MFT(0.f, dimuoncuts.cfg_max_chi2mft);
807808
// fDimuonCut.SetMatchingChi2MCHMFT(0.f, dimuoncuts.cfg_max_matching_chi2_mftmch);
809+
fDimuonCut.SetMaxDiffMatchingChi2MCHMFT(dimuoncuts.cfg_max_diff_chi2_mftmch);
808810
fDimuonCut.SetMaxMatchingChi2MCHMFTPtDep([&](float pt) { return (pt < dimuoncuts.cfg_border_pt_for_chi2mchmft ? dimuoncuts.cfg_max_matching_chi2_mftmch_lowPt : dimuoncuts.cfg_max_matching_chi2_mftmch_highPt); });
809811
fDimuonCut.SetMatchingChi2MCHMID(0.f, dimuoncuts.cfg_max_matching_chi2_mchmid);
810812
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);

PWGEM/Dilepton/Core/DimuonCut.cxx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ void DimuonCut::SetMaxMatchingChi2MCHMFTPtDep(std::function<float(float)> PtDepC
101101
mMaxMatchingChi2MCHMFTPtDep = PtDepCut;
102102
LOG(info) << "Dimuon Cut, set matching chi2 MFT-MCH range: " << mMaxMatchingChi2MCHMFTPtDep(0.5);
103103
}
104+
void DimuonCut::SetMaxDiffMatchingChi2MCHMFT(float diff)
105+
{
106+
mMaxDiffMatchingChi2MCHMFT = diff;
107+
LOG(info) << "Dimuon Cut, set max diff. matching chi2 MFT-MCH: " << mMaxDiffMatchingChi2MCHMFT;
108+
}
104109
void DimuonCut::SetMatchingChi2MCHMID(float min, float max)
105110
{
106111
mMinMatchingChi2MCHMID = min;

PWGEM/Dilepton/Core/DimuonCut.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class DimuonCut : public TNamed
6565
kPDCA,
6666
kMFTHitMap,
6767
kDPtDEtaDPhiwrtMCHMID,
68+
kDiffMatchingChi2MCHMFT,
6869
kTTCA,
6970
kNCuts
7071
};
@@ -177,6 +178,9 @@ class DimuonCut : public TNamed
177178
if (track.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !IsSelectedTrack(track, DimuonCuts::kDPtDEtaDPhiwrtMCHMID)) {
178179
return false;
179180
}
181+
if (track.trackType() == static_cast<uint8_t>(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) && !IsSelectedTrack(track, DimuonCuts::kDiffMatchingChi2MCHMFT)) {
182+
return false;
183+
}
180184

181185
return true;
182186
}
@@ -241,6 +245,9 @@ class DimuonCut : public TNamed
241245
case DimuonCuts::kDPtDEtaDPhiwrtMCHMID:
242246
return std::fabs(track.ptMatchedMCHMID() - track.pt()) / track.pt() < mMaxReldPtwrtMCHMID && std::sqrt(std::pow((track.etaMatchedMCHMID() - track.eta()) / mMaxdEtawrtMCHMID, 2) + std::pow((track.phiMatchedMCHMID() - track.phi()) / mMaxdPhiwrtMCHMID, 2)) < 1.f;
243247

248+
case DimuonCuts::kDiffMatchingChi2MCHMFT:
249+
return track.diffChi2MatchingMCHMFT() > mMaxDiffMatchingChi2MCHMFT;
250+
244251
default:
245252
return false;
246253
}
@@ -269,6 +276,7 @@ class DimuonCut : public TNamed
269276
void SetMFTHitMap(bool flag, std::vector<int> hitMap);
270277
void SetMaxdPtdEtadPhiwrtMCHMID(float reldPtMax, float dEtaMax, float dPhiMax); // this is relevant for global muons
271278
void SetMaxMatchingChi2MCHMFTPtDep(std::function<float(float)> PtDepCut);
279+
void SetMaxDiffMatchingChi2MCHMFT(float diff);
272280
void EnableTTCA(bool flag);
273281

274282
private:
@@ -301,6 +309,7 @@ class DimuonCut : public TNamed
301309
float mMinRabs{17.6}, mMaxRabs{89.5};
302310
float mMinDcaXY{0.0f}, mMaxDcaXY{1e10f};
303311
float mMaxReldPtwrtMCHMID{1e10f}, mMaxdEtawrtMCHMID{1e10f}, mMaxdPhiwrtMCHMID{1e10f};
312+
float mMaxDiffMatchingChi2MCHMFT{-1.f};
304313
bool mApplyMFTHitMap{false};
305314
std::vector<int> mRequiredMFTDisks{};
306315

PWGEM/Dilepton/Core/SingleTrackQC.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ struct SingleTrackQC {
229229
o2::framework::Configurable<float> cfg_max_dcaxy{"cfg_max_dcaxy", 1e+10, "max dca XY for single track in cm"};
230230
o2::framework::Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
231231
o2::framework::Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
232+
o2::framework::Configurable<float> cfg_max_diff_chi2_mftmch{"cfg_max_diff_chi2_mftmch", -1.f, "max. diff chi2MatchingMCHMFT between the best and the 2nd best matched candidates"};
232233
o2::framework::Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
233234
o2::framework::Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
234235
o2::framework::Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
@@ -535,6 +536,7 @@ struct SingleTrackQC {
535536
fDimuonCut.SetChi2(0.f, dimuoncuts.cfg_max_chi2);
536537
fDimuonCut.SetChi2MFT(0.f, dimuoncuts.cfg_max_chi2mft);
537538
// fDimuonCut.SetMatchingChi2MCHMFT(0.f, dimuoncuts.cfg_max_matching_chi2_mftmch);
539+
fDimuonCut.SetMaxDiffMatchingChi2MCHMFT(dimuoncuts.cfg_max_diff_chi2_mftmch);
538540
fDimuonCut.SetMaxMatchingChi2MCHMFTPtDep([&](float pt) { return (pt < dimuoncuts.cfg_border_pt_for_chi2mchmft ? dimuoncuts.cfg_max_matching_chi2_mftmch_lowPt : dimuoncuts.cfg_max_matching_chi2_mftmch_highPt); });
539541
fDimuonCut.SetMatchingChi2MCHMID(0.f, dimuoncuts.cfg_max_matching_chi2_mchmid);
540542
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);

PWGEM/Dilepton/Core/SingleTrackQCMC.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,7 @@ struct SingleTrackQCMC {
240240
o2::framework::Configurable<float> cfg_max_dcaxy{"cfg_max_dcaxy", 1e+10, "max dca XY for single track in cm"};
241241
o2::framework::Configurable<float> cfg_min_rabs{"cfg_min_rabs", 17.6, "min Radius at the absorber end"};
242242
o2::framework::Configurable<float> cfg_max_rabs{"cfg_max_rabs", 89.5, "max Radius at the absorber end"};
243+
o2::framework::Configurable<float> cfg_max_diff_chi2_mftmch{"cfg_max_diff_chi2_mftmch", -1.f, "max. diff chi2MatchingMCHMFT between the best and the 2nd best matched candidates"};
243244
o2::framework::Configurable<bool> enableTTCA{"enableTTCA", true, "Flag to enable or disable TTCA"};
244245
o2::framework::Configurable<float> cfg_max_relDPt_wrt_matchedMCHMID{"cfg_max_relDPt_wrt_matchedMCHMID", 1e+10f, "max. relative dpt between MFT-MCH-MID and MCH-MID"};
245246
o2::framework::Configurable<float> cfg_max_DEta_wrt_matchedMCHMID{"cfg_max_DEta_wrt_matchedMCHMID", 1e+10f, "max. deta between MFT-MCH-MID and MCH-MID"};
@@ -585,6 +586,7 @@ struct SingleTrackQCMC {
585586
fDimuonCut.SetChi2(0.f, dimuoncuts.cfg_max_chi2);
586587
fDimuonCut.SetChi2MFT(0.f, dimuoncuts.cfg_max_chi2mft);
587588
// fDimuonCut.SetMatchingChi2MCHMFT(0.f, dimuoncuts.cfg_max_matching_chi2_mftmch);
589+
fDimuonCut.SetMaxDiffMatchingChi2MCHMFT(dimuoncuts.cfg_max_diff_chi2_mftmch);
588590
fDimuonCut.SetMaxMatchingChi2MCHMFTPtDep([&](float pt) { return (pt < dimuoncuts.cfg_border_pt_for_chi2mchmft ? dimuoncuts.cfg_max_matching_chi2_mftmch_lowPt : dimuoncuts.cfg_max_matching_chi2_mftmch_highPt); });
589591
fDimuonCut.SetMatchingChi2MCHMID(0.f, dimuoncuts.cfg_max_matching_chi2_mchmid);
590592
fDimuonCut.SetDCAxy(0.f, dimuoncuts.cfg_max_dcaxy);

PWGEM/Dilepton/DataModel/dileptonTables.h

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,22 +1042,23 @@ DECLARE_SOA_COLUMN(MCHTrackId, mchtrackId, int);
10421042
DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(GlobalMuonsWithSameMCHMID, globalMuonsWithSameMCHMID); //! self indices to global muons that have the same MCHTrackId
10431043
DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(GlobalMuonsWithSameMFT, globalMuonsWithSameMFT); //! self indices to global muons that have the same MFTTrackId
10441044
DECLARE_SOA_SELF_ARRAY_INDEX_COLUMN(AmbiguousMuons, ambiguousMuons);
1045-
DECLARE_SOA_COLUMN(CXXatDCA, cXXatDCA, float); //! DCAx resolution squared at DCA
1046-
DECLARE_SOA_COLUMN(CYYatDCA, cYYatDCA, float); //! DCAy resolution squared at DCA
1047-
DECLARE_SOA_COLUMN(CXYatDCA, cXYatDCA, float); //! correlation term of DCAx,y resolution at DCA
1048-
DECLARE_SOA_COLUMN(PtMatchedMCHMID, ptMatchedMCHMID, float); //! pt of MCH-MID track in MFT-MCH-MID track at PV
1049-
DECLARE_SOA_COLUMN(EtaMatchedMCHMID, etaMatchedMCHMID, float); //! eta of MCH-MID track in MFT-MCH-MID track at PV
1050-
DECLARE_SOA_COLUMN(PhiMatchedMCHMID, phiMatchedMCHMID, float); //! phi of MCH-MID track in MFT-MCH-MID track at PV
1051-
DECLARE_SOA_COLUMN(EtaMatchedMCHMIDatMP, etaMatchedMCHMIDatMP, float); //! eta of MCH-MID track in MFT-MCH-MID track at matching plane
1052-
DECLARE_SOA_COLUMN(PhiMatchedMCHMIDatMP, phiMatchedMCHMIDatMP, float); //! phi of MCH-MID track in MFT-MCH-MID track at matching plane
1053-
DECLARE_SOA_COLUMN(EtaMatchedMFTatMP, etaMatchedMFTatMP, float); //! eta of MFT track in MFT-MCH-MID track at matching plane
1054-
DECLARE_SOA_COLUMN(PhiMatchedMFTatMP, phiMatchedMFTatMP, float); //! phi of MFT track in MFT-MCH-MID track at matching plane
1055-
DECLARE_SOA_COLUMN(IsAssociatedToMPC, isAssociatedToMPC, bool); //! is associated to most probable collision
1056-
DECLARE_SOA_COLUMN(IsAmbiguous, isAmbiguous, bool); //! is ambiguous
1057-
DECLARE_SOA_COLUMN(IsCorrectMatchMFTMCH, isCorrectMatchMFTMCH, bool); //! is correct match between MFT and MCH, only for MC
1058-
DECLARE_SOA_COLUMN(Sign, sign, int8_t); //!
1059-
DECLARE_SOA_COLUMN(Chi2MFT, chi2MFT, float); //! chi2 of MFT standalone track
1060-
DECLARE_SOA_COLUMN(PrefilterBitDerived, pfbderived, uint16_t); //!
1045+
DECLARE_SOA_COLUMN(CXXatDCA, cXXatDCA, float); //! DCAx resolution squared at DCA
1046+
DECLARE_SOA_COLUMN(CYYatDCA, cYYatDCA, float); //! DCAy resolution squared at DCA
1047+
DECLARE_SOA_COLUMN(CXYatDCA, cXYatDCA, float); //! correlation term of DCAx,y resolution at DCA
1048+
DECLARE_SOA_COLUMN(PtMatchedMCHMID, ptMatchedMCHMID, float); //! pt of MCH-MID track in MFT-MCH-MID track at PV
1049+
DECLARE_SOA_COLUMN(EtaMatchedMCHMID, etaMatchedMCHMID, float); //! eta of MCH-MID track in MFT-MCH-MID track at PV
1050+
DECLARE_SOA_COLUMN(PhiMatchedMCHMID, phiMatchedMCHMID, float); //! phi of MCH-MID track in MFT-MCH-MID track at PV
1051+
DECLARE_SOA_COLUMN(EtaMatchedMCHMIDatMP, etaMatchedMCHMIDatMP, float); //! eta of MCH-MID track in MFT-MCH-MID track at matching plane
1052+
DECLARE_SOA_COLUMN(PhiMatchedMCHMIDatMP, phiMatchedMCHMIDatMP, float); //! phi of MCH-MID track in MFT-MCH-MID track at matching plane
1053+
DECLARE_SOA_COLUMN(EtaMatchedMFTatMP, etaMatchedMFTatMP, float); //! eta of MFT track in MFT-MCH-MID track at matching plane
1054+
DECLARE_SOA_COLUMN(PhiMatchedMFTatMP, phiMatchedMFTatMP, float); //! phi of MFT track in MFT-MCH-MID track at matching plane
1055+
DECLARE_SOA_COLUMN(IsAssociatedToMPC, isAssociatedToMPC, bool); //! is associated to most probable collision
1056+
DECLARE_SOA_COLUMN(IsAmbiguous, isAmbiguous, bool); //! is ambiguous
1057+
DECLARE_SOA_COLUMN(IsCorrectMatchMFTMCH, isCorrectMatchMFTMCH, bool); //! is correct match between MFT and MCH, only for MC
1058+
DECLARE_SOA_COLUMN(Sign, sign, int8_t); //!
1059+
DECLARE_SOA_COLUMN(Chi2MFT, chi2MFT, float); //! chi2 of MFT standalone track
1060+
DECLARE_SOA_COLUMN(DiffChi2MatchMCHMFT, diffChi2MatchingMCHMFT, float); //! difference of matching chi2 between the best and the 2nd-best matched candidates
1061+
DECLARE_SOA_COLUMN(PrefilterBitDerived, pfbderived, uint16_t); //!
10611062
DECLARE_SOA_DYNAMIC_COLUMN(Tgl, tgl, [](float eta) -> float { return std::tan(o2::constants::math::PIHalf - 2 * std::atan(std::exp(-eta))); });
10621063
DECLARE_SOA_DYNAMIC_COLUMN(Signed1Pt, signed1Pt, [](float pt, int8_t sign) -> float { return sign * 1. / pt; });
10631064
DECLARE_SOA_DYNAMIC_COLUMN(P, p, [](float pt, float eta) -> float { return pt * std::cosh(eta); });
@@ -1156,7 +1157,30 @@ DECLARE_SOA_TABLE_VERSIONED(EMPrimaryMuons_002, "AOD", "EMPRIMARYMU", 2, //!
11561157
emprimarymuon::Py<fwdtrack::Pt, fwdtrack::Phi>,
11571158
emprimarymuon::Pz<fwdtrack::Pt, fwdtrack::Eta>);
11581159

1159-
using EMPrimaryMuons = EMPrimaryMuons_002;
1160+
DECLARE_SOA_TABLE_VERSIONED(EMPrimaryMuons_003, "AOD", "EMPRIMARYMU", 3, //!
1161+
o2::soa::Index<>, emprimarymuon::CollisionId,
1162+
emprimarymuon::FwdTrackId, emprimarymuon::MFTTrackId, emprimarymuon::MCHTrackId, fwdtrack::TrackType,
1163+
fwdtrack::Pt, fwdtrack::Eta, fwdtrack::Phi, emprimarymuon::Sign,
1164+
fwdtrack::FwdDcaX, fwdtrack::FwdDcaY, o2::aod::fwdtrack::CXX, o2::aod::fwdtrack::CYY, o2::aod::fwdtrack::CXY,
1165+
emprimarymuon::PtMatchedMCHMID, emprimarymuon::EtaMatchedMCHMID, emprimarymuon::PhiMatchedMCHMID,
1166+
1167+
fwdtrack::NClusters, fwdtrack::PDca, fwdtrack::RAtAbsorberEnd,
1168+
fwdtrack::Chi2, fwdtrack::Chi2MatchMCHMID, fwdtrack::Chi2MatchMCHMFT, emprimarymuon::DiffChi2MatchMCHMFT,
1169+
fwdtrack::MCHBitMap, fwdtrack::MIDBitMap, fwdtrack::MIDBoards,
1170+
fwdtrack::MFTClusterSizesAndTrackFlags, emprimarymuon::Chi2MFT, emprimarymuon::IsAssociatedToMPC, emprimarymuon::IsAmbiguous,
1171+
1172+
// dynamic column
1173+
emprimarymuon::Signed1Pt<fwdtrack::Pt, emprimarymuon::Sign>,
1174+
emprimarymuon::Tgl<fwdtrack::Eta>,
1175+
emprimarymuon::NClustersMFT<fwdtrack::MFTClusterSizesAndTrackFlags>,
1176+
fwdtrack::IsCA<fwdtrack::MFTClusterSizesAndTrackFlags>,
1177+
emprimarymuon::MFTClusterMap<fwdtrack::MFTClusterSizesAndTrackFlags>,
1178+
emprimarymuon::P<fwdtrack::Pt, fwdtrack::Eta>,
1179+
emprimarymuon::Px<fwdtrack::Pt, fwdtrack::Phi>,
1180+
emprimarymuon::Py<fwdtrack::Pt, fwdtrack::Phi>,
1181+
emprimarymuon::Pz<fwdtrack::Pt, fwdtrack::Eta>);
1182+
1183+
using EMPrimaryMuons = EMPrimaryMuons_003;
11601184
// iterators
11611185
using EMPrimaryMuon = EMPrimaryMuons::iterator;
11621186

PWGEM/Dilepton/TableProducer/Converters/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ o2physics_add_dpl_workflow(muon-converter2
7070
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
7171
COMPONENT_NAME Analysis)
7272

73+
o2physics_add_dpl_workflow(muon-converter3
74+
SOURCES muonConverter3.cxx
75+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
76+
COMPONENT_NAME Analysis)
77+
7378
o2physics_add_dpl_workflow(muon-selfid-converter1
7479
SOURCES muonSelfIdConverter1.cxx
7580
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
//
12+
// ========================
13+
//
14+
// This code produces muon table 003 from 002.
15+
// Please write to: daiki.sekihata@cern.ch
16+
17+
#include "PWGEM/Dilepton/DataModel/dileptonTables.h"
18+
19+
#include <Framework/AnalysisHelpers.h>
20+
#include <Framework/AnalysisTask.h>
21+
#include <Framework/runDataProcessing.h>
22+
23+
using namespace o2;
24+
using namespace o2::aod;
25+
using namespace o2::framework;
26+
using namespace o2::framework::expressions;
27+
using namespace o2::soa;
28+
29+
struct muonConverter3 {
30+
Produces<aod::EMPrimaryMuons_003> muon_003;
31+
32+
void process(aod::EMPrimaryMuons_002 const& muons)
33+
{
34+
for (const auto& muon : muons) {
35+
muon_003(
36+
muon.collisionId(),
37+
muon.fwdtrackId(), muon.mfttrackId(), muon.mchtrackId(), muon.trackType(),
38+
muon.pt(), muon.eta(), muon.phi(), muon.sign(),
39+
muon.fwdDcaX(), muon.fwdDcaY(), muon.cXX(), muon.cYY(), muon.cXY(),
40+
muon.ptMatchedMCHMID(), muon.etaMatchedMCHMID(), muon.phiMatchedMCHMID(),
41+
muon.nClusters(), muon.pDca(), muon.rAtAbsorberEnd(),
42+
muon.chi2(), muon.chi2MatchMCHMID(), muon.chi2MatchMCHMFT(), 9999.f,
43+
muon.mchBitMap(), muon.midBitMap(), muon.midBoards(),
44+
muon.mftClusterSizesAndTrackFlags(), muon.chi2MFT(), muon.isAssociatedToMPC(), muon.isAmbiguous());
45+
} // end of muon loop
46+
}
47+
};
48+
49+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
50+
{
51+
return WorkflowSpec{adaptAnalysisTask<muonConverter3>(cfgc, TaskName{"muon-converter3"})};
52+
}

0 commit comments

Comments
 (0)