18 #include "G4StepPoint.hh"
20 #include "G4VPhysicalVolume.hh"
21 #include "G4SDManager.hh"
22 #include "G4VProcess.hh"
24 #include "G4PhysicalConstants.hh"
25 #include "G4SystemOfUnits.hh"
32 static const float invgev = 1.0 / CLHEP::GeV;
33 static const double invns = 1.0 / CLHEP::nanosecond;
34 static const double invdeg = 1.0 / CLHEP::deg;
43 preStepPoint(nullptr),
44 postStepPoint(nullptr),
54 energyHistoryCut(1.
e+9) {
65 edm::LogVerbatim(
"TimingSim") <<
"TimingSD : Initialize called for " << GetName() <<
" time slice factor "
93 if (historyCut > 0.) {
103 edeposit = aStep->GetTotalEnergyDeposit();
118 const G4Track* newTrack = aStep->GetTrack();
122 if (newTrack->GetDefinition()->GetPDGCharge() == 0.0) {
139 LogDebug(
"TimingSim") <<
"TimingSD:"
141 <<
"\n Global step length: " << distGlobal <<
"\n Local entry point: " <<
hitPointLocal
142 <<
"\n Local exit point: " <<
hitPointLocalExit <<
"\n Local step length: " << distLocal;
143 if (std::fabs(distGlobal - distLocal) > 1.
e-6) {
144 LogDebug(
"TimingSim") <<
"DIFFERENCE IN DISTANCE \n";
197 int thehc_entries =
theHC->entries();
198 for (
int j = 0;
j < thehc_entries; ++
j) {
216 if (tof < hit->getTof()) {
244 if (hit ==
nullptr) {
254 const G4VPhysicalVolume* currentPV =
preStepPoint->GetPhysicalVolume();
255 edm::LogVerbatim(
"TimingSim") <<
"TimingSD CreateNewHit for " << GetName() <<
" PV " << currentPV->GetName()
256 <<
" PVid = " << currentPV->GetCopyNo() <<
" Unit " <<
unitID <<
"\n primary "
259 <<
theTrack->GetDefinition()->GetParticleName() <<
" parentID "
262 if (
theTrack->GetCreatorProcess() !=
nullptr) {
312 void TimingSD::setToLocal(
const G4StepPoint* stepPoint,
const G4ThreeVector& globalPoint, G4ThreeVector& localPoint) {
313 const G4VTouchable* touch = stepPoint->GetTouchable();
314 localPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
330 << *aHit <<
"\n Entry point: " << locEntryPoint <<
"\n Exit point: " << locExitPoint;
351 theHC->PrintAllHits();
362 edm::LogVerbatim(
"TimingSim") <<
" Dispatched BeginOfEvent for " << GetName();
Log< level::Info, true > LogVerbatim
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)
TimingSD(const std::string &, const SensitiveDetectorCatalog &, const SimTrackManager *)
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)
std::string const collectionName[nCollections]
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
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
Log< level::Warning, false > LogWarning
void Initialize(G4HCofThisEvent *HCE) override
Power< A, B >::type pow(const A &a, const B &b)
float getEnergyLoss() const
G4ThreeVector hitPointExit