77 const EventContext& ctx = Gaudi::Hive::currentContext();
81 if (!truthParticles.isValid()) {
83 return StatusCode::FAILURE;
87 if (!dressTruthParticles.isValid()) {
89 return StatusCode::FAILURE;
112 if (!dressDec.isAvailable(*truthParticles)) {
113 for (
const auto * particle : *truthParticles){
122 std::vector<const xAOD::TruthParticle*> listOfParticlesToDress;
123 std::vector<xAOD::TruthParticle::FourMom_t> listOfDressedParticles;
124 std::vector<int> dressedParticlesNPhot;
129 for (
auto *pItr : *dressTruthParticles) {
130 listOfParticlesToDress.push_back(pItr);
141 for (
const auto&
part : listOfParticlesToDress) {
142 listOfDressedParticles.push_back(
part->p4());
143 dressedParticlesNPhot.push_back(0);
147 std::vector<const xAOD::TruthParticle*> photonsFSRList;
148 std::vector<int> photonPID{22};
163 for (
const auto& phot : photonsFSRList ) {
167 for (
size_t i = 0;
i < listOfParticlesToDress.size(); ++
i) {
169 if (!acc_origin.isAvailable(*listOfParticlesToDress[
i])) {
172 unsigned int result = acc_origin(*listOfParticlesToDress[
i]);
177 if(listOfParticlesToDress[
i]->
isTau()) {
179 if( !pt_visAcc.isAvailable(*listOfParticlesToDress[
i]) ||
180 !eta_visAcc.isAvailable(*listOfParticlesToDress[
i]) ||
181 !phi_visAcc.isAvailable(*listOfParticlesToDress[
i]) ||
182 !mvisAcc.isAvailable(*listOfParticlesToDress[
i])) {
183 ATH_MSG_ERROR(
"Visible momentum not available for truth taus, cannot perform dressing!");
184 return StatusCode::FAILURE;
187 bare_part.SetPtEtaPhiM(pt_visAcc(*listOfParticlesToDress[
i]),
188 eta_visAcc(*listOfParticlesToDress[
i]),
189 phi_visAcc(*listOfParticlesToDress[
i]),
190 mvisAcc(*listOfParticlesToDress[
i]));
193 bare_part = listOfParticlesToDress[
i]->p4();
196 double dR = bare_part.DeltaR(phot->p4());
204 listOfDressedParticles[
idx] += phot->p4();
205 dressedParticlesNPhot[
idx]++;
214 for (
size_t i = 0;
i < listOfParticlesToDress.size(); ++
i) {
219 decorator_pt_vis(*
part) = dressedVec.Pt();
220 decorator_eta_vis(*
part) = dressedVec.Eta();
221 decorator_phi_vis(*
part) = dressedVec.Phi();
222 decorator_m_vis(*
part) = dressedVec.M();
225 decorator_e(*
part) = dressedVec.E();
226 decorator_pt(*
part) = dressedVec.Pt();
227 decorator_eta(*
part) = dressedVec.Eta();
228 decorator_phi(*
part) = dressedVec.Phi();
230 decorator_nphoton(*
part) = dressedParticlesNPhot[
i];
236 std::vector<fastjet::PseudoJet> sorted_jets;
237 std::vector<fastjet::PseudoJet> fj_particles;
238 for (
const auto&
part : listOfParticlesToDress) {
241 if(!pt_visAcc.isAvailable(*
part) || !eta_visAcc.isAvailable(*
part)
242 || !phi_visAcc.isAvailable(*
part) || !mvisAcc.isAvailable(*
part)) {
243 ATH_MSG_ERROR(
"Visible momentum not available for truth taus, cannot perform dressing!");
244 return StatusCode::FAILURE;
247 TLorentzVector tauvis;
248 tauvis.SetPtEtaPhiM(pt_visAcc(*
part),
252 fj_particles.emplace_back(tauvis.Px(), tauvis.Py(), tauvis.Pz(), tauvis.E());
260 for (
const auto&
part : photonsFSRList) {
269 sorted_jets = sorted_by_pt(cseq.inclusive_jets(0));
271 std::vector<int> photon_uniqueIDs(50);
272 photon_uniqueIDs.clear();
273 for (
const auto&
part : listOfParticlesToDress) {
276 auto pjItr=sorted_jets.begin();
277 while(!
found && pjItr!=sorted_jets.end()) {
278 std::vector<fastjet::PseudoJet> constituents = pjItr->constituents();
279 for(
const auto& constit : constituents) {
286 decorator_pt_vis(*
part) = pjItr->pt();
287 decorator_eta_vis(*
part) = pjItr->pseudorapidity();
288 decorator_phi_vis(*
part) = pjItr->phi_std();
289 decorator_m_vis(*
part) = pjItr->m();
292 decorator_e(*
part) = pjItr->e();
293 decorator_pt(*
part) = pjItr->pt();
294 decorator_eta(*
part) = pjItr->pseudorapidity();
295 decorator_phi(*
part) = pjItr->phi_std();
302 for(
const auto& constit : constituents) {
303 photon_uniqueIDs.push_back(constit.user_index());
310 decorator_pt_vis(*
part) = 0.;
311 decorator_eta_vis(*
part) = 0.;
312 decorator_phi_vis(*
part) = 0.;
313 decorator_m_vis(*
part) = 0.;
316 decorator_e(*
part) = 0;
317 decorator_pt(*
part) = 0;
318 decorator_eta(*
part) = 0;
319 decorator_phi(*
part) = 0;
327 for (
const auto& phot : photonsFSRList ) {
336 return StatusCode::SUCCESS;