Skip to content

Commit aa73d03

Browse files
committed
add rechits/simhits to dumper
1 parent c7a91a3 commit aa73d03

File tree

1 file changed

+134
-1
lines changed

1 file changed

+134
-1
lines changed

RecoHGCal/TICL/plugins/TICLDumper.cc

Lines changed: 134 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "FWCore/Framework/interface/MakerMacros.h"
2222
#include "FWCore/ParameterSet/interface/ParameterSet.h"
2323
#include "FWCore/ServiceRegistry/interface/Service.h"
24+
#include "FWCore/Utilities/interface/transform.h"
2425

2526
#include "DataFormats/Provenance/interface/EventID.h"
2627
#include "DataFormats/CaloRecHit/interface/CaloCluster.h"
@@ -33,8 +34,10 @@
3334
#include "DataFormats/Math/interface/Point3D.h"
3435
#include "DataFormats/GeometrySurface/interface/BoundDisk.h"
3536
#include "DataFormats/HGCalReco/interface/Common.h"
37+
#include "DataFormats/HGCRecHit/interface/HGCRecHitCollections.h"
3638
#include "SimDataFormats/CaloAnalysis/interface/CaloParticle.h"
3739
#include "SimDataFormats/CaloAnalysis/interface/SimCluster.h"
40+
#include "SimDataFormats/CaloHit/interface/PCaloHit.h"
3841
#include "DataFormats/EgammaReco/interface/SuperClusterFwd.h"
3942
#include "DataFormats/EgammaReco/interface/SuperCluster.h"
4043

@@ -631,6 +634,10 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
631634

632635
const edm::EDGetTokenT<std::vector<SimCluster>> simclusters_token_;
633636
const edm::EDGetTokenT<std::vector<CaloParticle>> caloparticles_token_;
637+
const std::vector<edm::InputTag> label_rechits;
638+
const std::vector<edm::EDGetTokenT<HGCRecHitCollection>> rechits_tokens_;
639+
const std::vector<edm::InputTag> label_simhits;
640+
const std::vector<edm::EDGetTokenT<std::vector<PCaloHit>>> simhits_tokens_;
634641

635642
const edm::ESGetToken<CaloGeometry, CaloGeometryRecord> geometry_token_;
636643
const std::string detector_;
@@ -646,6 +653,8 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
646653
bool saveTICLCandidate_;
647654
bool saveSimTICLCandidate_;
648655
bool saveTracks_;
656+
bool saveRecHits_;
657+
bool saveSimHits_;
649658

650659
// Output tree
651660
TTree* tree_;
@@ -723,6 +732,7 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
723732
std::vector<float> cluster_time;
724733
std::vector<float> cluster_timeErr;
725734
std::vector<uint32_t> cluster_number_of_hits;
735+
std::vector<std::vector<uint32_t>> rechits_inLC;
726736

727737
// Tracks
728738
std::vector<unsigned int> track_id;
@@ -752,11 +762,30 @@ class TICLDumper : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::Sh
752762
std::vector<int> track_isMuon;
753763
std::vector<int> track_isTrackerMuon;
754764

765+
// rechits
766+
std::vector<uint32_t> rechit_ID;
767+
std::vector<float> rechit_energy;
768+
std::vector<float> rechit_x;
769+
std::vector<float> rechit_y;
770+
std::vector<float> rechit_z;
771+
std::vector<float> rechit_time;
772+
773+
std::vector<uint32_t> simhit_ID;
774+
std::vector<float> simhit_energy;
775+
std::vector<float> simhit_energyEM;
776+
std::vector<float> simhit_energyHad;
777+
std::vector<float> simhit_x;
778+
std::vector<float> simhit_y;
779+
std::vector<float> simhit_z;
780+
std::vector<float> simhit_time;
781+
755782
TTree* cluster_tree_;
756783
TTree* candidate_tree_;
757784
TTree* superclustering_tree_;
758785
TTree* tracks_tree_;
759786
TTree* simTICLCandidate_tree;
787+
TTree* rechits_tree_;
788+
TTree* simhits_tree_;
760789
};
761790

