48 #include "TProfile2D.h" 74 static bool sortTime(
const std::pair<double, double>&
i,
const std::pair<double, double>&
j);
137 usesResource(
"TFileService");
173 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: SimHits = " << doSimHits_ <<
" Digis = " << doDigis_ <<
":" 174 << sampleIndex_ <<
" RecHits = " << doRecHits_ <<
" useDets " << ifEE_ <<
":" << ifFH_
175 <<
":" << ifBH_ <<
":" << ifBeam_ <<
" zFront " << zFrontEE_ <<
":" << zFrontFH_ <<
":" 176 << zFrontBH_ <<
" IdBeam " << idBeams_.size() <<
":";
177 for (
unsigned int k = 0;
k < idBeams_.size(); ++
k)
179 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: DoPassive " << doPassive_ <<
":" << doPassiveEE_ <<
":" 181 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: MIP conversion factors " << gev2mip200_ <<
":" << gev2mip300_
184 if (idBeams_.empty())
185 idBeams_.push_back(1001);
188 tok_hepMC_ = consumes<edm::HepMCProduct>(tmp0);
191 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: GeneratorSource = " << tmp0;
215 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: Detector " << detectorFH_ <<
" with tags " << tmp1 <<
", " << tmp2
244 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: Detector " << detectorBH_ <<
" with tags " << tmp1 <<
", " << tmp2
252 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer:: Detector " << detectorBeam_ <<
" with tags " << tmp1;
262 desc.
add<
bool>(
"useEE",
true);
263 desc.
add<
double>(
"zFrontEE", 0.0);
268 desc.
add<
bool>(
"useFH",
false);
269 desc.
add<
double>(
"zFrontFH", 0.0);
274 desc.
add<
bool>(
"useBH",
false);
275 desc.
add<
double>(
"zFrontBH", 0.0);
280 desc.
add<
bool>(
"useBeam",
false);
282 std::vector<int>
ids = {
283 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1011, 1012, 1013, 1014, 2001, 2002, 2003, 2004, 2005};
284 desc.
add<std::vector<int>>(
"idBeams",
ids);
292 desc.
add<
bool>(
"doSimHits",
true);
293 desc.
add<
bool>(
"doDigis",
true);
294 desc.
add<
bool>(
"doRecHits",
true);
295 desc.
add<
int>(
"sampleIndex", 0);
296 desc.
add<
bool>(
"doTree",
true);
297 desc.
add<
bool>(
"doTreeCell",
true);
298 desc.
add<
bool>(
"doPassive",
false);
299 desc.
add<
bool>(
"doPassiveEE",
false);
300 desc.
add<
bool>(
"doPassiveHE",
false);
301 desc.
add<
bool>(
"doPassiveBH",
false);
304 desc.
addUntracked<
double>(
"stoc_smear_time_200", 10.24);
311 descriptions.
add(
"HGCalTBAnalyzer", desc);
316 hBeam_ =
fs_->
make<TH1D>(
"BeamP",
"Beam Momentum", 1000, 0, 1000.0);
317 for (
int i = 0;
i < 3; ++
i) {
329 sprintf(name,
"SimHitEn%s", det.c_str());
330 sprintf(title,
"Sim Hit Energy for %s", det.c_str());
332 sprintf(name,
"SimHitEnX%s", det.c_str());
333 sprintf(title,
"Sim Hit Energy for %s", det.c_str());
335 sprintf(name,
"SimHitTm%s", det.c_str());
336 sprintf(title,
"Sim Hit Timing for %s", det.c_str());
338 sprintf(name,
"SimHitLat%s", det.c_str());
339 sprintf(title,
"Lateral Shower profile (Sim Hit) for %s", det.c_str());
341 sprintf(name,
"SimHitLng%s", det.c_str());
342 sprintf(title,
"Longitudinal Shower profile (Sim Hit) for %s", det.c_str());
344 sprintf(name,
"SimHitLng1%s", det.c_str());
345 sprintf(title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
347 sprintf(name,
"SimHitLng2%s", det.c_str());
348 sprintf(title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
353 sprintf(name,
"DigiADC%s", det.c_str());
354 sprintf(title,
"ADC at Digi level for %s", det.c_str());
356 sprintf(name,
"DigiOcc%s", det.c_str());
357 sprintf(title,
"Occupancy (Digi)for %s", det.c_str());
359 sprintf(name,
"DigiLng%s", det.c_str());
360 sprintf(title,
"Longitudinal Shower profile (Digi) for %s", det.c_str());
365 sprintf(name,
"RecHitEn%s", det.c_str());
366 sprintf(title,
"Rec Hit Energy for %s", det.c_str());
368 sprintf(name,
"RecHitOcc%s", det.c_str());
369 sprintf(title,
"Occupancy (Rec Hit)for %s", det.c_str());
371 sprintf(name,
"RecHitLat%s", det.c_str());
372 sprintf(title,
"Lateral Shower profile (Rec Hit) for %s", det.c_str());
374 sprintf(name,
"RecHitLng%s", det.c_str());
375 sprintf(title,
"Longitudinal Shower profile (Rec Hit) for %s", det.c_str());
377 sprintf(name,
"RecHitLng1%s", det.c_str());
378 sprintf(title,
"Longitudinal Shower profile vs Layer for %s", det.c_str());
384 sprintf(title,
"Sim Hit Energy for %s",
detectorBeam_.c_str());
387 sprintf(title,
"Sim Hit Energy for %s",
detectorBeam_.c_str());
390 sprintf(title,
"Sim Hit Timing for %s",
detectorBeam_.c_str());
472 sprintf(title,
"Sim Hit Energy in SIM layer %d for %s",
l + 1,
detectorEE_.c_str());
475 sprintf(name,
"SimHitEnB%d%s", (
l / 3 + 1),
detectorEE_.c_str());
476 sprintf(title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorEE_.c_str());
502 sprintf(title,
"Sim Hit Energy in layer %d for %s",
l + 1,
detectorFH_.c_str());
505 sprintf(name,
"SimHitEnB%d%s", (
l / 3 + 1),
detectorFH_.c_str());
506 sprintf(title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorFH_.c_str());
522 sprintf(title,
"Sim Hit Energy in layer %d for %s",
l + 1,
detectorBH_.c_str());
525 sprintf(title,
"Sim Hit Energy in layer %d for %s",
l + 1,
detectorBH_.c_str());
531 for (
unsigned int l = 0;
l <
idBeams_.size(); ++
l) {
548 for (HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end();
551 hBeam_->Fill((*p)->momentum().rho());
553 edm::LogVerbatim(
"HGCSim") <<
"Particle[" << k <<
"] with p " << (*p)->momentum().rho() <<
" theta " 554 << (*p)->momentum().theta() <<
" phi " << (*p)->momentum().phi();
597 std::vector<PCaloHit> caloHits;
602 if (theCaloHitContainers.
isValid()) {
608 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
620 if (theCaloHitContainers.
isValid()) {
626 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
638 if (theCaloHitContainers.
isValid()) {
644 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
655 if (theCaloHitContainers.
isValid()) {
658 << theCaloHitContainers->size() <<
" hits";
661 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
725 if (theDigiContainers.
isValid()) {
730 for (
const auto& it : *theDigiContainers) {
733 uint16_t
adc = hgcSample.
data();
741 if (theDigiContainers.
isValid()) {
746 for (
const auto& it : *theDigiContainers) {
749 uint16_t
adc = hgcSample.
data();
761 if (theCaloHitContainers.
isValid()) {
764 << theCaloHitContainers->
size() <<
" hits";
775 if (theCaloHitContainers.
isValid()) {
778 << theCaloHitContainers->
size() <<
" hits";
792 std::map<uint32_t, double> map_hits, map_hitn;
793 std::map<uint32_t, double> map_hittime_firsthit, map_hittime_lasthit, map_hittime_15Mip;
794 std::map<int, double> map_hitDepth;
795 std::map<int, std::pair<uint32_t, double>> map_hitLayer, map_hitCell;
797 std::map<uint32_t, double>
nhits;
798 std::map<uint32_t, int>
ID,
Depth;
799 std::map<uint32_t, double> GeV2Mip;
800 std::map<uint32_t, double> StochTermTime;
801 std::vector<int> nSimLayers;
803 std::map<uint32_t, std::vector<std::pair<double, double>>> map_hitTimeEn;
806 for (
unsigned int i = 0;
i < hits.size();
i++) {
807 double energy = hits[
i].energy();
808 double time = hits[
i].time();
809 uint32_t
id = hits[
i].id();
811 int subdet,
zside, layer, sector, subsector(0), cell,
depth(0),
idx(0);
824 }
else if (type == 3) {
828 idx = subdet * 1000 + layer;
833 idx = sector * 1000 + cell;
836 edm::LogVerbatim(
"HGCSim") <<
"SimHit:Hit[" <<
i <<
"] Id " << subdet <<
":" << zside <<
":" << layer <<
":" 837 << sector <<
":" << subsector <<
":" << cell <<
":" <<
depth <<
" Energy " << energy
840 if (map_hits.count(
id) != 0) {
845 if (map_hitLayer.count(layer) != 0) {
846 double ee = energy + map_hitLayer[layer].second;
847 map_hitLayer[layer] = std::make_pair(
id, ee);
849 map_hitLayer[layer] = std::make_pair(
id, energy);
852 if (map_hitCell.count(idx) != 0) {
853 double ee = energy + map_hitCell[
idx].second;
854 map_hitCell[
idx] = std::make_pair(
id, ee);
856 map_hitCell[
idx] = std::make_pair(
id, energy);
864 if (map_hitDepth.count(
depth) != 0) {
871 map_hitTimeEn[idn].push_back(std::make_pair(time, energy));
876 if (map_hitn.count(idn) != 0) {
889 for (
const auto& itr : map_hitTimeEn) {
890 uint32_t
id = itr.first;
898 <<
"\ntype : layer : wafer thickness " << type <<
" " << layer <<
" " << thickness
899 <<
"\nID(sim) and id(reco) " << std::hex << ID[
id] <<
" " <<
id <<
std::dec 902 if (thickness == 300) {
905 }
else if (thickness == 200) {
914 double totEbeforeThreshold = 0.;
915 double timebeforeThreshold = 0.;
916 double timeAtThresohld = 0.;
917 for (
unsigned int ihit = 0; ihit < map_hitTimeEn[
id].size(); ihit++) {
918 double energy = (map_hitTimeEn[
id].at(ihit)).
second / GeV2Mip[
id];
922 edm::LogVerbatim(
"HGCSim") <<
"Tot E till now : time of that E : GeV2Mip[id] is " << totE <<
" " << time
923 <<
" " << GeV2Mip[
id];
924 if (totE < threshold) {
925 totEbeforeThreshold = totE;
926 timebeforeThreshold =
time;
929 (threshold - totEbeforeThreshold) * (time - timebeforeThreshold) / (totE - totEbeforeThreshold) +
931 map_hittime_15Mip[
id] = timeAtThresohld;
933 edm::LogVerbatim(
"HGCSim") <<
"ihit : energyBefore : timeBefore : energyTot : timeTot : timeAt15MIP " 934 << ihit <<
" " << totEbeforeThreshold <<
" " << timebeforeThreshold <<
" " 935 << totE <<
" " << time <<
" " << map_hittime_15Mip[
id];
939 if (!map_hitTimeEn[
id].
empty()) {
940 map_hittime_firsthit[
id] = (map_hitTimeEn[
id].at(0)).
first;
941 map_hittime_lasthit[
id] = (map_hitTimeEn[
id].at(map_hitTimeEn[
id].
size() - 1)).
first;
942 if (map_hittime_15Mip[
id] < map_hittime_firsthit[
id])
943 map_hittime_15Mip[
id] = map_hittime_firsthit[
id];
952 if (totE < threshold)
953 map_hittime_15Mip[
id] = -99;
955 edm::LogVerbatim(
"HGCSim") <<
"id : first hit time : last hit time " <<
id <<
" " << map_hittime_firsthit[
id]
956 <<
" " << map_hittime_lasthit[
id] <<
"\nFinally for this cell, time is " 957 << map_hittime_15Mip[
id];
962 for (
const auto& itr : map_hits) {
968 for (
const auto& itr : map_hitLayer) {
969 int layer = (type == 2) ? itr.first : (itr.first - 1);
977 edm::LogVerbatim(
"HGCSim") <<
"SimHit:Layer " << layer + 1 <<
" Z " << zp <<
":" << zp - zFront <<
" E " <<
energy;
988 }
else if (type == 1) {
993 }
else if (type == 2) {
1001 for (
unsigned int k = 0;
k <
idBeams_.size(); ++
k) {
1010 for (
const auto& itr : map_hitDepth) {
1011 int layer = (type == 2) ? itr.first : (itr.first - 1);
1012 double energy = itr.second;
1022 }
else if (type == 1) {
1027 }
else if (type == 2) {
1040 for (
const auto& itr : map_hitCell) {
1041 uint32_t
id = ((itr.second).
first);
1043 std::pair<float, float>
xy(0, 0);
1049 int subdet,
zside, layer, sector, subsector, cell;
1053 xx = (zp < 0) ? -xy.first : xy.first;
1059 for (
const auto& itr : map_hitn) {
1060 uint32_t
id = itr.first;
1061 double energy = itr.second;
1063 double time_firsthit = map_hittime_firsthit[
id];
1064 double time15Mip = map_hittime_15Mip[
id];
1065 double time_lasthit = map_hittime_lasthit[
id];
1071 if (debug && (energy / GeV2Mip[
id] < 15) && (map_hittime_15Mip[
id] > 0))
1072 edm::LogVerbatim(
"HGCSim") <<
"FOUND!!!!rechit energy : Finally for this cell, time is " << energy / GeV2Mip[
id]
1073 <<
" " << map_hittime_15Mip[
id];
1074 }
else if (type == 1) {
1075 double time_firsthit = map_hittime_firsthit[
id];
1076 double time15Mip = map_hittime_15Mip[
id];
1077 double time_lasthit = map_hittime_lasthit[
id];
1083 }
else if (type == 2) {
1087 int row = hid.
irow();
1089 int layer = hid.
depth();
1097 }
else if (type == 3) {
1109 for (
const auto& simTrkItr : *SimTk) {
1111 edm::LogVerbatim(
"HGCSim") <<
"Track " << simTrkItr.trackId() <<
" Vertex " << simTrkItr.vertIndex() <<
" Type " 1112 << simTrkItr.type() <<
" Charge " << simTrkItr.charge() <<
" momentum " 1113 << simTrkItr.momentum() <<
" " << simTrkItr.momentum().P();
1115 if (vertIndex == -1) {
1116 vertIndex = simTrkItr.vertIndex();
1117 pBeam_ = simTrkItr.momentum().P();
1119 phiBeam_ = simTrkItr.momentum().phi();
1124 if (vertIndex != -1 && vertIndex < (
int)SimVtx->size()) {
1125 edm::SimVertexContainer::const_iterator simVtxItr = SimVtx->begin();
1126 for (
int iv = 0; iv < vertIndex; iv++)
1129 edm::LogVerbatim(
"HGCSim") <<
"Vertex " << vertIndex <<
" position " << simVtxItr->position();
1131 xBeam_ = simVtxItr->position().X();
1132 yBeam_ = simVtxItr->position().Y();
1133 zBeam_ = simVtxItr->position().Z();
1147 std::map<int, double> map_hitLayer;
1148 std::map<int, std::pair<DetId, double>> map_hitCell;
1149 for (
const auto& it : *hits) {
1150 DetId detId = it.id();
1152 double energy = it.energy();
1160 if (map_hitLayer.count(layer) != 0) {
1161 map_hitLayer[layer] +=
energy;
1163 map_hitLayer[layer] =
energy;
1165 if (map_hitCell.count(cell) != 0) {
1166 double ee = energy + map_hitCell[cell].second;
1167 map_hitCell[cell] = std::pair<uint32_t, double>(detId, ee);
1169 map_hitCell[cell] = std::pair<uint32_t, double>(detId,
energy);
1172 edm::LogVerbatim(
"HGCSim") <<
"RecHit: " << layer <<
" " << global.
x() <<
" " << global.
y() <<
" " << global.
z()
1177 for (
const auto& itr : map_hitLayer) {
1178 int layer = itr.first;
1179 double energy = itr.second;
1188 for (
const auto& itr : map_hitCell) {
1197 for (
const auto&
v : *hgcPH) {
1200 unsigned int id =
v.id();
1202 double time =
v.time();
1203 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer::analyzePassiveHits:Energy:" 1204 <<
"Time:Name:Id : " << energy <<
":" << time <<
":" << name <<
":" <<
id;
1211 }
else if (subdet == 2) {
1215 }
else if (subdet == 3) {
1219 }
else if (subdet == 4) {
1223 }
else if (subdet == 5) {
1232 return i.first < j.first;
std::vector< TH1D * > hSimHitLayEn2EE_
std::vector< float > simHitLayEn2EE_
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< float > hgcPassiveBeamEnergy_
std::vector< float > simHitLayEn2BH_
std::vector< uint32_t > simHitCellIdFH_
void analyzeSimTracks(edm::Handle< edm::SimTrackContainer > const &SimTk, edm::Handle< edm::SimVertexContainer > const &SimVtx)
HcalSubdetector subdet() const
get the subdetector
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
edm::EDGetToken tok_hitrBH_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
double cellThickness(int layer, int waferU, int waferV) const
TProfile * hSimHitLng1_[3]
TProfile * hSimHitLng2_[3]
TProfile * hRecHitLng_[3]
std::vector< float > simHitCellTimeFirstHitBH_
std::vector< std::string > hgcPassiveFHName_
std::vector< float > simHitLayEn1EE_
std::vector< float > hgcPassiveBHEnergy_
static uint32_t packHexagonIndex(int subdet, int z, int lay, int wafer, int celltyp, int cell)
std::vector< int > hgcPassiveBeamID_
edm::Service< TFileService > fs_
HGCalTBAnalyzer(edm::ParameterSet const &)
void beginRun(edm::Run const &, edm::EventSetup const &) override
static bool sortTime(const std::pair< double, double > &i, const std::pair< double, double > &j)
edm::EDGetToken tok_digiFH_
std::vector< float > simHitCellTimeLastHitFH_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsFH_
int irow() const
get the row number
T * make(const Args &...args) const
make new ROOT object
GlobalPoint getPosition(const DetId &id) const
std::vector< std::string > hgcPassiveBHName_
edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBeam_
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
std::vector< float > hgcPassiveCMSEEnergy_
std::vector< int > hgcPassiveEEID_
std::vector< float > hgcPassiveEEEnergy_
int depth() const
get the layer number
std::vector< float > simHitCellEnFH_
TProfile2D * hSimHitLat_[3]
U second(std::pair< T, U > const &p)
std::vector< TH1D * > hSimHitLayEn1EE_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBH_
void analyzeSimHits(int type, std::vector< PCaloHit > &hits, double zFront)
int icol() const
get the column number
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
#define DEFINE_FWK_MODULE(type)
std::vector< TH1D * > hSimHitLayEn2BH_
unsigned int layers(bool reco) const
std::unique_ptr< AHCalGeometry > ahcalGeom_
std::vector< int > idBeams_
std::vector< int > simHitCellColBH_
void analyzeRecHits(int type, edm::Handle< HGCRecHitCollection > &hits)
const HGCalGeometry * hgeom_[2]
std::vector< float > simHitCellTime15MipBH_
std::vector< std::string > hgcPassiveCMSEName_
~HGCalTBAnalyzer() override
edm::EDGetTokenT< edm::SimTrackContainer > tok_simTk_
void analyze(edm::Event const &, edm::EventSetup const &) override
std::vector< int > simHitCellLayerBH_
std::vector< TH1D * > hSimHitLayEnBeam_
std::vector< int > simHitCellRowBH_
std::vector< float > simHitCellTimeFirstHitEE_
const HGCalDDDConstants * hgcons_[2]
edm::EDGetToken tok_hitrFH_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBeam_
int wafer() const
get the wafer #
int waferTypeL(int wafer) const
edm::EDGetTokenT< edm::HepMCProduct > tok_hepMC_
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
std::vector< float > simHitCellTimeFirstHitFH_
ParameterDescriptionBase * add(U const &iLabel, T const &value)
std::vector< TH1D * > hSimHitLayEn1FH_
std::vector< uint32_t > simHitCellIdBH_
void analyzePassiveHits(edm::Handle< edm::PassiveHitContainer > const &hgcPh, int subdet)
double waferZ(int layer, bool reco) const
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< float > simHitCellTime15MipEE_
std::vector< std::string > hgcPassiveBeamName_
std::vector< float > hgcPassiveFHEnergy_
std::vector< float > simHitCellTimeLastHitBH_
std::vector< float > simHitCellTimeLastHitEE_
edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHEE_
std::vector< int > hgcPassiveCMSEID_
TProfile2D * hRecHitLat_[3]
const HepMC::GenEvent * GetEvent() const
edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBH_
int cell() const
get the absolute value of the cell #'s in x and y
std::vector< float > simHitCellEnBeam_
TProfile * hSimHitLng_[3]
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::vector< std::string > hgcPassiveEEName_
void endRun(edm::Run const &, edm::EventSetup const &) override
std::string detectorBeam_
std::vector< float > simHitCellTime15MipFH_
void analyzeDigi(int type, const T1 &detId, uint16_t adc)
std::vector< int > hgcPassiveBHID_
edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsEE_
std::vector< float > simHitLayEn1FH_
edm::EDGetToken tok_digiBH_
std::vector< int > hgcPassiveFHID_
std::vector< float > simHitCellEnBH_
double stoc_smear_time_200_
static void unpackIndex(const uint32_t &idx, int &det, int &lay, int &x, int &y)
edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHFH_
std::vector< float > simHitLayEn1BH_
std::vector< uint32_t > simHitCellIdEE_
std::vector< TH1D * > hSimHitLayEn1BH_
int zside() const
get the z-side of the cell (1/-1)
std::vector< float > simHitCellEnEE_
double stoc_smear_time_300_
std::vector< uint32_t > simHitCellIdBeam_
T const * product() const
edm::EDGetToken tok_hitrEE_
std::vector< float > simHitLayEn2FH_
edm::EDGetTokenT< edm::SimVertexContainer > tok_simVtx_
static void unpackHexagonIndex(const uint32_t &idx, int &subdet, int &z, int &lay, int &wafer, int &celltyp, int &cell)
int layer() const
get the layer #
TProfile * hRecHitLng1_[3]
std::vector< TH1D * > hSimHitLayEn2FH_
edm::EDGetToken tok_digiEE_
edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHCMSE_
std::vector< float > simHitLayEnBeam_