47 #include "TProfile2D.h" 73 static bool sortTime(
const std::pair<double, double>&
i,
const std::pair<double, double>&
j);
151 : ifEE_(iConfig.getParameter<
bool>(
"useEE")),
152 ifFH_(iConfig.getParameter<
bool>(
"useFH")),
153 ifBH_(iConfig.getParameter<
bool>(
"useBH")),
154 ifBeam_(iConfig.getParameter<
bool>(
"useBeam")),
155 doSimHits_(iConfig.getParameter<
bool>(
"doSimHits")),
156 doDigis_(iConfig.getParameter<
bool>(
"doDigis")),
157 doRecHits_(iConfig.getParameter<
bool>(
"doRecHits")),
158 doTree_(iConfig.getParameter<
bool>(
"doTree")),
159 doTreeCell_(iConfig.getParameter<
bool>(
"doTreeCell")),
160 doPassive_(iConfig.getParameter<
bool>(
"doPassive")),
161 doPassiveEE_(iConfig.getParameter<
bool>(
"doPassiveEE")),
162 doPassiveHE_(iConfig.getParameter<
bool>(
"doPassiveHE")),
163 doPassiveBH_(iConfig.getParameter<
bool>(
"doPassiveBH")),
164 addP_(iConfig.getParameter<
bool>(
"addP")),
165 doBeam_(iConfig.getParameter<
bool>(
"doBeam")),
166 detectorEE_(iConfig.getParameter<
std::
string>(
"detectorEE")),
167 detectorFH_(iConfig.getParameter<
std::
string>(
"detectorFH")),
168 detectorBH_(iConfig.getParameter<
std::
string>(
"detectorBH")),
169 detectorBeam_(iConfig.getParameter<
std::
string>(
"detectorBeam")),
170 zFrontEE_(iConfig.getParameter<double>(
"zFrontEE")),
171 zFrontFH_(iConfig.getParameter<double>(
"zFrontFH")),
172 zFrontBH_(iConfig.getParameter<double>(
"zFrontBH")),
173 sampleIndex_(iConfig.getParameter<
int>(
"sampleIndex")),
174 gev2mip200_(iConfig.getUntrackedParameter<double>(
"gev2mip200", 57.0
e-6)),
175 gev2mip300_(iConfig.getUntrackedParameter<double>(
"gev2mip300", 85.5
e-6)),
176 stoc_smear_time_200_(iConfig.getUntrackedParameter<double>(
"stoc_smear_time_200", 10.24)),
177 stoc_smear_time_300_(iConfig.getUntrackedParameter<double>(
"stoc_smear_time_300", 15.5)),
178 labelGen_(iConfig.getParameter<
edm::
InputTag>(
"generatorSrc")),
179 labelHitEE_(iConfig.getParameter<
std::
string>(
"caloHitSrcEE")),
180 labelHitFH_(iConfig.getParameter<
std::
string>(
"caloHitSrcFH")),
181 labelHitBH_(iConfig.getParameter<
std::
string>(
"caloHitSrcBH")),
182 labelHitBeam_(iConfig.getParameter<
std::
string>(
"caloHitSrcBeam")),
183 labelDigiEE_(iConfig.getParameter<
edm::
InputTag>(
"digiSrcEE")),
184 labelDigiFH_(iConfig.getParameter<
edm::
InputTag>(
"digiSrcFH")),
185 labelDigiBH_(iConfig.getParameter<
edm::
InputTag>(
"digiSrcBH")),
186 labelRHitEE_(iConfig.getParameter<
edm::
InputTag>(
"recHitSrcEE")),
187 labelRHitFH_(iConfig.getParameter<
edm::
InputTag>(
"recHitSrcFH")),
188 labelRHitBH_(iConfig.getParameter<
edm::
InputTag>(
"recHitSrcBH")),
189 labelPassiveEE_(iConfig.getParameter<
edm::
InputTag>(
"passiveEE")),
190 labelPassiveFH_(iConfig.getParameter<
edm::
InputTag>(
"passiveFH")),
191 labelPassiveBH_(iConfig.getParameter<
edm::
InputTag>(
"passiveBH")),
192 labelPassiveCMSE_(iConfig.getParameter<
edm::
InputTag>(
"passiveCMSE")),
193 labelPassiveBeam_(iConfig.getParameter<
edm::
InputTag>(
"passiveBeam")),
220 usesResource(
"TFileService");
221 ahcalGeom_ = std::make_unique<AHCalGeometry>(iConfig);
267 desc.add<
bool>(
"useEE",
true);
268 desc.add<
double>(
"zFrontEE", 0.0);
273 desc.add<
bool>(
"useFH",
false);
274 desc.add<
double>(
"zFrontFH", 0.0);
279 desc.add<
bool>(
"useBH",
false);
280 desc.add<
double>(
"zFrontBH", 0.0);
285 desc.add<
bool>(
"useBeam",
false);
287 std::vector<int> ids = {
288 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1011, 1012, 1013, 1014, 2001, 2002, 2003, 2004, 2005};
289 desc.add<std::vector<int>>(
"idBeams", ids);
297 desc.add<
bool>(
"doSimHits",
true);
298 desc.add<
bool>(
"doDigis",
true);
299 desc.add<
bool>(
"doRecHits",
true);
300 desc.add<
int>(
"sampleIndex", 0);
301 desc.add<
bool>(
"doTree",
true);
302 desc.add<
bool>(
"doTreeCell",
true);
303 desc.add<
bool>(
"doPassive",
false);
304 desc.add<
bool>(
"doPassiveEE",
false);
305 desc.add<
bool>(
"doPassiveHE",
false);
306 desc.add<
bool>(
"doPassiveBH",
false);
307 desc.add<
bool>(
"addP",
false);
308 desc.add<
bool>(
"doBeam",
false);
309 desc.addUntracked<
double>(
"gev2mip200", 57.0e-6);
310 desc.addUntracked<
double>(
"gev2mip300", 85.5e-6);
311 desc.addUntracked<
double>(
"stoc_smear_time_200", 10.24);
312 desc.addUntracked<
double>(
"stoc_smear_time_300", 15.5);
313 desc.addUntracked<
int>(
"maxDepth", 12);
314 desc.addUntracked<
double>(
"deltaX", 30.0);
315 desc.addUntracked<
double>(
"deltaY", 30.0);
316 desc.addUntracked<
double>(
"deltaZ", 81.0);
317 desc.addUntracked<
double>(
"zFirst", 17.6);
318 descriptions.
add(
"HGCalTBAnalyzer",
desc);
323 hBeam_ =
fs_->
make<TH1D>(
"BeamP",
"Beam Momentum", 1000, 0, 1000.0);
324 for (
int i = 0;
i < 3; ++
i) {
336 sprintf(
name,
"SimHitEn%s", det.c_str());
337 sprintf(
title,
"Sim Hit Energy for %s", det.c_str());
339 sprintf(
name,
"SimHitEnX%s", det.c_str());
340 sprintf(
title,
"Sim Hit Energy for %s", det.c_str());
342 sprintf(
name,
"SimHitTm%s", det.c_str());
343 sprintf(
title,
"Sim Hit Timing for %s", det.c_str());
345 sprintf(
name,
"SimHitLat%s", det.c_str());
346 sprintf(
title,
"Lateral Shower profile (Sim Hit) for %s", det.c_str());
348 sprintf(
name,
"SimHitLng%s", det.c_str());
349 sprintf(
title,
"Longitudinal Shower profile (Sim Hit) for %s", det.c_str());
351 sprintf(
name,
"SimHitLng1%s", det.c_str());
352 sprintf(
title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
354 sprintf(
name,
"SimHitLng2%s", det.c_str());
355 sprintf(
title,
"Longitudinal Shower profile (Layer) for %s", det.c_str());
360 sprintf(
name,
"DigiADC%s", det.c_str());
361 sprintf(
title,
"ADC at Digi level for %s", det.c_str());
363 sprintf(
name,
"DigiOcc%s", det.c_str());
364 sprintf(
title,
"Occupancy (Digi)for %s", det.c_str());
366 sprintf(
name,
"DigiLng%s", det.c_str());
367 sprintf(
title,
"Longitudinal Shower profile (Digi) for %s", det.c_str());
372 sprintf(
name,
"RecHitEn%s", det.c_str());
373 sprintf(
title,
"Rec Hit Energy for %s", det.c_str());
375 sprintf(
name,
"RecHitOcc%s", det.c_str());
376 sprintf(
title,
"Occupancy (Rec Hit)for %s", det.c_str());
378 sprintf(
name,
"RecHitLat%s", det.c_str());
379 sprintf(
title,
"Lateral Shower profile (Rec Hit) for %s", det.c_str());
381 sprintf(
name,
"RecHitLng%s", det.c_str());
382 sprintf(
title,
"Longitudinal Shower profile (Rec Hit) for %s", det.c_str());
384 sprintf(
name,
"RecHitLng1%s", det.c_str());
385 sprintf(
title,
"Longitudinal Shower profile vs Layer for %s", det.c_str());
486 sprintf(
title,
"Sim Hit Energy in SIM layer %d for %s",
l + 1,
detectorEE_.c_str());
490 sprintf(
title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorEE_.c_str());
516 sprintf(
title,
"Sim Hit Energy in layer %d for %s", (
l / 3 + 1),
detectorFH_.c_str());
541 for (
unsigned int l = 0;
l <
idBeams_.size(); ++
l) {
557 HepMC::FourVector pxyz(0, 0, 0, 0);
558 for (HepMC::GenEvent::particle_const_iterator
p = myGenEvent->particles_begin();
p != myGenEvent->particles_end();
560 edm::LogVerbatim(
"HGCSim") <<
"Particle [" <<
k <<
"] with p " << (*p)->momentum().rho() <<
" theta " 561 << (*p)->momentum().theta() <<
" phi " << (*p)->momentum().phi() <<
" pxyz (" 562 << (*p)->momentum().px() <<
", " << (*p)->momentum().py() <<
", " 563 << (*p)->momentum().pz() <<
")";
565 pxyz.setPx(pxyz.px() + (*p)->momentum().px());
566 pxyz.setPy(pxyz.py() + (*p)->momentum().py());
567 pxyz.setPz(pxyz.pz() + (*p)->momentum().pz());
568 pxyz.setE(pxyz.e() + (*p)->momentum().e());
569 }
else if (!
addP_ && (
k == 0)) {
570 pxyz = (*p)->momentum();
574 edm::LogVerbatim(
"HGCSim") <<
"Particle with p " << pxyz.rho() <<
" theta " << pxyz.theta() <<
" phi " 608 std::vector<PCaloHit> caloHits;
613 if (theCaloHitContainers.isValid()) {
619 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
631 if (theCaloHitContainers.isValid()) {
637 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
649 if (theCaloHitContainers.isValid()) {
655 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
666 if (theCaloHitContainers.isValid()) {
669 << theCaloHitContainers->size() <<
" hits";
672 caloHits.insert(caloHits.end(), theCaloHitContainers->begin(), theCaloHitContainers->end());
729 if (theDigiContainers.
isValid()) {
734 for (
const auto& it : *theDigiContainers) {
737 uint16_t
adc = hgcSample.
data();
744 if (theDigiContainers.
isValid()) {
749 for (
const auto& it : *theDigiContainers) {
752 uint16_t
adc = hgcSample.
data();
763 if (theCaloHitContainers.
isValid()) {
766 << theCaloHitContainers->
size() <<
" hits";
777 if (theCaloHitContainers.
isValid()) {
780 << theCaloHitContainers->
size() <<
" hits";
794 std::map<uint32_t, double> map_hits, map_hitn;
795 std::map<uint32_t, double> map_hittime_firsthit, map_hittime_lasthit, map_hittime_15Mip;
796 std::map<int, double> map_hitDepth, map_hitWafer;
797 std::map<int, std::pair<uint32_t, double>> map_hitLayer, map_hitCell;
799 std::map<uint32_t, double>
nhits;
800 std::map<uint32_t, int>
ID,
Depth;
801 std::map<uint32_t, double> GeV2Mip;
802 std::map<uint32_t, double> StochTermTime;
803 std::vector<int> nSimLayers;
805 std::map<uint32_t, std::vector<std::pair<double, double>>> map_hitTimeEn;
808 for (
unsigned int i = 0;
i <
hits.size();
i++) {
811 uint32_t
id =
hits[
i].id();
826 }
else if (
type == 3) {
835 idx = sector * 1000 + cell;
839 <<
layer <<
":" << sector <<
":" << cell <<
" Position " <<
xy.first <<
":" 845 << sector <<
":" << subsector <<
":" << cell <<
":" <<
depth <<
" Energy " <<
energy 848 if (map_hits.count(
id) != 0) {
853 if (map_hitLayer.count(
layer) != 0) {
855 map_hitLayer[
layer] = std::make_pair(
id, ee);
859 if (map_hitWafer.count(sector) != 0)
860 map_hitWafer[sector] +=
energy;
862 map_hitWafer[sector] =
energy;
864 if (map_hitCell.count(
idx) != 0) {
865 double ee =
energy + map_hitCell[
idx].second;
866 map_hitCell[
idx] = std::make_pair(
id, ee);
868 map_hitCell[
idx] = std::make_pair(
id,
energy);
876 if (map_hitDepth.count(
depth) != 0) {
883 map_hitTimeEn[idn].push_back(std::make_pair(
time,
energy));
888 if (map_hitn.count(idn) != 0) {
900 edm::LogVerbatim(
"HGCSim") <<
"HGCalTAnalyzer:: " << map_hitWafer.size() <<
" wafers are hit in type " <<
type;
901 for (
auto itr = map_hitWafer.begin(); itr != map_hitWafer.end(); ++itr)
902 edm::LogVerbatim(
"HGCSim") <<
"Wafer: " << itr->first <<
" Deposited Energy " << itr->second;
904 for (
const auto& itr : map_hitTimeEn) {
905 uint32_t
id = itr.first;
914 <<
"\nID(sim) and id(reco) " << std::hex <<
ID[
id] <<
" " <<
id <<
std::dec;
927 double totEbeforeThreshold = 0.;
928 double timebeforeThreshold = 0.;
929 double timeAtThresohld = 0.;
930 for (
unsigned int ihit = 0; ihit < map_hitTimeEn[
id].size(); ihit++) {
931 double energy = (map_hitTimeEn[
id].at(ihit)).
second / GeV2Mip[
id];
935 edm::LogVerbatim(
"HGCSim") <<
"Tot E till now : time of that E : GeV2Mip[id] is " << totE <<
" " <<
time 936 <<
" " << GeV2Mip[
id];
938 totEbeforeThreshold = totE;
939 timebeforeThreshold =
time;
942 (
threshold - totEbeforeThreshold) * (
time - timebeforeThreshold) / (totE - totEbeforeThreshold) +
944 map_hittime_15Mip[
id] = timeAtThresohld;
946 edm::LogVerbatim(
"HGCSim") <<
"ihit : energyBefore : timeBefore : energyTot : timeTot : timeAt15MIP " 947 << ihit <<
" " << totEbeforeThreshold <<
" " << timebeforeThreshold <<
" " 948 << totE <<
" " <<
time <<
" " << map_hittime_15Mip[
id];
952 if (!map_hitTimeEn[
id].
empty()) {
953 map_hittime_firsthit[
id] = (map_hitTimeEn[
id].at(0)).
first;
954 map_hittime_lasthit[
id] = (map_hitTimeEn[
id].at(map_hitTimeEn[
id].
size() - 1)).
first;
955 if (map_hittime_15Mip[
id] < map_hittime_firsthit[
id])
956 map_hittime_15Mip[
id] = map_hittime_firsthit[
id];
966 map_hittime_15Mip[
id] = -99;
968 edm::LogVerbatim(
"HGCSim") <<
"id : first hit time : last hit time " <<
id <<
" " << map_hittime_firsthit[
id]
969 <<
" " << map_hittime_lasthit[
id] <<
"\nFinally for this cell, time is " 970 << map_hittime_15Mip[
id];
975 for (
const auto& itr : map_hits) {
981 for (
const auto& itr : map_hitLayer) {
982 int layer = (
type == 2) ? itr.first : (itr.first - 1);
1001 }
else if (
type == 1) {
1006 }
else if (
type == 2) {
1014 for (
unsigned int k = 0;
k <
idBeams_.size(); ++
k) {
1023 for (
const auto& itr : map_hitDepth) {
1024 int layer = (
type == 2) ? itr.first : (itr.first - 1);
1025 double energy = itr.second;
1035 }
else if (
type == 1) {
1040 }
else if (
type == 2) {
1053 for (
const auto& itr : map_hitCell) {
1054 uint32_t
id = ((itr.second).
first);
1056 std::pair<float, float>
xy(0, 0);
1062 int subdet,
zside,
layer, sector, subsector, cell;
1066 xx = (zp < 0) ? -
xy.first :
xy.first;
1072 for (
const auto& itr : map_hitn) {
1073 uint32_t
id = itr.first;
1074 double energy = itr.second;
1076 double time_firsthit = map_hittime_firsthit[
id];
1077 double time15Mip = map_hittime_15Mip[
id];
1078 double time_lasthit = map_hittime_lasthit[
id];
1084 if (
debug && (
energy / GeV2Mip[
id] < 15) && (map_hittime_15Mip[
id] > 0))
1086 <<
" " << map_hittime_15Mip[
id];
1087 }
else if (
type == 1) {
1088 double time_firsthit = map_hittime_firsthit[
id];
1089 double time15Mip = map_hittime_15Mip[
id];
1090 double time_lasthit = map_hittime_lasthit[
id];
1096 }
else if (
type == 2) {
1100 int row = hid.
irow();
1110 }
else if (
type == 3) {
1133 std::vector<float> verX, verY, verZ;
1137 for (
const auto& simVtxItr : *SimVtx) {
1138 verX.push_back(simVtxItr.position().X());
1139 verY.push_back(simVtxItr.position().Y());
1140 verZ.push_back(simVtxItr.position().Z());
1145 HepMC::FourVector pxyz(0, 0, 0, 0);
1146 for (
const auto& simTrkItr : *SimTk) {
1147 if (
addP_ && !(simTrkItr.noGenpart())) {
1148 pxyz.setPx(pxyz.px() + simTrkItr.momentum().px());
1149 pxyz.setPy(pxyz.py() + simTrkItr.momentum().py());
1150 pxyz.setPz(pxyz.pz() + simTrkItr.momentum().pz());
1151 pxyz.setE(pxyz.e() + simTrkItr.momentum().e());
1153 edm::LogVerbatim(
"HGCSim") <<
"Track " << simTrkItr.trackId() <<
" Vertex " << simTrkItr.vertIndex() <<
" Type " 1154 << simTrkItr.type() <<
" Charge " << simTrkItr.charge() <<
" px " 1155 << simTrkItr.momentum().px() <<
" py " << simTrkItr.momentum().py() <<
" pz " 1156 << simTrkItr.momentum().pz() <<
" P " << simTrkItr.momentum().P() <<
" GenIndex " 1157 << simTrkItr.genpartIndex();
1159 <<
" position-> X: " << verX[simTrkItr.vertIndex()]
1160 <<
" Y: " << verY[simTrkItr.vertIndex()] <<
" Z: " << verZ[simTrkItr.vertIndex()];
1163 if (
doBeam_ && !(simTrkItr.noGenpart())) {
1166 xBeamMC_.push_back(verX[simTrkItr.vertIndex()]);
1167 yBeamMC_.push_back(verY[simTrkItr.vertIndex()]);
1168 zBeamMC_.push_back(verZ[simTrkItr.vertIndex()]);
1169 pxBeamMC_.push_back(simTrkItr.momentum().px());
1170 pyBeamMC_.push_back(simTrkItr.momentum().py());
1171 pzBeamMC_.push_back(simTrkItr.momentum().pz());
1172 pBeamMC_.push_back(simTrkItr.momentum().P());
1173 }
else if (!
addP_ && (vertIndex == -1)) {
1174 pxyz = simTrkItr.momentum();
1176 if (vertIndex == -1)
1177 vertIndex = simTrkItr.vertIndex();
1185 if (vertIndex != -1 && vertIndex < static_cast<int>(SimVtx->size())) {
1186 edm::SimVertexContainer::const_iterator simVtxItr = SimVtx->begin();
1187 for (
int iv = 0;
iv < vertIndex;
iv++)
1189 edm::LogVerbatim(
"HGCSim") <<
"Vertex " << vertIndex <<
" position " << simVtxItr->position();
1206 std::map<int, double> map_hitLayer;
1207 std::map<int, std::pair<DetId, double>> map_hitCell;
1208 for (
const auto& it : *
hits) {
1209 DetId detId = it.id();
1211 double energy = it.energy();
1219 if (map_hitLayer.count(
layer) != 0) {
1224 if (map_hitCell.count(cell) != 0) {
1225 double ee =
energy + map_hitCell[cell].second;
1226 map_hitCell[cell] = std::pair<uint32_t, double>(detId, ee);
1228 map_hitCell[cell] = std::pair<uint32_t, double>(detId,
energy);
1236 for (
const auto& itr : map_hitLayer) {
1237 int layer = itr.first;
1238 double energy = itr.second;
1247 for (
const auto& itr : map_hitCell) {
1256 for (
const auto&
v : *hgcPH) {
1259 unsigned int id =
v.id();
1261 double time =
v.time();
1262 edm::LogVerbatim(
"HGCSim") <<
"HGCalTBAnalyzer::analyzePassiveHits:Energy:" 1270 }
else if (subdet == 2) {
1274 }
else if (subdet == 3) {
1278 }
else if (subdet == 4) {
1282 }
else if (subdet == 5) {
1291 return i.first <
j.first;
std::vector< TH1D * > hSimHitLayEn2EE_
double waferZ(int layer, bool reco) const
std::vector< float > simHitLayEn2EE_
Log< level::Info, true > LogVerbatim
std::vector< float > hgcPassiveBeamEnergy_
T getParameter(std::string const &) const
const edm::InputTag labelGen_
std::vector< PCaloHit > PCaloHitContainer
const double stoc_smear_time_200_
std::vector< float > simHitLayEn2BH_
std::vector< uint32_t > simHitCellIdFH_
int wafer() const
get the wafer #
int zside() const
get the z-side of the cell (1/-1)
void analyzeSimTracks(edm::Handle< edm::SimTrackContainer > const &SimTk, edm::Handle< edm::SimVertexContainer > const &SimVtx)
std::vector< float > pxBeamMC_
const std::string detectorBH_
int icol() const
get the column number
const std::string detectorBeam_
TProfile * hSimHitLng1_[3]
TProfile * hSimHitLng2_[3]
TProfile * hRecHitLng_[3]
#define DEFINE_FWK_MODULE(type)
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHFH_
std::vector< float > simHitCellTimeFirstHitBH_
std::vector< std::string > hgcPassiveFHName_
std::vector< float > simHitLayEn1EE_
std::vector< float > hgcPassiveBHEnergy_
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBH_
const edm::ESGetToken< HGCalDDDConstants, IdealGeometryRecord > tokDDDFH_
std::vector< float > zBeamMC_
static uint32_t packHexagonIndex(int subdet, int z, int lay, int wafer, int celltyp, int cell)
std::vector< float > pBeamMC_
std::vector< float > xBeamMC_
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)
std::vector< float > pyBeamMC_
std::vector< float > simHitCellTimeLastHitFH_
const edm::EDGetTokenT< HGCRecHitCollection > tok_hitrFH_
const edm::InputTag labelPassiveEE_
const edm::InputTag labelDigiEE_
std::vector< std::string > hgcPassiveBHName_
const edm::ESGetToken< HGCalDDDConstants, IdealGeometryRecord > tokDDDEE_
const edm::InputTag labelRHitBH_
std::vector< float > hgcPassiveCMSEEnergy_
const edm::InputTag labelRHitFH_
std::vector< int > hgcPassiveEEID_
std::vector< float > hgcPassiveEEEnergy_
const edm::EDGetTokenT< edm::SimVertexContainer > tok_simVtx_
const edm::ESGetToken< HGCalGeometry, IdealGeometryRecord > tokGeomEE_
std::vector< float > simHitCellEnFH_
constexpr std::array< uint8_t, layerIndexSize > layer
TProfile2D * hSimHitLat_[3]
U second(std::pair< T, U > const &p)
const std::string labelHitEE_
std::vector< TH1D * > hSimHitLayEn1EE_
void analyzeSimHits(int type, std::vector< PCaloHit > &hits, double zFront)
constexpr HcalSubdetector subdet() const
get the subdetector
std::vector< TH1D * > hSimHitLayEn2BH_
std::vector< float > yBeamMC_
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHCMSE_
std::vector< int > pdgIdBeamMC_
std::unique_ptr< AHCalGeometry > ahcalGeom_
std::vector< int > idBeams_
std::vector< int > simHitCellColBH_
const HGCalGeometry * hgeom_[2]
const edm::ESGetToken< HGCalGeometry, IdealGeometryRecord > tokGeomFH_
const edm::EDGetTokenT< HGCalDigiCollection > tok_digiFH_
std::vector< float > simHitCellTime15MipBH_
std::vector< std::string > hgcPassiveCMSEName_
const edm::EDGetTokenT< edm::SimTrackContainer > tok_simTk_
~HGCalTBAnalyzer() override
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsFH_
const double stoc_smear_time_300_
void analyze(edm::Event const &, edm::EventSetup const &) override
std::vector< int > simHitCellLayerBH_
std::vector< TH1D * > hSimHitLayEnBeam_
std::vector< int > simHitCellRowBH_
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
std::vector< float > simHitCellTimeFirstHitEE_
const HGCalDDDConstants * hgcons_[2]
const edm::EDGetTokenT< HGCRecHitCollection > tok_hitrEE_
unsigned int layers(bool reco) const
bool getData(T &iHolder) const
std::vector< float > simHitCellTimeFirstHitFH_
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsEE_
void analyzeRecHits(int type, const edm::Handle< HGCRecHitCollection > &hits)
std::vector< TH1D * > hSimHitLayEn1FH_
std::vector< uint32_t > simHitCellIdBH_
std::vector< PassiveHit > PassiveHitContainer
int cell() const
get the absolute value of the cell #'s in x and y
const HepMC::GenEvent * GetEvent() const
void analyzePassiveHits(edm::Handle< edm::PassiveHitContainer > const &hgcPh, int subdet)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBeam_
std::vector< float > simHitCellTime15MipEE_
std::vector< std::string > hgcPassiveBeamName_
std::vector< float > hgcPassiveFHEnergy_
std::vector< float > simHitCellTimeLastHitBH_
std::vector< float > simHitCellTimeLastHitEE_
const edm::InputTag labelRHitEE_
std::vector< int > hgcPassiveCMSEID_
const std::string labelHitBH_
TProfile2D * hRecHitLat_[3]
std::vector< float > simHitCellEnBeam_
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHBH_
TProfile * hSimHitLng_[3]
double cellThickness(int layer, int waferU, int waferV) const
const edm::EDGetTokenT< edm::PCaloHitContainer > tok_hitsBeam_
std::vector< SimVertex > SimVertexContainer
int layer() const
get the layer #
const edm::InputTag labelDigiFH_
std::vector< float > pzBeamMC_
void add(std::string const &label, ParameterSetDescription const &psetDescription)
int irow() const
get the row number
std::vector< std::string > hgcPassiveEEName_
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
const edm::InputTag labelPassiveBH_
void endRun(edm::Run const &, edm::EventSetup const &) override
std::vector< float > simHitCellTime15MipFH_
void analyzeDigi(int type, const T1 &detId, uint16_t adc)
GlobalPoint getPosition(const DetId &id, bool debug=false) const
const edm::InputTag labelPassiveCMSE_
std::vector< int > hgcPassiveBHID_
const edm::EDGetTokenT< HGCalDigiCollection > tok_digiBH_
int waferTypeL(int wafer) const
std::vector< float > simHitLayEn1FH_
T * make(const Args &...args) const
make new ROOT object
std::vector< int > hgcPassiveFHID_
std::vector< float > simHitCellEnBH_
static void unpackIndex(const uint32_t &idx, int &det, int &lay, int &x, int &y)
const edm::EDGetTokenT< edm::PassiveHitContainer > tok_hgcPHEE_
const edm::EDGetTokenT< HGCRecHitCollection > tok_hitrBH_
Log< level::Warning, false > LogWarning
std::vector< float > simHitLayEn1BH_
std::vector< uint32_t > simHitCellIdEE_
std::vector< TH1D * > hSimHitLayEn1BH_
const edm::InputTag labelPassiveBeam_
std::vector< float > simHitCellEnEE_
const edm::InputTag labelDigiBH_
const edm::InputTag labelPassiveFH_
std::vector< uint32_t > simHitCellIdBeam_
std::vector< SimTrack > SimTrackContainer
std::vector< float > simHitLayEn2FH_
const std::string detectorEE_
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)
const std::string labelHitFH_
TProfile * hRecHitLng1_[3]
const edm::EDGetTokenT< HGCalDigiCollection > tok_digiEE_
std::vector< TH1D * > hSimHitLayEn2FH_
uint16_t *__restrict__ uint16_t const *__restrict__ adc
const edm::EDGetTokenT< edm::HepMCProduct > tok_hepMC_
const std::string labelHitBeam_
const std::string detectorFH_
std::vector< float > simHitLayEnBeam_