14 #include "CLHEP/Units/SystemOfUnits.h"
35 if( ! m_caloIsolationTool.empty() ) {
36 ATH_CHECK( m_caloIsolationTool.retrieve() );
37 ATH_MSG_INFO(
"Successfully retrieved the CaloIsolationTool!" );
40 if( ! m_trackIsolationTool.empty() ) {
41 ATH_CHECK( m_trackIsolationTool.retrieve() );
42 ATH_MSG_INFO(
"Successfully retrieved the TrackIsolationTool!" );
45 ATH_CHECK(m_trackContainerKey.initialize());
53 m_ptconeTypes.clear();
54 m_ptvarconeTypes.clear();
55 m_topoetconeTypes.clear();
57 for(
unsigned int i=0;
i<m_iso.size();
i++){
62 m_ptconeTypes.push_back(isoType);
63 m_ptconeDecoratorsKey.emplace_back(m_trackContainerKey.key() +
"." + m_prefix + m_iso_suffix[
i]);
66 m_ptvarconeTypes.push_back(isoType);
67 m_ptvarconeDecoratorsKey.emplace_back(m_trackContainerKey.key() +
"." + m_prefix + m_iso_suffix[
i]);
70 m_topoetconeTypes.push_back(isoType);
71 m_topoetconeDecoratorsKey.emplace_back(m_trackContainerKey.key() +
"." + m_prefix + m_iso_suffix[
i]);
72 m_topoetconeNonCoreConeDecoratorsKey.emplace_back(m_trackContainerKey.key() +
"." + m_prefix + m_iso_suffix[
i] +
"NonCoreCone");
75 ATH_CHECK(m_ptconeDecoratorsKey.initialize());
76 ATH_CHECK(m_ptvarconeDecoratorsKey.initialize());
77 ATH_CHECK(m_topoetconeDecoratorsKey.initialize());
78 ATH_CHECK(m_topoetconeNonCoreConeDecoratorsKey.initialize());
81 if (not m_selectionString.empty()) {
82 ATH_CHECK(initializeParser(m_selectionString));
85 if(not m_selFlag.empty()){
86 m_dec_trkFlagKey = m_trackContainerKey.key() +
"." + m_selFlag;
88 m_dec_trkFlagKey = m_trackContainerKey.key() +
".no_key";
92 return StatusCode::SUCCESS;
100 return StatusCode::SUCCESS;
112 entries = m_parser->evaluateAsVector();
114 ATH_MSG_ERROR(
"Sizes incompatible! Are you sure your selection string used ID TrackParticles?");
115 return StatusCode::FAILURE;
120 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer, float>> ptconeDecorators;
121 for(
unsigned int i=0;
i<m_ptconeTypes.size();
i++){
122 ptconeDecorators.emplace_back(m_ptconeDecoratorsKey[
i], ctx);
124 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer, float>> ptvarconeDecorators;
125 for(
unsigned int i=0;
i<m_ptvarconeTypes.size();
i++){
126 ptvarconeDecorators.emplace_back(m_ptconeDecoratorsKey[
i], ctx);
128 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer, float>> topoetconeDecorators;
129 for(
unsigned int i=0;
i<m_topoetconeTypes.size();
i++){
130 topoetconeDecorators.emplace_back(m_topoetconeDecoratorsKey[
i], ctx);
132 std::vector<SG::WriteDecorHandle<xAOD::TrackParticleContainer, float>> topoetconeNonCoreConeDecorators;
133 for(
unsigned int i=0;
i<m_topoetconeTypes.size();
i++){
134 topoetconeNonCoreConeDecorators.emplace_back(m_topoetconeNonCoreConeDecoratorsKey[
i], ctx);
145 if (!
entries[ipar++]) IsPassed=
false;
148 if(not m_selFlag.empty()){
149 if(dec_trkFlag(*
particle)!=m_selFlagValue) IsPassed=
false;
159 if(m_ptconeTypes.size()) {
161 if (m_trackIsolationTool->trackIsolation(resultTrack, *
particle, m_ptconeTypes, m_trkCorrList)){
162 for(
unsigned int i=0;
i<m_ptconeTypes.size();
i++){
163 ptconeDecorators[
i](*particle) = resultTrack.
ptcones[
i];
170 if(m_ptvarconeTypes.size()) {
172 std::vector<xAOD::Iso::IsolationType> ptconeTypes = {};
173 for(
auto isoType : m_ptvarconeTypes) {
174 int iso_tmp =
static_cast<int>(isoType);
175 iso_tmp -= m_diff_ptvarcone;
179 if (m_trackIsolationTool->trackIsolation(resultTrackVar, *
particle, ptconeTypes, m_trkCorrList)){
180 for(
unsigned int i=0;
i<m_ptvarconeTypes.size();
i++){
188 if(m_topoetconeTypes.size()) {
190 if (m_caloIsolationTool->caloTopoClusterIsolation(resultCalo, *
particle, m_topoetconeTypes, m_topoconeCorrList)){
191 for(
unsigned int i=0;
i<m_topoetconeTypes.size();
i++){
192 topoetconeDecorators[
i](*particle) = resultCalo.
etcones[
i];
198 if (m_caloIsolationTool->caloTopoClusterIsolation(resultCaloNonCoreCone, *
particle, m_topoetconeTypes, m_topoclusCorrList)){
199 for(
unsigned int i=0;
i<m_topoetconeTypes.size();
i++){
200 topoetconeNonCoreConeDecorators[
i](*particle) = resultCaloNonCoreCone.
etcones[
i];
203 ATH_MSG_WARNING(
"Failed to apply the topo calo isolation for a particle ( non CoreCone )");
209 for(
unsigned int i=0;
i<m_ptconeTypes.size();
i++){
210 ptconeDecorators[
i](*particle) = -999.e3;
212 for(
unsigned int i=0;
i<m_ptvarconeTypes.size();
i++){
213 ptvarconeDecorators[
i](*particle) = -999.e3;
215 for(
unsigned int i=0;
i<m_topoetconeTypes.size();
i++){
216 topoetconeDecorators[
i](*particle) = -999.e3;
217 topoetconeNonCoreConeDecorators[
i](*particle) = -999.e3;
223 return StatusCode::SUCCESS;