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()) {
587 det = ((
pos.perp() >
minR) && (
pos.perp() < maxR)) ? 4 : 3;
610 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 611 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
617 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
618 int levels = (touch->GetHistoryDepth()) + 1;
619 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
621 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[it])->GetLogicalVolume();
630 for (
const auto& nam :
hfNames)
631 if (
name == static_cast<G4String>(nam)) {
647 if (
name == static_cast<G4String>(nam)) {
654 for (
auto lvol :
pmtLV)
690 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
696 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
703 if (!isKilled ||
hits.empty()) {
712 auto const theTrack = aStep->GetTrack();
723 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 724 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 725 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
727 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
728 G4ThreeVector hitPoint =
hits[
i].position;
751 auto const theTrack = aStep->GetTrack();
764 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 765 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 766 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
769 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
770 G4ThreeVector hitPoint =
hits[
i].position;
788 if (!isKilled ||
hits.empty()) {
796 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 797 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
798 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
799 <<
" GeV in detector type " << det;
801 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
802 G4ThreeVector hitPoint =
hits[
i].position;
817 auto const preStepPoint = aStep->GetPreStepPoint();
818 auto const theTrack = aStep->GetTrack();
823 double etrack = preStepPoint->GetKineticEnergy();
826 primaryID = theTrack->GetTrackID();
828 primaryID = theTrack->GetParentID();
830 primaryID = theTrack->GetTrackID();
836 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
837 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
838 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
845 if (hitPoint.z() < 0)
848 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
849 <<
" depth " <<
depth;
851 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
865 double beta = preStepPoint->GetBeta();
866 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 867 << theTrack->GetDefinition()->GetParticleName() <<
" of " 868 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 876 auto const preStepPoint = aStep->GetPreStepPoint();
877 auto const theTrack = aStep->GetTrack();
882 double etrack = preStepPoint->GetKineticEnergy();
885 primaryID = theTrack->GetTrackID();
887 primaryID = theTrack->GetParentID();
889 primaryID = theTrack->GetTrackID();
895 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
896 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
897 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
904 if (hitPoint.z() < 0.)
907 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
908 <<
" depth " <<
depth;
910 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
927 double beta = preStepPoint->GetBeta();
928 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
929 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 930 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 946 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
949 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 950 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 951 << lay <<
") Weight " << wt;
969 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
974 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 982 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
983 static const unsigned int names = 10;
984 static const G4String modName[
names] = {
985 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
988 double depth = -2000;
990 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
991 G4String
name(static_cast<std::string>(dd4hep::dd::noNamespace(touch->GetVolume(
n)->GetName())));
996 if (
name == modName[
ii]) {
998 int dn = touch->GetHistoryDepth() -
n;
999 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1003 }
else if (
ii == 1) {
1006 }
else if (
ii == 2) {
1023 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1031 int jd = 2 *
idx +
id - 7;
1032 if (jd >= 0 && jd < 4) {
1034 if (
hit_[jd] !=
nullptr)
1035 hit_[jd]->Fill(edep);
1036 if (
time_[jd] !=
nullptr)
1038 if (
dist_[jd] !=
nullptr)
1046 if (
hzvem !=
nullptr)
1055 if (
id.subdet == 4) {
1056 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1058 if (
id.
depth <= 2) {
1059 if (G4UniformRand() > 0.5)
1063 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1064 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
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
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 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
static constexpr double maxRoff_
std::vector< int > hfLevels_
bool isItFibre(const G4LogicalVolume *)
void setParameterized(bool val)