20 #include "G4LogicalVolumeStore.hh" 21 #include "G4LogicalVolume.hh" 25 #include "G4PhysicalConstants.hh" 26 #include "Randomize.hh" 28 #include <CLHEP/Units/SystemOfUnits.h> 59 hcalSimConstants_(hscs),
75 dd4hep_ =
p.getParameter<
bool>(
"g4GeometryDD4hepSource");
77 useBirk = m_HC.getParameter<
bool>(
"UseBirkLaw");
78 double bunit = (
CLHEP::g / (CLHEP::MeV * CLHEP::cm2));
79 birk1 = m_HC.getParameter<
double>(
"BirkC1") * bunit;
80 birk2 = m_HC.getParameter<
double>(
"BirkC2");
81 birk3 = m_HC.getParameter<
double>(
"BirkC3");
83 useParam = m_HC.getParameter<
bool>(
"UseParametrize");
84 testNumber = m_HC.getParameter<
bool>(
"TestNumberingScheme");
85 neutralDensity = m_HC.getParameter<
bool>(
"doNeutralDensityFilter");
86 usePMTHit = m_HC.getParameter<
bool>(
"UsePMTHits");
87 betaThr = m_HC.getParameter<
double>(
"BetaThreshold");
88 eminHitHB = m_HC.getParameter<
double>(
"EminHitHB") * CLHEP::MeV;
89 eminHitHE = m_HC.getParameter<
double>(
"EminHitHE") * CLHEP::MeV;
90 eminHitHO = m_HC.getParameter<
double>(
"EminHitHO") * CLHEP::MeV;
91 eminHitHF = m_HC.getParameter<
double>(
"EminHitHF") * CLHEP::MeV;
94 agingFlagHB = m_HC.getParameter<
bool>(
"HBDarkening");
95 agingFlagHE = m_HC.getParameter<
bool>(
"HEDarkening");
96 bool agingFlagHF = m_HC.getParameter<
bool>(
"HFDarkening");
97 useHF = m_HC.getUntrackedParameter<
bool>(
"UseHF",
true);
98 bool forTBHC = m_HC.getUntrackedParameter<
bool>(
"ForTBHCAL",
false);
99 bool forTBH2 = m_HC.getUntrackedParameter<
bool>(
"ForTBH2",
false);
100 useLayerWt = m_HC.getUntrackedParameter<
bool>(
"UseLayerWt",
false);
102 testNS_ = m_HC.getUntrackedParameter<
bool>(
"TestNS",
false);
104 applyFidCut = m_HF.getParameter<
bool>(
"ApplyFiducialCut");
105 bool dumpGeom = m_HC.getUntrackedParameter<
bool>(
"DumpGeometry",
false);
108 edm::LogVerbatim(
"HcalSim") <<
"***************************************************" 110 <<
"* Constructing a HCalSD with name " <<
name <<
"\n" 112 <<
"***************************************************";
115 <<
"\n Use of shower parametrization set to " <<
useParam 117 <<
"\n Use PMT Hit is set to " <<
usePMTHit <<
" with beta Threshold " <<
betaThr 119 <<
"\n Use of Birks law is set to " <<
useBirk 120 <<
" with three constants kB = " <<
birk1 / bunit <<
", C1 = " <<
birk2 121 <<
", C2 = " <<
birk3;
125 <<
" ions below " <<
kmaxIon <<
" MeV\n" 129 <<
" Flag (HB) " <<
agingFlagHB <<
" Flag (HF) " << agingFlagHF <<
"\n" 135 matNames.emplace_back(
"Scintillator");
151 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
153 const G4LogicalVolume* lv;
170 std::stringstream ss0;
171 ss0 <<
"HCalSD: Names to be tested for Volume = HF has " <<
hfNames.size() <<
" elements";
173 int addlevel =
dd4hep_ ? 1 : 0;
174 for (
unsigned int i = 0;
i <
hfNames.size(); ++
i) {
177 for (
auto lvol : *lvs) {
183 hfLV.emplace_back(lv);
186 ss0 <<
"\n HF[" <<
i <<
"] = " << namv <<
" LV " << lv <<
" at level " << (
temp[
i] + addlevel);
204 const G4MaterialTable* matTab = G4Material::GetMaterialTable();
205 std::vector<G4Material*>::const_iterator matite;
207 const G4Material* mat =
nullptr;
208 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
217 std::stringstream ss1;
218 for (
unsigned int i = 0;
i <
matNames.size(); ++
i) {
219 if (
i / 10 * 10 ==
i) {
224 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Material names for HCAL: " << ss1.str();
234 std::stringstream ss2;
235 for (
unsigned int ig = 0; ig <
gpar.size(); ig++) {
236 ss2 <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig] / CLHEP::cm <<
" cm";
239 <<
" gpar (cm)" << ss2.str();
246 for (
int i = 0;
i < 9; ++
i) {
257 if (
tfile.isAvailable()) {
258 static const char*
const labels[] = {
"HB",
269 for (
int i = 0;
i < 9; ++
i) {
271 sprintf(
name,
"HCalSDHit%d",
i);
273 sprintf(
title,
"Energy (MeV)");
275 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
277 sprintf(
name,
"HCalSDTime%d",
i);
279 sprintf(
title,
"Time (ns)");
281 time_[
i]->GetYaxis()->SetTitle(
"Hits");
282 sprintf(
title,
"Longitudinal profile in %s",
labels[
i]);
283 sprintf(
name,
"HCalSDDist%d",
i);
285 sprintf(
title,
"Distance (mm)");
287 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
290 hzvem = hcDir.
make<TH1F>(
"hzvem",
"Longitudinal Profile (EM Part)", 330, 0.0, 1650.0);
291 hzvem->GetXaxis()->SetTitle(
"Longitudinal Profile (EM Part)");
292 hzvhad = hcDir.
make<TH1F>(
"hzvhad",
"Longitudinal Profile (Had Part)", 330, 0.0, 1650.0);
293 hzvhad->GetXaxis()->SetTitle(
"Longitudinal Profile (Hadronic Part)");
298 std::unique_ptr<HcalNumberingFromDDD> hcn = std::make_unique<HcalNumberingFromDDD>(
hcalConstants_);
306 const std::vector<std::string>& lvnames,
307 std::vector<const G4LogicalVolume*>& lvvec) {
308 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
309 const G4LogicalVolume* lv;
310 std::stringstream ss3;
311 ss3 <<
"HCalSD: " << lvnames.size() <<
" names to be tested for Volume <" <<
value <<
">:";
312 for (
unsigned int i = 0;
i < lvnames.size(); ++
i) {
315 for (
auto lvol : *lvs) {
321 lvvec.emplace_back(lv);
322 if (
i / 10 * 10 ==
i) {
331 auto const track = aStep->GetTrack();
332 depth_ = (aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber(0)) % 10;
338 << (aStep->GetPreStepPoint()->GetTouchable()->GetVolume(0)->GetName())
348 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
349 const double invcm = 1. / CLHEP::cm;
350 double r = hitPoint.perp() * invcm;
351 double z =
std::abs(hitPoint.z()) * invcm;
352 double dose_acquired = 0.;
364 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 365 <<
"r= " <<
r <<
", z= " <<
z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
372 G4String nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
374 <<
" for Track " <<
track->GetTrackID() <<
" (" 375 <<
track->GetDefinition()->GetParticleName() <<
")";
380 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
381 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 382 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
391 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
399 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
400 auto const theTrack = aStep->GetTrack();
405 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 406 << aStep->GetTrack()->GetTrackID() <<
" (" 407 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
419 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 420 << aStep->GetTrack()->GetTrackID() <<
" (" 421 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
430 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 431 << aStep->GetTrack()->GetTrackID() <<
" (" 432 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
441 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 442 << aStep->GetTrack()->GetTrackID() <<
" (" 443 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
449 destep = aStep->GetTotalEnergyDeposit();
451 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
466 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
469 <<
" lay: " << lay - 2;
474 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
499 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
501 double ke = theTrack->GetKineticEnergy();
502 if (
pdg / 1000000000 == 1 && (
pdg / 10000) % 100 > 0 && (
pdg / 10) % 100 > 0 && ke <
kmaxIon)
513 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
519 double wt2 = theTrack->GetWeight();
520 double edep =
weight_ * wt1 * destep;
526 <<
" weight= " <<
weight_ <<
" wt0= " << wt0 <<
" wt1= " << wt1 <<
" wt2= " << wt2;
532 auto const prePoint = aStep->GetPreStepPoint();
533 auto const touch = prePoint->GetTouchable();
534 const G4ThreeVector& hitPoint = prePoint->GetPosition();
536 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
537 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
538 int det = (touch->GetReplicaNumber(1)) / 1000;
543 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Check for " << det <<
":" <<
depth <<
":" << lay <<
" ID " << std::hex
545 int det0,
z0, depth0, eta0, phi0, lay0(-1);
554 depth0 = hcid0.
depth();
556 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: det|z|depth|eta|phi|lay " << det0 <<
":" <<
z0 <<
":" << depth0 <<
":" 557 << eta0 <<
":" << phi0 <<
":" << lay0;
566 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
578 switch (theId.subdetId()) {
617 det = ((
pos.perp() > minR) && (
pos.perp() < maxR)) ? 4 : 3;
646 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 647 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
653 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
654 int levels = (touch->GetHistoryDepth()) + 1;
657 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[
it])->GetLogicalVolume();
666 for (
const auto& nam :
hfNames)
667 if (
name == static_cast<G4String>(nam)) {
683 if (
name == static_cast<G4String>(nam)) {
690 for (
auto lvol :
pmtLV)
726 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
732 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
739 if (!isKilled ||
hits.empty()) {
748 auto const theTrack = aStep->GetTrack();
759 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 760 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 761 << aStep->GetPreStepPoint()->GetKineticEnergy() / CLHEP::GeV <<
" GeV";
763 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
764 G4ThreeVector hitPoint =
hits[
i].position;
787 auto const theTrack = aStep->GetTrack();
800 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 801 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 802 << aStep->GetPreStepPoint()->GetKineticEnergy() / CLHEP::GeV <<
" GeV in detector type " 806 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
807 G4ThreeVector hitPoint =
hits[
i].position;
825 if (!isKilled ||
hits.empty()) {
833 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 834 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
835 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / CLHEP::GeV
836 <<
" GeV in detector type " << det;
838 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
839 G4ThreeVector hitPoint =
hits[
i].position;
854 auto const preStepPoint = aStep->GetPreStepPoint();
855 auto const theTrack = aStep->GetTrack();
860 double etrack = preStepPoint->GetKineticEnergy();
863 primaryID = theTrack->GetTrackID();
865 primaryID = theTrack->GetParentID();
867 primaryID = theTrack->GetTrackID();
873 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
874 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
875 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
882 if (hitPoint.z() < 0)
885 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / CLHEP::deg
886 <<
" depth " <<
depth;
888 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
902 double beta = preStepPoint->GetBeta();
903 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 904 << theTrack->GetDefinition()->GetParticleName() <<
" of " 905 << preStepPoint->GetKineticEnergy() / CLHEP::GeV <<
" GeV with velocity " <<
beta 906 <<
" UnitID " << std::hex << unitID <<
std::dec;
913 auto const preStepPoint = aStep->GetPreStepPoint();
914 auto const theTrack = aStep->GetTrack();
919 double etrack = preStepPoint->GetKineticEnergy();
922 primaryID = theTrack->GetTrackID();
924 primaryID = theTrack->GetParentID();
926 primaryID = theTrack->GetTrackID();
932 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
933 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
934 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
941 if (hitPoint.z() < 0.)
944 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / CLHEP::deg
945 <<
" depth " <<
depth;
947 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
964 double beta = preStepPoint->GetBeta();
965 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
966 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 967 << preStepPoint->GetKineticEnergy() / CLHEP::GeV <<
" GeV with velocity " <<
beta 968 <<
" UnitID " << std::hex << unitID <<
std::dec;
983 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
986 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 987 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 988 << lay <<
") Weight " << wt;
1006 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
1011 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 1019 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1020 static const unsigned int names = 10;
1021 static const G4String modName[
names] = {
1022 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
1023 G4ThreeVector
local;
1025 double depth = -2000;
1027 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1033 if (
name == modName[
ii]) {
1035 int dn = touch->GetHistoryDepth() -
n;
1036 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1040 }
else if (
ii == 1) {
1043 }
else if (
ii == 2) {
1060 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1068 int jd = 2 *
idx +
id - 7;
1069 if (jd >= 0 && jd < 4) {
1071 if (
hit_[jd] !=
nullptr)
1072 hit_[jd]->Fill(edep);
1073 if (
time_[jd] !=
nullptr)
1075 if (
dist_[jd] !=
nullptr)
1083 if (
hzvem !=
nullptr)
1092 if (
id.subdet == 4) {
1093 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1095 if (
id.
depth <= 2) {
1096 if (G4UniformRand() > 0.5)
1100 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1101 id.depth = (
depth_ == 0) ? 1 : 2;
1123 int level = ((touch->GetHistoryDepth()) + 1);
1129 G4VPhysicalVolume*
pv = touch->GetVolume(
i);
1131 G4int copyno = touch->GetReplicaNumber(
i);
int getNumberOfHits(int k=0)
Log< level::Info, true > LogVerbatim
std::vector< std::string > matNames
void readWeightFromFile(const std::string &)
std::vector< const G4LogicalVolume * > hfLV
void hitForFibre(const G4Step *step)
void initEvent(const BeginOfEvent *) override
static bool isMuon(int pdgCode)
constexpr int zside() const
get the z-side of the cell (1/-1)
std::vector< std::string > fibreNames
static constexpr double slopeHE_
std::unique_ptr< HFShowerParam > showerParam
std::vector< double > gpar
constexpr int ietaAbs() const
get the absolute value of the cell ieta
const HcalDDDSimConstants * hcalConstants_
std::vector< std::string > hfNames_
int maxHFDepth(const int &ieta, const int &iphi) const
float degradation(float intlumi, int ieta, int lay) const
std::vector< std::string > hfFibreNames_
std::vector< std::string > hfNames
void plotProfile(const G4Step *step, const G4ThreeVector &pos, double edep, double time, int id)
double getLayer0Wt(const int &det, const int &phi, const int &zside) const
std::vector< const G4LogicalVolume * > fibre2LV
static const unsigned int numberOfZLayers
void modifyDepth(HcalNumberingFromDDD::HcalID &id)
void update(const BeginOfJob *) override
This routine will be called when the appropriate signal arrives.
void setNumberingScheme(HcalNumberingScheme *)
void processHit(const G4Step *step)
const std::vector< std::string_view > logicalNames(const std::string &readoutName) const
std::unique_ptr< HFShowerPMT > showerPMT
const std::vector< double > & getGparHF() const
const std::string names[nVars_]
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
bool isItConicalBundle(const G4LogicalVolume *)
HCalSD(const std::string &, const HcalDDDSimConstants *, const HcalDDDRecConstants *, const HcalSimulationConstants *, const HBHEDarkening *, const HBHEDarkening *, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
const HcalSimulationParameters * hcalsimpar() const
T * make(const Args &...args) const
make new ROOT object
static constexpr double minRoff_
static uint32_t packHcalIndex(int det, int z, int depth, int eta, int phi, int lay)
std::unique_ptr< HcalNumberingFromDDD > numberingFromDDD
double getResponseWt(const G4Track *, int k=0)
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > XYZVectorD
spatial vector with cartesian internal representation
std::vector< std::string > hfFibreConicalNames_
std::unique_ptr< HFDarkening > m_HFDarkening
void resetForNewPrimary(const G4Step *)
const HBHEDarkening * m_HEDarkening
Abs< T >::type abs(const T &t)
void plotHF(const G4ThreeVector &pos, bool emType)
std::unique_ptr< HcalTestNS > m_HcalTestNS
static void unpackHcalIndex(const uint32_t &idx, int &det, int &z, int &depth, int &eta, int &phi, int &lay)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
std::vector< int > hfLevels
void getFromParam(const G4Step *step, bool &isKilled)
void getFromHFLibrary(const G4Step *step, bool &isKilled)
uint32_t setDetUnitId(const G4Step *step) override
bool isItStraightBundle(const G4LogicalVolume *)
bool getFromLibrary(const G4Step *) override
static bool isStableHadronIon(const G4Track *)
void setID(uint32_t unitID, double timeSlice, int trackID, uint16_t depth=0)
std::vector< const G4LogicalVolume * > pmtLV
int PMTNumber(const G4ThreeVector &pe_effect)
static const unsigned int lowZLimit
bool filterHit(CaloG4Hit *, double) override
static const unsigned int upperZLimit
void fillLogVolumeVector(const std::string &, const std::vector< std::string > &, std::vector< const G4LogicalVolume *> &)
static constexpr double maxZ_
void getHitFibreBundle(const G4Step *step, bool type)
std::vector< std::string > hcalMaterialNames_
double getEnergyDeposit(const G4Step *) override
double getAttenuation(const G4Step *aStep, double birk1, double birk2, double birk3) const
double getEnergyDeposit() const
std::unique_ptr< HFShowerFibreBundle > showerBundle
std::vector< std::string > hfPMTNames_
bool isItPMT(const G4LogicalVolume *)
bool isItinFidVolume(const G4ThreeVector &)
uint32_t getUnitID() const
bool isHF(int etabin, int depth)
void printVolume(const G4VTouchable *touch) const
void getHitPMT(const G4Step *step)
std::vector< int > detNull_
std::unique_ptr< HFShowerLibrary > showerLibrary
double layerWeight(int, const G4ThreeVector &, int, int)
const HcalSimulationConstants * hcalSimConstants_
virtual int setTrackID(const G4Step *)
std::map< uint32_t, double > layerWeights
bool isItHF(const G4Step *)
static bool isGammaElectronPositron(int pdgCode)
bool isItScintillator(const G4Material *)
std::vector< std::string > hfFibreStraightNames_
std::unique_ptr< HcalNumberingScheme > numberingScheme
std::unique_ptr< HFShower > hfshower
std::vector< const G4LogicalVolume * > fibreLV
Log< level::Warning, false > LogWarning
std::string nameMatterLV(const std::string &name, bool dd4hep)
std::vector< const G4LogicalVolume * > fibre1LV
std::vector< const G4Material * > materials
int getMaxDepth(const int &type) const
const HBHEDarkening * m_HBDarkening
constexpr int iphi() const
get the cell iphi
static constexpr double maxRoff_
std::vector< int > hfLevels_
bool isItFibre(const G4LogicalVolume *)
void setParameterized(bool val)
constexpr int depth() const
get the tower depth