@@ -638,6 +638,7 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
638638 const std::vector<edm::EDGetTokenT<HGCRecHitCollection>> rechits_tokens_;
639639 const std::vector<edm::InputTag> label_simhits;
640640 const std::vector<edm::EDGetTokenT<std::vector<PCaloHit>>> simhits_tokens_;
641+ const edm::EDGetTokenT<std::unordered_map<DetId, const unsigned int >> hitMapToken_;
641642
642643 const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometry_token_;
643644 const std::string detector_;
@@ -769,6 +770,9 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
769770 std::vector<float > rechit_z;
770771 std::vector<float > rechit_time;
771772 std::vector<float > rechit_radius;
773+ std::vector<float > rechit_simEnergy;
774+ std::vector<float > rechit_simEnergyEM;
775+ std::vector<float > rechit_simEnergyHad;
772776
773777 std::vector<uint32_t > simhit_ID;
774778 std::vector<float > simhit_energy;
@@ -898,6 +902,9 @@ void TICLDumper::clearVariables() {
898902 rechit_z.clear ();
899903 rechit_time.clear ();
900904 rechit_radius.clear ();
905+ rechit_simEnergy.clear ();
906+ rechit_simEnergyEM.clear ();
907+ rechit_simEnergyHad.clear ();
901908
902909 simhit_ID.clear ();
903910 simhit_energy.clear ();
@@ -953,6 +960,8 @@ TICLDumper::TICLDumper(const edm::ParameterSet& ps)
953960 label_simhits (ps.getParameter<std::vector<edm::InputTag>>(" label_simhits" )),
954961 simhits_tokens_{edm::vector_transform (
955962 label_simhits, [this ](const edm::InputTag& lab) { return consumes<std::vector<PCaloHit>>(lab); })},
963+ hitMapToken_ (
964+ consumes<std::unordered_map<DetId, const unsigned int >>(ps.getParameter<edm::InputTag>(" hitMapTag" ))),
956965 geometry_token_(esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>()),
957966 detector_(ps.getParameter<std::string>(" detector" )),
958967 propName_(ps.getParameter<std::string>(" propagator" )),
@@ -1029,6 +1038,9 @@ void TICLDumper::beginJob() {
10291038 rechits_tree_->Branch (" position_z" , &rechit_z);
10301039 rechits_tree_->Branch (" time" , &rechit_time);
10311040 rechits_tree_->Branch (" radiusToSide" , &rechit_radius);
1041+ rechits_tree_->Branch (" simEnergy" , &rechit_simEnergy);
1042+ rechits_tree_->Branch (" simEnergyEM" , &rechit_simEnergyEM);
1043+ rechits_tree_->Branch (" simEnergyHad" , &rechit_simEnergyHad);
10321044
10331045 simhits_tree_ = fs->make <TTree>(" simhits" , " HGCAL simhits" );
10341046 simhits_tree_->Branch (" ID" , &simhit_ID);
@@ -1278,6 +1290,28 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
12781290 nclusters_ = clusters.size ();
12791291
12801292 if (saveHits_) {
1293+ edm::Handle<std::unordered_map<DetId, const unsigned int >> hitMap;
1294+ event.getByToken (hitMapToken_, hitMap);
1295+
1296+ struct ThreeFloat {
1297+ ThreeFloat () : energy(0 .f), energyEM(0 .f), energyHad(0 .f) {};
1298+ ThreeFloat (double e, double eEM, double eHad) : energy((float )e), energyEM((float )eEM), energyHad((float )eHad) {};
1299+ ThreeFloat (float e, float eEM, float eHad) : energy(e), energyEM(eEM), energyHad(eHad) {};
1300+
1301+ ThreeFloat& operator +=(const ThreeFloat& other) {
1302+ energy += other.energy ;
1303+ energyEM += other.energyEM ;
1304+ energyHad += other.energyHad ;
1305+ return *this ;
1306+ }
1307+
1308+ float energy;
1309+ float energyEM;
1310+ float energyHad;
1311+ };
1312+
1313+ std::vector<ThreeFloat> hitIdToEnergies (hitMap->size ());
1314+
12811315 for (auto const & sh_token : simhits_tokens_) {
12821316 edm::Handle<std::vector<PCaloHit>> simhit_handle;
12831317 event.getByToken (sh_token, simhit_handle);
@@ -1292,6 +1326,11 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
12921326 simhit_z.push_back (shPosition.z ());
12931327 simhit_ID.push_back (sh.id ());
12941328 simhit_time.push_back (sh.time ());
1329+ const auto hitId = hitMap->find (DetId (sh.id ()));
1330+ if (hitId != hitMap->end ()) {
1331+ hitIdToEnergies[hitId->second ] += {sh.energy (), sh.energyEM (), sh.energyHad ()};
1332+ }
1333+ }
12951334 }
12961335
12971336 for (auto const & rh_token : rechits_tokens_) {
@@ -1307,6 +1346,12 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
13071346 rechit_ID.push_back (rh.detid ());
13081347 rechit_time.push_back (rh.time ());
13091348 rechit_radius.push_back (detectorTools_->rhtools .getRadiusToSide (rh.detid ()));
1349+ const auto hitId = hitMap->find (DetId (rh.detid ()));
1350+ if (hitId != hitMap->end ()) {
1351+ rechit_simEnergy.push_back (hitIdToEnergies[hitId->second ].energy );
1352+ rechit_simEnergyEM.push_back (hitIdToEnergies[hitId->second ].energyEM );
1353+ rechit_simEnergyHad.push_back (hitIdToEnergies[hitId->second ].energyHad );
1354+ }
13101355 }
13111356 }
13121357 }
@@ -1582,6 +1627,7 @@ void TICLDumper::fillDescriptions(edm::ConfigurationDescriptions& descriptions)
15821627 {edm::InputTag (" g4SimHits" , " HGCHitsEE" ),
15831628 edm::InputTag (" g4SimHits" , " HGCHitsHEfront" ),
15841629 edm::InputTag (" g4SimHits" , " HGCHitsHEback" )});
1630+ desc.add <edm::InputTag>(" hitMapTag" , edm::InputTag (" recHitMapProducer" , " hgcalRecHitMap" ));
15851631
15861632 // Settings for dumping trackster associators (recoToSim & simToReco)
15871633 edm::ParameterSetDescription associatorDescValidator;
0 commit comments