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;
545 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Check for " << det <<
":" <<
depth <<
":" << lay <<
" ID " << std::hex
547 int det0,
z0, depth0, eta0, phi0, lay0(-1);
556 depth0 = hcid0.
depth();
558 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: det|z|depth|eta|phi|lay " << det0 <<
":" <<
z0 <<
":" << depth0 <<
":" 559 << eta0 <<
":" << phi0 <<
":" << lay0;
568 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
580 switch (theId.subdetId()) {
619 det = ((
pos.perp() > minR) && (
pos.perp() < maxR)) ? 4 : 3;
648 <<
" does not match one from relabller for " <<
tmp.subdet <<
":" <<
tmp.etaR <<
":" 649 <<
tmp.phi <<
":" <<
tmp.phis <<
":" <<
tmp.depth <<
":" <<
tmp.lay << std::endl;
655 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
656 int levels = (touch->GetHistoryDepth()) + 1;
657 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
659 const G4LogicalVolume* lv = touch->GetVolume(
levels -
hfLevels[it])->GetLogicalVolume();
668 for (
const auto& nam :
hfNames)
669 if (
name == static_cast<G4String>(nam)) {
685 if (
name == static_cast<G4String>(nam)) {
692 for (
auto lvol :
pmtLV)
728 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
734 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
741 if (!isKilled ||
hits.empty()) {
750 auto const theTrack = aStep->GetTrack();
761 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " <<
hits.size() <<
" hits for " << GetName() <<
" of " 762 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 763 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV";
765 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
766 G4ThreeVector hitPoint =
hits[
i].position;
789 auto const theTrack = aStep->GetTrack();
802 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " <<
hits.size() <<
" hits for " << GetName() <<
" of " 803 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 804 << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV <<
" GeV in detector type " << det;
807 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
808 G4ThreeVector hitPoint =
hits[
i].position;
826 if (!isKilled ||
hits.empty()) {
834 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " <<
hits.size() <<
" hits for " << GetName() <<
" of " 835 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
836 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy() / GeV
837 <<
" GeV in detector type " << det;
839 for (
unsigned int i = 0;
i <
hits.size(); ++
i) {
840 G4ThreeVector hitPoint =
hits[
i].position;
855 auto const preStepPoint = aStep->GetPreStepPoint();
856 auto const theTrack = aStep->GetTrack();
861 double etrack = preStepPoint->GetKineticEnergy();
864 primaryID = theTrack->GetTrackID();
866 primaryID = theTrack->GetParentID();
868 primaryID = theTrack->GetTrackID();
874 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
875 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
876 double phi = (
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
883 if (hitPoint.z() < 0)
886 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
887 <<
" depth " <<
depth;
889 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
903 double beta = preStepPoint->GetBeta();
904 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 905 << theTrack->GetDefinition()->GetParticleName() <<
" of " 906 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 914 auto const preStepPoint = aStep->GetPreStepPoint();
915 auto const theTrack = aStep->GetTrack();
920 double etrack = preStepPoint->GetKineticEnergy();
923 primaryID = theTrack->GetTrackID();
925 primaryID = theTrack->GetParentID();
927 primaryID = theTrack->GetTrackID();
933 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
934 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
935 double phi =
rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
942 if (hitPoint.z() < 0.)
945 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " <<
phi / deg
946 <<
" depth " <<
depth;
948 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
965 double beta = preStepPoint->GetBeta();
966 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
967 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 968 << preStepPoint->GetKineticEnergy() / GeV <<
" GeV with velocity " <<
beta <<
" UnitID " 984 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
987 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " <<
entry <<
" ID " << std::hex <<
id 988 <<
std::dec <<
" (" << det <<
"/" <<
zside <<
"/1/" << etaR <<
"/" <<
phi <<
"/" 989 << lay <<
") Weight " << wt;
1007 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
1012 <<
tmp.zside <<
"/1/" <<
tmp.etaR <<
"/" <<
tmp.phis <<
"/" <<
tmp.lay <<
") Weight " 1020 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1021 static const unsigned int names = 10;
1022 static const G4String modName[
names] = {
1023 "HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M",
"MBBT_R1PX",
"MBBT_R1MX"};
1024 G4ThreeVector
local;
1026 double depth = -2000;
1028 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1029 G4String
name(static_cast<std::string>(dd4hep::dd::noNamespace(touch->GetVolume(
n)->GetName())));
1034 if (
name == modName[
ii]) {
1036 int dn = touch->GetHistoryDepth() -
n;
1037 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1041 }
else if (
ii == 1) {
1044 }
else if (
ii == 2) {
1061 <<
" depth " <<
depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1069 int jd = 2 *
idx +
id - 7;
1070 if (jd >= 0 && jd < 4) {
1072 if (
hit_[jd] !=
nullptr)
1073 hit_[jd]->Fill(edep);
1074 if (
time_[jd] !=
nullptr)
1076 if (
dist_[jd] !=
nullptr)
1084 if (
hzvem !=
nullptr)
1093 if (
id.subdet == 4) {
1094 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1096 if (
id.
depth <= 2) {
1097 if (G4UniformRand() > 0.5)
1101 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1102 id.depth = (
depth_ == 0) ? 1 : 2;
1124 int level = ((touch->GetHistoryDepth()) + 1);
1130 G4VPhysicalVolume*
pv = touch->GetVolume(
i);
1132 G4int copyno = touch->GetReplicaNumber(
i);
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 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
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)
constexpr int depth() const
get the tower depth