96 std::optional<SG::WriteDecorHandle<xAOD::TruthParticleContainer, char>>
97 dec_electrons_OR, dec_muons_OR, dec_photons_OR;
107 std::optional<SG::ReadDecorHandle<xAOD::TruthParticleContainer, float>>
108 acc_pt_dressed_e, acc_eta_dressed_e, acc_phi_dressed_e, acc_e_dressed_e;
115 std::optional<SG::ReadDecorHandle<xAOD::TruthParticleContainer, float>>
116 acc_pt_dressed_m, acc_eta_dressed_m, acc_phi_dressed_m, acc_e_dressed_m;
125 auto dressedRapidityOrEtaPhi =
131 TLorentzVector dressed;
132 dressed.SetPtEtaPhiE(acc_pt(lepton), acc_eta(lepton), acc_phi(lepton),
134 return std::pair<double, double>{
135 m_useRapidity ? dressed.Rapidity() : dressed.Eta(), dressed.Phi()};
139 std::vector<std::pair<double, double>> dressed_electrons, dressed_muons;
142 for (
const auto*
jet : *jets) {
146 dec_jets_OR(*
jet) =
true;
149 dressed_electrons.resize(electrons->size());
150 for (std::size_t i = 0; i < electrons->size(); ++i) {
151 const auto*
electron = (*electrons)[i];
155 (*dec_electrons_OR)(*electron) =
true;
157 dressed_electrons[i] = dressedRapidityOrEtaPhi(
158 *
electron, *acc_pt_dressed_e, *acc_eta_dressed_e,
159 *acc_phi_dressed_e, *acc_e_dressed_e);
163 dressed_muons.resize(muons->size());
164 for (std::size_t i = 0; i < muons->size(); ++i) {
165 const auto*
muon = (*muons)[i];
169 (*dec_muons_OR)(*muon) =
true;
171 dressed_muons[i] = dressedRapidityOrEtaPhi(
172 *
muon, *acc_pt_dressed_m, *acc_eta_dressed_m, *acc_phi_dressed_m,
177 for (
const auto*
photon : *photons) {
181 (*dec_photons_OR)(*photon) =
true;
199 for (
const auto*
jet : *jets) {
203 for (std::size_t i = 0; i < muons->size(); ++i) {
204 const auto*
muon = (*muons)[i];
205 if ((*dec_muons_OR)(*
muon)) {
207 const auto& [rapidityOrEta,
phi] = dressed_muons[i];
209 (*dec_muons_OR)(*muon) =
false;
212 (*dec_muons_OR)(*muon) =
false;
218 for (std::size_t i = 0; i < electrons->size(); ++i) {
219 const auto*
electron = (*electrons)[i];
220 if ((*dec_electrons_OR)(*
electron)) {
222 const auto& [rapidityOrEta,
phi] = dressed_electrons[i];
224 (*dec_electrons_OR)(*electron) =
false;
227 (*dec_electrons_OR)(*electron) =
false;
233 for (
const auto*
photon : *photons) {
234 if ((*dec_photons_OR)(*
photon)) {
236 dec_jets_OR(*
jet) =
false;
244 return StatusCode::SUCCESS;
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_phiDressedMuonKey
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_photonsKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_decORmuon
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_muonsKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_eDressedElectronKey
SG::ReadHandleKey< xAOD::JetContainer > m_jetsKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_decORphoton
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_ptDressedElectronKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_ptDressedMuonKey
SG::WriteDecorHandleKey< xAOD::TruthParticleContainer > m_decORelectron
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_etaDressedMuonKey
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_phiDressedElectronKey
CP::SelectionReadHandle m_jetSelection
CP::SelectionReadHandle m_muonSelection
Gaudi::Property< bool > m_useDressedProperties
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_eDressedMuonKey
virtual StatusCode execute(const EventContext &ctx) const final
SG::WriteDecorHandleKey< xAOD::JetContainer > m_decORjet
virtual StatusCode initialize() final
SG::ReadHandleKey< xAOD::TruthParticleContainer > m_electronsKey
Gaudi::Property< bool > m_doJetPhotonOR
Gaudi::Property< bool > m_doJetElectronOR
float dressedDeltaR(const xAOD::Jet *jet, double rapidityOrEta, double phi) const
CP::SelectionReadHandle m_electronSelection
Gaudi::Property< bool > m_doJetMuonOR
Gaudi::Property< bool > m_useRapidity
SG::ReadDecorHandleKey< xAOD::TruthParticleContainer > m_etaDressedElectronKey
CP::SelectionReadHandle m_photonSelection
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi