35 return StatusCode::SUCCESS;
44 return StatusCode::SUCCESS;
49 std::map<
Identifier, std::vector<const LArTTL1*>> &towerMap)
const
51 for (
const LArTTL1* tower : *towers) {
52 auto [it, inserted] = towerMap.try_emplace(tower->ttOfflineID());
53 it->second.push_back(tower);
63 const std::string &
label)
const
66 std::map<Identifier, std::vector<const LArTTL1*>> towerMap;
71 ATH_MSG_ERROR(
"Could not get background " <<
label <<
" LArTTL1Container container " << bkgTowers.
name() <<
" from store " << bkgTowers.
store());
72 return StatusCode::FAILURE;
79 ATH_MSG_ERROR(
"Could not get signal " <<
label <<
" LArTTL1Container container " << signalTowers.
name() <<
" from store " << signalTowers.
store());
80 return StatusCode::FAILURE;
90 ATH_CHECK( outputContainer.
record(std::make_unique<LArTTL1Container>()) );
91 ATH_MSG_DEBUG(
"Output " <<
label <<
" LArTTL1Container registered successfully (" << outputKey.
key() <<
")" );
94 for (
const auto &[dummy, towers] : towerMap) {
95 const LArTTL1 *firstTower = towers.front();
99 std::vector<float> mergedAmps;
100 for (
const LArTTL1 *tower : towers) {
101 if (mergedAmps.empty()) {
102 mergedAmps = tower->samples();
104 std::vector<float> amps = tower->samples();
105 if (amps.size() != mergedAmps.size()) {
106 ATH_MSG_WARNING(
"LAr " <<
label <<
" vectors have different lengths: " << amps.size() <<
", " << mergedAmps.size());
108 for (
size_t i = 0; i < amps.size(); ++i) {
109 mergedAmps[i] += amps[i];
116 std::unique_ptr<LArTTL1> ttL1 = std::make_unique<LArTTL1>(hwId, Id, mergedAmps);
117 outputContainer->push_back(ttL1.release());
120 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...