35 return StatusCode::SUCCESS;
44 return StatusCode::SUCCESS;
49 std::map<
Identifier, std::vector<const LArTTL1*>> &towerMap)
const
51 for (
const LArTTL1 *tower : *towers) {
57 std::map<Identifier, std::vector<const LArTTL1*>>
::iterator test = towerMap.find(
id );
59 if (test != towerMap.end()) {
61 test->second.push_back(tower);
65 std::vector<const LArTTL1*> towers;
66 towers.push_back(tower);
67 towerMap.emplace(
id, towers);
78 const std::string &
label)
const
81 std::map<Identifier, std::vector<const LArTTL1*>> towerMap;
86 ATH_MSG_ERROR(
"Could not get background " <<
label <<
" LArTTL1Container container " << bkgTowers.
name() <<
" from store " << bkgTowers.
store());
87 return StatusCode::FAILURE;
94 ATH_MSG_ERROR(
"Could not get signal " <<
label <<
" LArTTL1Container container " << signalTowers.
name() <<
" from store " << signalTowers.
store());
95 return StatusCode::FAILURE;
105 ATH_CHECK( outputContainer.
record(std::make_unique<LArTTL1Container>()) );
106 ATH_MSG_DEBUG(
"Output " <<
label <<
" LArTTL1Container registered successfully (" << outputKey.
key() <<
")" );
109 for (
const auto &[dummy, towers] : towerMap) {
110 const LArTTL1 *firstTower = towers.front();
114 std::vector<float> mergedAmps;
115 for (
const LArTTL1 *tower : towers) {
116 if (mergedAmps.empty()) {
117 mergedAmps = tower->samples();
119 std::vector<float> amps = tower->samples();
120 if (amps.size() != mergedAmps.size()) {
121 ATH_MSG_WARNING(
"LAr " <<
label <<
" vectors have different lengths: " << amps.size() <<
", " << mergedAmps.size());
123 for (
size_t i = 0; i < amps.size(); ++i) {
124 mergedAmps[i] += amps[i];
131 std::unique_ptr<LArTTL1> ttL1 = std::make_unique<LArTTL1>(hwId, Id, mergedAmps);
132 outputContainer->push_back(ttL1.release());
135 return StatusCode::SUCCESS;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
Handle class for reading from StoreGate.
Handle class for recording to StoreGate.
An algorithm that can be simultaneously executed in multiple threads.
Container class for LArTTL1.
Liquid Argon TT L1 sum class.
const HWIdentifier & ttOnlineID() const
return LArTTChannelID (online Id)
const Identifier & ttOfflineID() const
return TT offline Identifier
virtual StatusCode initialize() override final
void groupTowers(const LArTTL1Container *towers, std::map< Identifier, std::vector< const LArTTL1 * > > &towerMap) const
Steps over LAr tower collection and overlays on existing collection.
StatusCode overlay(const EventContext &ctx, const SG::ReadHandleKey< LArTTL1Container > &bkgKey, const SG::ReadHandleKey< LArTTL1Container > &signalKey, const SG::WriteHandleKey< LArTTL1Container > &outputKey, const std::string &label) const
Main algorithm execute.
SG::WriteHandleKey< LArTTL1Container > m_outputHadTTL1Key
SG::WriteHandleKey< LArTTL1Container > m_outputEmTTL1Key
SG::ReadHandleKey< LArTTL1Container > m_bkgHadTTL1Key
SG::ReadHandleKey< LArTTL1Container > m_bkgEmTTL1Key
virtual StatusCode execute(const EventContext &ctx) const override final
Main algorithm execute.
SG::ReadHandleKey< LArTTL1Container > m_signalEmTTL1Key
LArTTL1Overlay(const std::string &name, ISvcLocator *pSvcLocator)
SG::ReadHandleKey< LArTTL1Container > m_signalHadTTL1Key
Property holding a SG store/key/clid from which a ReadHandle is made.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const_pointer_type cptr()
Dereference the pointer.
std::string store() const
Return the name of the store holding the object we are proxying.
const std::string & name() const
Return the StoreGate ID for the referenced object.
const std::string & key() const
Return the StoreGate ID for the referenced object.
Property holding a SG store/key/clid from which a WriteHandle is made.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
std::string label(const std::string &format, int i)
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...