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" 59 hcalSimConstants_(hscs),
80 bool dd4hep =
p.getParameter<
bool>(
"g4GeometryDD4hepSource");
82 useBirk = m_HC.getParameter<
bool>(
"UseBirkLaw");
83 double bunit = (
CLHEP::g / (CLHEP::MeV * CLHEP::cm2));
84 birk1 = m_HC.getParameter<
double>(
"BirkC1") * bunit;
85 birk2 = m_HC.getParameter<
double>(
"BirkC2");
86 birk3 = m_HC.getParameter<
double>(
"BirkC3");
88 useParam = m_HC.getParameter<
bool>(
"UseParametrize");
89 testNumber = m_HC.getParameter<
bool>(
"TestNumberingScheme");
90 neutralDensity = m_HC.getParameter<
bool>(
"doNeutralDensityFilter");
91 usePMTHit = m_HC.getParameter<
bool>(
"UsePMTHits");
92 betaThr = m_HC.getParameter<
double>(
"BetaThreshold");
93 eminHitHB = m_HC.getParameter<
double>(
"EminHitHB") * MeV;
94 eminHitHE = m_HC.getParameter<
double>(
"EminHitHE") * MeV;
95 eminHitHO = m_HC.getParameter<
double>(
"EminHitHO") * MeV;
96 eminHitHF = m_HC.getParameter<
double>(
"EminHitHF") * MeV;
99 agingFlagHB = m_HC.getParameter<
bool>(
"HBDarkening");
100 agingFlagHE = m_HC.getParameter<
bool>(
"HEDarkening");
101 bool agingFlagHF = m_HC.getParameter<
bool>(
"HFDarkening");
102 useHF = m_HC.getUntrackedParameter<
bool>(
"UseHF",
true);
103 bool forTBHC = m_HC.getUntrackedParameter<
bool>(
"ForTBHCAL",
false);
104 bool forTBH2 = m_HC.getUntrackedParameter<
bool>(
"ForTBH2",
false);
105 useLayerWt = m_HC.getUntrackedParameter<
bool>(
"UseLayerWt",
false);
107 testNS_ = m_HC.getUntrackedParameter<
bool>(
"TestNS",
false);
109 applyFidCut = m_HF.getParameter<
bool>(
"ApplyFiducialCut");
110 bool dumpGeom = m_HC.getUntrackedParameter<
bool>(
"DumpGeometry",
false);
113 edm::LogVerbatim(
"HcalSim") <<
"***************************************************" 115 <<
"* Constructing a HCalSD with name " <<
name <<
"\n" 117 <<
"***************************************************";
120 <<
"\n Use of shower parametrization set to " <<
useParam 122 <<
"\n Use PMT Hit is set to " <<
usePMTHit <<
" with beta Threshold " <<
betaThr 124 <<
"\n Use of Birks law is set to " <<
useBirk 125 <<
" with three constants kB = " <<
birk1 / bunit <<
", C1 = " <<
birk2 126 <<
", C2 = " <<
birk3;
130 <<
" ions below " <<
kmaxIon <<
" MeV\n" 134 <<
" Flag (HB) " <<
agingFlagHB <<
" Flag (HF) " << agingFlagHF <<
"\n" 140 matNames.emplace_back(
"Scintillator");
156 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
158 const G4LogicalVolume* lv;
175 std::stringstream ss0;
176 ss0 <<
"HCalSD: Names to be tested for Volume = HF has " <<
hfNames.size() <<
" elements";
178 int addlevel =
dd4hep ? 1 : 0;
179 for (
unsigned int i = 0;
i <
hfNames.size(); ++
i) {
180 G4String namv(static_cast<std::string>(dd4hep::dd::noNamespace(
hfNames[
i])));
182 for (
auto lvol : *lvs) {
183 if (dd4hep::dd::noNamespace(lvol->GetName()) == namv) {
188 hfLV.emplace_back(lv);
191 ss0 <<
"\n HF[" <<
i <<
"] = " << namv <<
" LV " << lv <<
" at level " << (
temp[
i] + addlevel);
209 const G4MaterialTable* matTab = G4Material::GetMaterialTable();
210 std::vector<G4Material*>::const_iterator matite;
212 const G4Material* mat =
nullptr;
213 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
214 if (static_cast<std::string>(dd4hep::dd::noNamespace((*matite)->GetName())) == namx) {
222 std::stringstream ss1;
223 for (
unsigned int i = 0;
i <
matNames.size(); ++
i) {
224 if (
i / 10 * 10 ==
i) {
229 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Material names for HCAL: " << ss1.str();
239 std::stringstream ss2;
240 for (
unsigned int ig = 0; ig <
gpar.size(); ig++) {
241 ss2 <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig] / cm <<
" cm";
244 <<
" gpar (cm)" << ss2.str();
251 for (
int i = 0;
i < 9; ++
i) {
262 if (
tfile.isAvailable()) {
263 static const char*
const labels[] = {
"HB",
274 for (
int i = 0;
i < 9; ++
i) {
276 sprintf(
name,
"HCalSDHit%d",
i);
278 sprintf(
title,
"Energy (MeV)");
280 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
282 sprintf(
name,
"HCalSDTime%d",
i);
284 sprintf(
title,
"Time (ns)");
286 time_[
i]->GetYaxis()->SetTitle(
"Hits");
287 sprintf(
title,
"Longitudinal profile in %s",
labels[
i]);
288 sprintf(
name,
"HCalSDDist%d",
i);
290 sprintf(
title,
"Distance (mm)");
292 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
295 hzvem = hcDir.
make<TH1F>(
"hzvem",
"Longitudinal Profile (EM Part)", 330, 0.0, 1650.0);
296 hzvem->GetXaxis()->SetTitle(
"Longitudinal Profile (EM Part)");
297 hzvhad = hcDir.
make<TH1F>(
"hzvhad",
"Longitudinal Profile (Had Part)", 330, 0.0, 1650.0);
298 hzvhad->GetXaxis()->SetTitle(
"Longitudinal Profile (Hadronic Part)");
303 std::unique_ptr<HcalNumberingFromDDD> hcn = std::make_unique<HcalNumberingFromDDD>(
hcalConstants_);
311 const std::vector<std::string>& lvnames,
312 std::vector<const G4LogicalVolume*>& lvvec) {
313 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
314 const G4LogicalVolume* lv;
315 std::stringstream ss3;
316 ss3 <<
"HCalSD: " << lvnames.size() <<
" names to be tested for Volume <" <<
value <<
">:";
317 for (
unsigned int i = 0;
i < lvnames.size(); ++
i) {
318 G4String namv(static_cast<std::string>(dd4hep::dd::noNamespace(lvnames[
i])));
320 for (
auto lvol : *lvs) {
321 if (dd4hep::dd::noNamespace(lvol->GetName()) == namv) {
326 lvvec.emplace_back(lv);
327 if (
i / 10 * 10 ==
i) {
336 auto const track = aStep->GetTrack();
337 depth_ = (aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber(0)) % 10;
350 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
351 const double invcm = 1. / CLHEP::cm;
352 double r = hitPoint.perp() * invcm;
353 double z =
std::abs(hitPoint.z()) * invcm;
354 double dose_acquired = 0.;
366 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 367 <<
"r= " <<
r <<
", z= " <<
z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
374 G4String nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
376 <<
" for Track " <<
track->GetTrackID() <<
" (" 377 <<
track->GetDefinition()->GetParticleName() <<
")";
382 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
383 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 384 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
393 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
401 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
402 auto const theTrack = aStep->GetTrack();
407 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 408 << aStep->GetTrack()->GetTrackID() <<
" (" 409 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
421 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 422 << aStep->GetTrack()->GetTrackID() <<
" (" 423 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
432 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 433 << aStep->GetTrack()->GetTrackID() <<
" (" 434 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
443 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 444 << aStep->GetTrack()->GetTrackID() <<
" (" 445 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
451 destep = aStep->GetTotalEnergyDeposit();
453 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
468 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
471 <<
" lay: " << lay - 2;
476 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
501 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
503 double ke = theTrack->GetKineticEnergy();
504 if (
pdg / 1000000000 == 1 && (
pdg / 10000) % 100 > 0 && (
pdg / 10) % 100 > 0 && ke <
kmaxIon)
515 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
521 double wt2 = theTrack->GetWeight();
522 double edep =
weight_ * wt1 * destep;
528 <<
" weight= " <<
weight_ <<
" wt0= " << wt0 <<
" wt1= " << wt1 <<
" wt2= " << wt2;
534 auto const prePoint = aStep->GetPreStepPoint();
535 auto const touch = prePoint->GetTouchable();
536 const G4ThreeVector& hitPoint = prePoint->GetPosition();
538 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
539 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
540 int det = (touch->GetReplicaNumber(1)) / 1000;
547 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
559 switch (theId.subdetId()) {
596 det = ((
pos.perp() >
minR) && (
pos.perp() < maxR)) ? 4 : 3;
627 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 628 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
634 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
635 int levels = (touch->GetHistoryDepth()) + 1;
636 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
638 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[it])->GetLogicalVolume();
647 for (
const auto& nam :
hfNames)
648 if (
name == static_cast<G4String>(nam)) {
664 if (
name == static_cast<G4String>(nam)) {
671 for (
auto lvol :
pmtLV)
707 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
713 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
720 if (!isKilled ||
hits.empty()) {
729 auto const theTrack = aStep->GetTrack();
740 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 741 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 742 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
744 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
745 G4ThreeVector hitPoint =
hits[
i].position;
768 auto const theTrack = aStep->GetTrack();
781 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 782 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 783 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
786 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
787 G4ThreeVector hitPoint =
hits[
i].position;
805 if (!isKilled ||
hits.empty()) {
813 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 814 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
815 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
816 <<
" GeV in detector type " << det;
818 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
819 G4ThreeVector hitPoint =
hits[
i].position;
834 auto const preStepPoint = aStep->GetPreStepPoint();
835 auto const theTrack = aStep->GetTrack();
840 double etrack = preStepPoint->GetKineticEnergy();
843 primaryID = theTrack->GetTrackID();
845 primaryID = theTrack->GetParentID();
847 primaryID = theTrack->GetTrackID();
853 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
854 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
855 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
862 if (hitPoint.z() < 0)
865 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
866 <<
" depth " <<
depth;
868 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
882 double beta = preStepPoint->GetBeta();
883 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 884 << theTrack->GetDefinition()->GetParticleName() <<
" of " 885 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 893 auto const preStepPoint = aStep->GetPreStepPoint();
894 auto const theTrack = aStep->GetTrack();
899 double etrack = preStepPoint->GetKineticEnergy();
902 primaryID = theTrack->GetTrackID();
904 primaryID = theTrack->GetParentID();
906 primaryID = theTrack->GetTrackID();
912 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
913 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
914 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
921 if (hitPoint.z() < 0.)
924 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
925 <<
" depth " <<
depth;
927 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
944 double beta = preStepPoint->GetBeta();
945 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
946 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 947 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 963 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
966 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 967 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 968 << lay <<
") Weight " << wt;
986 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
991 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 999 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1000 static const unsigned int names = 10;
1001 static const G4String modName[
names] = {
1002 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
1003 G4ThreeVector
local;
1005 double depth = -2000;
1007 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1008 G4String
name(static_cast<std::string>(dd4hep::dd::noNamespace(touch->GetVolume(
n)->GetName())));
1013 if (
name == modName[
ii]) {
1015 int dn = touch->GetHistoryDepth() -
n;
1016 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1020 }
else if (
ii == 1) {
1023 }
else if (
ii == 2) {
1040 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1048 int jd = 2 *
idx +
id - 7;
1049 if (jd >= 0 && jd < 4) {
1051 if (
hit_[jd] !=
nullptr)
1052 hit_[jd]->Fill(edep);
1053 if (
time_[jd] !=
nullptr)
1055 if (
dist_[jd] !=
nullptr)
1063 if (
hzvem !=
nullptr)
1072 if (
id.subdet == 4) {
1073 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1075 if (
id.
depth <= 2) {
1076 if (G4UniformRand() > 0.5)
1080 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1081 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)
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
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::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
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)