762791
void TICLDumper::clearVariables() {
@@ -833,6 +862,7 @@ void TICLDumper::clearVariables() {
833862
cluster_time.clear();
834863
cluster_timeErr.clear();
835864
cluster_number_of_hits.clear();
865+
rechits_inLC.clear();
836866

837867
track_id.clear();
838868
track_hgcal_x.clear();
@@ -860,6 +890,22 @@ void TICLDumper::clearVariables() {
860890
track_nhits.clear();
861891
track_isMuon.clear();
862892
track_isTrackerMuon.clear();
893+
894+
rechit_ID.clear();
895+
rechit_energy.clear();
896+
rechit_x.clear();
897+
rechit_y.clear();
898+
rechit_z.clear();
899+
rechit_time.clear();
900+
901+
simhit_ID.clear();
902+
simhit_energy.clear();
903+
simhit_energyEM.clear();
904+
simhit_energyHad.clear();
905+
simhit_x.clear();
906+
simhit_y.clear();
907+
simhit_z.clear();
908+
simhit_time.clear();
863909
};
864910

865911
TICLDumper::TICLDumper(const edm::ParameterSet& ps)
@@ -900,6 +946,12 @@ TICLDumper::TICLDumper(const edm::ParameterSet& ps)
900946
associations_dumperHelpers_(associations_parameterSets_.size()),
901947
simclusters_token_(consumes(ps.getParameter<edm::InputTag>("simclusters"))),
902948
caloparticles_token_(consumes(ps.getParameter<edm::InputTag>("caloparticles"))),
949+
label_rechits(ps.getParameter<std::vector<edm::InputTag>>("label_rechits")),
950+
rechits_tokens_{edm::vector_transform(
951+
label_rechits, [this](const edm::InputTag& lab) { return consumes<HGCRecHitCollection>(lab); })},
952+
label_simhits(ps.getParameter<std::vector<edm::InputTag>>("label_simhits")),
953+
simhits_tokens_{edm::vector_transform(
954+
label_simhits, [this](const edm::InputTag& lab) { return consumes<std::vector<PCaloHit>>(lab); })},
903955
geometry_token_(esConsumes<CaloGeometry, CaloGeometryRecord, edm::Transition::BeginRun>()),
904956
detector_(ps.getParameter<std::string>("detector")),
905957
propName_(ps.getParameter<std::string>("propagator")),
@@ -912,7 +964,9 @@ TICLDumper::TICLDumper(const edm::ParameterSet& ps)
912964
saveRecoSuperclusters_(ps.getParameter<bool>("saveRecoSuperclusters")),
913965
saveTICLCandidate_(ps.getParameter<bool>("saveSimTICLCandidate")),
914966
saveSimTICLCandidate_(ps.getParameter<bool>("saveSimTICLCandidate")),
915-
saveTracks_(ps.getParameter<bool>("saveTracks")) {
967+
saveTracks_(ps.getParameter<bool>("saveTracks")),
968+
saveRecHits_(ps.getParameter<bool>("saveRecHits")),
969+
saveSimHits_(ps.getParameter<bool>("saveSimHits")) {
916970
if (saveSuperclustering_) {
917971
superclustering_linkedResultTracksters_token =
918972
consumes<std::vector<std::vector<unsigned int>>>(ps.getParameter<edm::InputTag>("superclustering"));
@@ -966,6 +1020,26 @@ void TICLDumper::beginJob() {
9661020
tracksters_trees.push_back(tree);
9671021
tracksters_dumperHelpers_[i].initTree(tree, &eventId_);
9681022
}
1023+
if (saveRecHits_) {
1024+
rechits_tree_ = fs->make<TTree>("rechits", "HGCAL rechits");
1025+
rechits_tree_->Branch("ID", &rechit_ID);
1026+
rechits_tree_->Branch("energy", &rechit_energy);
1027+
rechits_tree_->Branch("position_x", &rechit_x);
1028+
rechits_tree_->Branch("position_y", &rechit_y);
1029+
rechits_tree_->Branch("position_z", &rechit_z);
1030+
rechits_tree_->Branch("time", &rechit_time);
1031+
}
1032+
if (saveSimHits_) {
1033+
simhits_tree_ = fs->make<TTree>("simhits", "HGCAL simhits");
1034+
simhits_tree_->Branch("ID", &simhit_ID);
1035+
simhits_tree_->Branch("energy", &simhit_energy);
1036+
simhits_tree_->Branch("energyEM", &simhit_energyEM);
1037+
simhits_tree_->Branch("energyHad", &simhit_energyHad);
1038+
simhits_tree_->Branch("position_x", &simhit_x);
1039+
simhits_tree_->Branch("position_y", &simhit_y);
1040+
simhits_tree_->Branch("position_z", &simhit_z);
1041+
simhits_tree_->Branch("time", &simhit_time);
1042+
}
9691043
if (saveLCs_) {
9701044
cluster_tree_ = fs->make<TTree>("clusters", "TICL tracksters");
9711045
cluster_tree_->Branch("event", &eventId_);
@@ -983,6 +1057,7 @@ void TICLDumper::beginJob() {
9831057
cluster_tree_->Branch("cluster_time", &cluster_time);
9841058
cluster_tree_->Branch("cluster_timeErr", &cluster_timeErr);
9851059
cluster_tree_->Branch("cluster_number_of_hits", &cluster_number_of_hits);
1060+
cluster_tree_->Branch("rechits", &rechits_inLC);
9861061
}
9871062
if (saveTICLCandidate_) {
9881063
candidate_tree_ = fs->make<TTree>("candidates", "TICL candidates");
@@ -1202,6 +1277,45 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
12021277

12031278
nclusters_ = clusters.size();
12041279

1280+
std::vector<std::vector<PCaloHit>> simhits_collections;
1281+
for (auto const& sh_token : simhits_tokens_) {
1282+
edm::Handle<std::vector<PCaloHit>> simhit_handle;
1283+
event.getByToken(sh_token, simhit_handle);
1284+
simhits_collections.push_back(*simhit_handle);
1285+
}
1286+
1287+
for (auto const& rh_token : rechits_tokens_) {
1288+
edm::Handle<HGCRecHitCollection> rechit_handle;
1289+
event.getByToken(rh_token, rechit_handle);
1290+
const auto& rhColl = *rechit_handle;
1291+
for (auto const& rh : rhColl) {
1292+
rechit_energy.push_back(rh.energy());
1293+
auto const rhPosition = detectorTools_->rhtools.getPosition(rh.detid());
1294+
rechit_x.push_back(rhPosition.x());
1295+
rechit_y.push_back(rhPosition.y());
1296+
rechit_z.push_back(rhPosition.z());
1297+
rechit_ID.push_back(rh.detid());
1298+
rechit_time.push_back(rh.time());
1299+
}
1300+
}
1301+
1302+
for (auto const& sh_token : simhits_tokens_) {
1303+
edm::Handle<std::vector<PCaloHit>> simhit_handle;
1304+
event.getByToken(sh_token, simhit_handle);
1305+
const auto& shColl = *simhit_handle;
1306+
for (auto const& sh : shColl) {
1307+
simhit_energy.push_back(sh.energy());
1308+
simhit_energyEM.push_back(sh.energyEM());
1309+
simhit_energyHad.push_back(sh.energyHad());
1310+
auto const shPosition = detectorTools_->rhtools.getPosition(sh.id());
1311+
simhit_x.push_back(shPosition.x());
1312+
simhit_y.push_back(shPosition.y());
1313+
simhit_z.push_back(shPosition.z());
1314+
simhit_ID.push_back(sh.id());
1315+
simhit_time.push_back(sh.time());
1316+
}
1317+
}
1318+
12051319
// Save all the trackster collections
12061320
for (unsigned int i = 0; i < tracksters_dumperHelpers_.size(); i++) {
12071321
edm::Handle<std::vector<ticl::Trackster>> tracksters_handle;
@@ -1304,6 +1418,11 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
13041418
cluster_timeErr.push_back(layerClustersTimes.get(c_id).second);
13051419
cluster_time.push_back(layerClustersTimes.get(c_id).first);
13061420
c_id += 1;
1421+
std::vector<uint32_t> hits_detid;
1422+
for (auto const& handf : cluster_iterator->hitsAndFractions()) {
1423+
hits_detid.push_back(handf.first);
1424+
}
1425+
rechits_inLC.push_back(hits_detid);
13071426
}
13081427

13091428
tracksters_in_candidate.resize(ticlcandidates.size());
@@ -1407,6 +1526,10 @@ void TICLDumper::analyze(const edm::Event& event, const edm::EventSetup& setup)
14071526
tracks_tree_->Fill();
14081527
if (saveSimTICLCandidate_)
14091528
simTICLCandidate_tree->Fill();
1529+
if (saveRecHits_)
1530+
rechits_tree_->Fill();
1531+
if (saveSimHits_)
1532+
simhits_tree_->Fill();
14101533
}
14111534

14121535
void TICLDumper::endJob() {}
@@ -1456,6 +1579,14 @@ void TICLDumper::fillDescriptions(edm::ConfigurationDescriptions& descriptions)
14561579
desc.add<edm::InputTag>("simtrackstersSC", edm::InputTag("ticlSimTracksters"))
14571580
->setComment("SimTrackster from CaloParticle collection to use for simTICLcandidates");
14581581
desc.add<edm::InputTag>("simTICLCandidates", edm::InputTag("ticlSimTracksters"));
1582+
desc.add<std::vector<edm::InputTag>>("label_rechits",
1583+
{edm::InputTag("HGCalRecHit", "HGCEERecHits"),
1584+
edm::InputTag("HGCalRecHit", "HGCHEFRecHits"),
1585+
edm::InputTag("HGCalRecHit", "HGCHEBRecHits")});
1586+
desc.add<std::vector<edm::InputTag>>("label_simhits",
1587+
{edm::InputTag("g4SimHits", "HGCHitsEE"),
1588+
edm::InputTag("g4SimHits", "HGCHitsHEfront"),
1589+
edm::InputTag("g4SimHits", "HGCHitsHEback")});
14591590

14601591
// Settings for dumping trackster associators (recoToSim & simToReco)
14611592
edm::ParameterSetDescription associatorDescValidator;
@@ -1479,6 +1610,8 @@ void TICLDumper::fillDescriptions(edm::ConfigurationDescriptions& descriptions)
14791610
desc.add<bool>("saveSuperclustering", true);
14801611
desc.add<bool>("saveRecoSuperclusters", true)
14811612
->setComment("Save superclustering Egamma collections (as reco::SuperCluster)");
1613+
desc.add<bool>("saveRecHits", false);
1614+
desc.add<bool>("saveSimHits", false);
14821615
descriptions.add("ticlDumper", desc);
14831616
}
14841617

0 commit comments

Comments
 (0)