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 LogDebug(
"HcalSim") <<
"***************************************************" 103 <<
"* Constructing a HCalSD with name " << name <<
"\n" 105 <<
"***************************************************";
107 edm::LogInfo(
"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"; }
235 edm::LogInfo(
"HcalSim") <<
"HCalSD: Material names for " << attribute
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::LogInfo(
"HcalSim") <<
"HCalSD::getFromLibrary: HFLumiDarkening at r= " 341 << r <<
", z= " << z <<
" Dose= " << dose_acquired
349 G4String nameVolume = lv->GetName();
351 <<
" hits from parametrization in " << nameVolume
352 <<
" for Track " <<
track->GetTrackID()
353 <<
" (" <<
track->GetDefinition()->GetParticleName()
361 aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume()->GetName();
362 edm::LogInfo(
"HcalSim") <<
"HCalSD: Starts shower library from " 363 << nameVolume <<
" for Track " 364 <<
track->GetTrackID() <<
" (" 365 <<
track->GetDefinition()->GetParticleName() <<
")";
373 edm::LogInfo(
"HcalSim") <<
"HCalSD::getFromLibrary ID= " 374 <<
track->GetTrackID() <<
" (" 375 <<
track->GetDefinition()->GetParticleName()
376 <<
") kill= " << kill <<
" weight= " <<
weight_ 384 auto const lv = aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
385 auto const theTrack = aStep->GetTrack();
390 edm::LogInfo(
"HcalSim") <<
"HCalSD: Hit at Fibre in LV " << lv->GetName()
391 <<
" for track " << aStep->GetTrack()->GetTrackID() <<
" (" 392 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
402 edm::LogInfo(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization in LV " 403 << lv->GetName() <<
" for Track " 404 << aStep->GetTrack()->GetTrackID() <<
" (" 405 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
412 edm::LogInfo(
"HcalSim") <<
"HCalSD: Hit from straight FibreBundle in LV: " 413 << lv->GetName() <<
" for track " 414 << aStep->GetTrack()->GetTrackID() <<
" (" 415 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
422 edm::LogInfo(
"HcalSim") <<
"HCalSD: Hit from conical FibreBundle PV: " 423 << lv->GetName() <<
" for track " 424 << aStep->GetTrack()->GetTrackID() <<
" (" 425 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
431 destep = aStep->GetTotalEnergyDeposit();
433 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
435 int det(0), ieta(0),
phi(0),
z(0), lay,
depth(-1);
438 if (
z==0) {
z = -1; }
446 lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
448 edm::LogInfo(
"HcalSim") <<
"HCalSD: det: " << det <<
" ieta: "<< ieta
449 <<
" iphi: " <<
phi <<
" zside " <<
z <<
" lay: " 455 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
464 <<
" coefficient = " << dweight <<
" Weight= " <<
weight_;
473 <<
" coefficient = " << dweight <<
" Weight= " <<
weight_;
480 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
482 double ke = theTrack->GetKineticEnergy();
483 if ( pdg/1000000000 == 1 && (pdg/10000)%100 > 0 &&
491 const G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
495 double wt2 = theTrack->GetWeight();
496 double edep =
weight_*wt1*destep;
497 if (wt2 > 0.0) { edep *= wt2; }
500 <<
"HCalSD: edep= " << edep <<
" Det: " << det+2 <<
" depth= " <<
depth_ 501 <<
" weight= " <<
weight_ <<
" wt1= " << wt1 <<
" wt2= " << wt2;
508 auto const prePoint = aStep->GetPreStepPoint();
509 auto const touch = prePoint->GetTouchable();
510 const G4ThreeVector& hitPoint = prePoint->GetPosition();
512 int depth = (touch->GetReplicaNumber(0))%10 + 1;
513 int lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
514 int det = (touch->GetReplicaNumber(1))/1000;
520 if (scheme !=
nullptr) {
521 edm::LogInfo(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName();
534 edm::LogError(
"HcalSim") <<
"HCalSD : Cannot find HcalDDDSimConstant";
535 throw cms::Exception(
"Unknown",
"HCalSD") <<
"Cannot find HcalDDDSimConstant" <<
"\n";
542 std::stringstream sss;
543 for (
unsigned int ig=0; ig<
gpar.size(); ig++) {
544 sss <<
"\n gpar[" << ig <<
"] = " <<
gpar[ig]/cm <<
" cm";
547 <<
gpar.size()<<
" gpar (cm)" << sss.str();
574 switch (theId.subdetId()) {
606 <<
" " << std::hex <<
id <<
std::dec 607 <<
" does not match one from relabller for " 609 << tmp.
phi <<
":" << tmp.
phis <<
":" 610 << tmp.
depth <<
":" << tmp.
lay << std::endl;
618 LogDebug(
"HcalSim") <<
"HCalSD:getDDDArray called for " <<
str;
625 const std::vector<double> & fvec = value.
doubles();
626 int nval = fvec.size();
628 edm::LogError(
"HcalSim") <<
"HCalSD : # of " << str <<
" bins " << nval
629 <<
" < 2 ==> illegal";
630 throw cms::Exception(
"Unknown",
"HCalSD") <<
"nval < 2 for array " << str <<
"\n";
636 throw cms::Exception(
"Unknown",
"HCalSD") <<
"cannot get array " << str <<
"\n";
642 std::vector<G4String>
tmp;
648 for (
unsigned int i=0;
i<tmp.size(); ++
i) {
649 if (!strcmp(tmp[
i].c_str(), log.
name().
name().c_str())) {
654 if (ok) tmp.push_back(log.
name().
name());
661 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
662 int levels = (touch->GetHistoryDepth()) + 1;
663 for (
unsigned int it=0; it <
hfNames.size(); ++it) {
665 const G4LogicalVolume* lv = touch->GetVolume(levels-
hfLevels[it])->GetLogicalVolume();
666 if (lv ==
hfLV[it])
return true;
673 for (
auto nam :
hfNames)
if (name == nam) {
return true; }
678 for (
auto lvol :
fibreLV)
if (lv == lvol) {
return true; }
683 for (
auto nam :
fibreNames)
if (name == nam) {
return true; }
688 for (
auto lvol :
pmtLV)
if (lv == lvol) {
return true; }
693 for (
auto lvol :
fibre1LV)
if (lv == lvol) {
return true; }
698 for (
auto lvol :
fibre2LV)
if (lv == lvol) {
return true; }
703 for (
auto amat :
materials)
if (amat == mat) {
return true; }
712 edm::LogInfo(
"HcalSim") <<
"HCalSD::isItinFidVolume:#PMT= " << npmt
713 <<
" for hit point " << hitPoint;
715 if (npmt <= 0) flag =
false;
718 edm::LogInfo(
"HcalSim") <<
"HCalSD::isItinFidVolume: point " << hitPoint
719 <<
" return flag " <<
flag;
727 if(!isKilled || hits.empty()) {
return; }
734 auto const theTrack = aStep->GetTrack();
745 edm::LogInfo(
"HcalSim") <<
"HCalSD::getFromLibrary " <<hits.size()
746 <<
" hits for " << GetName() <<
" of " << primaryID
747 <<
" with " << theTrack->GetDefinition()->GetParticleName()
748 <<
" of " << aStep->GetPreStepPoint()->GetKineticEnergy()/
GeV <<
" GeV";
750 for (
unsigned int i=0;
i<hits.size(); ++
i) {
751 G4ThreeVector hitPoint = hits[
i].position;
753 int depth = hits[
i].depth;
754 double time = hits[
i].time;
755 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
770 if(hits.empty()) {
return; }
772 auto const theTrack = aStep->GetTrack();
785 edm::LogInfo(
"HcalSim") <<
"HCalSD::hitForFibre " << hits.size()
786 <<
" hits for " << GetName() <<
" of " << primaryID
787 <<
" with " << theTrack->GetDefinition()->GetParticleName()
788 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 789 <<
" GeV in detector type " << det;
792 for (
unsigned int i=0;
i<hits.size(); ++
i) {
793 G4ThreeVector hitPoint = hits[
i].position;
795 int depth = hits[
i].depth;
796 double time = hits[
i].time;
797 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
801 bool emType = (
edepositEM > 0.) ?
true :
false;
812 if(!isKilled || hits.empty()) {
return; }
818 edm::LogInfo(
"HcalSim") <<
"HCalSD::getFromParam " << hits.size() <<
" hits for " 819 << GetName() <<
" of " << primaryID <<
" with " 820 << aStep->GetTrack()->GetDefinition()->GetParticleName()
821 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 822 <<
" GeV in detector type " << det;
824 for (
unsigned int i=0;
i<hits.size(); ++
i) {
825 G4ThreeVector hitPoint = hits[
i].position;
826 int depth = hits[
i].depth;
827 double time = hits[
i].time;
828 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
841 auto const preStepPoint = aStep->GetPreStepPoint();
842 auto const theTrack = aStep->GetTrack();
847 double etrack = preStepPoint->GetKineticEnergy();
850 primaryID = theTrack->GetTrackID();
852 primaryID = theTrack->GetParentID();
853 if (primaryID == 0) primaryID = theTrack->GetTrackID();
859 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
860 double rr = (hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y());
861 double phi = (rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x()));
868 if (hitPoint.z() < 0) etaR =-etaR;
870 edm::LogInfo(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " 871 << etaR <<
" phi " << phi/deg <<
" depth " <<
depth;
873 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
888 double beta = preStepPoint->GetBeta();
889 LogDebug(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName()
890 <<
" of " << primaryID <<
" with " 891 << theTrack->GetDefinition()->GetParticleName()
892 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 893 <<
" GeV with velocity " << beta <<
" UnitID " 901 auto const preStepPoint = aStep->GetPreStepPoint();
902 auto const theTrack = aStep->GetTrack();
907 double etrack = preStepPoint->GetKineticEnergy();
910 primaryID = theTrack->GetTrackID();
912 primaryID = theTrack->GetParentID();
913 if (primaryID == 0) primaryID = theTrack->GetTrackID();
919 const G4ThreeVector& hitPoint = preStepPoint->GetPosition();
920 double rr = hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y();
921 double phi = rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x());
928 if (hitPoint.z() < 0.) etaR =-etaR;
930 LogDebug(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR " 931 << etaR <<
" phi " << phi/deg <<
" depth " <<
depth;
933 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
948 double beta = preStepPoint->GetBeta();
949 LogDebug(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName()
950 <<
" of " << primaryID <<
" with " 951 << theTrack->GetDefinition()->GetParticleName()
952 <<
" of " << preStepPoint->GetKineticEnergy()/
GeV 953 <<
" GeV with velocity " << beta <<
" UnitID " 962 std::ifstream infile;
968 while (infile >> det >> zside >> etaR >> phi >> lay >> wt) {
973 edm::LogInfo(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " << entry
974 <<
" ID " << std::hex <<
id <<
std::dec <<
" (" 975 << det <<
"/" << zside <<
"/1/" << etaR <<
"/" 976 << phi <<
"/" << lay <<
") Weight " << wt;
981 edm::LogInfo(
"HcalSim") <<
"HCalSD::readWeightFromFile: reads " << entry
982 <<
" weights from " << fName;
996 std::map<uint32_t,double>::const_iterator ite =
layerWeights.find(
id);
999 edm::LogInfo(
"HcalSim") <<
"HCalSD::layerWeight: ID " << std::hex <<
id 1001 << tmp.
zside <<
"/1/" << tmp.
etaR <<
"/" 1002 << tmp.
phis <<
"/" << tmp.
lay <<
") Weight " <<wt;
1009 double time,
int id) {
1011 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
1012 static const G4String modName[8] = {
"HEModule",
"HVQF" ,
"HBModule",
"MBAT",
1013 "MBBT" ,
"MBBTC",
"MBBT_R1P",
"MBBT_R1M"};
1014 G4ThreeVector
local;
1018 for (
int n=0;
n<touch->GetHistoryDepth(); ++
n) {
1019 G4String
name = touch->GetVolume(
n)->GetName();
1021 LogDebug(
"HcalSim") <<
"plotProfile Depth " <<
n <<
" Name " <<
name;
1023 for (
unsigned int ii=0;
ii<8; ++
ii) {
1024 if (name == modName[
ii]) {
1026 int dn = touch->GetHistoryDepth() -
n;
1027 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1028 if (ii == 0) {depth = local.z() - 4006.5; idx = 1;}
1029 else if (ii == 1) {depth = local.z() + 825.0; idx = 3;}
1030 else if (ii == 2) {depth = local.x() - 1775.; idx = 0;}
1031 else {depth = local.y() + 15.; idx = 2;}
1037 if (!found) depth =
std::abs(global.z()) - 11500;
1039 LogDebug(
"HcalSim") <<
"plotProfile Found " << found <<
" Global " << global
1040 <<
" Local " << local <<
" depth " << depth <<
" ID " 1041 <<
id <<
" EDEP " << edep <<
" Time " <<
time;
1046 int jd = 2*idx +
id - 7;
1047 if (jd >= 0 && jd < 4) {
1049 if (
hit_[jd] !=
nullptr)
hit_[jd]->Fill(edep);
1050 if (
time_[jd] !=
nullptr)
time_[jd]->Fill(time,edep);
1051 if (
dist_[jd] !=
nullptr)
dist_[jd]->Fill(depth,edep);
1065 if (
id.subdet == 4) {
1066 int ieta = (
id.zside == 0) ? -
id.etaR :
id.etaR;
1068 if (
id.
depth <= 2) {
1069 if (G4UniformRand() > 0.5)
id.depth += 2;
1072 }
else if ((
id.subdet == 1 ||
id.subdet ==2) &&
testNumber) {
1073 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)
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
static int PMTNumber(const G4ThreeVector &pe_effect)
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
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
std::maps an index to a DDValue. The index corresponds to the index assigned to the name of the std::...
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
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)
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)
HcalDDDSimConstants * hcalConstants
void fillLogVolumeVector(const std::string &, const std::string &, const DDCompactView &, std::vector< const G4LogicalVolume * > &, std::vector< G4String > &)