27 #include "G4LogicalVolumeStore.hh" 28 #include "G4LogicalVolume.hh" 32 #include "G4SystemOfUnits.hh" 33 #include "G4PhysicalConstants.hh" 34 #include "Randomize.hh" 100 bool agingFlagHF = m_HC.
getParameter<
bool>(
"HFDarkening");
107 applyFidCut = m_HF.getParameter<
bool>(
"ApplyFiducialCut");
110 edm::LogVerbatim(
"HcalSim") <<
"***************************************************" 112 <<
"* Constructing a HCalSD with name " << name <<
"\n" 114 <<
"***************************************************";
116 edm::LogVerbatim(
"HcalSim") <<
"HCalSD:: Use of HF code is set to " << useHF
117 <<
"\nUse of shower parametrization set to " << useParam
118 <<
"\nUse of shower library is set to " << useShowerLibrary <<
"\nUse PMT Hit is set to " 119 << usePMTHit <<
" with beta Threshold " << betaThr <<
"\nUSe of FibreBundle Hit set to " 120 << useFibreBundle <<
"\n Use of Birks law is set to " << useBirk
121 <<
" with three constants kB = " << birk1 <<
", C1 = " << birk2 <<
", C2 = " <<
birk3;
125 <<
" ions below " <<
kmaxIon <<
" MeV\n" 126 <<
" Threshold for storing hits in HB: " << eminHitHB <<
" HE: " << eminHitHE
127 <<
" HO: " << eminHitHO <<
" HF: " << eminHitHF <<
"\n" 128 <<
"Delivered luminosity for Darkening " << deliveredLumi <<
" Flag (HE) " << agingFlagHE
129 <<
" Flag (HB) " << agingFlagHB <<
" Flag (HF) " << agingFlagHF <<
"\n" 130 <<
"Application of Fiducial Cut " << applyFidCut
131 <<
"Flag for test number|neutral density filter " << testNumber <<
" " <<
neutralDensity;
134 if (testNumber || forTBH2) {
144 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
146 const G4LogicalVolume* lv;
153 if (useShowerLibrary) {
160 attribute =
"Volume";
169 unsigned int nhf =
hfNames.size();
170 std::stringstream ss;
171 ss <<
"HCalSD: Names to be tested for " << attribute <<
" = " << value <<
" has " << nhf <<
" elements";
172 for (
unsigned int i = 0;
i < nhf; ++
i) {
175 for (
auto lvol : *lvs) {
176 if (lvol->GetName() == namv) {
182 int level =
static_cast<int>(temp[
i]);
184 ss <<
"\n HF[" <<
i <<
"] = " << namv <<
" LV " <<
hfLV[
i] <<
" at level " <<
hfLevels[
i];
190 std::vector<G4String> tempNames;
197 const G4MaterialTable* matTab = G4Material::GetMaterialTable();
198 std::vector<G4Material*>::const_iterator matite;
199 attribute =
"OnlyForHcalSimNumbering";
210 for (
unsigned int i = 0;
i <
matNames.size(); ++
i) {
219 const G4Material* mat =
nullptr;
220 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
221 if ((*matite)->GetName() == namx) {
232 std::stringstream sss;
233 for (
unsigned int i = 0;
i <
matNames.size(); ++
i) {
234 if (
i / 10 * 10 ==
i) {
239 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Material names for " << attribute <<
" = " << name <<
":" << sss.str();
245 for (
int i = 0;
i < 9; ++
i) {
257 static const char*
const labels[] = {
"HB",
267 char name[20],
title[60];
268 for (
int i = 0;
i < 9; ++
i) {
269 sprintf(title,
"Hit energy in %s", labels[
i]);
270 sprintf(name,
"HCalSDHit%d", i);
272 sprintf(title,
"Energy (MeV)");
273 hit_[
i]->GetXaxis()->SetTitle(title);
274 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
275 sprintf(title,
"Time of the hit in %s", labels[i]);
276 sprintf(name,
"HCalSDTime%d", i);
278 sprintf(title,
"Time (ns)");
279 time_[
i]->GetXaxis()->SetTitle(title);
280 time_[
i]->GetYaxis()->SetTitle(
"Hits");
281 sprintf(title,
"Longitudinal profile in %s", labels[i]);
282 sprintf(name,
"HCalSDDist%d", i);
284 sprintf(title,
"Distance (mm)");
285 dist_[
i]->GetXaxis()->SetTitle(title);
286 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
288 if (useHF && (!useParam)) {
289 hzvem = hcDir.
make<TH1F>(
"hzvem",
"Longitudinal Profile (EM Part)", 330, 0.0, 1650.0);
290 hzvem->GetXaxis()->SetTitle(
"Longitudinal Profile (EM Part)");
291 hzvhad = hcDir.
make<TH1F>(
"hzvhad",
"Longitudinal Profile (Had Part)", 330, 0.0, 1650.0);
292 hzvhad->GetXaxis()->SetTitle(
"Longitudinal Profile (Hadronic Part)");
301 std::vector<const G4LogicalVolume*>& lvvec,
302 std::vector<G4String>& lvnames) {
303 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
304 const G4LogicalVolume* lv;
310 unsigned int nvol = lvnames.size();
311 std::stringstream ss;
312 ss <<
"HCalSD: " << nvol <<
" names to be tested for " << attribute <<
" <" << value <<
">:";
313 for (
unsigned int i = 0;
i < nvol; ++
i) {
314 G4String namv = lvnames[
i];
316 for (
auto lvol : *lvs) {
317 if (lvol->GetName() == namv) {
323 if (
i / 10 * 10 ==
i) {
332 auto const track = aStep->GetTrack();
333 depth_ = (aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber(0)) % 10;
339 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
340 const double invcm = 1. / CLHEP::cm;
341 double r = hitPoint.perp() * invcm;
342 double z =
std::abs(hitPoint.z()) * invcm;
343 double dose_acquired = 0.;
355 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 356 <<
"r= " << r <<
", z= " << z <<
" Dose= " << dose_acquired <<
" weight= " <<
weight_;
363 G4String nameVolume = lv->GetName();
365 <<
" for Track " <<
track->GetTrackID() <<
" (" 366 <<
track->GetDefinition()->GetParticleName() <<
")";
371 auto nameVolume = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
372 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Starts shower library from " << nameVolume <<
" for Track " 373 <<
track->GetTrackID() <<
" (" <<
track->GetDefinition()->GetParticleName() <<
")";
382 <<
track->GetDefinition()->GetParticleName() <<
") kill= " << kill
390 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
391 auto const theTrack = aStep->GetTrack();
396 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName() <<
" for track " 397 << aStep->GetTrack()->GetTrackID() <<
" (" 398 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
410 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " << lv->GetName() <<
" for Track " 411 << aStep->GetTrack()->GetTrackID() <<
" (" 412 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
421 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " << lv->GetName() <<
" for track " 422 << aStep->GetTrack()->GetTrackID() <<
" (" 423 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
432 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " << lv->GetName() <<
" for track " 433 << aStep->GetTrack()->GetTrackID() <<
" (" 434 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
440 destep = aStep->GetTotalEnergyDeposit();
442 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
444 int det(0), ieta(0),
phi(0),
z(0), lay,
depth(-1);
457 lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
459 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: det: " << det <<
" ieta: " << ieta <<
" iphi: " <<
phi <<
" zside " <<
z 460 <<
" lay: " << lay - 2;
465 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
490 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
492 double ke = theTrack->GetKineticEnergy();
493 if (pdg / 1000000000 == 1 && (pdg / 10000) % 100 > 0 && (pdg / 10) % 100 > 0 && ke <
kmaxIon)
503 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
508 double wt2 = theTrack->GetWeight();
509 double edep =
weight_ * wt1 * destep;
515 <<
" weight= " <<
weight_ <<
" wt1= " << wt1 <<
" wt2= " << wt2;
521 auto const prePoint = aStep->GetPreStepPoint();
522 auto const touch = prePoint->GetTouchable();
523 const G4ThreeVector& hitPoint = prePoint->GetPosition();
525 int depth = (touch->GetReplicaNumber(0)) % 10 + 1;
526 int lay = (touch->GetReplicaNumber(0) / 10) % 100 + 1;
527 int det = (touch->GetReplicaNumber(1)) / 1000;
533 if (scheme !=
nullptr) {
534 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
546 edm::LogError(
"HcalSim") <<
"HCalSD : Cannot find HcalDDDSimConstant";
547 throw cms::Exception(
"Unknown",
"HCalSD") <<
"Cannot find HcalDDDSimConstant" 555 std::stringstream sss;
556 for (
unsigned int ig = 0; ig <
gpar.size(); ig++) {
557 sss <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig] / cm <<
" cm";
593 switch (theId.subdetId()) {
630 <<
" does not match one from relabller for " << tmp.
subdet <<
":" << tmp.
etaR <<
":" 631 << tmp.
phi <<
":" << tmp.
phis <<
":" << tmp.
depth <<
":" << tmp.
lay << std::endl;
645 const std::vector<double>& fvec = value.
doubles();
646 int nval = fvec.size();
648 edm::LogError(
"HcalSim") <<
"HCalSD : # of " << str <<
" bins " << nval <<
" < 2 ==> illegal";
649 throw cms::Exception(
"Unknown",
"HCalSD") <<
"nval < 2 for array " << str <<
"\n";
655 throw cms::Exception(
"Unknown",
"HCalSD") <<
"cannot get array " << str <<
"\n";
660 std::vector<G4String>
tmp;
666 for (
unsigned int i = 0;
i < tmp.size(); ++
i) {
667 if (!strcmp(tmp[
i].c_str(), log.
name().
name().c_str())) {
680 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
681 int levels = (touch->GetHistoryDepth()) + 1;
682 for (
unsigned int it = 0; it <
hfNames.size(); ++it) {
684 const G4LogicalVolume* lv = touch->GetVolume(levels -
hfLevels[it])->GetLogicalVolume();
717 for (
auto lvol :
pmtLV)
753 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt <<
" for hit point " << hitPoint;
759 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint <<
" return flag " <<
flag;
766 if (!isKilled || hits.empty()) {
775 auto const theTrack = aStep->GetTrack();
786 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary " << hits.size() <<
" hits for " << GetName() <<
" of " 787 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 788 << aStep->GetPreStepPoint()->GetKineticEnergy() /
GeV <<
" GeV";
790 for (
unsigned int i = 0;
i < hits.size(); ++
i) {
791 G4ThreeVector hitPoint = hits[
i].position;
793 int depth = hits[
i].depth;
794 double time = hits[
i].time;
795 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
814 auto const theTrack = aStep->GetTrack();
827 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::hitForFibre " << hits.size() <<
" hits for " << GetName() <<
" of " 828 << primaryID <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 829 << preStepPoint->GetKineticEnergy() /
GeV <<
" GeV in detector type " << det;
832 for (
unsigned int i = 0;
i < hits.size(); ++
i) {
833 G4ThreeVector hitPoint = hits[
i].position;
835 int depth = hits[
i].depth;
836 double time = hits[
i].time;
837 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
841 bool emType = (
edepositEM > 0.) ?
true :
false;
851 if (!isKilled || hits.empty()) {
859 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " << hits.size() <<
" hits for " << GetName() <<
" of " 860 << primaryID <<
" with " << aStep->GetTrack()->GetDefinition()->GetParticleName()
861 <<
" of " << preStepPoint->GetKineticEnergy() /
GeV <<
" GeV in detector type " << det;
863 for (
unsigned int i = 0;
i < hits.size(); ++
i) {
864 G4ThreeVector hitPoint = hits[
i].position;
865 int depth = hits[
i].depth;
866 double time = hits[
i].time;
867 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
879 auto const preStepPoint = aStep->GetPreStepPoint();
880 auto const theTrack = aStep->GetTrack();
885 double etrack = preStepPoint->GetKineticEnergy();
888 primaryID = theTrack->GetTrackID();
890 primaryID = theTrack->GetParentID();
892 primaryID = theTrack->GetTrackID();
898 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
899 double rr = (hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y());
900 double phi = (rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x()));
907 if (hitPoint.z() < 0)
910 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " << phi / deg
911 <<
" depth " <<
depth;
913 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
927 double beta = preStepPoint->GetBeta();
928 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName() <<
" of " << primaryID <<
" with " 929 << theTrack->GetDefinition()->GetParticleName() <<
" of " 930 << preStepPoint->GetKineticEnergy() /
GeV <<
" GeV with velocity " << beta <<
" UnitID " 938 auto const preStepPoint = aStep->GetPreStepPoint();
939 auto const theTrack = aStep->GetTrack();
944 double etrack = preStepPoint->GetKineticEnergy();
947 primaryID = theTrack->GetTrackID();
949 primaryID = theTrack->GetParentID();
951 primaryID = theTrack->GetTrackID();
957 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
958 double rr = hitPoint.x() * hitPoint.x() + hitPoint.y() * hitPoint.y();
959 double phi = rr == 0. ? 0. : atan2(hitPoint.y(), hitPoint.x());
966 if (hitPoint.z() < 0.)
969 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " << etaR <<
" phi " << phi / deg
970 <<
" depth " <<
depth;
972 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
989 double beta = preStepPoint->GetBeta();
990 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName() <<
" of " << primaryID
991 <<
" with " << theTrack->GetDefinition()->GetParticleName() <<
" of " 992 << preStepPoint->GetKineticEnergy() /
GeV <<
" GeV with velocity " << beta <<
" UnitID " 1000 std::ifstream infile;
1006 while (infile >> det >> zside >> etaR >> phi >> lay >> wt) {
1008 layerWeights.insert(std::pair<uint32_t, double>(
id, wt));
1011 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " << entry <<
" ID " << std::hex <<
id 1012 <<
std::dec <<
" (" << det <<
"/" << zside <<
"/1/" << etaR <<
"/" << phi <<
"/" 1013 << lay <<
") Weight " << wt;
1018 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile: reads " << entry <<
" weights from " << fName;
1031 std::map<uint32_t, double>::const_iterator ite =
layerWeights.find(
id);
1036 << tmp.
zside <<
"/1/" << tmp.
etaR <<
"/" << tmp.
phis <<
"/" << tmp.
lay <<
") Weight " 1044 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1045 static const G4String modName[8] = {
"HEModule",
"HVQF",
"HBModule",
"MBAT",
"MBBT",
"MBBTC",
"MBBT_R1P",
"MBBT_R1M"};
1046 G4ThreeVector
local;
1048 double depth = -2000;
1050 for (
int n = 0;
n < touch->GetHistoryDepth(); ++
n) {
1051 G4String
name = touch->GetVolume(
n)->GetName();
1055 for (
unsigned int ii = 0;
ii < 8; ++
ii) {
1056 if (name == modName[
ii]) {
1058 int dn = touch->GetHistoryDepth() -
n;
1059 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1061 depth = local.z() - 4006.5;
1063 }
else if (ii == 1) {
1064 depth = local.z() + 825.0;
1066 }
else if (ii == 2) {
1067 depth = local.x() - 1775.;
1070 depth = local.y() + 15.;
1080 depth =
std::abs(global.z()) - 11500;
1082 edm::LogVerbatim(
"HcalSim") <<
"plotProfile Found " << found <<
" Global " << global <<
" Local " << local
1083 <<
" depth " << depth <<
" ID " <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1085 if (
hit_[idx] !=
nullptr)
1087 if (
time_[idx] !=
nullptr)
1089 if (
dist_[idx] !=
nullptr)
1091 int jd = 2 * idx +
id - 7;
1092 if (jd >= 0 && jd < 4) {
1094 if (
hit_[jd] !=
nullptr)
1095 hit_[jd]->Fill(edep);
1096 if (
time_[jd] !=
nullptr)
1097 time_[jd]->Fill(time, edep);
1098 if (
dist_[jd] !=
nullptr)
1099 dist_[jd]->Fill(depth, edep);
1106 if (
hzvem !=
nullptr)
1115 if (
id.subdet == 4) {
1116 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1118 if (
id.
depth <= 2) {
1119 if (G4UniformRand() > 0.5)
1123 }
else if ((
id.subdet == 1 ||
id.subdet == 2) &&
testNumber) {
1124 id.depth = (
depth_ == 0) ? 1 : 2;
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
void readWeightFromFile(const std::string &)
std::vector< const G4LogicalVolume * > hfLV
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
const std::vector< double > & doubles() const
a reference to the double-valued values stored in the given instance of DDValue
void hitForFibre(const G4Step *step)
static bool isMuon(int pdgCode)
const HcalDDDSimConstants * hcalConstants
std::unique_ptr< HFShowerParam > showerParam
std::vector< double > gpar
int zside() const
get the z-side of the cell (1/-1)
std::vector< double > getDDDArray(const std::string &, const DDsvalues_type &)
void plotProfile(const G4Step *step, const G4ThreeVector &pos, double edep, double time, int id)
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)
Compact representation of the geometrical detector hierarchy.
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
std::unique_ptr< HFShowerPMT > showerPMT
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 *)
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
int getMaxDepth(const int &type) const
HCalSD(const std::string &, const DDCompactView &, const SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
bool next()
set current node to the next node in the filtered tree
const std::vector< std::string > & getNames() const
std::unique_ptr< HFDarkening > m_HFDarkening
void resetForNewPrimary(const G4Step *)
const HBHEDarkening * m_HEDarkening
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
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)
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
T * make(const Args &...args) const
make new ROOT object
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
double getLayer0Wt(const int &det, const int &phi, const int &zside) const
bool isItStraightBundle(const G4LogicalVolume *)
bool getFromLibrary(const G4Step *) override
static bool isStableHadronIon(const G4Track *)
int ietaAbs() const
get the absolute value of the cell ieta
void setID(uint32_t unitID, double timeSlice, int trackID, uint16_t depth=0)
int iphi() const
get the cell iphi
const std::vector< double > & getGparHF() const
std::vector< const G4LogicalVolume * > pmtLV
int PMTNumber(const G4ThreeVector &pe_effect)
static const unsigned int lowZLimit
TFileDirectory mkdir(const std::string &dir, const std::string &descr="")
create a new subdirectory
bool filterHit(CaloG4Hit *, double) override
static const unsigned int upperZLimit
void getHitFibreBundle(const G4Step *step, bool type)
double getEnergyDeposit(const G4Step *) override
std::unique_ptr< HFShowerFibreBundle > showerBundle
bool isItPMT(const G4LogicalVolume *)
DDsvalues_type mergedSpecifics() const
bool isItinFidVolume(const G4ThreeVector &)
bool isHF(int etabin, int depth)
void getHitPMT(const G4Step *step)
double getAttenuation(const G4Step *aStep, double birk1, double birk2, double birk3) const
std::unique_ptr< HFShowerLibrary > showerLibrary
double layerWeight(int, const G4ThreeVector &, int, int)
std::vector< std::vector< double > > tmp
virtual int setTrackID(const G4Step *)
std::map< uint32_t, double > layerWeights
bool isItHF(const G4Step *)
std::vector< G4String > fibreNames
static bool isGammaElectronPositron(int pdgCode)
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
bool firstChild()
set the current node to the first child ...
bool isItScintillator(const G4Material *)
std::unique_ptr< HcalNumberingScheme > numberingScheme
std::vector< G4String > hfNames
std::unique_ptr< HFShower > hfshower
std::vector< const G4LogicalVolume * > fibreLV
uint32_t getUnitID() const
double getResponseWt(const G4Track *)
std::vector< const G4LogicalVolume * > fibre1LV
int maxHFDepth(const int &ieta, const int &iphi) const
std::vector< const G4Material * > materials
const HBHEDarkening * m_HBDarkening
const std::string & name() const
Returns the name.
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.
std::vector< G4String > matNames
float degradation(float intlumi, int ieta, int lay) const
double getEnergyDeposit() const
bool isItFibre(const G4LogicalVolume *)
void setParameterized(bool val)
void fillLogVolumeVector(const std::string &, const std::string &, const DDCompactView &, std::vector< const G4LogicalVolume * > &, std::vector< G4String > &)