19 const IInterface*
p ) :
22 declareInterface<DerivationFramework::IAugmentationTool>(
this);
34 ATH_CHECK(m_isoParticlesKey.initialize());
35 ATH_CHECK(m_allParticlesKey.initialize());
38 m_coneSizesSort = m_coneSizes;
39 std::sort(m_coneSizesSort.begin(), m_coneSizesSort.end(), [](
float a,
float b){return a>b;});
42 for (
auto csize_itr : m_coneSizesSort ) {
43 std::ostringstream sizess;
44 if (m_variableR) sizess <<
"var";
45 sizess << m_isoVarNamePrefix.value() << (
int)((csize_itr)*100.);
46 m_isoDecorKeys.emplace_back(m_isoParticlesKey.key()+
"."+sizess.str());
50 return StatusCode::SUCCESS;
57 const EventContext& ctx = Gaudi::Hive::currentContext();
61 if (!isoTruthParticles.
isValid()) {
62 ATH_MSG_ERROR(
"Couldn't retrieve collection with name " << m_isoParticlesKey);
63 return StatusCode::FAILURE;
67 if (!allTruthParticles.
isValid()) {
68 ATH_MSG_ERROR(
"Couldn't retrieve collection with name " << m_allParticlesKey);
69 return StatusCode::FAILURE;
76 std::vector<const xAOD::TruthParticle*> listOfParticlesForIso;
80 std::vector<const xAOD::TruthParticle*> candidateParticlesList;
82 std::vector<int> emptyList;
86 std::vector<SG::WriteDecorHandle< xAOD::TruthParticleContainer, float > >
87 decorator_iso = m_isoDecorKeys.makeHandles (ctx);
91 for (
unsigned int icone = 0; icone < m_coneSizesSort.size(); ++icone ) {
92 for (
const auto part : *isoTruthParticles) {
93 decorator_iso.at(icone)(*part) = -1;
98 for (
const auto&
part : listOfParticlesForIso) {
99 std::vector<float> isolationsCalcs(m_coneSizesSort.size(), 0.0);
100 calcIsos(
part, candidateParticlesList, isolationsCalcs);
101 for (
unsigned int icone = 0; icone < m_coneSizesSort.size(); ++icone ) {
102 decorator_iso.at(icone)(*part) = isolationsCalcs.at(icone);
106 return StatusCode::SUCCESS;
110 const std::vector<const xAOD::TruthParticle*> &candidateParticlesList,
111 std::vector<float> &isoCalcs)
const
119 for (
const auto& cand_part : candidateParticlesList) {
120 if (
find(m_excludeFromCone.begin(), m_excludeFromCone.end(), cand_part->pdgId()) != m_excludeFromCone.end()) {
130 for (
unsigned int icone = 0; icone < m_coneSizesSort.size(); ++icone ) {
131 const float dr2 = calculateDeltaR2(cand_part, part_eta, part_phi);
132 const float coneSize = m_coneSizesSort.at(icone);
136 isoCalcs.at(icone) = isoCalcs.at(icone) + cand_part->pt();
150 float phi1 = p1->
phi();