69 if (!truthParticles.
isValid()) {
71 return StatusCode::FAILURE;
75 if (!dressTruthParticles.
isValid()) {
77 return StatusCode::FAILURE;
95 for (
const auto * particle : *truthParticles){
96 dressDec(*particle) = 0;
109 std::vector<const xAOD::TruthParticle*> listOfParticlesToDress;
110 std::vector<xAOD::TruthParticle::FourMom_t> listOfDressedP4;
111 std::vector<xAOD::TruthParticle::FourMom_t> listOfBareP4;
115 for (
auto *pItr : *dressTruthParticles) {
116 if (!pItr->isTau()) {
118 return StatusCode::FAILURE;
121 ATH_MSG_ERROR(
"Visible momentum not available for truth taus, cannot perform dressing!");
122 return StatusCode::FAILURE;
125 listOfParticlesToDress.push_back(pItr);
129 bare_part.SetPtEtaPhiM(pt_visAcc(*pItr), eta_visAcc(*pItr), phi_visAcc(*pItr), mvisAcc(*pItr));
130 listOfDressedP4.push_back(bare_part);
134 listOfBareP4 = listOfDressedP4;
143 for (
const auto* part : listOfParticlesToDress) {
144 listOfDressedP4.push_back(part->p4());
148 std::vector<int> dressedParticlesNPhot(listOfParticlesToDress.size(), 0);
151 std::vector<const xAOD::TruthParticle*> photonsFSRList;
152 std::vector<int> photonPID{22};
162 for (
const auto* phot : photonsFSRList) {
166 for (
size_t i = 0; i < listOfParticlesToDress.size(); ++i) {
168 if (!acc_origin.isAvailable(*listOfParticlesToDress[i])) {
171 unsigned int result = acc_origin(*listOfParticlesToDress[i]);
176 if (listOfParticlesToDress[i]->
isTau()) {
177 bare_part = listOfBareP4[i];
180 bare_part = listOfParticlesToDress[i]->p4();
183 double dR = bare_part.DeltaR(phot->p4());
191 listOfDressedP4[idx] += phot->p4();
192 dressedParticlesNPhot[idx]++;
200 for (
size_t i = 0; i < listOfParticlesToDress.size(); ++i) {
205 decorator_pt_vis(*part) = dressedVec.Pt();
206 decorator_eta_vis(*part) = dressedVec.Eta();
207 decorator_phi_vis(*part) = dressedVec.Phi();
208 decorator_m_vis(*part) = dressedVec.M();
211 decorator_e(*part) = dressedVec.E();
212 decorator_pt(*part) = dressedVec.Pt();
213 decorator_eta(*part) = dressedVec.Eta();
214 decorator_phi(*part) = dressedVec.Phi();
216 decorator_nphoton(*part) = dressedParticlesNPhot[i];
222 std::vector<fastjet::PseudoJet> sorted_jets;
223 std::vector<fastjet::PseudoJet> fj_particles;
224 for (
const auto* part : listOfParticlesToDress) {
227 fj_particles.emplace_back(tauvis.Px(), tauvis.Py(), tauvis.Pz(), tauvis.E());
230 fj_particles.emplace_back(part->px(), part->py(), part->pz(), part->e());
235 for (
const auto* part : photonsFSRList) {
236 fj_particles.emplace_back(part->px(), part->py(), part->pz(), part->e());
241 fastjet::JetAlgorithm alg=fastjet::antikt_algorithm;
242 const fastjet::JetDefinition jet_def(alg,
m_coneSize);
243 fastjet::ClusterSequence cseq(fj_particles, jet_def);
244 sorted_jets = sorted_by_pt(cseq.inclusive_jets(0));
246 std::vector<int> photon_uniqueIDs(50);
247 photon_uniqueIDs.clear();
248 for (
const auto* part : listOfParticlesToDress) {
251 auto pjItr=sorted_jets.begin();
252 while(!found && pjItr!=sorted_jets.end()) {
253 std::vector<fastjet::PseudoJet> constituents = pjItr->constituents();
254 for(
const auto& constit : constituents) {
261 decorator_pt_vis(*part) = pjItr->pt();
262 decorator_eta_vis(*part) = pjItr->pseudorapidity();
263 decorator_phi_vis(*part) = pjItr->phi_std();
264 decorator_m_vis(*part) = pjItr->m();
267 decorator_e(*part) = pjItr->e();
268 decorator_pt(*part) = pjItr->pt();
269 decorator_eta(*part) = pjItr->pseudorapidity();
270 decorator_phi(*part) = pjItr->phi_std();
277 for(
const auto& constit : constituents) {
278 photon_uniqueIDs.push_back(constit.user_index());
285 decorator_pt_vis(*part) = 0.;
286 decorator_eta_vis(*part) = 0.;
287 decorator_phi_vis(*part) = 0.;
288 decorator_m_vis(*part) = 0.;
291 decorator_e(*part) = 0;
292 decorator_pt(*part) = 0;
293 decorator_eta(*part) = 0;
294 decorator_phi(*part) = 0;
302 for (
const auto* phot : photonsFSRList ) {
303 bool found = std::find(photon_uniqueIDs.begin(), photon_uniqueIDs.end(),
HepMC::uniqueID(phot)) != photon_uniqueIDs.end();
311 return StatusCode::SUCCESS;
IParticle::FourMom_t FourMom_t
Definition of the 4-momentum type.