|
|
#include <ECalSD.h>
|
| ECalSD (const std::string &, const edm::EventSetup &, const SensitiveDetectorCatalog &, edm::ParameterSet const &p, const SimTrackManager *) |
|
uint32_t | setDetUnitId (const G4Step *) override |
|
void | setNumberingScheme (EcalNumberingScheme *) |
|
| ~ECalSD () override |
|
| CaloSD (const std::string &aSDname, const edm::EventSetup &es, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false) |
|
void | clear () override |
|
void | clearHits () override |
|
void | DrawAll () override |
|
void | EndOfEvent (G4HCofThisEvent *eventHC) override |
|
void | fillHits (edm::PCaloHitContainer &, const std::string &) override |
|
void | Initialize (G4HCofThisEvent *HCE) override |
|
void | PrintAll () override |
|
bool | ProcessHits (G4GFlashSpot *aSpot, G4TouchableHistory *) override |
|
G4bool | ProcessHits (G4Step *step, G4TouchableHistory *) override |
|
void | reset () override |
|
| ~CaloSD () override |
|
| SensitiveCaloDetector (const std::string &iname, const edm::EventSetup &es, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p) |
|
void | EndOfEvent (G4HCofThisEvent *eventHC) override |
|
const std::vector< std::string > & | getNames () const |
|
void | Initialize (G4HCofThisEvent *eventHC) override |
|
bool | isCaloSD () const |
|
| SensitiveDetector (const std::string &iname, const edm::EventSetup &es, const SensitiveDetectorCatalog &, edm::ParameterSet const &p, bool calo) |
|
| ~SensitiveDetector () override |
|
| Observer () |
|
void | slotForUpdate (const BeginOfRun * iT) |
|
virtual | ~Observer () |
|
| Observer () |
|
void | slotForUpdate (const BeginOfEvent * iT) |
|
virtual | ~Observer () |
|
| Observer () |
|
void | slotForUpdate (const BeginOfTrack * iT) |
|
virtual | ~Observer () |
|
| Observer () |
|
void | slotForUpdate (const EndOfTrack * iT) |
|
virtual | ~Observer () |
|
| Observer () |
|
void | slotForUpdate (const EndOfEvent * iT) |
|
virtual | ~Observer () |
|
Definition at line 30 of file ECalSD.h.
◆ ECalSD()
Definition at line 38 of file ECalSD.cc.
89 edm::LogError(
"EcalSim") <<
"ECalSD : Cannot find EcalSimulationParameters for " <<
name;
90 throw cms::Exception(
"Unknown",
"ECalSD") <<
"Cannot find EcalSimulationParameters for " <<
name <<
"\n";
106 }
else if (
name ==
"EcalHitsEB") {
108 }
else if (
name ==
"EcalHitsEE") {
110 }
else if (
name ==
"EcalHitsES") {
123 edm::LogVerbatim(
"EcalSim") <<
"Constructing a ECalSD with name " << GetName();
127 <<
" with three constants kB = " <<
birk1 <<
", C1 = " <<
birk2
128 <<
", C2 = " <<
birk3 <<
"\n Use of L3 parametrization " <<
useBirkL3
130 <<
" Slope for Light yield is set to " <<
slopeLY;
133 <<
" by Birk or light yield curve";
139 <<
"\tions below " <<
kmaxIon <<
" MeV"
142 <<
"\n\ttime Granularity "
149 if (
tfile.isAvailable()) {
151 static const std::string ctype[4] = {
"EB",
"EBref",
"EE",
"EERef"};
152 for (
int k = 0;
k < 4; ++
k) {
155 double xmin = (
k > 1) ? 3000.0 : 1000.0;
159 for (
int k = 0;
k < 4; ++
k)
References ageing, ageingWithSlopeLY, birk1, birk2, birk3, birkCut, birkSlope, crystalMat, depth1Name, EcalSimulationParameters::depth1Name_, depth2Name, EcalSimulationParameters::depth2Name_, ecalSimParameters_, Exception, g, edm::EventSetup::get(), get, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), initMap(), edm::ESHandleBase::isValid(), dqmdumpme::k, CaloSD::kmaxIon, CaloSD::kmaxNeutron, CaloSD::kmaxProton, TFileDirectory::make(), MeV, Skims_PA_cff::name, AlCaHLTBitMon_ParallelJobs::p, edm::ESHandle< T >::product(), scaleRL, generator_cfi::scheme, EnergyResolutionVsLumi::setLumies(), setNumberingScheme(), slopeLY, storeLayerTimeSim, storeRL, storeTrack, AlCaHLTBitMon_QueryRunRegistry::string, CaloSD::suppressHeavy, compare::tfile, overlapproblemtsosanalyzer_cfi::title, useBirk, useBirkL3, useWeight, EcalSimulationParameters::useWeight_, and TrackerOfflineValidation_Dqm_cff::xmin.
◆ ~ECalSD()
◆ curve_LY()
double ECalSD::curve_LY |
( |
const G4LogicalVolume * |
lv | ) |
|
|
private |
◆ getBaseNumber()
void ECalSD::getBaseNumber |
( |
const G4Step * |
aStep | ) |
|
|
private |
◆ getBirkL3()
double ECalSD::getBirkL3 |
( |
const G4Step * |
aStep | ) |
|
|
private |
◆ getDepth()
uint16_t ECalSD::getDepth |
( |
const G4Step * |
aStep | ) |
|
|
overrideprotectedvirtual |
Reimplemented from CaloSD.
Definition at line 225 of file ECalSD.cc.
227 const G4StepPoint* hitPoint = aStep->GetPreStepPoint();
229 const G4LogicalVolume* lv = hitPoint->GetTouchable()->GetVolume(0)->GetLogicalVolume();
235 uint16_t depth1(0), depth2(0);
246 <<
" L " << (ite ==
xtalLMap.end()) <<
":" << ite->second;
References funct::abs(), any(), crystalDepth, crystalLength, currentLocalPoint, TauDecayModes::dec, depth, getLayerIDForTimeSim(), getRadiationLength(), PCaloHit::kEcalDepthMask, PCaloHit::kEcalDepthOffset, PCaloHit::kEcalDepthRefz, CaloSD::setToLocal(), storeLayerTimeSim, storeRL, useDepth1, useDepth2, and xtalLMap.
◆ getEnergyDeposit()
double ECalSD::getEnergyDeposit |
( |
const G4Step * |
aStep | ) |
|
|
overrideprotectedvirtual |
Reimplemented from CaloSD.
Definition at line 167 of file ECalSD.cc.
168 const G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
169 const G4Track* theTrack = aStep->GetTrack();
170 double edep = aStep->GetTotalEnergyDeposit();
177 int pdg = theTrack->GetDefinition()->GetPDGEncoding();
179 double ke = theTrack->GetKineticEnergy();
180 if (((
pdg / 1000000000 == 1 && ((
pdg / 10000) % 100) > 0 && ((
pdg / 10) % 100) > 0)) && (
ke <
kmaxIon))
189 const G4LogicalVolume* lv = preStepPoint->GetTouchable()->GetVolume(0)->GetLogicalVolume();
203 double wt2 = theTrack->GetWeight();
209 <<
" wt2= " << wt2 <<
" Weighted Energy Deposit " << edep /
MeV <<
" MeV";
References any(), birk1, birk2, birk3, curve_LY(), CaloSD::getAttenuation(), getBirkL3(), CaloSD::getResponseWt(), TrackInformation::isPrimary(), ke, CaloSD::kmaxIon, CaloSD::kmaxNeutron, CaloSD::kmaxProton, MeV, noWeight, CaloSD::suppressHeavy, useBirk, useBirkL3, and useWeight.
◆ getLayerIDForTimeSim()
uint16_t ECalSD::getLayerIDForTimeSim |
( |
| ) |
|
|
private |
◆ getRadiationLength()
uint16_t ECalSD::getRadiationLength |
( |
const G4StepPoint * |
hitPoint, |
|
|
const G4LogicalVolume * |
lv |
|
) |
| |
|
private |
Definition at line 251 of file ECalSD.cc.
254 double radl = hitPoint->GetMaterial()->GetRadlen();
258 int k1 = (lvname.find(
"EFRY") != std::string::npos) ? 2 : 0;
259 int k2 = (lvname.find(
"refl") != std::string::npos) ? 1 : 0;
261 double rz = (k1 == 0) ? (hitPoint->GetPosition()).
rho() :
std::abs((hitPoint->GetPosition()).
z());
262 edm::LogVerbatim(
"EcalSim") << lvname <<
" # " << k1 <<
":" << k2 <<
":" <<
kk <<
" rz " << rz <<
" D " << thisX0;
263 g2L_[
kk]->Fill(rz, thisX0);
266 G4ThreeVector localPoint =
setToLocal(hitPoint->GetPosition(), hitPoint->GetTouchable());
267 edm::LogVerbatim(
"EcalSim") << lv->GetName() <<
" Global " << hitPoint->GetPosition() <<
":"
268 << (hitPoint->GetPosition()).
rho() <<
" Local " << localPoint <<
" Crystal Length "
References funct::abs(), crystalDepth, crystalLength, getLayerIDForTimeSim(), GetRecoTauVFromDQM_MC_cff::kk, rho, scaleRL, CaloSD::setToLocal(), AlCaHLTBitMon_QueryRunRegistry::string, useWeight, and z.
Referenced by getDepth().
◆ getTrackID()
int ECalSD::getTrackID |
( |
const G4Track * |
aTrack | ) |
|
|
overrideprotectedvirtual |
◆ initMap()
Definition at line 299 of file ECalSD.cc.
300 std::vector<const G4LogicalVolume*> lvused;
301 const G4LogicalVolumeStore* lvs = G4LogicalVolumeStore::GetInstance();
302 std::map<const std::string, const G4LogicalVolume*> nameMap;
303 for (
auto lvi = lvs->begin(), lve = lvs->end(); lvi != lve; ++lvi)
304 nameMap.emplace((*lvi)->GetName(), *lvi);
309 const G4LogicalVolume* lv = nameMap[lvname];
310 int ibec = (lvname.find(
"EFRY") == std::string::npos) ? 0 : 1;
311 int iref = (lvname.find(
"refl") == std::string::npos) ? 0 : 1;
312 int type = (ibec + iref == 1) ? 1 : -1;
314 if (strncmp(lvname.c_str(),
depth1Name.c_str(), 4) == 0) {
318 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
" in Depth 1 volume list";
321 const G4LogicalVolume* lvr = nameMap[lvname +
"_refl"];
325 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
"_refl"
326 <<
" in Depth 1 volume list";
332 if (strncmp(lvname.c_str(),
depth2Name.c_str(), 4) == 0) {
336 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
" in Depth 2 volume list";
339 const G4LogicalVolume* lvr = nameMap[lvname +
"_refl"];
343 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
"_refl"
344 <<
" in Depth 2 volume list";
351 if (!
any(lvused, lv)) {
352 lvused.push_back(lv);
354 xtalLMap.insert(std::pair<const G4LogicalVolume*, double>(lv,
dz *
type));
355 lv = nameMap[lvname +
"_refl"];
357 xtalLMap.insert(std::pair<const G4LogicalVolume*, double>(lv, -
dz *
type));
364 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
" Material " << matname
365 <<
" in noWeight list";
368 lv = nameMap[lvname];
372 edm::LogVerbatim(
"EcalSim") <<
"ECalSD::initMap Logical Volume " << lvname <<
" Material " << matname
373 <<
" in noWeight list";
383 G4String
name(
"Unknown");
385 name = (ite.first)->GetName();
References any(), crystalMat, depth1Name, depth2Name, PVValHelper::dz, EcalSimulationParameters::dzs_, ecalSimParameters_, mps_fire::i, EcalSimulationParameters::lvNames_, EcalSimulationParameters::matNames_, Skims_PA_cff::name, noWeight, AlCaHLTBitMon_QueryRunRegistry::string, useDepth1, useDepth2, and xtalLMap.
Referenced by ECalSD().
◆ setDetUnitId()
uint32_t ECalSD::setDetUnitId |
( |
const G4Step * |
aStep | ) |
|
|
overridevirtual |
◆ setNumberingScheme()
◆ ageing
◆ ageingWithSlopeLY
bool ECalSD::ageingWithSlopeLY |
|
private |
◆ birk1
◆ birk2
◆ birk3
◆ birkCut
◆ birkSlope
◆ crystalDepth
double ECalSD::crystalDepth |
|
private |
◆ crystalLength
double ECalSD::crystalLength |
|
private |
◆ crystalMat
std::string ECalSD::crystalMat |
|
private |
◆ currentLocalPoint
G4ThreeVector ECalSD::currentLocalPoint |
|
private |
◆ depth
◆ depth1Name
std::string ECalSD::depth1Name |
|
private |
◆ depth2Name
std::string ECalSD::depth2Name |
|
private |
◆ ecalSimParameters_
◆ noWeight
std::vector<const G4LogicalVolume *> ECalSD::noWeight |
|
private |
◆ numberingScheme_
◆ scaleRL
◆ slopeLY
◆ storeLayerTimeSim
bool ECalSD::storeLayerTimeSim |
|
private |
◆ storeRL
◆ storeTrack
◆ theBaseNumber
◆ useBirk
◆ useBirkL3
◆ useDepth1
std::vector<const G4LogicalVolume *> ECalSD::useDepth1 |
|
private |
◆ useDepth2
std::vector<const G4LogicalVolume *> ECalSD::useDepth2 |
|
private |
◆ useWeight
◆ xtalLMap
std::map<const G4LogicalVolume *, double> ECalSD::xtalLMap |
|
private |
T const * product() const
G4ThreeVector currentLocalPoint
EcalNumberingScheme * numberingScheme_
T * make(const Args &... args) const
make new ROOT object
double calcLightCollectionEfficiencyWeighted(DetId id, double z)
void addLevel(const std::string &name, const int ©Number)
double getAttenuation(const G4Step *aStep, double birk1, double birk2, double birk3) const
uint16_t getRadiationLength(const G4StepPoint *hitPoint, const G4LogicalVolume *lv)
static const int kEcalDepthOffset
T getUntrackedParameter(std::string const &, T const &) const
double curve_LY(const G4LogicalVolume *)
std::vector< double > dzs_
bool any(const std::vector< T > &v, const T &what)
std::vector< const G4LogicalVolume * > useDepth2
double getResponseWt(const G4Track *)
std::vector< const G4LogicalVolume * > noWeight
G4ThreeVector setToLocal(const G4ThreeVector &, const G4VTouchable *) const
const EcalSimulationParameters * ecalSimParameters_
void setNumberingScheme(EcalNumberingScheme *)
void getBaseNumber(const G4Step *)
void setLumies(double x, double y)
EcalBaseNumber theBaseNumber
CaloSD(const std::string &aSDname, const edm::EventSetup &es, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, float timeSlice=1., bool ignoreTkID=false)
static const int kEcalDepthMask
T getParameter(std::string const &) const
EnergyResolutionVsLumi ageing
virtual int getTrackID(const G4Track *)
std::vector< std::string > matNames_
std::vector< std::string > lvNames_
virtual uint32_t getUnitID(const EcalBaseNumber &baseNumber) const =0
std::vector< const G4LogicalVolume * > useDepth1
Abs< T >::type abs(const T &t)
double getBirkL3(const G4Step *)
void setSize(const int &size)
static const int kEcalDepthRefz
uint16_t getLayerIDForTimeSim()
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
std::map< const G4LogicalVolume *, double > xtalLMap