36 #include <CLHEP/Units/SystemOfUnits.h> 38 #include "G4HCofThisEvent.hh" 39 #include "G4SDManager.hh" 42 #include "G4VProcess.hh" 55 public Observer<const BeginOfEvent *>,
84 void collectEnergyRdir(
const double,
const double);
91 std::unique_ptr<SimG4HcalHitJetFinder>
jetf;
97 std::unique_ptr<HcalTestNumberingScheme>
org;
121 double edepEB, edepEE, edepHB, edepHE,
edepHO;
122 double edepd[5], edepl[20];
130 hcalOnly = m_Anal.
getParameter<
bool>(
"HcalClusterOnly");
131 applySampling = m_Anal.
getParameter<
bool>(
"HcalSampling");
133 ehitThreshold = m_Anal.
getParameter<
double>(
"EcalHitThreshold");
134 hhitThreshold = m_Anal.
getParameter<
double>(
"HcalHitThreshold");
135 timeLowlim = m_Anal.
getParameter<
double>(
"TimeLowLimit");
145 produces<PHcalValidInfoLayer>(labelLayer);
147 produces<PHcalValidInfoNxN>(labelNxN);
149 produces<PHcalValidInfoJets>(labelJets);
151 edm::LogVerbatim(
"ValidHcal") <<
"HcalTestAnalysis:: Initialized as observer of begin/end events and " 152 <<
"of G4step with Parameter values: \n\tInfoLevel = " << infolevel
153 <<
"\n\thcalOnly = " << hcalOnly <<
"\n\tapplySampling = " << applySampling
154 <<
"\n\tconeSize = " <<
coneSize <<
"\n\tehitThreshold = " << ehitThreshold
155 <<
"\n\thhitThreshold = " << hhitThreshold <<
"\n\tttimeLowlim = " << timeLowlim
156 <<
"\n\tttimeUplim = " << timeUplim <<
"\n\teta0 = " << eta0
157 <<
"\n\tphi0 = " << phi0 <<
"\nLabels (Layer): " << labelLayer
158 <<
" (NxN): " << labelNxN <<
" (Jets): " << labelJets;
164 edm::LogVerbatim(
"ValidHcal") <<
"\n --------> Total number of selected entries" 170 edm::LogVerbatim(
"ValidHcal") <<
"SimG4HcalValidation::Initialize ESGetToken for HcalDDDSimConstants";
175 layerAnalysis(*productLayer);
180 nxNAnalysis(*productNxN);
193 float sHB[4] = {117., 117., 178., 217.};
194 float sHE[3] = {178., 178., 178.};
195 float sHF[3] = {2.84, 2.09, 0.};
197 float deta[4] = {0.0435, 0.1305, 0.2175, 0.3045};
198 float dphi[4] = {0.0436, 0.1309, 0.2182, 0.3054};
201 for (
i = 0;
i < 4;
i++) {
202 scaleHB.push_back(sHB[
i]);
204 for (
i = 0;
i < 3;
i++) {
205 scaleHE.push_back(sHE[
i]);
207 for (
i = 0;
i < 3;
i++) {
208 scaleHF.push_back(sHF[
i]);
212 for (
i = 0;
i < 4;
i++) {
213 dEta.push_back(deta[
i]);
214 dPhi.push_back(dphi[
i]);
218 jetf = std::make_unique<SimG4HcalHitJetFinder>(
coneSize);
227 edm::LogVerbatim(
"ValidHcal") <<
"HcalTestAnalysis:: Initialise HcalNumberingFromDDD";
228 numberingFromDDD = std::make_unique<HcalNumberingFromDDD>(hcons);
231 org = std::make_unique<HcalTestNumberingScheme>(
false);
235 int irun = (*run)()->GetRunID();
240 G4SDManager *sd = G4SDManager::GetSDMpointerIfExist();
242 G4VSensitiveDetector *aSD = sd->FindSensitiveDetector(sdname);
243 if (aSD ==
nullptr) {
244 edm::LogWarning(
"ValidHcal") <<
"SimG4HcalValidation::beginOfRun: No SD" 245 <<
" with name " << sdname <<
" in this " 249 edm::LogVerbatim(
"ValidHcal") <<
"SimG4HcalValidation::beginOfRun: Finds SD with name " << theCaloSD->GetName()
253 edm::LogVerbatim(
"ValidHcal") <<
"SimG4HcalValidation::beginOfRun: set a new numbering scheme";
257 edm::LogWarning(
"ValidHcal") <<
"SimG4HcalValidation::beginOfRun: Could " 258 <<
"not get SD Manager!";
265 edepEB = edepEE = edepHB = edepHE = edepHO = 0.;
266 for (
i = 0;
i < 5;
i++)
268 for (
i = 0;
i < 20;
i++)
270 vhitec = vhithc = enEcal = enHcal = 0;
274 int iev = (*evt)()->GetEventID();
275 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation: =====> Begin of event = " <<
iev;
280 if (aStep !=
nullptr) {
281 G4VPhysicalVolume *curPV = aStep->GetPreStepPoint()->GetPhysicalVolume();
282 G4String
name = curPV->GetName();
284 double edeposit = aStep->GetTotalEnergyDeposit();
285 int layer = -1,
depth = -1;
289 }
else if (
name ==
"EFR") {
292 }
else if (
name ==
"HBS") {
293 layer = (curPV->GetCopyNo() / 10) % 100;
294 depth = (curPV->GetCopyNo()) % 10 + 1;
295 if (
depth > 0 && depth < 4 && layer >= 0 && layer < 17) {
298 edm::LogWarning(
"ValidHcal") <<
"SimG4HcalValidation:Error " << curPV->GetName() << curPV->GetCopyNo();
302 }
else if (
name ==
"HES") {
303 layer = (curPV->GetCopyNo() / 10) % 100;
304 depth = (curPV->GetCopyNo()) % 10 + 1;
305 if (
depth > 0 && depth < 3 && layer >= 0 && layer < 19) {
308 edm::LogWarning(
"ValidHcal") <<
"SimG4HcalValidation:Error " << curPV->GetName() << curPV->GetCopyNo();
312 }
else if (
name ==
"HTS") {
313 layer = (curPV->GetCopyNo() / 10) % 100;
314 depth = (curPV->GetCopyNo()) % 10 + 1;
315 if (
depth > 3 && depth < 5 && layer >= 17 && layer < 20) {
318 edm::LogWarning(
"ValidHcal") <<
"SimG4HcalValidation:Error " << curPV->GetName() << curPV->GetCopyNo();
324 edepd[
depth] += edeposit;
325 if (layer >= 0 && layer < 20)
326 edepl[layer] += edeposit;
328 if (layer >= 0 && layer < 20) {
329 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: G4Step: " <<
name <<
" Layer " << std::setw(3) << layer
330 <<
" Depth " << std::setw(2) <<
depth <<
" Edep " << std::setw(6) << edeposit / MeV
342 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: --- after Fill ";
347 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:Fill event " << (*evt)()->GetEventID();
350 G4HCofThisEvent *allHC = (*evt)()->GetHCofThisEvent();
355 int HCHCid = G4SDManager::GetSDMpointer()->GetCollectionID(
names[0]);
357 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation :: Hit Collection for " <<
names[0] <<
" of ID " << HCHCid
358 <<
" is obtained at " << theHCHC;
359 if (HCHCid >= 0 && theHCHC !=
nullptr) {
360 int nhits = theHCHC->entries();
370 double phi =
pos.phi();
373 int subdet,
zside, layer, etaIndex, phiIndex, lay;
374 org->unpackHcalIndex(unitID, subdet,
zside, layer, etaIndex, phiIndex, lay);
391 edm::LogVerbatim(
"ValidHcal") <<
"SimG4HcalValidation::HitPMT " << subdet <<
" " << (2 *
zside - 1) * etaIndex
392 <<
" " << phiIndex <<
" " << layer + 1 <<
" R " <<
pos.rho() <<
" Phi " 394 }
else if (subdet == static_cast<int>(
HcalEndcap)) {
395 if (etaIndex <= 20) {
401 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::debugFill Hcal " << det <<
" layer " << std::setw(2) << layer
402 <<
" lay " << std::setw(2) << lay <<
" time " << std::setw(6) <<
time <<
" theta " 403 << std::setw(8) <<
theta <<
" eta " << std::setw(8) <<
eta <<
" phi " << std::setw(8) << phi
404 <<
" e " << std::setw(8) <<
e <<
" ID 0x" << std::hex << unitID <<
" ID dec " <<
std::dec 409 e *= getHcalScale(det, layer);
412 if (
time >= timeLowlim && time <= timeUplim && e > hhitThreshold) {
415 hitcache.push_back(ahit);
420 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: HCAL hits : " << nhc;
423 int ndets =
names.size();
426 for (
int idty = 1; idty < ndets; idty++) {
434 int ECHCid = G4SDManager::GetSDMpointer()->GetCollectionID(
names[idty]);
436 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: Hit Collection for " <<
names[idty] <<
" of ID " << ECHCid
437 <<
" is obtained at " << theECHC;
438 int theechc_entries = theECHC->entries();
439 if (ECHCid >= 0 && theECHC !=
nullptr) {
440 for (
j = 0;
j < theechc_entries;
j++) {
449 double phi =
pos.phi();
451 uint32_t unitID = org->getUnitID(
id);
453 org->unpackHcalIndex(unitID, subdet,
zside, layer,
ieta,
iphi, lay);
456 unitID = org->packHcalIndex(subdet,
zside, layer,
ieta,
iphi, lay);
459 if (
time >= timeLowlim && time <= timeUplim && e > ehitThreshold) {
462 hitcache.push_back(ahit);
466 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::debugFill Ecal " << det <<
" layer " << std::setw(2) << layer
467 <<
" lay " << std::setw(2) << lay <<
" time " << std::setw(6) <<
time <<
" theta " 468 << std::setw(8) <<
theta <<
" eta " << std::setw(8) <<
eta <<
" phi " << std::setw(8)
469 << phi <<
" e " << std::setw(8) <<
e <<
" ID 0x" << std::hex << unitID <<
" ID dec " 474 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: " << det <<
" hits : " << nec;
481 LogDebug(
"ValidHcal") <<
"\n ===>>> SimG4HcalValidation: Energy deposit " 482 <<
"in MeV\n at EB : " << std::setw(6) << edepEB / MeV <<
"\n at EE : " << std::setw(6)
483 << edepEE / MeV <<
"\n at HB : " << std::setw(6) << edepHB / MeV
484 <<
"\n at HE : " << std::setw(6) << edepHE / MeV <<
"\n at HO : " << std::setw(6)
485 << edepHO / MeV <<
"\n ---- SimG4HcalValidation: Energy deposit in";
486 for (
i = 0;
i < 5;
i++)
487 LogDebug(
"ValidHcal") <<
" Depth " << std::setw(2) <<
i <<
" E " << std::setw(8) << edepd[
i] / MeV <<
" MeV";
488 LogDebug(
"ValidHcal") <<
" ---- SimG4HcalValidation: Energy deposit in" 490 for (
i = 0;
i < 20;
i++)
491 LogDebug(
"ValidHcal") <<
" Layer " << std::setw(2) <<
i <<
" E " << std::setw(8) << edepl[
i] / MeV <<
" MeV";
493 product.
fillLayers(edepl, edepd, edepHO, edepHB + edepHE, edepEB + edepEE);
496 product.
fillHF(vhitec, vhithc, enEcal, enHcal);
497 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::HF hits " << vhitec <<
" in EC and " << vhithc <<
" in HC\n" 498 <<
" HB/HE " << enEcal <<
" in EC and " << enHcal <<
" in HC";
503 LogDebug(
"ValidHcal") <<
" layerAnalysis ===> after fetchHits";
508 std::vector<CaloHit> *
hits = &hitcache;
509 std::vector<CaloHit>::iterator hit_itr;
511 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::NxNAnalysis : entrance ";
513 collectEnergyRdir(eta0, phi0);
516 LogDebug(
"ValidHcal") <<
" NxNAnalysis : coolectEnergyRdir - Ecal " << een <<
" Hcal " << hen;
525 for (hit_itr =
hits->begin(); hit_itr <
hits->end(); hit_itr++) {
526 double e = hit_itr->e();
527 double t = hit_itr->t();
528 double eta = hit_itr->eta();
529 double phi = hit_itr->phi();
530 int type = hit_itr->det();
531 int layer = hit_itr->layer();
535 if (fabs(eta0 -
eta) <=
dEta[
max - 1] && fabs(phi0 - phi) <= dPhi[
max - 1]) {
546 for (
int i = 0;
i <
max;
i++) {
547 if ((eta0 -
eta) <=
dEta[
i] && (eta0 -
eta) >= -
dEta[
i] && (phi0 - phi) <= dPhi[
i] &&
548 (phi0 - phi) >= -dPhi[
i]) {
549 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation:: nxNAnalysis eta0," 550 <<
" phi0 = " << eta0 <<
" " << phi0 <<
" type, layer = " <<
type <<
"," << layer
551 <<
" eta, phi = " <<
eta <<
" " << phi;
563 product.
fillHvsE(een, hen, hoen, een + hen);
565 LogDebug(
"ValidHcal") <<
" nxNAnalysis ===> after fillHvsE";
570 std::vector<CaloHit> *hhit = &hitcache;
572 jetf->setInput(hhit);
575 std::vector<SimG4HcalHitCluster> *
result = jetf->getClusters(hcalOnly);
577 std::vector<SimG4HcalHitCluster>::iterator clus_itr;
579 LogDebug(
"ValidHcal") <<
"\n ---------- Final list of " << (*result).size() <<
" clusters ---------------";
580 for (clus_itr =
result->begin(); clus_itr <
result->end(); clus_itr++)
581 LogDebug(
"ValidHcal") << (*clus_itr);
583 std::vector<double> enevec, etavec, phivec;
585 if (!(*result).empty()) {
586 sort((*result).begin(), (*result).end());
588 clus_itr =
result->begin();
589 double etac = clus_itr->eta();
590 double phic = clus_itr->phi();
592 double ecal_collect = 0.;
594 ecal_collect = clus_itr->collectEcalEnergyR();
596 collectEnergyRdir(etac, phic);
599 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> ecal_collect = " << ecal_collect;
602 double dist = jetf->rDist(eta0, phi0, etac, phic);
603 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> eta phi deviation = " << dist;
606 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> after fillEtaPhiProfileJet";
608 std::vector<CaloHit> *
hits = clus_itr->getHits();
609 std::vector<CaloHit>::iterator hit_itr;
611 double ee = 0.,
he = 0.,
hoe = 0., etot = 0.;
614 for (hit_itr =
hits->begin(); hit_itr <
hits->end(); hit_itr++) {
615 double e = hit_itr->e();
616 double t = hit_itr->t();
617 double r = jetf->rDist(&(*clus_itr), &(*hit_itr));
621 if (hit_itr->det() == 10 || hit_itr->det() == 11 || hit_itr->det() == 12)
623 if (hit_itr->det() ==
static_cast<int>(
HcalBarrel) || hit_itr->det() ==
static_cast<int>(
HcalEndcap) ||
626 if (hit_itr->det() ==
static_cast<int>(
HcalBarrel) && hit_itr->layer() > 17)
630 if (hit_itr->det() ==
static_cast<int>(
HcalBarrel) || hit_itr->det() ==
static_cast<int>(
HcalEndcap) ||
638 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> after fillEcollectJet: " 639 <<
"ee/he/hoe/etot " << ee <<
"/" <<
he <<
"/" <<
hoe <<
"/" << etot;
642 for (clus_itr =
result->begin(); clus_itr <
result->end(); clus_itr++) {
644 enevec.push_back(clus_itr->e());
645 etavec.push_back(clus_itr->eta());
646 phivec.push_back(clus_itr->phi());
649 product.
fillJets(enevec, etavec, phivec);
651 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> after fillJets\n" 652 <<
" JetAnalysis ===> (*result).size() " << (*result).size();
655 if (etavec.size() > 1) {
656 if (etavec[0] > -2.5 && etavec[0] < 2.5 && etavec[1] > -2.5 && etavec[1] < 2.5) {
657 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> Di-jet mass enter\n" 658 <<
" JetAnalysis ===> Di-jet vectors ";
659 for (
unsigned int i = 0;
i < enevec.size();
i++)
660 LogDebug(
"ValidHcal") <<
" e, eta, phi = " << enevec[
i] <<
" " << etavec[
i] <<
" " << phivec[
i];
662 double et0 = enevec[0] / cosh(etavec[0]);
663 double px0 = et0 *
cos(phivec[0]);
664 double py0 = et0 *
sin(phivec[0]);
665 double pz0 = et0 * sinh(etavec[0]);
666 double et1 = enevec[1] / cosh(etavec[1]);
667 double px1 = et1 *
cos(phivec[1]);
668 double py1 = et1 *
sin(phivec[1]);
669 double pz1 = et1 * sinh(etavec[1]);
671 double dijetmass2 = (enevec[0] + enevec[1]) * (enevec[0] + enevec[1]) - (px1 + px0) * (px1 + px0) -
672 (py1 + py0) * (py1 + py0) - (pz1 + pz0) * (pz1 + pz0);
674 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> Di-jet massSQ " << dijetmass2;
677 if (dijetmass2 >= 0.)
678 dijetmass =
sqrt(dijetmass2);
680 dijetmass = -
sqrt(-1. * dijetmass2);
684 LogDebug(
"ValidHcal") <<
" JetAnalysis ===> after fillDiJets";
692 LogDebug(
"ValidHcal") <<
"Enter SimG4HcalValidation::fetchHits with " << hitcache.size() <<
" hits";
693 int nHit = hitcache.size();
696 std::vector<CaloHit>::iterator itr;
697 std::vector<CaloHit *> lhits(nHit);
698 for (
i = 0, itr = hitcache.begin(); itr != hitcache.end();
i++, itr++) {
699 uint32_t unitID = itr->id();
704 group = (subdet & 15) << 20;
705 group += ((lay - 1) & 31) << 15;
710 lhits[
i] = &hitcache[
i];
711 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::fetchHits:Original " <<
i <<
" " << hitcache[
i] <<
"\n" 712 <<
"SimG4HcalValidation::fetchHits:Copied " <<
i <<
" " << *lhits[
i];
715 std::vector<CaloHit *>::iterator k1, k2;
716 for (
i = 0, k1 = lhits.begin(); k1 != lhits.end();
i++, k1++)
717 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::fetchHits:Sorted " <<
i <<
" " << **k1;
719 for (
i = 0, k1 = lhits.begin(); k1 != lhits.end();
i++, k1++) {
720 double ehit = (**k1).e();
721 double t = (**k1).t();
722 uint32_t unitID = (**k1).id();
724 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::fetchHits:Start " <<
i <<
" U/T/E" 725 <<
" 0x" << std::hex << unitID <<
std::dec <<
" " <<
t <<
" " << ehit;
726 for (k2 = k1 + 1; k2 != lhits.end() && (
t - (**k2).t()) < 1 && (
t - (**k2).t()) > -1 && unitID == (**k2).id();
729 LogDebug(
"ValidHcal") <<
"\t + " << (**k2).e();
732 LogDebug(
"ValidHcal") <<
"\t = " << ehit <<
" in " << jump;
734 double eta = (*k1)->eta();
735 double phi = (*k1)->phi();
736 int lay = ((unitID >> 15) & 31) + 1;
737 int subdet = (unitID >> 20) & 15;
738 int zside = (unitID >> 14) & 1;
739 int ieta = (unitID >> 7) & 127;
740 int iphi = (unitID) & 127;
746 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::fetchHits:Hit " <<
nHits <<
" " <<
i <<
" ID 0x" << std::hex
747 << unitID <<
" det " <<
std::dec << subdet <<
" " << lay <<
" " <<
zside <<
" " <<
ieta 748 <<
" " <<
iphi <<
" Time " <<
t <<
" E " << ehit;
754 LogDebug(
"ValidHcal") <<
"SimG4HcalValidation::fetchHits called with " << nHit <<
" hits" 755 <<
" and writes out " <<
nHits <<
'(' <<
hit <<
") hits";
762 std::vector<CaloHit> *
hits = &hitcache;
763 std::vector<CaloHit>::iterator hit_itr;
765 double sume = 0., sumh = 0., sumho = 0.;
767 for (hit_itr =
hits->begin(); hit_itr <
hits->end(); hit_itr++) {
768 double e = hit_itr->e();
769 double eta = hit_itr->eta();
770 double phi = hit_itr->phi();
772 int type = hit_itr->det();
774 double r = jetf->rDist(eta0, phi0,
eta, phi);
780 if (
type == static_cast<int>(
HcalBarrel) && hit_itr->layer() > 17)
796 tmp = scaleHB[layer];
797 }
else if (det ==
"HES" || det ==
"HED") {
798 tmp = scaleHE[layer];
799 }
else if (det ==
"HF") {
800 tmp = scaleHF[layer];
void fillJets(const std::vector< double > &enj, const std::vector< double > &etaj, const std::vector< double > &phij)
Log< level::Info, true > LogVerbatim
double getHcalScale(std::string, int) const
#define DEFINE_SIMWATCHER(type)
T getParameter(std::string const &) const
Basic3DVector & operator=(const Basic3DVector &)=default
Assignment operator.
std::unique_ptr< HcalNumberingFromDDD > numberingFromDDD
void fillHvsE(double ee, double he, double hoe, double etot)
void fillTProfileJet(double e, double r, double t)
void beginRun(edm::EventSetup const &) override
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
void fill(const EndOfEvent *ev)
void fillLayers(double el[], double ed[], double ho, double hbhe, double ebee)
std::vector< float > scaleHF
void registerConsumes(edm::ConsumesCollector) override
void fillEcollectJet(double ee, double he, double hoe, double etot)
void collectEnergyRdir(const double, const double)
std::vector< std::string > names
void fillEtaPhiProfileJet(double eta0, double phi0, double eta, double phi, double dist)
uint32_t cc[maxCellsPerHit]
constexpr NumType convertRadToDeg(NumType radians)
std::vector< CaloHit > hitcache
Sin< T >::type sin(const T &t)
void produce(edm::Event &, const edm::EventSetup &) override
void fillDiJets(double mass)
std::vector< double > dEta
TkSoAView< TrackerTraits > HitToTuple< TrackerTraits > const *__restrict__ int32_t int32_t int iev
uint16_t getDepth() const
void setNumberingScheme(HcalNumberingScheme *)
const std::string names[nVars_]
void fillHits(int Nhits, int lay, int unitID, double eta, double phi, double ehit, double t)
T getUntrackedParameter(std::string const &, T const &) const
~SimG4HcalValidation() override
void jetAnalysis(PHcalValidInfoJets &)
math::XYZPoint getPosition() const
void nxNAnalysis(PHcalValidInfoNxN &)
std::vector< double > dPhi
void fetchHits(PHcalValidInfoLayer &)
Cos< T >::type cos(const T &t)
Tan< T >::type tan(const T &t)
static void unpackHcalIndex(const uint32_t &idx, int &det, int &z, int &depth, int &eta, int &phi, int &lay)
edm::ESGetToken< HcalDDDSimConstants, HcalSimNumberingRecord > ddconsToken_
std::vector< float > scaleHB
void fillEcollectNxN(double een, double hen, double hoen, double etotn)
void update(const BeginOfRun *run) override
This routine will be called when the appropriate signal arrives.
std::unique_ptr< SimG4HcalHitJetFinder > jetf
void fillTProfileNxN(double e, int i, double t)
XYZPointD XYZPoint
point in space with cartesian internal representation
double getEnergyDeposit() const
uint32_t getUnitID() const
std::vector< float > scaleHE
std::unique_ptr< HcalTestNumberingScheme > org
G4THitsCollection< CaloG4Hit > CaloG4HitCollection
double getTimeSlice() const
SimG4HcalValidation(const edm::ParameterSet &p)
Log< level::Warning, false > LogWarning
TupleMultiplicity< TrackerTraits > const *__restrict__ uint32_t nHits
Geom::Theta< T > theta() const
void layerAnalysis(PHcalValidInfoLayer &)
void fillHF(double fibl, double fibs, double enec, double enhc)