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;
343 << (aStep->GetPreStepPoint()->GetTouchable()->GetVolume(0)->GetName())
353 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
354 const double invcm = 1. / CLHEP::cm;
355 double r = hitPoint.perp() * invcm;
356 double z =
std::abs(hitPoint.z()) * invcm;
357 double dose_acquired = 0.;
369 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 370 <<
"r= " <<
r <<
", z= " <<
z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
377 G4String nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
379 <<
" for Track " <<
track->GetTrackID() <<
" (" 380 <<
track->GetDefinition()->GetParticleName() <<
")";
385 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
386 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 387 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
396 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
404 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
405 auto const theTrack = aStep->GetTrack();
410 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 411 << aStep->GetTrack()->GetTrackID() <<
" (" 412 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
424 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 425 << aStep->GetTrack()->GetTrackID() <<
" (" 426 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
435 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 436 << aStep->GetTrack()->GetTrackID() <<
" (" 437 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
446 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 447 << aStep->GetTrack()->GetTrackID() <<
" (" 448 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
454 destep = aStep->GetTotalEnergyDeposit();
456 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
471 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
474 <<
" lay: " << lay - 2;
479 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
504 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
506 double ke = theTrack->GetKineticEnergy();
507 if (
pdg / 1000000000 == 1 && (
pdg / 10000) % 100 > 0 && (
pdg / 10) % 100 > 0 && ke <
kmaxIon)
518 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
524 double wt2 = theTrack->GetWeight();
525 double edep =
weight_ * wt1 * destep;
531 <<
" weight= " <<
weight_ <<
" wt0= " << wt0 <<
" wt1= " << wt1 <<
" wt2= " << wt2;
537 auto const prePoint = aStep->GetPreStepPoint();
538 auto const touch = prePoint->GetTouchable();
539 const G4ThreeVector& hitPoint = prePoint->GetPosition();
541 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
542 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
543 int det = (touch->GetReplicaNumber(1)) / 1000;
548 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Check for " << det <<
":" <<
depth <<
":" << lay <<
" ID " << std::hex
550 int det0,
z0, depth0, eta0, phi0, lay0(-1);
559 depth0 = hcid0.
depth();
561 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: det|z|depth|eta|phi|lay " << det0 <<
":" <<
z0 <<
":" << depth0 <<
":" 562 << eta0 <<
":" << phi0 <<
":" << lay0;
571 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
583 switch (theId.subdetId()) {
622 det = ((
pos.perp() > minR) && (
pos.perp() < maxR)) ? 4 : 3;
651 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 652 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
658 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
659 int levels = (touch->GetHistoryDepth()) + 1;
660 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
662 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[it])->GetLogicalVolume();
671 for (
const auto& nam :
hfNames)
672 if (
name == static_cast<G4String>(nam)) {
688 if (
name == static_cast<G4String>(nam)) {
695 for (
auto lvol :
pmtLV)
731 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
737 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
744 if (!isKilled ||
hits.empty()) {
753 auto const theTrack = aStep->GetTrack();
764 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 765 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 766 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
768 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
769 G4ThreeVector hitPoint =
hits[
i].position;
792 auto const theTrack = aStep->GetTrack();
805 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 806 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 807 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
810 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
811 G4ThreeVector hitPoint =
hits[
i].position;
829 if (!isKilled ||
hits.empty()) {
837 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 838 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
839 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
840 <<
" GeV in detector type " << det;
842 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
843 G4ThreeVector hitPoint =
hits[
i].position;
858 auto const preStepPoint = aStep->GetPreStepPoint();
859 auto const theTrack = aStep->GetTrack();
864 double etrack = preStepPoint->GetKineticEnergy();
867 primaryID = theTrack->GetTrackID();
869 primaryID = theTrack->GetParentID();
871 primaryID = theTrack->GetTrackID();
877 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
878 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
879 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
886 if (hitPoint.z() < 0)
889 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
890 <<
" depth " <<
depth;
892 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
906 double beta = preStepPoint->GetBeta();
907 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 908 << theTrack->GetDefinition()->GetParticleName() <<
" of " 909 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 917 auto const preStepPoint = aStep->GetPreStepPoint();
918 auto const theTrack = aStep->GetTrack();
923 double etrack = preStepPoint->GetKineticEnergy();
926 primaryID = theTrack->GetTrackID();
928 primaryID = theTrack->GetParentID();
930 primaryID = theTrack->GetTrackID();
936 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
937 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
938 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
945 if (hitPoint.z() < 0.)
948 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
949 <<
" depth " <<
depth;
951 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
968 double beta = preStepPoint->GetBeta();
969 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
970 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 971 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 987 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
990 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 991 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 992 << lay <<
") Weight " << wt;
1010 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
1015 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 1023 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1024 static const unsigned int names = 10;
1025 static const G4String modName[
names] = {
1026 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
1027 G4ThreeVector
local;
1029 double depth = -2000;
1031 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1032 G4String
name(static_cast<std::string>(dd4hep::dd::noNamespace(touch->GetVolume(
n)->GetName())));
1037 if (
name == modName[
ii]) {
1039 int dn = touch->GetHistoryDepth() -
n;
1040 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1044 }
else if (
ii == 1) {
1047 }
else if (
ii == 2) {
1064 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1072 int jd = 2 *
idx +
id - 7;
1073 if (jd >= 0 && jd < 4) {
1075 if (
hit_[jd] !=
nullptr)
1076 hit_[jd]->Fill(edep);
1077 if (
time_[jd] !=
nullptr)
1079 if (
dist_[jd] !=
nullptr)
1087 if (
hzvem !=
nullptr)
1096 if (
id.subdet == 4) {
1097 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1099 if (
id.
depth <= 2) {
1100 if (G4UniformRand() > 0.5)
1104 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1105 id.depth = (
depth_ == 0) ? 1 : 2;
1127 int level = ((touch->GetHistoryDepth()) + 1);
1133 G4VPhysicalVolume*
pv = touch->GetVolume(
i);
1135 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::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