20 #include "G4LogicalVolumeStore.hh" 21 #include "G4LogicalVolume.hh" 25 #include "G4SystemOfUnits.hh" 26 #include "G4PhysicalConstants.hh" 27 #include "Randomize.hh" 58 hcalSimConstants_(hscs),
79 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) {
181 for (
auto lvol : *lvs) {
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) {
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) {
319 for (
auto lvol : *lvs) {
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;
342 << (aStep->GetPreStepPoint()->GetTouchable()->GetVolume(0)->GetName())
352 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
353 const double invcm = 1. / CLHEP::cm;
354 double r = hitPoint.perp() * invcm;
355 double z =
std::abs(hitPoint.z()) * invcm;
356 double dose_acquired = 0.;
368 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 369 <<
"r= " <<
r <<
", z= " <<
z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
376 G4String nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
378 <<
" for Track " <<
track->GetTrackID() <<
" (" 379 <<
track->GetDefinition()->GetParticleName() <<
")";
384 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
385 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 386 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
395 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
403 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
404 auto const theTrack = aStep->GetTrack();
409 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 410 << aStep->GetTrack()->GetTrackID() <<
" (" 411 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
423 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 424 << aStep->GetTrack()->GetTrackID() <<
" (" 425 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
434 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 435 << aStep->GetTrack()->GetTrackID() <<
" (" 436 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
445 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 446 << aStep->GetTrack()->GetTrackID() <<
" (" 447 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
453 destep = aStep->GetTotalEnergyDeposit();
455 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
470 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
473 <<
" lay: " << lay - 2;
478 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
503 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
505 double ke = theTrack->GetKineticEnergy();
506 if (
pdg / 1000000000 == 1 && (
pdg / 10000) % 100 > 0 && (
pdg / 10) % 100 > 0 && ke <
kmaxIon)
517 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
523 double wt2 = theTrack->GetWeight();
524 double edep =
weight_ * wt1 * destep;
530 <<
" weight= " <<
weight_ <<
" wt0= " << wt0 <<
" wt1= " << wt1 <<
" wt2= " << wt2;
536 auto const prePoint = aStep->GetPreStepPoint();
537 auto const touch = prePoint->GetTouchable();
538 const G4ThreeVector& hitPoint = prePoint->GetPosition();
540 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
541 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
542 int det = (touch->GetReplicaNumber(1)) / 1000;
547 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Check for " << det <<
":" <<
depth <<
":" << lay <<
" ID " << std::hex
549 int det0,
z0, depth0, eta0, phi0, lay0(-1);
558 depth0 = hcid0.
depth();
560 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: det|z|depth|eta|phi|lay " << det0 <<
":" <<
z0 <<
":" << depth0 <<
":" 561 << eta0 <<
":" << phi0 <<
":" << lay0;
570 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
582 switch (theId.subdetId()) {
621 det = ((
pos.perp() > minR) && (
pos.perp() < maxR)) ? 4 : 3;
650 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 651 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
657 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
658 int levels = (touch->GetHistoryDepth()) + 1;
661 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[
it])->GetLogicalVolume();
670 for (
const auto& nam :
hfNames)
671 if (
name == static_cast<G4String>(nam)) {
687 if (
name == static_cast<G4String>(nam)) {
694 for (
auto lvol :
pmtLV)
730 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
736 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
743 if (!isKilled ||
hits.empty()) {
752 auto const theTrack = aStep->GetTrack();
763 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 764 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 765 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
767 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
768 G4ThreeVector hitPoint =
hits[
i].position;
791 auto const theTrack = aStep->GetTrack();
804 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 805 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 806 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
809 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
810 G4ThreeVector hitPoint =
hits[
i].position;
828 if (!isKilled ||
hits.empty()) {
836 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 837 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
838 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
839 <<
" GeV in detector type " << det;
841 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
842 G4ThreeVector hitPoint =
hits[
i].position;
857 auto const preStepPoint = aStep->GetPreStepPoint();
858 auto const theTrack = aStep->GetTrack();
863 double etrack = preStepPoint->GetKineticEnergy();
866 primaryID = theTrack->GetTrackID();
868 primaryID = theTrack->GetParentID();
870 primaryID = theTrack->GetTrackID();
876 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
877 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
878 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
885 if (hitPoint.z() < 0)
888 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
889 <<
" depth " <<
depth;
891 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
905 double beta = preStepPoint->GetBeta();
906 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 907 << theTrack->GetDefinition()->GetParticleName() <<
" of " 908 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 916 auto const preStepPoint = aStep->GetPreStepPoint();
917 auto const theTrack = aStep->GetTrack();
922 double etrack = preStepPoint->GetKineticEnergy();
925 primaryID = theTrack->GetTrackID();
927 primaryID = theTrack->GetParentID();
929 primaryID = theTrack->GetTrackID();
935 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
936 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
937 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
944 if (hitPoint.z() < 0.)
947 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
948 <<
" depth " <<
depth;
950 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
967 double beta = preStepPoint->GetBeta();
968 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
969 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 970 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 986 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
989 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 990 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 991 << lay <<
") Weight " << wt;
1009 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
1014 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 1022 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1023 static const unsigned int names = 10;
1024 static const G4String modName[
names] = {
1025 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
1026 G4ThreeVector
local;
1028 double depth = -2000;
1030 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1036 if (
name == modName[
ii]) {
1038 int dn = touch->GetHistoryDepth() -
n;
1039 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1043 }
else if (
ii == 1) {
1046 }
else if (
ii == 2) {
1063 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1071 int jd = 2 *
idx +
id - 7;
1072 if (jd >= 0 && jd < 4) {
1074 if (
hit_[jd] !=
nullptr)
1075 hit_[jd]->Fill(edep);
1076 if (
time_[jd] !=
nullptr)
1078 if (
dist_[jd] !=
nullptr)
1086 if (
hzvem !=
nullptr)
1095 if (
id.subdet == 4) {
1096 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1098 if (
id.
depth <= 2) {
1099 if (G4UniformRand() > 0.5)
1103 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1104 id.depth = (
depth_ == 0) ? 1 : 2;
1126 int level = ((touch->GetHistoryDepth()) + 1);
1132 G4VPhysicalVolume*
pv = touch->GetVolume(
i);
1134 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