21 #include "G4StepPoint.hh" 23 #include "G4VPhysicalVolume.hh" 24 #include "G4SDManager.hh" 25 #include "G4VProcess.hh" 27 #include "G4PhysicalConstants.hh" 28 #include "G4SystemOfUnits.hh" 36 static const double invns = 1.0 / CLHEP::nanosecond;
37 static const double invdeg = 1.0 / CLHEP::deg;
61 energyHistoryCut(1.
e+9) {
72 edm::LogVerbatim(
"TimingSim") <<
"TimingSD : Initialize called for " << GetName() <<
" time slice factor " 100 if (historyCut > 0.) {
110 edeposit = aStep->GetTotalEnergyDeposit();
125 const G4Track* newTrack = aStep->GetTrack();
129 if (newTrack->GetDefinition()->GetPDGCharge() == 0.0) {
146 LogDebug(
"TimingSim") <<
"TimingSD:" 148 <<
"\n Global step length: " << distGlobal <<
"\n Local entry point: " <<
hitPointLocal 149 <<
"\n Local exit point: " <<
hitPointLocalExit <<
"\n Local step length: " << distLocal;
150 if (std::fabs(distGlobal - distLocal) > 1.
e-6) {
151 LogDebug(
"TimingSim") <<
"DIFFERENCE IN DISTANCE \n";
204 for (
int j = 0;
j <
theHC->entries(); ++
j) {
222 if (tof < hit->getTof()) {
250 if (hit ==
nullptr) {
260 const G4VPhysicalVolume* currentPV =
preStepPoint->GetPhysicalVolume();
261 edm::LogVerbatim(
"TimingSim") <<
"TimingSD CreateNewHit for " << GetName() <<
" PV " << currentPV->GetName()
262 <<
" PVid = " << currentPV->GetCopyNo() <<
" Unit " <<
unitID <<
"\n primary " 265 <<
theTrack->GetDefinition()->GetParticleName() <<
" parentID " 268 if (
theTrack->GetCreatorProcess() !=
nullptr) {
318 void TimingSD::setToLocal(
const G4StepPoint* stepPoint,
const G4ThreeVector& globalPoint, G4ThreeVector& localPoint) {
319 const G4VTouchable* touch = stepPoint->GetTouchable();
320 localPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
335 edm::LogInfo(
"TimingSim") <<
"TimingSD: Hit for storage \n" 336 << *aHit <<
"\n Entry point: " << locEntryPoint <<
"\n Exit point: " << locExitPoint
355 LogDebug(
"TimingSim") <<
"TimingSD: Collection " <<
theHC->GetName() <<
"\n";
356 theHC->PrintAllHits();
366 LogDebug(
"TimingSim") <<
" Dispatched BeginOfEvent for " << GetName();
void setEntryLocalP(const G4ThreeVector &xyz)
void setEntry(const G4ThreeVector &xyz)
void setTimeFactor(double)
float getPhiAtEntry() const
int getParticleType() const
void EndOfEvent(G4HCofThisEvent *eventHC) override
void clearHits() override
Local3DPoint ConvertToLocal3DPoint(const G4ThreeVector &point) const
void setIncidentEnergy(float e)
G4ThreeVector hitPointLocal
void fillHits(edm::PSimHitContainer &, const std::string &) override
virtual uint32_t setDetUnitId(const G4Step *step)=0
virtual bool checkHit(const G4Step *, BscG4Hit *)
G4ThreeVector hitPointLocalExit
void createNewHit(const G4Step *)
void setCuts(double eCut, double historyCut)
void setParticleType(int i)
int getTimeSliceID() const
void setToLocal(const G4StepPoint *stepPoint, const G4ThreeVector &globalPoint, G4ThreeVector &localPoint)
void setThetaAtEntry(float t)
void storeHit(BscG4Hit *)
std::vector< PSimHit > & hits()
void getStepInfo(const G4Step *)
unsigned int processId(const G4VProcess *p) const
static const float invgev
void update(const BeginOfEvent *) override
This routine will be called when the appropriate signal arrives.
void setUnitID(uint32_t id)
virtual void Initialize()
bool ProcessHits(G4Step *, G4TouchableHistory *) override
void setPhiAtEntry(float f)
G4ProcessTypeEnumerator * theEnumerator
const G4ThreeVector & getExitLocalP() const
static const double invdeg
bool hitExists(const G4Step *)
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
const G4StepPoint * preStepPoint
float getThetaAtEntry() const
void setTimeSlice(double d)
void addEnergyDeposit(float em, float hd)
void setExitLocalP(const G4ThreeVector &xyz)
void setVertexPosition(const G4ThreeVector &)
const G4ThreeVector & getEntryLocalP() const
TimingSD(const std::string &, const edm::EventSetup &, const SensitiveDetectorCatalog &, const edm::ParameterSet &, const SimTrackManager *)
static const double invns
const G4StepPoint * postStepPoint
BscG4HitCollection * theHC
static bool isGammaElectronPositron(int pdgCode)
virtual bool processHits(const PSimHit &)
uint32_t getUnitID() const
std::vector< PSimHit > PSimHitContainer
G4THitsCollection< BscG4Hit > BscG4HitCollection
void Initialize(G4HCofThisEvent *HCE) override
Power< A, B >::type pow(const A &a, const B &b)
float getEnergyLoss() const
G4ThreeVector hitPointExit