Skip to content

Commit 008a300

Browse files
committed
add EM/Had energy in rechit to dumper
1 parent 616753e commit 008a300

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

RecoHGCal/TICL/plugins/TICLDumper.cc

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)