27 #include "G4LogicalVolumeStore.hh" 28 #include "G4LogicalVolume.hh" 32 #include "G4SystemOfUnits.hh" 33 #include "G4PhysicalConstants.hh" 34 #include "Randomize.hh" 51 CaloSD(name, cpv, clg, p, manager,
55 weight_(1.0), depth_(1) {
91 bool agingFlagHF = m_HC.
getParameter<
bool>(
"HFDarkening");
98 applyFidCut = m_HF.getParameter<
bool>(
"ApplyFiducialCut");
101 edm::LogVerbatim(
"HcalSim") <<
"***************************************************" 103 <<
"* Constructing a HCalSD with name " << name <<
"\n" 105 <<
"***************************************************";
107 edm::LogVerbatim(
"HcalSim") <<
"HCalSD:: Use of HF code is set to " << useHF
108 <<
"\nUse of shower parametrization set to " 109 << useParam <<
"\nUse of shower library is set to " 110 << useShowerLibrary <<
"\nUse PMT Hit is set to " 111 << usePMTHit <<
" with beta Threshold "<< betaThr
112 <<
"\nUSe of FibreBundle Hit set to "<<useFibreBundle
113 <<
"\n Use of Birks law is set to " 114 << useBirk <<
" with three constants kB = " 115 << birk1 <<
", C1 = " << birk2 <<
", C2 = " <<
birk3;
119 <<
" ions below " <<
kmaxIon <<
" MeV\n" 120 <<
" Threshold for storing hits in HB: " 121 << eminHitHB <<
" HE: " << eminHitHE <<
" HO: " 122 << eminHitHO <<
" HF: " << eminHitHF <<
"\n" 123 <<
"Delivered luminosity for Darkening " 124 << deliveredLumi <<
" Flag (HE) " << agingFlagHE
125 <<
" Flag (HB) " << agingFlagHB
126 <<
" Flag (HF) " << agingFlagHF <<
"\n" 127 <<
"Application of Fiducial Cut " << applyFidCut
128 <<
"Flag for test number|neutral density filter " 132 if (testNumber || forTBH2) {
142 const G4LogicalVolumeStore * lvs = G4LogicalVolumeStore::GetInstance();
144 const G4LogicalVolume* lv;
156 attribute =
"Volume";
165 unsigned int nhf =
hfNames.size();
166 std::stringstream ss;
167 ss <<
"HCalSD: Names to be tested for " << attribute
168 <<
" = " << value <<
" has " << nhf <<
" elements";
169 for (
unsigned int i=0;
i < nhf; ++
i) {
172 for(
auto lvol : *lvs) {
173 if(lvol->GetName() == namv) {
179 int level =
static_cast<int>(temp[
i]);
181 ss <<
"\n HF[" <<
i <<
"] = " << namv
188 std::vector<G4String> tempNames;
195 const G4MaterialTable * matTab = G4Material::GetMaterialTable();
196 std::vector<G4Material*>::const_iterator matite;
197 attribute =
"OnlyForHcalSimNumbering";
217 const G4Material* mat =
nullptr;
218 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
219 if ((*matite)->GetName() == namx) {
230 std::stringstream sss;
232 if(
i/10*10 ==
i) { sss <<
"\n"; }
236 <<
" = " << name <<
":" << sss.str();
250 static const char *
const labels[] = {
"HB",
"HE",
"HO",
"HF Absorber",
"HF PMT",
251 "HF Absorber Long",
"HF Absorber Short",
252 "HF PMT Long",
"HF PMT Short"};
254 char name[20],
title[60];
255 for (
int i=0;
i<9; ++
i) {
256 sprintf (title,
"Hit energy in %s", labels[
i]);
257 sprintf (name,
"HCalSDHit%d", i);
259 sprintf (title,
"Energy (MeV)");
260 hit_[
i]->GetXaxis()->SetTitle(title);
261 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
262 sprintf (title,
"Time of the hit in %s", labels[i]);
263 sprintf (name,
"HCalSDTime%d", i);
265 sprintf (title,
"Time (ns)");
266 time_[
i]->GetXaxis()->SetTitle(title);
267 time_[
i]->GetYaxis()->SetTitle(
"Hits");
268 sprintf (title,
"Longitudinal profile in %s", labels[i]);
269 sprintf (name,
"HCalSDDist%d", i);
271 sprintf (title,
"Distance (mm)");
272 dist_[
i]->GetXaxis()->SetTitle(title);
273 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
275 if (useHF && (!useParam)) {
276 hzvem = hcDir.
make<TH1F>(
"hzvem",
"Longitudinal Profile (EM Part)",330,0.0,1650.0);
277 hzvem->GetXaxis()->SetTitle(
"Longitudinal Profile (EM Part)");
278 hzvhad = hcDir.
make<TH1F>(
"hzvhad",
"Longitudinal Profile (Had Part)",330,0.0,1650.0);
279 hzvhad->GetXaxis()->SetTitle(
"Longitudinal Profile (Hadronic Part)");
287 std::vector<const G4LogicalVolume*>& lvvec,
288 std::vector<G4String>& lvnames) {
290 const G4LogicalVolumeStore * lvs = G4LogicalVolumeStore::GetInstance();
291 const G4LogicalVolume* lv;
297 unsigned int nvol = lvnames.size();
298 std::stringstream ss;
299 ss <<
"HCalSD: " << nvol <<
" names to be tested for " << attribute <<
" <" << value <<
">:";
300 for (
unsigned int i=0;
i<nvol; ++
i) {
301 G4String namv = lvnames[
i];
303 for (
auto lvol : *lvs) {
304 if (lvol->GetName() == namv) {
310 if(
i/10*10 ==
i) { ss <<
"\n"; }
318 auto const track = aStep->GetTrack();
319 depth_ = (aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber(0))%10;
325 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
326 const double invcm = 1./CLHEP::cm;
327 double r = hitPoint.perp()*invcm;
329 double dose_acquired = 0.;
340 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at " 341 <<
"r= " << r <<
", z= " << z <<
" Dose= " 342 << dose_acquired <<
" weight= " <<
weight_;
349 G4String nameVolume = lv->GetName();
351 <<
" hits from parametrization in " 352 << nameVolume <<
" for Track " 353 <<
track->GetTrackID() <<
" (" 354 <<
track->GetDefinition()->GetParticleName()
362 aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
364 << nameVolume <<
" for Track " 365 <<
track->GetTrackID() <<
" (" 366 <<
track->GetDefinition()->GetParticleName()
376 <<
track->GetTrackID() <<
" (" 377 <<
track->GetDefinition()->GetParticleName()
378 <<
") kill= " << kill <<
" weight= " <<
weight_ 386 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
387 auto const theTrack = aStep->GetTrack();
392 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName()
394 << aStep->GetTrack()->GetTrackID() <<
" (" 395 << aStep->GetTrack()->GetDefinition()->GetParticleName()
406 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " 407 << lv->GetName() <<
" for Track " 408 << aStep->GetTrack()->GetTrackID() <<
" (" 409 << aStep->GetTrack()->GetDefinition()->GetParticleName()
417 edm::LogVerbatim(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " 418 << lv->GetName() <<
" for track " 419 << aStep->GetTrack()->GetTrackID() <<
" (" 420 << aStep->GetTrack()->GetDefinition()->GetParticleName()
429 << lv->GetName() <<
" for track " 430 << aStep->GetTrack()->GetTrackID() <<
" (" 431 << aStep->GetTrack()->GetDefinition()->GetParticleName()
438 destep = aStep->GetTotalEnergyDeposit();
440 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
442 int det(0), ieta(0),
phi(0),
z(0), lay,
depth(-1);
445 if (
z==0) {
z = -1; }
453 lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
456 <<
" iphi: " <<
phi <<
" zside " <<
z <<
" lay: " 462 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
471 <<
" coefficient = " << dweight <<
" Weight= " 481 <<
" coefficient = " << dweight <<
" Weight= " 489 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
491 double ke = theTrack->GetKineticEnergy();
492 if ( pdg/1000000000 == 1 && (pdg/10000)%100 > 0 &&
500 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
504 double wt2 = theTrack->GetWeight();
505 double edep =
weight_*wt1*destep;
506 if (wt2 > 0.0) { edep *= wt2; }
509 <<
"HCalSD: edep= " << edep <<
" Det: " << det+2 <<
" depth= " <<
depth_ 510 <<
" weight= " <<
weight_ <<
" wt1= " << wt1 <<
" wt2= " << wt2;
517 auto const prePoint = aStep->GetPreStepPoint();
518 auto const touch = prePoint->GetTouchable();
519 const G4ThreeVector& hitPoint = prePoint->GetPosition();
521 int depth = (touch->GetReplicaNumber(0))%10 + 1;
522 int lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
523 int det = (touch->GetReplicaNumber(1))/1000;
529 if (scheme !=
nullptr) {
544 edm::LogError(
"HcalSim") <<
"HCalSD : Cannot find HcalDDDSimConstant";
545 throw cms::Exception(
"Unknown",
"HCalSD") <<
"Cannot find HcalDDDSimConstant" <<
"\n";
552 std::stringstream sss;
553 for (
unsigned int ig=0; ig<
gpar.size(); ig++) {
554 sss <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig]/cm <<
" cm";
558 <<
gpar.size()<<
" gpar (cm)" << sss.str();
585 switch (theId.subdetId()) {
617 <<
" " << std::hex <<
id <<
std::dec 618 <<
" does not match one from relabller for " 620 << tmp.
phi <<
":" << tmp.
phis <<
":" 621 << tmp.
depth <<
":" << tmp.
lay << std::endl;
636 const std::vector<double> & fvec = value.
doubles();
637 int nval = fvec.size();
639 edm::LogError(
"HcalSim") <<
"HCalSD : # of " << str <<
" bins " << nval
640 <<
" < 2 ==> illegal";
641 throw cms::Exception(
"Unknown",
"HCalSD") <<
"nval < 2 for array " << str <<
"\n";
647 throw cms::Exception(
"Unknown",
"HCalSD") <<
"cannot get array " << str <<
"\n";
653 std::vector<G4String>
tmp;
659 for (
unsigned int i=0;
i<tmp.size(); ++
i) {
660 if (!strcmp(tmp[
i].c_str(), log.
name().
name().c_str())) {
665 if (ok) tmp.push_back(log.
name().
name());
672 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
673 int levels = (touch->GetHistoryDepth()) + 1;
674 for (
unsigned int it=0; it <
hfNames.size(); ++it) {
676 const G4LogicalVolume* lv = touch->GetVolume(levels-
hfLevels[it])->GetLogicalVolume();
677 if (lv ==
hfLV[it])
return true;
684 for (
auto nam :
hfNames)
if (name == nam) {
return true; }
689 for (
auto lvol :
fibreLV)
if (lv == lvol) {
return true; }
694 for (
auto nam :
fibreNames)
if (name == nam) {
return true; }
699 for (
auto lvol :
pmtLV)
if (lv == lvol) {
return true; }
704 for (
auto lvol :
fibre1LV)
if (lv == lvol) {
return true; }
709 for (
auto lvol :
fibre2LV)
if (lv == lvol) {
return true; }
714 for (
auto amat :
materials)
if (amat == mat) {
return true; }
724 <<
" for hit point " << hitPoint;
726 if (npmt <= 0) flag =
false;
729 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint
730 <<
" return flag " <<
flag;
738 if(!isKilled || hits.empty()) {
return; }
745 auto const theTrack = aStep->GetTrack();
757 <<
" hits for " << GetName() <<
" of " << primaryID
758 <<
" with " << theTrack->GetDefinition()->GetParticleName()
759 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy()/
GeV <<
" GeV";
761 for (
unsigned int i=0;
i<hits.size(); ++
i) {
762 G4ThreeVector hitPoint = hits[
i].position;
764 int depth = hits[
i].depth;
765 double time = hits[
i].time;
766 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
781 if(hits.empty()) {
return; }
783 auto const theTrack = aStep->GetTrack();
797 <<
" hits for " << GetName() <<
" of " << primaryID
798 <<
" with " << theTrack->GetDefinition()->GetParticleName()
799 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 800 <<
" GeV in detector type " << det;
803 for (
unsigned int i=0;
i<hits.size(); ++
i) {
804 G4ThreeVector hitPoint = hits[
i].position;
806 int depth = hits[
i].depth;
807 double time = hits[
i].time;
808 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
812 bool emType = (
edepositEM > 0.) ?
true :
false;
823 if(!isKilled || hits.empty()) {
return; }
829 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::getFromParam " << hits.size() <<
" hits for " 830 << GetName() <<
" of " << primaryID <<
" with " 831 << aStep->GetTrack()->GetDefinition()->GetParticleName()
832 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 833 <<
" GeV in detector type " << det;
835 for (
unsigned int i=0;
i<hits.size(); ++
i) {
836 G4ThreeVector hitPoint = hits[
i].position;
837 int depth = hits[
i].depth;
838 double time = hits[
i].time;
839 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
852 auto const preStepPoint = aStep->GetPreStepPoint();
853 auto const theTrack = aStep->GetTrack();
858 double etrack = preStepPoint->GetKineticEnergy();
861 primaryID = theTrack->GetTrackID();
863 primaryID = theTrack->GetParentID();
864 if (primaryID == 0) primaryID = theTrack->GetTrackID();
870 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
871 double rr = (hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y());
872 double phi = (rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x()));
879 if (hitPoint.z() < 0) etaR =-etaR;
881 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " 882 << etaR <<
" phi " << phi/deg <<
" depth " <<
depth;
884 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
899 double beta = preStepPoint->GetBeta();
901 <<
" of " << primaryID <<
" with " 902 << theTrack->GetDefinition()->GetParticleName()
903 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 904 <<
" GeV with velocity " << beta <<
" UnitID " 912 auto const preStepPoint = aStep->GetPreStepPoint();
913 auto const theTrack = aStep->GetTrack();
918 double etrack = preStepPoint->GetKineticEnergy();
921 primaryID = theTrack->GetTrackID();
923 primaryID = theTrack->GetParentID();
924 if (primaryID == 0) primaryID = theTrack->GetTrackID();
930 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
931 double rr = hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y();
932 double phi = rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x());
939 if (hitPoint.z() < 0.) etaR =-etaR;
942 <<
" etaR " << etaR <<
" phi " << phi/deg
943 <<
" depth " <<
depth;
945 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
960 double beta = preStepPoint->GetBeta();
962 << GetName() <<
" of " << primaryID <<
" with " 963 << theTrack->GetDefinition()->GetParticleName()
964 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 965 <<
" GeV with velocity " << beta <<
" UnitID " 974 std::ifstream infile;
980 while (infile >> det >> zside >> etaR >> phi >> lay >> wt) {
986 <<
" ID " << std::hex <<
id <<
std::dec <<
" (" 987 << det <<
"/" << zside <<
"/1/" << etaR <<
"/" 988 << phi <<
"/" << lay <<
") Weight " << wt;
993 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::readWeightFromFile: reads " << entry
994 <<
" weights from " << fName;
1008 std::map<uint32_t,double>::const_iterator ite =
layerWeights.find(
id);
1011 edm::LogVerbatim(
"HcalSim") <<
"HCalSD::layerWeight: ID " << std::hex <<
id 1013 << tmp.
zside <<
"/1/" << tmp.
etaR <<
"/" 1014 << tmp.
phis <<
"/" << tmp.
lay <<
") Weight " <<wt;
1021 double time,
int id) {
1023 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1024 static const G4String modName[8] = {
"HEModule",
"HVQF" ,
"HBModule",
"MBAT",
1025 "MBBT" ,
"MBBTC",
"MBBT_R1P",
"MBBT_R1M"};
1026 G4ThreeVector
local;
1030 for (
int n=0;
n<touch->GetHistoryDepth(); ++
n) {
1031 G4String
name = touch->GetVolume(
n)->GetName();
1036 for (
unsigned int ii=0;
ii<8; ++
ii) {
1037 if (name == modName[
ii]) {
1039 int dn = touch->GetHistoryDepth() -
n;
1040 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1041 if (ii == 0) {depth = local.z() - 4006.5; idx = 1;}
1042 else if (ii == 1) {depth = local.z() + 825.0; idx = 3;}
1043 else if (ii == 2) {depth = local.x() - 1775.; idx = 0;}
1044 else {depth = local.y() + 15.; idx = 2;}
1050 if (!found) depth =
std::abs(global.z()) - 11500;
1053 << global <<
" Local " << local <<
" depth " 1054 << depth <<
" ID " <<
id <<
" EDEP " << edep
1055 <<
" Time " <<
time;
1060 int jd = 2*idx +
id - 7;
1061 if (jd >= 0 && jd < 4) {
1063 if (
hit_[jd] !=
nullptr)
hit_[jd]->Fill(edep);
1064 if (
time_[jd] !=
nullptr)
time_[jd]->Fill(time,edep);
1065 if (
dist_[jd] !=
nullptr)
dist_[jd]->Fill(depth,edep);
1079 if (
id.subdet == 4) {
1080 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1082 if (
id.
depth <= 2) {
1083 if (G4UniformRand() > 0.5)
id.depth += 2;
1086 }
else if ((
id.subdet == 1 ||
id.subdet ==2) &&
testNumber) {
1087 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
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 *)
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
std::map< uint32_t, double > layerWeights
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 > &)