44 #include "TProfile2D.h" 67 static bool sortTime(
const std::pair<double, double>&
i,
const std::pair<double, double>&
j);
132 : ifEE_(iConfig.getParameter<
bool>(
"useEE")),
133 ifFH_(iConfig.getParameter<
bool>(
"useFH")),
134 ifBH_(iConfig.getParameter<
bool>(
"useBH")),
135 ifBeam_(iConfig.getParameter<
bool>(
"useBeam")),
136 doSimHits_(iConfig.getParameter<
bool>(
"doSimHits")),
137 doTree_(iConfig.getParameter<
bool>(
"doTree")),
138 doTreeCell_(iConfig.getParameter<
bool>(
"doTreeCell")),
139 doPassive_(iConfig.getParameter<
bool>(
"doPassive")),
140 doPassiveEE_(iConfig.getParameter<
bool>(
"doPassiveEE")),
141 doPassiveHE_(iConfig.getParameter<
bool>(
"doPassiveHE")),
142 doPassiveBH_(iConfig.getParameter<
bool>(
"doPassiveBH")),
143 addP_(iConfig.getParameter<
bool>(
"addP")),
144 doBeam_(iConfig.getParameter<
bool>(
"doBeam")),
145 detectorEE_(iConfig.getParameter<
std::
string>(
"detectorEE")),
146 detectorFH_(iConfig.getParameter<
std::
string>(
"detectorFH")),
147 detectorBH_(iConfig.getParameter<
std::
string>(
"detectorBH")),
148 detectorBeam_(iConfig.getParameter<
std::
string>(
"detectorBeam")),
149 zFrontEE_(iConfig.getParameter<double>(
"zFrontEE")),
150 zFrontFH_(iConfig.getParameter<double>(
"zFrontFH")),
151 zFrontBH_(iConfig.getParameter<double>(
"zFrontBH")),
152 gev2mip200_(iConfig.getUntrackedParameter<double>(
"gev2mip200", 57.0
e-6)),
153 gev2mip300_(iConfig.getUntrackedParameter<double>(
"gev2mip300", 85.5
e-6)),
154 stoc_smear_time_200_(iConfig.getUntrackedParameter<double>(
"stoc_smear_time_200", 10.24)),
155 stoc_smear_time_300_(iConfig.getUntrackedParameter<double>(
"stoc_smear_time_300", 15.5)),
156 labelGen_(iConfig.getParameter<
edm::
InputTag>(
"generatorSrc")),
157 labelHitEE_(iConfig.getParameter<
std::
string>(
"caloHitSrcEE")),
158 labelHitFH_(iConfig.getParameter<
std::
string>(
"caloHitSrcFH")),
159 labelHitBH_(iConfig.getParameter<
std::
string>(
"caloHitSrcBH")),
160 labelHitBeam_(iConfig.getParameter<
std::
string>(
"caloHitSrcBeam")),
161 labelPassiveEE_(iConfig.getParameter<
edm::
InputTag>(
"passiveEE")),
162 labelPassiveFH_(iConfig.getParameter<
edm::
InputTag>(
"passiveFH")),
163 labelPassiveBH_(iConfig.getParameter<
edm::
InputTag>(
"passiveBH")),
164 labelPassiveCMSE_(iConfig.getParameter<
edm::
InputTag>(
"passiveCMSE")),
165 labelPassiveBeam_(iConfig.getParameter<
edm::
InputTag>(
"passiveBeam")),
182 usesResource(
"TFileService");
183 ahcalGeom_ = std::make_unique<AHCalGeometry>(iConfig);
223 desc.add<
bool>(
"useEE",
true);
224 desc.add<
double>(
"zFrontEE", 0.0);
227 desc.add<
bool>(
"useFH",
false);
228 desc.add<
double>(
"zFrontFH", 0.0);
231 desc.add<
bool>(
"useBH",
false);
232 desc.add<
double>(
"zFrontBH", 0.0);
235 desc.add<
bool>(
"useBeam",
false);
237 std::vector<int> ids = {
238 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1011, 1012, 1013, 1014, 2001, 2002, 2003, 2004, 2005};
239 desc.add<std::vector<int>>(
"idBeams", ids);
247 desc.add<
bool>(
"doSimHits",
true);
248 desc.add<
bool>(
"doTree",
true);
249 desc.add<
bool>(
"doTreeCell",
true);
250 desc.add<
bool>(
"doPassive",
false);
251 desc.add<
bool>(
"doPassiveEE",
false);
252 desc.add<
bool>(
"doPassiveHE",
false);
253 desc.add<
bool>(
"doPassiveBH",
false);
254 desc.add<
bool>(
"addP",
false);
255 desc.add<
bool>(
"doBeam",
false);
256 desc.addUntracked<
double>(
"gev2mip200", 57.0e-6);
257 desc.addUntracked<
double>(
"gev2mip300", 85.5e-6);
258 desc.addUntracked<
double>(
"stoc_smear_time_200", 10.24);
259 desc.addUntracked<
double>(
"stoc_smear_time_300", 15.5);
260 desc.addUntracked<
int>(
"maxDepth", 12);
261 desc.addUntracked<
double>(
"deltaX", 30.0);
262 desc.addUntracked<
double>(
"deltaY", 30.0);
263 desc.addUntracked<
double>(
"deltaZ", 81.0);
264 desc.addUntracked<
double>(
"zFirst", 17.6);
265 descriptions.
add(
"HGCalTB23Analyzer",
desc);
270 hBeam_ =
fs_->
make<TH1D>(
"BeamP",
"Beam Momentum", 1000, 0, 1000.0);
271 for (
int i = 0;
i < 3; ++
i) {
283 sprintf(
name,
"SimHitEn%s", det.c_str());
284 sprintf(
title,
"Sim Hit Energy for %s", det.c_str());
286 sprintf(
name,
"SimHitEnX%s", det.c_str());
287 sprintf(
title,
"Sim Hit Energy for %s", det.c_str());
289 sprintf(
name,
"SimHitTm%s", det.c_str());
290 sprintf(
title,
"Sim Hit Timing for %s", det.c_str());
292 sprintf(
name,
"SimHitLat%s", det.c_str());
293 sprintf(
title,
"Lateral Shower profile (Sim Hit) for %s", det.c_str());
295 sprintf(
name,
"SimHitLng%s", det.c_str());
296 sprintf(
title,
"Longitudinal Shower profile (Sim Hit) for %s", det.c_str());
298 sprintf(
name,
"SimHitLng1%s", det.c_str());
299 sprintf(
title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
301 sprintf(
name,
"SimHitLng2%s", det.c_str());
302 sprintf(
title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
398 sprintf(
title,
"Sim Hit Energy in SIM layer %d for %s",
l + 1,
detectorEE_.c_str());
402 sprintf(
title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorEE_.c_str());
422 sprintf(
title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorFH_.c_str());
446 for (
unsigned int l = 0;
l <
idBeams_.size(); ++
l) {
462 HepMC::FourVector pxyz(0, 0, 0, 0);
463 for (HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end();
465 edm::LogVerbatim(
"HGCSim") <<
"Particle [" <<
k <<
"] with p " << (*p)->momentum().rho() <<
" theta " 466 << (*p)->momentum().theta() <<
" phi " << (*p)->momentum().phi() <<
" pxyz (" 467 << (*p)->momentum().px() <<
", " << (*p)->momentum().py() <<
", " 468 << (*p)->momentum().pz() <<
")";
470 pxyz.setPx(pxyz.px() + (*p)->momentum().px());
471 pxyz.setPy(pxyz.py() + (*p)->momentum().py());
472 pxyz.setPz(pxyz.pz() + (*p)->momentum().pz());
473 pxyz.setE(pxyz.e() + (*p)->momentum().e());
474 }
else if (!
addP_ && (
k == 0)) {
475 pxyz = (*p)->momentum();
479 edm::LogVerbatim(
"HGCSim") <<
"Particle with p " << pxyz.rho() <<
" theta " << pxyz.theta() <<
" phi " 513 std::vector<PCaloHit> caloHits;
518 if (theCaloHitContainers.isValid()) {
524 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
536 if (theCaloHitContainers.isValid()) {
542 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
554 if (theCaloHitContainers.isValid()) {
560 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
571 if (theCaloHitContainers.isValid()) {
574 << theCaloHitContainers->size() <<
" hits";
577 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
632 std::map<uint32_t, double> map_hits, map_hitn;
633 std::map<uint32_t, double> map_hittime_firsthit, map_hittime_lasthit, map_hittime_15Mip;
634 std::map<int, double> map_hitDepth, map_hitWafer;
635 std::map<int, std::pair<uint32_t, double>> map_hitLayer, map_hitCell;
637 std::map<uint32_t, double>
nhits;
638 std::map<uint32_t, int>
ID,
Depth;
639 std::map<uint32_t, double> GeV2Mip;
640 std::map<uint32_t, double> StochTermTime;
641 std::vector<int> nSimLayers;
643 std::map<uint32_t, std::vector<std::pair<double, double>>> map_hitTimeEn;
646 for (
unsigned int i = 0;
i <
hits.size();
i++) {
649 uint32_t
id =
hits[
i].id();
664 }
else if (
type == 3) {
677 <<
layer <<
":" <<
sector <<
":" << cell <<
" Position " <<
xy.first <<
":" 686 if (map_hits.count(
id) != 0) {
691 if (map_hitLayer.count(
layer) != 0) {
693 map_hitLayer[
layer] = std::make_pair(
id, ee);
697 if (map_hitWafer.count(
sector) != 0)
702 if (map_hitCell.count(
idx) != 0) {
703 double ee =
energy + map_hitCell[
idx].second;
704 map_hitCell[
idx] = std::make_pair(
id, ee);
706 map_hitCell[
idx] = std::make_pair(
id,
energy);
714 if (map_hitDepth.count(
depth) != 0) {
721 map_hitTimeEn[idn].push_back(std::make_pair(
time,
energy));
726 if (map_hitn.count(idn) != 0) {
738 edm::LogVerbatim(
"HGCSim") <<
"HGCalTB23Analyzer:: " << map_hitWafer.size() <<
" wafers are hit in type " <<
type;
739 for (
auto itr = map_hitWafer.begin(); itr != map_hitWafer.end(); ++itr)
740 edm::LogVerbatim(
"HGCSim") <<
"Wafer: " << itr->first <<
" Deposited Energy " << itr->second;
742 for (
const auto& itr : map_hitTimeEn) {
743 uint32_t
id = itr.first;
753 <<
"\nID(sim) and id(reco) " << std::hex <<
ID[
id] <<
" " <<
id <<
std::dec;
766 double totEbeforeThreshold = 0.;
767 double timebeforeThreshold = 0.;
768 double timeAtThresohld = 0.;
769 for (
unsigned int ihit = 0; ihit < map_hitTimeEn[
id].size(); ihit++) {
770 double energy = (map_hitTimeEn[
id].at(ihit)).
second / GeV2Mip[
id];
774 edm::LogVerbatim(
"HGCSim") <<
"Tot E till now : time of that E : GeV2Mip[id] is " << totE <<
" " <<
time 775 <<
" " << GeV2Mip[
id];
777 totEbeforeThreshold = totE;
778 timebeforeThreshold =
time;
781 (
threshold - totEbeforeThreshold) * (
time - timebeforeThreshold) / (totE - totEbeforeThreshold) +
783 map_hittime_15Mip[
id] = timeAtThresohld;
785 edm::LogVerbatim(
"HGCSim") <<
"ihit : energyBefore : timeBefore : energyTot : timeTot : timeAt15MIP " 786 << ihit <<
" " << totEbeforeThreshold <<
" " << timebeforeThreshold <<
" " 787 << totE <<
" " <<
time <<
" " << map_hittime_15Mip[
id];
791 if (!map_hitTimeEn[
id].
empty()) {
792 map_hittime_firsthit[
id] = (map_hitTimeEn[
id].at(0)).
first;
793 map_hittime_lasthit[
id] = (map_hitTimeEn[
id].at(map_hitTimeEn[
id].
size() - 1)).
first;
794 if (map_hittime_15Mip[
id] < map_hittime_firsthit[
id])
795 map_hittime_15Mip[
id] = map_hittime_firsthit[
id];
805 map_hittime_15Mip[
id] = -99;
807 edm::LogVerbatim(
"HGCSim") <<
"id : first hit time : last hit time " <<
id <<
" " << map_hittime_firsthit[
id]
808 <<
" " << map_hittime_lasthit[
id] <<
"\nFinally for this cell, time is " 809 << map_hittime_15Mip[
id];
814 for (
const auto& itr : map_hits) {
820 for (
const auto& itr : map_hitLayer) {
821 int layer = (
type == 2) ? itr.first : (itr.first - 1);
840 }
else if (
type == 1) {
845 }
else if (
type == 2) {
853 for (
unsigned int k = 0;
k <
idBeams_.size(); ++
k) {
862 for (
const auto& itr : map_hitDepth) {
863 int layer = (
type == 2) ? itr.first : (itr.first - 1);
864 double energy = itr.second;
874 }
else if (
type == 1) {
879 }
else if (
type == 2) {
892 for (
const auto& itr : map_hitCell) {
893 uint32_t
id = ((itr.second).
first);
895 std::pair<float, float>
xy(0, 0);
905 xx = (zp < 0) ? -
xy.first :
xy.first;
911 for (
const auto& itr : map_hitn) {
912 uint32_t
id = itr.first;
913 double energy = itr.second;
915 double time_firsthit = map_hittime_firsthit[
id];
916 double time15Mip = map_hittime_15Mip[
id];
917 double time_lasthit = map_hittime_lasthit[
id];
923 if (
debug && (
energy / GeV2Mip[
id] < 15) && (map_hittime_15Mip[
id] > 0))
925 <<
" " << map_hittime_15Mip[
id];
926 }
else if (
type == 1) {
927 double time_firsthit = map_hittime_firsthit[
id];
928 double time15Mip = map_hittime_15Mip[
id];
929 double time_lasthit = map_hittime_lasthit[
id];
935 }
else if (
type == 2) {
939 int row = hid.
irow();
949 }
else if (
type == 3) {
972 std::vector<float> verX, verY, verZ;
976 for (
const auto& simVtxItr : *SimVtx) {
977 verX.push_back(simVtxItr.position().X());
978 verY.push_back(simVtxItr.position().Y());
979 verZ.push_back(simVtxItr.position().Z());
984 HepMC::FourVector pxyz(0, 0, 0, 0);
985 for (
const auto& simTrkItr : *SimTk) {
986 if (
addP_ && !(simTrkItr.noGenpart())) {
987 pxyz.setPx(pxyz.px() + simTrkItr.momentum().px());
988 pxyz.setPy(pxyz.py() + simTrkItr.momentum().py());
989 pxyz.setPz(pxyz.pz() + simTrkItr.momentum().pz());
990 pxyz.setE(pxyz.e() + simTrkItr.momentum().e());
992 edm::LogVerbatim(
"HGCSim") <<
"Track " << simTrkItr.trackId() <<
" Vertex " << simTrkItr.vertIndex() <<
" Type " 993 << simTrkItr.type() <<
" Charge " << simTrkItr.charge() <<
" px " 994 << simTrkItr.momentum().px() <<
" py " << simTrkItr.momentum().py() <<
" pz " 995 << simTrkItr.momentum().pz() <<
" P " << simTrkItr.momentum().P() <<
" GenIndex " 996 << simTrkItr.genpartIndex();
998 <<
" position-> X: " << verX[simTrkItr.vertIndex()]
999 <<
" Y: " << verY[simTrkItr.vertIndex()] <<
" Z: " << verZ[simTrkItr.vertIndex()];
1002 if (
doBeam_ && !(simTrkItr.noGenpart())) {
1005 xBeamMC_.push_back(verX[simTrkItr.vertIndex()]);
1006 yBeamMC_.push_back(verY[simTrkItr.vertIndex()]);
1007 zBeamMC_.push_back(verZ[simTrkItr.vertIndex()]);
1008 pxBeamMC_.push_back(simTrkItr.momentum().px());
1009 pyBeamMC_.push_back(simTrkItr.momentum().py());
1010 pzBeamMC_.push_back(simTrkItr.momentum().pz());
1011 pBeamMC_.push_back(simTrkItr.momentum().P());
1012 }
else if (!
addP_ && (vertIndex == -1)) {
1013 pxyz = simTrkItr.momentum();
1015 if (vertIndex == -1)
1016 vertIndex = simTrkItr.vertIndex();
1024 if (vertIndex != -1 && vertIndex < static_cast<int>(SimVtx->size())) {
1025 edm::SimVertexContainer::const_iterator simVtxItr = SimVtx->begin();
1026 for (
int iv = 0;
iv < vertIndex;
iv++)
1028 edm::LogVerbatim(
"HGCSim") <<
"Vertex " << vertIndex <<
" position " << simVtxItr->position();
1036 for (
const auto&
v : *hgcPH) {
1039 unsigned int id =
v.id();
1041 double time =
v.time();
1042 edm::LogVerbatim(
"HGCSim") <<
"HGCalTB23Analyzer::analyzePassiveHits:Energy:" 1050 }
else if (subdet == 2) {
1054 }
else if (subdet == 3) {
1058 }
else if (subdet == 4) {
1062 }
else if (subdet == 5) {
1071 return i.first <
j.first;
edm::Service< TFileService > fs_
const edm::EDGetTokenT< edm::HepMCProduct > tok_hepMC_
std::vector< TH1D * > hSimHitLayEn2BH_
double waferZ(int layer, bool reco) const
std::vector< std::string > hgcPassiveEEName_
std::vector< float > simHitCellTimeLastHitFH_
Log< level::Info, true > LogVerbatim
T getParameter(std::string const &) const
std::vector< PCaloHit > PCaloHitContainer
std::vector< int > pdgIdBeamMC_
int zside() const
get the z-side of the cell (1/-1)
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
int icol() const
get the column number
std::vector< uint32_t > simHitCellIdFH_
const edm::InputTag labelPassiveFH_
std::vector< float > hgcPassiveFHEnergy_
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsEE_
TProfile * hSimHitLng1_[3]
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBeam_
std::vector< float > simHitLayEnBeam_
int32_t waferU(const int32_t index)
std::unique_ptr< AHCalGeometry > ahcalGeom_
std::vector< float > hgcPassiveBeamEnergy_
std::vector< float > hgcPassiveCMSEEnergy_
static bool sortTime(const std::pair< double, double > &i, const std::pair< double, double > &j)
std::vector< float > zBeamMC_
std::vector< int > hgcPassiveFHID_
static uint32_t packHexagonIndex(int subdet, int z, int lay, int wafer, int celltyp, int cell)
const HGCalDDDConstants * hgcons_[2]
std::vector< float > pxBeamMC_
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
std::vector< float > simHitLayEn1EE_
const edm::InputTag labelGen_
std::vector< std::string > hgcPassiveCMSEName_
const std::string labelHitBH_
std::vector< std::string > hgcPassiveFHName_
std::vector< float > simHitLayEn2EE_
std::vector< float > simHitLayEn1BH_
const edm::InputTag labelPassiveEE_
std::vector< int > hgcPassiveCMSEID_
const edm::InputTag labelPassiveBeam_
std::vector< TH1D * > hSimHitLayEnBeam_
~HGCalTB23Analyzer() override=default
U second(std::pair< T, U > const &p)
const edm::InputTag labelPassiveCMSE_
const std::string detectorEE_
std::vector< float > simHitCellEnBH_
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBH_
constexpr HcalSubdetector subdet() const
get the subdetector
std::vector< float > hgcPassiveBHEnergy_
std::vector< TH1D * > hSimHitLayEn2FH_
std::vector< float > pBeamMC_
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHCMSE_
std::vector< float > hgcPassiveEEEnergy_
std::vector< TH1D * > hSimHitLayEn1BH_
std::vector< uint32_t > simHitCellIdBeam_
void beginRun(edm::Run const &, edm::EventSetup const &) override
const std::string labelHitFH_
void analyzeSimTracks(edm::Handle< edm::SimTrackContainer > const &SimTk, edm::Handle< edm::SimVertexContainer > const &SimVtx)
void analyzeSimHits(int type, std::vector< PCaloHit > &hits, double zFront)
const std::string labelHitEE_
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
void analyze(edm::Event const &, edm::EventSetup const &) override
std::vector< float > simHitLayEn1FH_
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< uint32_t > simHitCellIdEE_
const std::string detectorBH_
#define DEFINE_FWK_MODULE(type)
HGCalTB23Analyzer(edm::ParameterSet const &)
unsigned int layers(bool reco) const
std::vector< int > hgcPassiveEEID_
std::vector< float > simHitLayEn2BH_
const edm::InputTag labelPassiveBH_
constexpr int layer() const
get the layer #
std::vector< TH1D * > hSimHitLayEn2EE_
std::vector< PassiveHit > PassiveHitContainer
TProfile * hSimHitLng2_[3]
const HepMC::GenEvent * GetEvent() const
std::vector< uint32_t > simHitCellIdBH_
std::vector< float > simHitLayEn2FH_
std::vector< float > simHitCellEnEE_
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBeam_
std::vector< int > hgcPassiveBeamID_
const edm::EDGetTokenT< edm::SimTrackContainer > tok_simTk_
std::vector< TH1D * > hSimHitLayEn1EE_
std::vector< float > pyBeamMC_
std::vector< int > simHitCellLayerBH_
std::vector< float > simHitCellTime15MipBH_
std::vector< float > simHitCellEnFH_
std::vector< float > simHitCellTimeFirstHitBH_
std::vector< float > simHitCellTime15MipEE_
std::vector< float > simHitCellTimeFirstHitEE_
std::vector< int > hgcPassiveBHID_
std::vector< float > simHitCellTime15MipFH_
const edm::EDGetTokenT< edm::SimVertexContainer > tok_simVtx_
double cellThickness(int layer, int waferU, int waferV) const
std::vector< float > simHitCellTimeFirstHitFH_
std::vector< SimVertex > SimVertexContainer
void add(std::string const &label, ParameterSetDescription const &psetDescription)
int irow() const
get the row number
std::vector< int > simHitCellColBH_
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBH_
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHFH_
const double stoc_smear_time_200_
std::vector< int > idBeams_
std::vector< float > simHitCellTimeLastHitEE_
constexpr int waferU() const
const std::string detectorBeam_
int32_t waferV(const int32_t index)
void analyzePassiveHits(edm::Handle< edm::PassiveHitContainer > const &hgcPh, int subdet)
std::vector< std::string > hgcPassiveBeamName_
std::vector< float > simHitCellTimeLastHitBH_
T * make(const Args &...args) const
make new ROOT object
std::vector< float > simHitCellEnBeam_
TProfile * hSimHitLng_[3]
static void unpackIndex(const uint32_t &idx, int &det, int &lay, int &x, int &y)
const edm::ESGetToken< HGCalDDDConstants, IdealGeometryRecord > tokDDDFH_
Log< level::Warning, false > LogWarning
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHEE_
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsFH_
std::vector< float > yBeamMC_
std::vector< std::string > hgcPassiveBHName_
const edm::ESGetToken< HGCalDDDConstants, IdealGeometryRecord > tokDDDEE_
const std::string detectorFH_
std::vector< SimTrack > SimTrackContainer
std::vector< float > xBeamMC_
std::vector< int > simHitCellRowBH_
const std::string labelHitBeam_
int depth() const
get the layer number
static void unpackHexagonIndex(const uint32_t &idx, int &subdet, int &z, int &lay, int &wafer, int &celltyp, int &cell)
TProfile2D * hSimHitLat_[3]
constexpr int waferV() const
const double stoc_smear_time_300_
std::vector< TH1D * > hSimHitLayEn1FH_
std::vector< float > pzBeamMC_