20 #include "G4LogicalVolumeStore.hh"
21 #include "G4LogicalVolume.hh"
24 #include "G4ParticleTable.hh"
35 CaloSD(name, cpv, clg, p, manager,
36 p.getParameter<edm::
ParameterSet>(
"HCalSD").getParameter<int>(
"TimeSliceUnit"),
37 p.getParameter<edm::
ParameterSet>(
"HCalSD").getParameter<bool>(
"IgnoreTrackID")),
39 showerParam(0), showerPMT(0), showerBundle(0) {
54 bool testNumber = m_HC.
getParameter<
bool>(
"TestNumberingScheme");
68 LogDebug(
"HcalSim") <<
"***************************************************"
72 <<
"* Constructing a HCalSD with name " << name <<
"\n"
75 <<
"***************************************************";
77 edm::LogInfo(
"HcalSim") <<
"HCalSD:: Use of HF code is set to " << useHF
78 <<
"\nUse of shower parametrization set to "
79 << useParam <<
"\nUse of shower library is set to "
80 << useShowerLibrary <<
"\nUse PMT Hit is set to "
81 << usePMTHit <<
" with beta Threshold "<< betaThr
82 <<
"\nUSe of FibreBundle Hit set to "<<useFibreBundle
83 <<
"\n Use of Birks law is set to "
84 << useBirk <<
" with three constants kB = "
85 << birk1 <<
", C1 = " << birk2 <<
", C2 = " <<
birk3;
89 <<
" ions below " <<
kmaxIon <<
" MeV\n"
90 <<
" Threshold for storing hits in HB: "
91 << eminHitHB <<
" HE: " << eminHitHE <<
" HO: "
96 if (testNumber || forTBH2)
102 const G4LogicalVolumeStore * lvs = G4LogicalVolumeStore::GetInstance();
103 std::vector<G4LogicalVolume *>::const_iterator lvcite;
105 std::string attribute,
value;
115 attribute =
"Volume";
118 DDValue ddv0(attribute, value, 0);
126 edm::LogInfo(
"HcalSim") <<
"HCalSD: Names to be tested for " << attribute
127 <<
" = " << value <<
" has " <<
hfNames.size() <<
" elements";
128 for (
unsigned int i=0;
i <
hfNames.size(); ++
i) {
131 for(lvcite=lvs->begin(); lvcite!=lvs->end(); lvcite++)
132 if((*lvcite)->GetName()==namv) {
137 int level =
static_cast<int>(temp[
i]);
140 <<
" LV " <<
hfLV[
i] <<
" at level "
147 DDValue ddv1(attribute,value,0);
152 edm::LogInfo(
"HcalSim") <<
"HCalSD: Names to be tested for " << attribute
153 <<
" = " << value <<
":";
157 for (lvcite = lvs->begin(); lvcite != lvs->end(); ++lvcite) {
158 if ((*lvcite)->GetName() == namv) {
171 DDValue ddv3(attribute,value,0);
175 std::vector<G4String> pmtNames =
getNames(fv3);
176 edm::LogInfo(
"HcalSim") <<
"HCalSD: Names to be tested for " << attribute <<
" = "
177 << value <<
" have " << pmtNames.size() <<
" entries";
178 for (
unsigned int i=0;
i<pmtNames.size(); ++
i) {
179 G4String namv = pmtNames[
i];
181 for (lvcite = lvs->begin(); lvcite != lvs->end(); ++lvcite)
182 if ((*lvcite)->GetName() == namv) {
187 edm::LogInfo(
"HcalSim") <<
"HCalSD: (" <<
i <<
") " << pmtNames[
i]
193 value =
"HFFibreBundleStraight";
195 DDValue ddv4(attribute,value,0);
200 edm::LogInfo(
"HcalSim") <<
"HCalSD: Names to be tested for " << attribute
201 <<
" = " << value <<
" have " << fibreNames.size()
203 for (
unsigned int i=0;
i<fibreNames.size(); ++
i) {
204 G4String namv = fibreNames[
i];
206 for (lvcite = lvs->begin(); lvcite != lvs->end(); lvcite++)
207 if ((*lvcite)->GetName() == namv) {
212 edm::LogInfo(
"HcalSim") <<
"HCalSD: (" <<
i <<
") " << fibreNames[
i]
216 value =
"HFFibreBundleConical";
218 DDValue ddv5(attribute,value,0);
223 edm::LogInfo(
"HcalSim") <<
"HCalSD: Names to be tested for " << attribute <<
" = "
224 << value <<
" have " << fibreNames.size() <<
" entries";
225 for (
unsigned int i=0;
i<fibreNames.size(); ++
i) {
226 G4String namv = fibreNames[
i];
228 for (lvcite = lvs->begin(); lvcite != lvs->end(); ++lvcite)
229 if ((*lvcite)->GetName() == namv) {
234 edm::LogInfo(
"HcalSim") <<
"HCalSD: (" <<
i <<
") " << fibreNames[
i]
242 attribute =
"ReadOutName";
244 DDValue ddv2(attribute,name,0);
253 edm::LogInfo(
"HcalSim") <<
"HCalSD: " << layer0wt.size() <<
" Layer0Wt";
254 for (
unsigned int it=0; it<layer0wt.size(); ++it)
255 edm::LogInfo(
"HcalSim") <<
"HCalSD: [" << it <<
"] " << layer0wt[it];
257 const G4MaterialTable * matTab = G4Material::GetMaterialTable();
258 std::vector<G4Material*>::const_iterator matite;
274 for (matite = matTab->begin(); matite != matTab->end(); ++matite) {
275 if ((*matite)->GetName() == namx) {
286 edm::LogInfo(
"HcalSim") <<
"HCalSD: Material names for " << attribute
287 <<
" = " << name <<
":";
302 static std::string
labels[9] = {
"HB",
"HE",
"HO",
"HF Absorber",
"HF PMT",
303 "HF Absorber Long",
"HF Absorber Short",
304 "HF PMT Long",
"HF PMT Short"};
305 char name[20],
title[60];
306 for (
int i=0;
i<9; ++
i) {
307 sprintf (title,
"Hit energy in %s", labels[
i].c_str());
308 sprintf (name,
"HCalSDHit%d",
i);
310 sprintf (title,
"Energy (MeV)");
311 hit_[
i]->GetXaxis()->SetTitle(title);
312 hit_[
i]->GetYaxis()->SetTitle(
"Hits");
313 sprintf (title,
"Time of the hit in %s", labels[
i].c_str());
314 sprintf (name,
"HCalSDTime%d",
i);
316 sprintf (title,
"Time (ns)");
317 time_[
i]->GetXaxis()->SetTitle(title);
318 time_[
i]->GetYaxis()->SetTitle(
"Hits");
319 sprintf (title,
"Longitudinal profile in %s", labels[
i].c_str());
320 sprintf (name,
"HCalSDDist%d",
i);
322 sprintf (title,
"Distance (mm)");
323 dist_[
i]->GetXaxis()->SetTitle(title);
324 dist_[
i]->GetYaxis()->SetTitle(
"Hits");
348 G4LogicalVolume* lv= aStep->GetPreStepPoint()->GetPhysicalVolume()->GetLogicalVolume();
349 G4String nameVolume = lv->GetName();
351 G4int parCode =aStep->GetTrack()->GetDefinition()->GetPDGEncoding();
355 <<
" hits from parametrization in " << nameVolume
356 <<
" for Track " << aStep->GetTrack()->GetTrackID()
357 <<
" (" << aStep->GetTrack()->GetDefinition()->GetParticleName()
363 <<
" hits afterParamS*";
366 bool notaMuon =
true;
367 if (parCode ==
mupPDG || parCode ==
mumPDG ) notaMuon =
false;
370 LogDebug(
"HcalSim") <<
"HCalSD: Starts shower library from "
371 << nameVolume <<
" for Track "
372 << aStep->GetTrack()->GetTrackID() <<
" ("
373 <<aStep->GetTrack()->GetDefinition()->GetParticleName()<<
")";
378 LogDebug(
"HcalSim") <<
"HCalSD: Hit at Fibre in " << nameVolume
380 << aStep->GetTrack()->GetTrackID() <<
" ("
381 <<aStep->GetTrack()->GetDefinition()->GetParticleName()<<
")";
388 LogDebug(
"HcalSim") <<
"HCalSD: Hit from PMT parametrization from "
389 << nameVolume <<
" for Track "
390 << aStep->GetTrack()->GetTrackID() <<
" ("
391 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
396 LogDebug(
"HcalSim") <<
"HCalSD: Hit from FibreBundle from "
397 << nameVolume <<
" for Track "
398 << aStep->GetTrack()->GetTrackID() <<
" ("
399 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
404 LogDebug(
"HcalSim") <<
"HCalSD: Hit from standard path from "
405 << nameVolume <<
" for Track "
406 << aStep->GetTrack()->GetTrackID() <<
" ("
407 << aStep->GetTrack()->GetDefinition()->GetParticleName() <<
")";
412 plotProfile(aStep, aStep->GetPreStepPoint()->GetPosition(),
423 double destep = aStep->GetTotalEnergyDeposit();
425 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
426 int depth = (touch->GetReplicaNumber(0))%10;
427 int det = ((touch->GetReplicaNumber(1))/1000)-3;
428 if (depth==0 && (det==0 || det==1)) weight =
layer0wt[det];
430 int lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
431 G4ThreeVector hitPoint = aStep->GetPreStepPoint()->GetPosition();
436 G4Track*
theTrack = aStep->GetTrack();
439 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
441 double ke = theTrack->GetKineticEnergy()/MeV;
442 if ( pdg/1000000000 == 1 && (pdg/10000)%100 > 0 &&
443 (pdg/10)%100 > 0 && ke <
kmaxIon ) weight = 0;
444 if ((pdg == 2212) && (ke <
kmaxProton)) weight = 0;
445 if ((pdg == 2112) && (ke <
kmaxNeutron)) weight = 0;
449 << theTrack->GetTrackID() <<
" Type "
450 << theTrack->GetDefinition()->GetParticleName()
451 <<
" Kinetic Energy " << ke <<
" MeV";
460 G4Material* mat = aStep->GetPreStepPoint()->GetMaterial();
465 edm::LogInfo(
"HcalSim") <<
"HCalSD: Detector " << det+3 <<
" Depth " << depth
466 <<
" weight " << weight0 <<
" " << weight <<
" " << wt1;
468 return weight*wt1*destep;
474 const G4VTouchable* touch = preStepPoint->GetTouchable();
475 G4ThreeVector hitPoint = preStepPoint->GetPosition();
477 int depth = (touch->GetReplicaNumber(0))%10 + 1;
478 int lay = (touch->GetReplicaNumber(0)/10)%100 + 1;
479 int det = (touch->GetReplicaNumber(1))/1000;
486 edm::LogInfo(
"HcalSim") <<
"HCalSD: updates numbering scheme for " << GetName() <<
"\n";
493 G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
494 G4String particleName;
495 mumPDG = theParticleTable->FindParticle(particleName=
"mu-")->GetPDGEncoding();
496 mupPDG = theParticleTable->FindParticle(particleName=
"mu+")->GetPDGEncoding();
499 <<
" for mu+ = " <<
mupPDG;
509 switch (theId.subdetId()) {
539 LogDebug(
"HcalSim") <<
"HCalSD:getDDDArray called for " << str;
546 const std::vector<double> & fvec = value.
doubles();
547 int nval = fvec.size();
549 edm::LogError(
"HcalSim") <<
"HCalSD : # of " << str <<
" bins " << nval
550 <<
" < 2 ==> illegal";
551 throw cms::Exception(
"Unknown",
"HCalSD") <<
"nval < 2 for array " << str <<
"\n";
556 edm::LogError(
"HcalSim") <<
"HCalSD : cannot get array " << str;
557 throw cms::Exception(
"Unknown",
"HCalSD") <<
"cannot get array " << str <<
"\n";
563 std::vector<G4String>
tmp;
569 for (
unsigned int i=0;
i<tmp.size(); ++
i) {
570 if (!strcmp(tmp[
i].c_str(), log.
name().
name().c_str())) {
575 if (ok) tmp.push_back(log.
name().
name());
582 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
583 int levels = (touch->GetHistoryDepth()) + 1;
584 for (
unsigned int it=0; it <
hfNames.size(); ++it) {
586 G4LogicalVolume* lv = touch->GetVolume(levels-
hfLevels[it])->GetLogicalVolume();
587 if (lv ==
hfLV[it])
return true;
594 std::vector<G4String>::const_iterator it =
hfNames.begin();
595 for (; it !=
hfNames.end(); ++it)
if (name == *it)
return true;
600 std::vector<G4LogicalVolume*>::const_iterator ite =
fibreLV.begin();
601 for (; ite !=
fibreLV.end(); ++ite)
if (lv == *ite)
return true;
606 std::vector<G4String>::const_iterator it =
fibreNames.begin();
607 for (; it !=
fibreNames.end(); ++it)
if (name == *it)
return true;
612 std::vector<G4LogicalVolume*>::const_iterator ite =
pmtLV.begin();
613 for (; ite !=
pmtLV.end(); ++ite)
if (lv == *ite)
return true;
618 std::vector<G4LogicalVolume*>::const_iterator ite =
fibre1LV.begin();
619 for (; ite !=
fibre1LV.end(); ++ite)
if (lv == *ite)
return true;
624 std::vector<G4LogicalVolume*>::const_iterator ite =
fibre2LV.begin();
625 for (; ite !=
fibre2LV.end(); ++ite)
if (lv == *ite)
return true;
630 std::vector<G4Material*>::const_iterator ite =
materials.begin();
631 for (; ite !=
materials.end(); ++ite)
if (mat == *ite)
return true;
659 G4int particleCode =
theTrack->GetDefinition()->GetPDGEncoding();
668 edm::LogInfo(
"HcalSim") <<
"HCalSD::getFromLibrary " <<hits.size()
669 <<
" hits for " << GetName() <<
" of " << primaryID
670 <<
" with " <<
theTrack->GetDefinition()->GetParticleName()
671 <<
" of " <<
preStepPoint->GetKineticEnergy()/GeV <<
" GeV";
673 for (
unsigned int i=0;
i<hits.size(); ++
i) {
674 G4ThreeVector hitPoint = hits[
i].position;
675 int depth = hits[
i].depth;
676 double time = hits[
i].time;
677 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
680 plotProfile(aStep, hitPoint, 1.0*GeV, time, depth);
693 theTrack->SetTrackStatus(fStopAndKill);
694 G4TrackVector tv = *(aStep->GetSecondary());
695 for (
unsigned int kk=0;
kk<tv.size(); ++
kk)
697 tv[
kk]->SetTrackStatus(fStopAndKill);
710 G4int particleCode =
theTrack->GetDefinition()->GetPDGEncoding();
720 edm::LogInfo(
"HcalSim") <<
"HCalSD::hitForFibre " << hits.size()
721 <<
" hits for " << GetName() <<
" of " << primaryID
722 <<
" with " <<
theTrack->GetDefinition()->GetParticleName()
724 <<
" GeV in detector type " << det;
726 if (hits.size() > 0) {
728 for (
unsigned int i=0;
i<hits.size(); ++
i) {
729 G4ThreeVector hitPoint = hits[
i].position;
730 int depth = hits[
i].depth;
731 double time = hits[
i].time;
732 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
750 int nHit =
static_cast<int>(hits.size());
758 edm::LogInfo(
"HcalSim") <<
"HCalSD::getFromParam " << nHit <<
" hits for "
759 << GetName() <<
" of " << primaryID <<
" with "
760 << aStep->GetTrack()->GetDefinition()->GetParticleName()
762 <<
" GeV in detector type " << det;
764 for (
int i = 0;
i<nHit; ++
i) {
765 G4ThreeVector hitPoint = hits[
i].position;
766 int depth = hits[
i].depth;
767 double time = hits[
i].time;
768 unsigned int unitID =
setDetUnitId(det, hitPoint, depth);
799 primaryID =
theTrack->GetParentID();
800 if (primaryID == 0) primaryID =
theTrack->GetTrackID();
809 double rr = (hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y());
810 double phi = (rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x()));
817 if (hitPoint.z() < 0) etaR =-etaR;
819 edm::LogInfo(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR "
820 << etaR <<
" phi " << phi/deg <<
" depth " <<depth;
822 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
834 plotProfile(aStep, hitPoint, edep*GeV, time, depth);
836 LogDebug(
"HcalSim") <<
"HCalSD::getHitPMT 1 hit for " << GetName()
837 <<
" of " << primaryID <<
" with "
838 <<
theTrack->GetDefinition()->GetParticleName()
840 <<
" GeV with velocity " << beta <<
" UnitID "
841 << std::hex << unitID << std::dec;
863 primaryID =
theTrack->GetParentID();
864 if (primaryID == 0) primaryID =
theTrack->GetTrackID();
873 double rr = (hitPoint.x()*hitPoint.x() + hitPoint.y()*hitPoint.y());
874 double phi = (rr == 0. ? 0. :atan2(hitPoint.y(),hitPoint.x()));
881 if (hitPoint.z() < 0) etaR =-etaR;
883 edm::LogInfo(
"HcalSim") <<
"HCalSD::Hit for Detector " << det <<
" etaR "
884 << etaR <<
" phi " << phi/deg <<
" depth " <<depth;
886 double time = (aStep->GetPostStepPoint()->GetGlobalTime());
898 plotProfile(aStep, hitPoint, edep*GeV, time, depth);
900 LogDebug(
"HcalSim") <<
"HCalSD::getHitFibreBundle 1 hit for " << GetName()
901 <<
" of " << primaryID <<
" with "
902 <<
theTrack->GetDefinition()->GetParticleName()
904 <<
" GeV with velocity " << beta <<
" UnitID "
905 << std::hex << unitID << std::dec;
919 if (primaryID == 0) {
921 edm::LogInfo(
"HcalSim") <<
"HCalSD: Problem with primaryID **** set by "
922 <<
"force to TkID **** " <<
theTrack->GetTrackID();
939 int det, zside, etaR,
phi, lay;
941 while (infile >> det >> zside >> etaR >> phi >> lay >> wt) {
946 edm::LogInfo(
"HcalSim") <<
"HCalSD::readWeightFromFile:Entry " << entry
947 <<
" ID " << std::hex <<
id << std::dec <<
" ("
948 << det <<
"/" << zside <<
"/1/" << etaR <<
"/"
949 << phi <<
"/" << lay <<
") Weight " << wt;
954 edm::LogInfo(
"HcalSim") <<
"HCalSD::readWeightFromFile: reads " << entry
955 <<
" weights from " <<
fName;
968 std::map<uint32_t,double>::const_iterator ite =
layerWeights.find(
id);
971 edm::LogInfo(
"HcalSim") <<
"HCalSD::layerWeight: ID " << std::hex <<
id
972 << std::dec <<
" (" << tmp.
subdet <<
"/"
974 << tmp.
phis <<
"/" << tmp.
lay <<
") Weight " <<wt;
981 double time,
int id) {
983 const G4VTouchable* touch = aStep->GetPreStepPoint()->GetTouchable();
984 static G4String modName[8] = {
"HEModule",
"HVQF" ,
"HBModule",
"MBAT",
985 "MBBT" ,
"MBBTC",
"MBBT_R1P",
"MBBT_R1M"};
990 for (
int n=0;
n<touch->GetHistoryDepth(); ++
n) {
991 G4String
name = touch->GetVolume(
n)->GetName();
993 LogDebug(
"HcalSim") <<
"plotProfile Depth " <<
n <<
" Name " <<
name;
995 for (
unsigned int ii=0; ii<8; ++ii) {
996 if (name == modName[ii]) {
998 int dn = touch->GetHistoryDepth() -
n;
999 local = touch->GetHistory()->GetTransform(dn).TransformPoint(global);
1000 if (ii == 0) {depth = local.z() - 4006.5; idx = 1;}
1001 else if (ii == 1) {depth = local.z() + 825.0; idx = 3;}
1002 else if (ii == 2) {depth = local.x() - 1775.; idx = 0;}
1003 else {depth = local.y() + 15.; idx = 2;}
1009 if (!found) depth =
std::abs(global.z()) - 11500;
1011 LogDebug(
"HcalSim") <<
"plotProfile Found " << found <<
" Global " << global
1012 <<
" Local " << local <<
" depth " << depth <<
" ID " <<
id
1013 <<
" EDEP " << edep <<
" Time " <<
time;
1015 if (
hit_[idx] != 0)
hit_[idx]->Fill(edep);
1016 if (
time_[idx] != 0)
time_[idx]->Fill(time,edep);
1017 if (
dist_[idx] != 0)
dist_[idx]->Fill(depth,edep);
1018 int jd = 2*idx +
id - 7;
1019 if (jd >= 0 && jd < 4) {
1021 if (
hit_[jd] != 0)
hit_[jd]->Fill(edep);
1022 if (
time_[jd] != 0)
time_[jd]->Fill(time,edep);
1023 if (
dist_[jd] != 0)
dist_[jd]->Fill(depth,edep);
T getParameter(std::string const &) const
std::vector< double > layer0wt
T getUntrackedParameter(std::string const &, T const &) const
HFShowerParam * showerParam
void getFromLibrary(G4Step *step)
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
std::vector< Hit > getHits(G4Step *aStep, bool &ok, bool onlyLong=false)
virtual uint32_t getUnitID(const HcalNumberingFromDDD::HcalID id)
void addFilter(const DDFilter &, log_op op=AND)
void updateHit(CaloG4Hit *)
std::vector< Hit > getHits(G4Step *aStep)
void initRun(G4ParticleTable *)
bool isItStraightBundle(G4LogicalVolume *)
virtual bool ProcessHits(G4Step *, G4TouchableHistory *)
HFShowerFibreBundle * showerBundle
std::vector< G4LogicalVolume * > fibre1LV
std::vector< G4LogicalVolume * > fibreLV
std::vector< double > getDDDArray(const std::string &, const DDsvalues_type &)
double getHits(G4Step *aStep, bool type)
virtual uint32_t setDetUnitId(G4Step *step)
int setTrackID(G4Step *step)
void setNumberingScheme(HcalNumberingScheme *)
type of data representation of DDCompactView
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
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 TrackerG4SimHitNumberingScheme & numberingScheme(const DDCompactView &cpv, const GeometricDet &det)
std::vector< Hit > getHits(G4Step *aStep)
bool isItConicalBundle(G4LogicalVolume *)
static uint32_t packHcalIndex(int det, int z, int depth, int eta, int phi, int lay)
std::vector< G4LogicalVolume * > pmtLV
std::vector< G4LogicalVolume * > hfLV
bool isItScintillator(G4Material *)
bool next()
set current node to the next node in the filtered tree
virtual double getEnergyDeposit(G4Step *)
std::pair< std::string, MonitorElement * > entry
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::...
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
HcalNumberingScheme * numberingScheme
void getHitPMT(G4Step *step)
double getAttenuation(G4Step *aStep, double birk1, double birk2, double birk3)
std::vector< int > hfLevels
virtual std::vector< std::string > getNames()
void NaNTrap(G4Step *step)
virtual G4bool getStepInfo(G4Step *aStep)
bool isItPMT(G4LogicalVolume *)
void setID(uint32_t unitID, double timeSlice, int trackID, uint16_t depth=0)
G4StepPoint * preStepPoint
static const G4LogicalVolume * GetVolume(const std::string &name)
void readWeightFromFile(std::string)
void plotProfile(G4Step *step, G4ThreeVector pos, double edep, double time, int id)
void getHitFibreBundle(G4Step *step, bool type)
DDsvalues_type mergedSpecifics() const
void hitForFibre(G4Step *step)
double getHits(G4Step *aStep)
void initRun(G4ParticleTable *theParticleTable)
HcalNumberingFromDDD * numberingFromDDD
std::vector< std::vector< double > > tmp
double getResponseWt(G4Track *)
void initRun(G4ParticleTable *)
std::vector< G4String > fibreNames
bool firstChild()
set the current node to the first child ...
std::vector< G4Material * > materials
virtual bool filterHit(CaloG4Hit *, double)
T * make() const
make new ROOT object
void setCriteria(const DDValue &nameVal, comp_op, log_op l=AND, bool asString=true, bool merged=true)
double layerWeight(int, G4ThreeVector, int, int)
std::vector< G4String > hfNames
void resetForNewPrimary(G4ThreeVector, double)
std::map< uint32_t, double > layerWeights
HcalID unitID(int det, CLHEP::Hep3Vector pos, int depth, int lay=-1) const
uint32_t getUnitID() const
HCalSD(G4String, const DDCompactView &, SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
HFShowerLibrary * showerLibrary
std::vector< G4LogicalVolume * > fibre2LV
const std::string & name() const
Returns the name.
void getFromParam(G4Step *step)
const DDMaterial & material(void) const
Returns a reference object of the material this LogicalPart is made of.
CaloG4Hit * createNewHit()
std::vector< G4String > matNames
bool isItFibre(G4LogicalVolume *)
double getEnergyDeposit() const
The DDGenericFilter is a runtime-parametrized Filter looking on DDSpecifcs.