ATLAS Offline Software
eEmMultAlgTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "./eEmMultAlgTool.h"
6 #include "./CommonSelector.h"
7 #include "./eEmSelector.h"
8 
9 #include <fstream>
10 
11 namespace GlobalSim {
12 
14  const std::string& name,
15  const IInterface* parent) :
16  base_class(type, name, parent) {
17  }
18 
19 
20  // Initialize function running before first event
22 
23  CHECK(m_eEmTOBContainerKey.initialize());
24 
25  if (m_n_multbits < 0) {
26  ATH_MSG_ERROR("number of bits to write to TIP is negative");
27  return StatusCode::FAILURE;
28  }
29 
30  int max_tip_pos = s_nbits_TIP - m_n_multbits;
31 
32  if (m_TIP_position < 0 or m_TIP_position > max_tip_pos) {
33  ATH_MSG_ERROR("TIP word out of bounds " << m_TIP_position);
34  return StatusCode::FAILURE;
35  }
36 
37  // create the necessary selector objects
38  m_c_selector = std::make_unique<CommonSelector>(m_et_low_str,
44  );
45 
46  try {
47  m_e_selector = std::make_unique<eEmSelector>(std::stoul(m_rhad_str),
48  m_rhad_op,
49  std::stoul(m_reta_str),
50  m_reta_op,
51  std::stoul(m_wstot_str),
53  );
54  } catch (const std::exception& e) {
55 
56  ATH_MSG_ERROR("Error initialising eEMSelector " << e.what());
57  return StatusCode::FAILURE;
58  }
59 
60 
61 
62  if (m_n_multbits == 0){
63  m_maxtob = 0;
64  } else {
65  ulong maxtob = 1;
66  for (ulong i = m_n_multbits; i != 0; --i) { maxtob *= 2;}
67  m_maxtob = maxtob - 1;
68  }
69 
70  return StatusCode::SUCCESS;
71  }
72 
73 
74  StatusCode eEmMultAlgTool::updateTIP(std::bitset<s_nbits_TIP>& word,
75  const EventContext& ctx) const {
76  auto tobs =
78  ctx);
79 
80  CHECK(tobs.isValid());
81 
82  // check if any of the incoming tobs is selected.
83 
84  auto selected = std::make_unique<bool>(false);
85 
86  ulong tob_count{0};
87  std::vector<bool> tob_pass(tobs->size(), false);
88  for (const auto& t : *tobs){
89  if (m_c_selector->select(*t) and m_e_selector->select(*t)) {
90  tob_pass[tob_count] = true;
91  if (++tob_count == m_maxtob){
92  tob_pass[tob_count] = true;
93  break;
94  }
95  }
96  }
97 
98 
99 
100  ATH_MSG_DEBUG("no of passing TOBS" << tob_count);
101 
102  auto count_bits = std::bitset<s_nbits_TIP>(tob_count);
103 
104  int p0{0};
105  int p1{m_TIP_position};
106 
107  const int& mxb = m_n_multbits;
108 
109  for (; p0 != mxb; ++p0, ++p1) {
110  if (count_bits.test(p0)) {word.set(p1);}
111  }
112 
113  ATH_MSG_DEBUG("TIP word " << word);
114 
115 
116  if (m_enableDump) {
117  std::stringstream ss;
118  ss << "\nRun " << ctx <<' ' << "TIP:\n" << word << '\n';
119  std::size_t ind{0};
120  for (const auto& tob : *tobs) {
121  ss << *tob << ' ' << std::boolalpha << " pass " << tob_pass[ind++] << '\n';
122  }
123  ss << "tob count " << tob_count << '\n';
124 
125  std::ofstream out(name() + ".log", std::ios_base::app);
126  out << ss.str();
127  out.close();
128  }
129 
130 
131  return StatusCode::SUCCESS;
132  }
133 
134  std::string eEmMultAlgTool::toString() const {
135  std::stringstream ss;
136  ss <<name () << ": " <<m_menu_name << ' '
137  << "eEmMultAlgTool read, select, count and report number of related eEmTOBS\n"
138  << m_c_selector->to_string() << '\n'
139  << m_e_selector->to_string() << '\n'
140  << m_TIP_position << ' ' << m_n_multbits;
141 
142  return ss.str();
143  }
144 
145 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
GlobalSim::eEmMultAlgTool::m_rhad_op
Gaudi::Property< std::string > m_rhad_op
Definition: eEmMultAlgTool.h:101
GlobalSim::eEmMultAlgTool::m_wstot_str
Gaudi::Property< std::string > m_wstot_str
Definition: eEmMultAlgTool.h:119
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
GlobalSim::eEmMultAlgTool::m_maxtob
ulong m_maxtob
Definition: eEmMultAlgTool.h:159
GlobalSim::eEmMultAlgTool::m_n_multbits
Gaudi::Property< int > m_n_multbits
Definition: eEmMultAlgTool.h:138
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
GlobalSim::eEmMultAlgTool::m_eta_high_str
Gaudi::Property< std::string > m_eta_high_str
Definition: eEmMultAlgTool.h:77
TRTCalib_cfilter.p1
p1
Definition: TRTCalib_cfilter.py:130
CommonSelector.h
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:70
GlobalSim::eEmMultAlgTool::m_menu_name
Gaudi::Property< std::string > m_menu_name
Definition: eEmMultAlgTool.h:144
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
GlobalSim::eEmMultAlgTool::eEmMultAlgTool
eEmMultAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: eEmMultAlgTool.cxx:13
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
GlobalSim::eEmMultAlgTool::m_reta_op
Gaudi::Property< std::string > m_reta_op
Definition: eEmMultAlgTool.h:113
GlobalSim::eEmMultAlgTool::updateTIP
virtual StatusCode updateTIP(std::bitset< s_nbits_TIP > &, const EventContext &) const override
Definition: eEmMultAlgTool.cxx:74
GlobalSim::eEmMultAlgTool::m_enableDump
Gaudi::Property< bool > m_enableDump
Definition: eEmMultAlgTool.h:151
eEmMultAlgTool.h
GlobalSim
AlgTool that to test whether expected the TIP values generated by data supplied by eEmMultTestBench c...
Definition: CommonSelector.cxx:8
GlobalSim::eEmMultAlgTool::m_rhad_str
Gaudi::Property< std::string > m_rhad_str
Definition: eEmMultAlgTool.h:95
GlobalSim::eEmMultAlgTool::m_et_low_str
Gaudi::Property< std::string > m_et_low_str
Definition: eEmMultAlgTool.h:59
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:85
GlobalSim::eEmMultAlgTool::m_phi_high_str
Gaudi::Property< std::string > m_phi_high_str
Definition: eEmMultAlgTool.h:89
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
GlobalSim::eEmMultAlgTool::m_eta_low_str
Gaudi::Property< std::string > m_eta_low_str
Definition: eEmMultAlgTool.h:71
calibdata.exception
exception
Definition: calibdata.py:495
test_pyathena.parent
parent
Definition: test_pyathena.py:15
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
eEmSelector.h
GlobalSim::eEmMultAlgTool::m_wstot_op
Gaudi::Property< std::string > m_wstot_op
Definition: eEmMultAlgTool.h:125
GlobalSim::eEmMultAlgTool::m_TIP_position
Gaudi::Property< int > m_TIP_position
Definition: eEmMultAlgTool.h:131
GlobalSim::eEmMultAlgTool::m_c_selector
std::unique_ptr< ICommonSelector > m_c_selector
Definition: eEmMultAlgTool.h:49
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
GlobalSim::eEmMultAlgTool::initialize
virtual StatusCode initialize() override
Initialize function running before first event.
Definition: eEmMultAlgTool.cxx:21
GlobalSim::eEmMultAlgTool::m_phi_low_str
Gaudi::Property< std::string > m_phi_low_str
Definition: eEmMultAlgTool.h:83
GlobalSim::eEmMultAlgTool::m_e_selector
std::unique_ptr< IeEmSelector > m_e_selector
Definition: eEmMultAlgTool.h:50
GlobalSim::eEmMultAlgTool::toString
virtual std::string toString() const override
Definition: eEmMultAlgTool.cxx:134
GlobalSim::eEmMultAlgTool::m_eEmTOBContainerKey
SG::ReadHandleKey< GlobalSim::IOBitwise::IeEmTOBContainer > m_eEmTOBContainerKey
Definition: eEmMultAlgTool.h:53
GlobalSim::eEmMultAlgTool::m_et_high_str
Gaudi::Property< std::string > m_et_high_str
Definition: eEmMultAlgTool.h:65
GlobalSim::eEmMultAlgTool::m_reta_str
Gaudi::Property< std::string > m_reta_str
Definition: eEmMultAlgTool.h:107
TRTCalib_cfilter.p0
p0
Definition: TRTCalib_cfilter.py:129