17 : m_btag_track_aug(
"btagIp_"),
18 m_muonAssociationName(muonAssociationName),
19 m_muonMaxDR(muonMaxDR),
20 m_muonMinpT(muonMinpT),
21 m_flip_config(flipConfig),
22 m_acc_assocMuons(muonAssociationName),
23 m_acc_jetLink(
"jetLink"),
24 m_acc_muon_energyLoss(
"EnergyLoss"),
25 m_dec_muon_isDefaults(
"softMuon_isDefaults"),
26 m_dec_nAssocMuons(
"softMuon_nAssocMuons"),
27 m_dec_muon_dR(
"softMuon_dR"),
28 m_dec_muon_qOverPratio(
"softMuon_qOverPratio"),
29 m_dec_muon_pTrel(
"softMuon_pTrel"),
30 m_dec_muon_ip3d_d0(
"softMuon_ip3dD0"),
31 m_dec_muon_ip3d_z0(
"softMuon_ip3dZ0"),
32 m_dec_muon_ip3d_d0_significance(
"softMuon_ip3dD0Significance"),
33 m_dec_muon_ip3d_z0_significance(
"softMuon_ip3dZ0Significance"),
34 m_dec_muon_ip3d_sigma_d0(
"softMuon_ip3dD0Uncertainty"),
35 m_dec_muon_ip3d_sigma_z0(
"softMuon_ip3dZ0Uncertainty"),
36 m_dec_muon_link(
"softMuon_link"),
37 m_float_IO_variables({
"pt",
40 "momentumBalanceSignificance",
41 "scatteringNeighbourSignificance",
45 "ParamEnergyLossSigmaPlus",
46 "ParamEnergyLossSigmaMinus",
48 "MeasEnergyLossSigma",
50 m_unsigned_char_IO_variables({
"numberOfInnermostPixelLayerHits",
51 "numberOfInnermostPixelLayerSplitHits",
52 "numberOfInnermostPixelLayerSharedHits",
53 "numberOfInnermostPixelLayerOutliers",
54 "numberOfNextToInnermostPixelLayerHits",
55 "numberOfNextToInnermostPixelLayerOutliers",
57 "numberOfPixelSplitHits",
58 "numberOfPixelSharedHits",
59 "numberOfPixelSpoiltHits",
62 "numberOfSCTSharedHits",
64 "expectInnermostPixelLayerHit",
65 "expectNextToInnermostPixelLayerHit"}) {
69 for (
const std::string&
var : m_float_IO_variables) {
70 m_float_IO.emplace_back(CAccDec<float>(
var));
72 for (
const std::string&
var : m_unsigned_char_IO_variables) {
73 m_unsigned_char_IO.emplace_back(CAccDec<unsigned char>(
var));
82 float dR_closest_muon = 10;
85 char muon_isDefaults = 1;
88 float muon_qOverPratio = -1;
89 float muon_pTrel = -1;
90 float muon_ip3d_d0 = -1;
91 float muon_ip3d_z0 = -1;
92 float muon_ip3d_d0_significance = -1;
93 float muon_ip3d_z0_significance = -1;
94 float muon_ip3d_sigma_d0 = -1;
95 float muon_ip3d_sigma_z0 = -1;
100 var.m_dec(btag) = -1;
108 if (!jet_link.isValid()) {
109 throw std::runtime_error(
"missing jetLink");
114 std::vector<ElementLink<xAOD::MuonContainer>> assocMuons =
116 if (assocMuons.size() > 0) {
117 nAssocMuons = assocMuons.size();
118 for (
unsigned int imu = 0; imu < assocMuons.size(); imu++) {
119 const xAOD::Muon* thisMu = *(assocMuons.at(imu));
129 float dR =
jet.p4().DeltaR(thisMu->
p4());
135 thisMu->
trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
137 thisMu->
trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
138 if (!IDMuTrack || !MSMuTrack)
142 float momBalSignif0 = 0;
144 if (momBalSignif0 == 0)
146 if (MSMuTrack->
qOverP() == 0)
150 if (dR < dR_closest_muon) {
151 dR_closest_muon = dR;
153 muon_link = assocMuons.at(imu);
157 if (muon_index != -1) {
159 const xAOD::Muon* smtMu = *(assocMuons.at(muon_index));
161 smtMu->
trackParticle(xAOD::Muon::InnerDetectorTrackParticle);
165 smtMu->
trackParticle(xAOD::Muon::ExtrapolatedMuonSpectrometerTrackParticle);
168 muon_dR = dR_closest_muon;
169 muon_qOverPratio = IDMuTrack->
qOverP() / MSMuTrack->
qOverP();
175 double muon_transverseEnergyLoss = muon_energyLoss *
std::sin(smtMu->
p4().Theta());
176 TLorentzVector muon_loss;
178 muon_loss.SetPtEtaPhiE(muon_transverseEnergyLoss, smtMu->
p4().Eta(),
jet.p4().Phi(), muon_energyLoss);
181 TLorentzVector corrected_jet;
182 corrected_jet =
jet.p4() - muon_loss + smtMu->
p4();
183 muon_pTrel = smtMu->
p4().Vect().Perp(corrected_jet.Vect());
197 var.m_dec(btag) =
var.m_acc(*smtMu);
200 var.m_dec(btag) =
var.m_acc(*IDMuTrack);
221 std::set<std::string>
keys;
222 for (
const auto& auxid : {
234 keys.insert(type_registry.getName(auxid));