19 #include "G4LogicalVolumeStore.hh" 20 #include "G4LogicalVolume.hh" 24 #include "G4SystemOfUnits.hh" 25 #include "G4PhysicalConstants.hh" 26 #include "Randomize.hh" 28 #include "DD4hep/Filter.h" 58 hcalSimConstants_(hscs),
79 bool dd4hep =
p.getParameter<
bool>(
"g4GeometryDD4hepSource");
81 useBirk = m_HC.getParameter<
bool>(
"UseBirkLaw");
82 double bunit = (
CLHEP::g / (CLHEP::MeV * CLHEP::cm2));
83 birk1 = m_HC.getParameter<
double>(
"BirkC1") * bunit;
84 birk2 = m_HC.getParameter<
double>(
"BirkC2");
85 birk3 = m_HC.getParameter<
double>(
"BirkC3");
87 useParam = m_HC.getParameter<
bool>(
"UseParametrize");
88 testNumber = m_HC.getParameter<
bool>(
"TestNumberingScheme");
89 neutralDensity = m_HC.getParameter<
bool>(
"doNeutralDensityFilter");
90 usePMTHit = m_HC.getParameter<
bool>(
"UsePMTHits");
91 betaThr = m_HC.getParameter<
double>(
"BetaThreshold");
92 eminHitHB = m_HC.getParameter<
double>(
"EminHitHB") * MeV;
93 eminHitHE = m_HC.getParameter<
double>(
"EminHitHE") * MeV;
94 eminHitHO = m_HC.getParameter<
double>(
"EminHitHO") * MeV;
95 eminHitHF = m_HC.getParameter<
double>(
"EminHitHF") * MeV;
98 agingFlagHB = m_HC.getParameter<
bool>(
"HBDarkening");
99 agingFlagHE = m_HC.getParameter<
bool>(
"HEDarkening");
100 bool agingFlagHF = m_HC.getParameter<
bool>(
"HFDarkening");
101 useHF = m_HC.getUntrackedParameter<
bool>(
"UseHF",
true);
102 bool forTBHC = m_HC.getUntrackedParameter<
bool>(
"ForTBHCAL",
false);
103 bool forTBH2 = m_HC.getUntrackedParameter<
bool>(
"ForTBH2",
false);
104 useLayerWt = m_HC.getUntrackedParameter<
bool>(
"UseLayerWt",
false);
106 testNS_ = m_HC.getUntrackedParameter<
bool>(
"TestNS",
false);
108 applyFidCut = m_HF.getParameter<
bool>(
"ApplyFiducialCut");
109 bool dumpGeom = m_HC.getUntrackedParameter<
bool>(
"DumpGeometry",
false);
112 edm::LogVerbatim(
"HcalSim") <<
"***************************************************" 114 <<
"* Constructing a HCalSD with name " <<
name <<
"\n" 116 <<
"***************************************************";
119 <<
"\n Use of shower parametrization set to " <<
useParam 121 <<
"\n Use PMT Hit is set to " <<
usePMTHit <<
" with beta Threshold " <<
betaThr 123 <<
"\n Use of Birks law is set to " <<
useBirk 124 <<
" with three constants kB = " <<
birk1 / bunit <<
", C1 = " <<
birk2 125 <<
", C2 = " <<
birk3;
129 <<
" ions below " <<
kmaxIon <<
" MeV\n" 133 <<
" Flag (HB) " <<
agingFlagHB <<
" Flag (HF) " << agingFlagHF <<
"\n" 139 matNames.emplace_back(
"Scintillator");
155 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
157 const G4LogicalVolume* lv;
174 std::stringstream ss0;
175 ss0 <<
"HCalSD: Names to be tested for Volume = HF has " <<
hfNames.size() <<
" elements";
177 int addlevel =
dd4hep ? 1 : 0;
178 for (
unsigned int i = 0;
i <
hfNames.size(); ++
i) {
179 G4String namv(static_cast<std::string>(dd4hep::dd::noNamespace(
hfNames[
i])));
181 for (
auto lvol : *lvs) {
182 if (dd4hep::dd::noNamespace(lvol->GetName()) == namv) {
187 hfLV.emplace_back(lv);
190 ss0 <<
"\n HF[" <<
i <<
"] = " << namv <<
" LV " << lv <<
" at level " << (
temp[
i] + addlevel);
208 const G4MaterialTable* matTab = G4Material::GetMaterialTable();
209 std::vector<G4Material*>::const_iterator matite;
211 const G4Material* mat =
nullptr;
212 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
213 if (static_cast<std::string>(dd4hep::dd::noNamespace((*matite)->GetName())) == namx) {
221 std::stringstream ss1;
222 for (
unsigned int i = 0;
i <
matNames.size(); ++
i) {
223 if (
i / 10 * 10 ==
i) {
228 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Material names for HCAL: " << ss1.str();
238 std::stringstream ss2;
239 for (
unsigned int ig = 0; ig <
gpar.size(); ig++) {
240 ss2 <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig] / cm <<
" cm";
243 <<
" gpar (cm)" << ss2.str();
250 for (
int i = 0;
i < 9; ++
i) {
261 if (
tfile.isAvailable()) {
262 static const char*
const labels[] = {
"HB",
273 for (
int i = 0;
i < 9; ++
i) {
275 sprintf(
name,
"HCalSDHit%d",
i);
277 sprintf(
title,
"Energy (MeV)");
279 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
281 sprintf(
name,
"HCalSDTime%d",
i);
283 sprintf(
title,
"Time (ns)");
285 time_[
i]->GetYaxis()->SetTitle(
"Hits");
286 sprintf(
title,
"Longitudinal profile in %s",
labels[
i]);
287 sprintf(
name,
"HCalSDDist%d",
i);
289 sprintf(
title,
"Distance (mm)");
291 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
294 hzvem = hcDir.
make<TH1F>(
"hzvem",
"Longitudinal Profile (EM Part)", 330, 0.0, 1650.0);
295 hzvem->GetXaxis()->SetTitle(
"Longitudinal Profile (EM Part)");
296 hzvhad = hcDir.
make<TH1F>(
"hzvhad",
"Longitudinal Profile (Had Part)", 330, 0.0, 1650.0);
297 hzvhad->GetXaxis()->SetTitle(
"Longitudinal Profile (Hadronic Part)");
302 std::unique_ptr<HcalNumberingFromDDD> hcn = std::make_unique<HcalNumberingFromDDD>(
hcalConstants_);
310 const std::vector<std::string>& lvnames,
311 std::vector<const G4LogicalVolume*>& lvvec) {
312 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
313 const G4LogicalVolume* lv;
314 std::stringstream ss3;
315 ss3 <<
"HCalSD: " << lvnames.size() <<
" names to be tested for Volume <" <<
value <<
">:";
316 for (
unsigned int i = 0;
i < lvnames.size(); ++
i) {
317 G4String namv(static_cast<std::string>(dd4hep::dd::noNamespace(lvnames[
i])));
319 for (
auto lvol : *lvs) {
320 if (dd4hep::dd::noNamespace(lvol->GetName()) == namv) {
325 lvvec.emplace_back(lv);
326 if (
i / 10 * 10 ==
i) {
335 auto const track = aStep->GetTrack();
336 depth_ = (aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber(0)) % 10;
349 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
350 const double invcm = 1. / CLHEP::cm;
351 double r = hitPoint.perp() * invcm;
352 double z =
std::abs(hitPoint.z()) * invcm;
353 double dose_acquired = 0.;
365 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 366 <<
"r= " <<
r <<
", z= " <<
z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
373 G4String nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
375 <<
" for Track " <<
track->GetTrackID() <<
" (" 376 <<
track->GetDefinition()->GetParticleName() <<
")";
381 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
382 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 383 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
392 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
400 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
401 auto const theTrack = aStep->GetTrack();
406 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 407 << aStep->GetTrack()->GetTrackID() <<
" (" 408 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
420 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 421 << aStep->GetTrack()->GetTrackID() <<
" (" 422 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
431 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 432 << aStep->GetTrack()->GetTrackID() <<
" (" 433 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
442 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 443 << aStep->GetTrack()->GetTrackID() <<
" (" 444 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
450 destep = aStep->GetTotalEnergyDeposit();
452 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
467 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
470 <<
" lay: " << lay - 2;
475 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
500 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
502 double ke = theTrack->GetKineticEnergy();
503 if (
pdg / 1000000000 == 1 && (
pdg / 10000) % 100 > 0 && (
pdg / 10) % 100 > 0 && ke <
kmaxIon)
514 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
520 double wt2 = theTrack->GetWeight();
521 double edep =
weight_ * wt1 * destep;
527 <<
" weight= " <<
weight_ <<
" wt0= " << wt0 <<
" wt1= " << wt1 <<
" wt2= " << wt2;
533 auto const prePoint = aStep->GetPreStepPoint();
534 auto const touch = prePoint->GetTouchable();
535 const G4ThreeVector& hitPoint = prePoint->GetPosition();
537 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
538 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
539 int det = (touch->GetReplicaNumber(1)) / 1000;
546 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
558 switch (theId.subdetId()) {
595 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 596 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
602 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
603 int levels = (touch->GetHistoryDepth()) + 1;
604 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
606 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[it])->GetLogicalVolume();
615 for (
const auto& nam :
hfNames)
616 if (
name == static_cast<G4String>(nam)) {
632 if (
name == static_cast<G4String>(nam)) {
639 for (
auto lvol :
pmtLV)
675 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
681 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
688 if (!isKilled ||
hits.empty()) {
697 auto const theTrack = aStep->GetTrack();
708 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 709 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 710 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
712 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
713 G4ThreeVector hitPoint =
hits[
i].position;
736 auto const theTrack = aStep->GetTrack();
749 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 750 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 751 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
754 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
755 G4ThreeVector hitPoint =
hits[
i].position;
773 if (!isKilled ||
hits.empty()) {
781 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 782 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
783 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
784 <<
" GeV in detector type " << det;
786 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
787 G4ThreeVector hitPoint =
hits[
i].position;
802 auto const preStepPoint = aStep->GetPreStepPoint();
803 auto const theTrack = aStep->GetTrack();
808 double etrack = preStepPoint->GetKineticEnergy();
811 primaryID = theTrack->GetTrackID();
813 primaryID = theTrack->GetParentID();
815 primaryID = theTrack->GetTrackID();
821 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
822 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
823 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
830 if (hitPoint.z() < 0)
833 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
834 <<
" depth " <<
depth;
836 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
850 double beta = preStepPoint->GetBeta();
851 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 852 << theTrack->GetDefinition()->GetParticleName() <<
" of " 853 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 861 auto const preStepPoint = aStep->GetPreStepPoint();
862 auto const theTrack = aStep->GetTrack();
867 double etrack = preStepPoint->GetKineticEnergy();
870 primaryID = theTrack->GetTrackID();
872 primaryID = theTrack->GetParentID();
874 primaryID = theTrack->GetTrackID();
880 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
881 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
882 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
889 if (hitPoint.z() < 0.)
892 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
893 <<
" depth " <<
depth;
895 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
912 double beta = preStepPoint->GetBeta();
913 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
914 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 915 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 931 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
934 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 935 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 936 << lay <<
") Weight " << wt;
954 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
959 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 967 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
968 static const unsigned int names = 10;
969 static const G4String modName[
names] = {
970 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
973 double depth = -2000;
975 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
976 G4String
name(static_cast<std::string>(dd4hep::dd::noNamespace(touch->GetVolume(
n)->GetName())));
981 if (
name == modName[
ii]) {
983 int dn = touch->GetHistoryDepth() -
n;
984 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
988 }
else if (
ii == 1) {
991 }
else if (
ii == 2) {
1008 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1016 int jd = 2 *
idx +
id - 7;
1017 if (jd >= 0 && jd < 4) {
1019 if (
hit_[jd] !=
nullptr)
1020 hit_[jd]->Fill(edep);
1021 if (
time_[jd] !=
nullptr)
1023 if (
dist_[jd] !=
nullptr)
1031 if (
hzvem !=
nullptr)
1040 if (
id.subdet == 4) {
1041 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1043 if (
id.
depth <= 2) {
1044 if (G4UniformRand() > 0.5)
1048 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1049 id.depth = (
depth_ == 0) ? 1 : 2;
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)
static bool isMuon(int pdgCode)
constexpr int zside() const
get the z-side of the cell (1/-1)
std::vector< std::string > fibreNames
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 uint32_t packHcalIndex(int det, int z, int depth, int eta, int phi, int lay)
std::unique_ptr< HcalNumberingFromDDD > numberingFromDDD
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 *> &)
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 getHitPMT(const G4Step *step)
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
double getResponseWt(const G4Track *)
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
std::vector< int > hfLevels_
bool isItFibre(const G4LogicalVolume *)
void setParameterized(bool val)