File indexing completed on 2024-09-27 07:03:48
0001
0002
0003
0004
0005 #include "GaudiAlg/GaudiAlgorithm.h"
0006 #include "Gaudi/Property.h"
0007 #include "GaudiAlg/GaudiTool.h"
0008 #include "GaudiAlg/Transformer.h"
0009
0010 #include <k4FWCore/DataHandle.h>
0011
0012
0013 #include "edm4hep/SimTrackerHitCollection.h"
0014
0015 namespace Jug::Digi {
0016
0017
0018
0019
0020
0021
0022
0023
0024 class SimTrackerHitsCollector : public GaudiAlgorithm {
0025 private:
0026 Gaudi::Property<std::vector<std::string>> m_inputSimTrackerHits{this, "inputSimTrackerHits", {},"Tracker hits to be aggregated"};
0027 DataHandle<edm4hep::SimTrackerHitCollection> m_outputSimTrackerHits{"outputSimTrackerHits", Gaudi::DataHandle::Writer, this};
0028
0029 std::vector<DataHandle<edm4hep::SimTrackerHitCollection>*> m_hitCollections;
0030
0031 public:
0032 SimTrackerHitsCollector(const std::string& name, ISvcLocator* svcLoc)
0033 : GaudiAlgorithm(name, svcLoc)
0034 {
0035 declareProperty("outputSimTrackerHits", m_outputSimTrackerHits, "output hits combined into single collection");
0036 }
0037 ~SimTrackerHitsCollector() {
0038 for (auto* col : m_hitCollections) {
0039 delete col;
0040 }
0041 }
0042
0043 StatusCode initialize() override {
0044 if (GaudiAlgorithm::initialize().isFailure()) {
0045 return StatusCode::FAILURE;
0046 }
0047 for (auto colname : m_inputSimTrackerHits) {
0048 debug() << "initializing collection: " << colname << endmsg;
0049 m_hitCollections.push_back(new DataHandle<edm4hep::SimTrackerHitCollection>{colname, Gaudi::DataHandle::Reader, this});
0050 }
0051 return StatusCode::SUCCESS;
0052 }
0053
0054 StatusCode execute() override
0055 {
0056 auto* outputHits = m_outputSimTrackerHits.createAndPut();
0057 if (msgLevel(MSG::DEBUG)) {
0058 debug() << "execute collector" << endmsg;
0059 }
0060 for(const auto& hits: m_hitCollections) {
0061 const edm4hep::SimTrackerHitCollection* hitCol = hits->get();
0062 if (msgLevel(MSG::DEBUG)) {
0063 debug() << "col n hits: " << hitCol->size() << endmsg;
0064 }
0065 for (const auto& ahit : *hitCol) {
0066 outputHits->push_back(ahit.clone());
0067 }
0068 }
0069 return StatusCode::SUCCESS;
0070 }
0071 };
0072
0073 DECLARE_COMPONENT(SimTrackerHitsCollector)
0074
0075 }