CMS 3D CMS Logo

List of all members | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
TimingSD Class Reference

#include <TimingSD.h>

Inheritance diagram for TimingSD:
SensitiveTkDetector Observer< const BeginOfEvent *> SensitiveDetector Bcm1fSD BHMSD BscSD MtdSD PltSD

Public Member Functions

void clearHits () override
 
void EndOfEvent (G4HCofThisEvent *eventHC) override
 
void fillHits (edm::PSimHitContainer &, const std::string &) override
 
void Initialize (G4HCofThisEvent *HCE) override
 
void PrintAll () override
 
bool ProcessHits (G4Step *, G4TouchableHistory *) override
 
 TimingSD (const std::string &, const SensitiveDetectorCatalog &, const SimTrackManager *)
 
 ~TimingSD () override
 
- Public Member Functions inherited from SensitiveTkDetector
 SensitiveTkDetector (const std::string &iname, const SensitiveDetectorCatalog &clg)
 
- Public Member Functions inherited from SensitiveDetector
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 SensitiveDetectorCatalog &, bool calo)
 
virtual uint32_t setDetUnitId (const G4Step *step)=0
 
 ~SensitiveDetector () override
 
- Public Member Functions inherited from Observer< const BeginOfEvent *>
 Observer ()
 
void slotForUpdate (const BeginOfEvent * iT)
 
virtual ~Observer ()
 

Protected Member Functions

virtual bool checkHit (const G4Step *, BscG4Hit *)
 
const G4ThreeVector & getGlobalEntryPoint () const
 
const G4ThreeVector & getLocalEntryPoint () const
 
virtual int getTrackID (const G4Track *)
 
void setCuts (double eCut, double historyCut)
 
void setTimeFactor (double)
 
void setToLocal (const G4StepPoint *stepPoint, const G4ThreeVector &globalPoint, G4ThreeVector &localPoint)
 
void update (const BeginOfEvent *) override
 This routine will be called when the appropriate signal arrives. More...
 
- Protected Member Functions inherited from SensitiveDetector
TrackInformationcmsTrackInformation (const G4Track *aTrack)
 
Local3DPoint ConvertToLocal3DPoint (const G4ThreeVector &point) const
 
Local3DPoint FinalStepPosition (const G4Step *step, coordinates) const
 
Local3DPoint InitialStepPosition (const G4Step *step, coordinates) const
 
Local3DPoint LocalPostStepPosition (const G4Step *step) const
 
Local3DPoint LocalPreStepPosition (const G4Step *step) const
 
void NaNTrap (const G4Step *step) const
 
void setNames (const std::vector< std::string > &)
 

Private Member Functions

void createNewHit (const G4Step *)
 
void getStepInfo (const G4Step *)
 
bool hitExists (const G4Step *)
 
void storeHit (BscG4Hit *)
 
void updateHit ()
 

Private Attributes

BscG4HitcurrentHit
 
float edeposit
 
float edepositEM
 
float edepositHAD
 
double energyCut
 
double energyHistoryCut
 
int hcID
 
G4ThreeVector hitPoint
 
G4ThreeVector hitPointExit
 
G4ThreeVector hitPointLocal
 
G4ThreeVector hitPointLocalExit
 
double incidentEnergy
 
const G4StepPoint * postStepPoint
 
const G4StepPoint * preStepPoint
 
uint32_t previousUnitID
 
int primaryID
 
int primID
 
TrackingSlaveSDslave
 
G4ProcessTypeEnumeratortheEnumerator
 
BscG4HitCollectiontheHC
 
const SimTrackManagertheManager
 
const G4Track * theTrack
 
double timeFactor
 
float tof
 
int tsID
 
double tSlice
 
int tSliceID
 
uint32_t unitID
 

Additional Inherited Members

- Protected Types inherited from SensitiveDetector
enum  coordinates { WorldCoordinates, LocalCoordinates }
 

Detailed Description

Definition at line 29 of file TimingSD.h.

Constructor & Destructor Documentation

◆ TimingSD()

TimingSD::TimingSD ( const std::string &  name,
const SensitiveDetectorCatalog clg,
const SimTrackManager manager 
)

Definition at line 37 of file TimingSD.cc.

References Skims_PA_cff::name, slave, and theEnumerator.

38  : SensitiveTkDetector(name, clg),
39  theManager(manager),
40  theHC(nullptr),
41  currentHit(nullptr),
42  theTrack(nullptr),
43  preStepPoint(nullptr),
44  postStepPoint(nullptr),
45  unitID(0),
46  previousUnitID(0),
47  primID(-2),
48  hcID(-1),
49  tsID(-2),
50  primaryID(0),
51  tSliceID(-1),
52  timeFactor(1.0),
53  energyCut(1.e+9),
54  energyHistoryCut(1.e+9) {
55  slave = new TrackingSlaveSD(name);
57 }
uint32_t previousUnitID
Definition: TimingSD.h:86
double timeFactor
Definition: TimingSD.h:100
int hcID
Definition: TimingSD.h:89
int primID
Definition: TimingSD.h:88
BscG4Hit * currentHit
Definition: TimingSD.h:81
int tsID
Definition: TimingSD.h:90
TrackingSlaveSD * slave
Definition: TimingSD.h:75
G4ProcessTypeEnumerator * theEnumerator
Definition: TimingSD.h:76
const G4Track * theTrack
Definition: TimingSD.h:82
double energyHistoryCut
Definition: TimingSD.h:103
const G4StepPoint * preStepPoint
Definition: TimingSD.h:83
int tSliceID
Definition: TimingSD.h:92
double energyCut
Definition: TimingSD.h:102
uint32_t unitID
Definition: TimingSD.h:86
const G4StepPoint * postStepPoint
Definition: TimingSD.h:84
BscG4HitCollection * theHC
Definition: TimingSD.h:79
const SimTrackManager * theManager
Definition: TimingSD.h:78
SensitiveTkDetector(const std::string &iname, const SensitiveDetectorCatalog &clg)
int primaryID
Definition: TimingSD.h:91

◆ ~TimingSD()

TimingSD::~TimingSD ( )
override

Definition at line 59 of file TimingSD.cc.

References slave, and theEnumerator.

59  {
60  delete slave;
61  delete theEnumerator;
62 }
TrackingSlaveSD * slave
Definition: TimingSD.h:75
G4ProcessTypeEnumerator * theEnumerator
Definition: TimingSD.h:76

Member Function Documentation

◆ checkHit()

bool TimingSD::checkHit ( const G4Step *  ,
BscG4Hit hit 
)
protectedvirtual

Reimplemented in Bcm1fSD, and PltSD.

Definition at line 220 of file TimingSD.cc.

References dqmMemoryStats::float, hitPoint, hitPointLocal, hitPointLocalExit, incidentEnergy, invdeg, invgev, preStepPoint, primaryID, G4ProcessTypeEnumerator::processId(), theEnumerator, theTrack, and tof.

Referenced by hitExists().

220  {
221  // change hit info to fastest primary particle
222  if (tof < hit->getTof()) {
223  hit->setTrackID(primaryID);
224  hit->setIncidentEnergy((float)incidentEnergy);
225  hit->setPabs(float(preStepPoint->GetMomentum().mag()) * invgev);
226  hit->setTof(tof);
227  hit->setParticleType(theTrack->GetDefinition()->GetPDGEncoding());
228 
229  float ThetaAtEntry = (float)(hitPointLocal.theta() * invdeg);
230  float PhiAtEntry = (float)(hitPointLocal.phi() * invdeg);
231 
232  hit->setThetaAtEntry(ThetaAtEntry);
233  hit->setPhiAtEntry(PhiAtEntry);
234 
235  hit->setEntry(hitPoint);
236  hit->setEntryLocalP(hitPointLocal);
237  hit->setExitLocalP(hitPointLocalExit);
238 
239  hit->setParentId(theTrack->GetParentID());
240  hit->setProcessId(theEnumerator->processId(theTrack->GetCreatorProcess()));
241 
242  hit->setVertexPosition(theTrack->GetVertexPosition());
243  }
244  return true;
245 }
G4ThreeVector hitPointLocal
Definition: TimingSD.h:96
G4ThreeVector hitPointLocalExit
Definition: TimingSD.h:97
static const float invgev
Definition: TimingSD.cc:32
float tof
Definition: TimingSD.h:106
G4ProcessTypeEnumerator * theEnumerator
Definition: TimingSD.h:76
static const double invdeg
Definition: TimingSD.cc:34
const G4Track * theTrack
Definition: TimingSD.h:82
const G4StepPoint * preStepPoint
Definition: TimingSD.h:83
double incidentEnergy
Definition: TimingSD.h:105
unsigned int processId(const G4VProcess *p) const
G4ThreeVector hitPoint
Definition: TimingSD.h:94
int primaryID
Definition: TimingSD.h:91

◆ clearHits()

void TimingSD::clearHits ( )
overridevirtual

Implements SensitiveDetector.

Definition at line 373 of file TimingSD.cc.

References TrackingSlaveSD::Initialize(), and slave.

Referenced by update().

373 { slave->Initialize(); }
virtual void Initialize()
TrackingSlaveSD * slave
Definition: TimingSD.h:75

◆ createNewHit()

void TimingSD::createNewHit ( const G4Step *  aStep)
private

Definition at line 258 of file TimingSD.cc.

References currentHit, hitPoint, hitPointLocal, hitPointLocalExit, incidentEnergy, invdeg, invgev, preStepPoint, primaryID, G4ProcessTypeEnumerator::processId(), BscG4Hit::setEntry(), BscG4Hit::setEntryLocalP(), BscG4Hit::setExitLocalP(), BscG4Hit::setIncidentEnergy(), BscG4Hit::setPabs(), BscG4Hit::setParentId(), BscG4Hit::setParticleType(), BscG4Hit::setPhiAtEntry(), BscG4Hit::setProcessId(), BscG4Hit::setThetaAtEntry(), BscG4Hit::setTimeSlice(), BscG4Hit::setTof(), BscG4Hit::setTrackID(), BscG4Hit::setUnitID(), BscG4Hit::setVertexPosition(), storeHit(), theEnumerator, theTrack, tof, tSlice, tSliceID, unitID, and updateHit().

Referenced by ProcessHits().

258  {
259 #ifdef EDM_ML_DEBUG
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 "
263  << primaryID << " Tof(ns)= " << tof << " time slice " << tSliceID
264  << " E(MeV)= " << incidentEnergy << " trackID " << theTrack->GetTrackID() << " "
265  << theTrack->GetDefinition()->GetParticleName() << " parentID "
266  << theTrack->GetParentID();
267 
268  if (theTrack->GetCreatorProcess() != nullptr) {
269  edm::LogVerbatim("TimingSim") << theTrack->GetCreatorProcess()->GetProcessName();
270  } else {
271  edm::LogVerbatim("TimingSim") << " is primary particle";
272  }
273 #endif
274 
275  currentHit = new BscG4Hit;
280 
281  currentHit->setPabs(float(preStepPoint->GetMomentum().mag() * invgev));
283  currentHit->setParticleType(theTrack->GetDefinition()->GetPDGEncoding());
284 
285  float ThetaAtEntry = hitPointLocal.theta() * invdeg;
286  float PhiAtEntry = hitPointLocal.phi() * invdeg;
287 
288  currentHit->setThetaAtEntry(ThetaAtEntry);
289  currentHit->setPhiAtEntry(PhiAtEntry);
290 
294 
295  currentHit->setParentId(theTrack->GetParentID());
296  currentHit->setProcessId(theEnumerator->processId(theTrack->GetCreatorProcess()));
297 
298  currentHit->setVertexPosition(theTrack->GetVertexPosition());
299 
300  updateHit();
302 }
Log< level::Info, true > LogVerbatim
void setTof(float e)
Definition: BscG4Hit.h:73
void setEntryLocalP(const G4ThreeVector &xyz)
Definition: BscG4Hit.h:33
void setEntry(const G4ThreeVector &xyz)
Definition: BSCG4Hit.cc:98
void setIncidentEnergy(float e)
Definition: BscG4Hit.h:51
G4ThreeVector hitPointLocal
Definition: TimingSD.h:96
void setTrackID(int id)
Definition: BscG4Hit.h:54
void setParentId(int p)
Definition: BscG4Hit.h:99
G4ThreeVector hitPointLocalExit
Definition: TimingSD.h:97
BscG4Hit * currentHit
Definition: TimingSD.h:81
void setParticleType(int i)
Definition: BscG4Hit.h:75
void setThetaAtEntry(float t)
Definition: BscG4Hit.h:80
void storeHit(BscG4Hit *)
Definition: TimingSD.cc:247
void setPabs(float e)
Definition: BscG4Hit.h:72
static const float invgev
Definition: TimingSD.cc:32
void setUnitID(uint32_t id)
Definition: BscG4Hit.h:57
float tof
Definition: TimingSD.h:106
void setPhiAtEntry(float f)
Definition: BscG4Hit.h:81
G4ProcessTypeEnumerator * theEnumerator
Definition: TimingSD.h:76
static const double invdeg
Definition: TimingSD.cc:34
const G4Track * theTrack
Definition: TimingSD.h:82
const G4StepPoint * preStepPoint
Definition: TimingSD.h:83
int tSliceID
Definition: TimingSD.h:92
void setTimeSlice(double d)
Definition: BscG4Hit.h:60
uint32_t unitID
Definition: TimingSD.h:86
void setExitLocalP(const G4ThreeVector &xyz)
Definition: BscG4Hit.h:36
double tSlice
Definition: TimingSD.h:99
void setVertexPosition(const G4ThreeVector &)
Definition: BSCG4Hit.cc:125
void updateHit()
Definition: TimingSD.cc:304
double incidentEnergy
Definition: TimingSD.h:105
unsigned int processId(const G4VProcess *p) const
void setProcessId(int p)
Definition: BscG4Hit.h:100
G4ThreeVector hitPoint
Definition: TimingSD.h:94
int primaryID
Definition: TimingSD.h:91

◆ EndOfEvent()

void TimingSD::EndOfEvent ( G4HCofThisEvent *  eventHC)
override

Definition at line 323 of file TimingSD.cc.

References SensitiveDetector::ConvertToLocal3DPoint(), BscG4Hit::getEnergyLoss(), BscG4Hit::getEntryLocalP(), BscG4Hit::getExitLocalP(), BscG4Hit::getPabs(), BscG4Hit::getParticleType(), BscG4Hit::getPhiAtEntry(), BscG4Hit::getProcessId(), BscG4Hit::getThetaAtEntry(), BscG4Hit::getTof(), BscG4Hit::getTrackID(), BscG4Hit::getUnitID(), dqmiolumiharvest::j, nhits, TrackingSlaveSD::processHits(), slave, and theHC.

323  {
324  int nhits = theHC->entries();
325  if (0 == nhits) {
326  return;
327  }
328  // here we loop over transient hits and make them persistent
329  for (int j = 0; j < nhits; ++j) {
330  BscG4Hit* aHit = (*theHC)[j];
331  Local3DPoint locEntryPoint = ConvertToLocal3DPoint(aHit->getEntryLocalP());
332  Local3DPoint locExitPoint = ConvertToLocal3DPoint(aHit->getExitLocalP());
333 
334 #ifdef EDM_ML_DEBUG
335  edm::LogVerbatim("TimingSim") << "TimingSD: Hit for storage \n"
336  << *aHit << "\n Entry point: " << locEntryPoint << "\n Exit point: " << locExitPoint;
337 #endif
338 
339  slave->processHits(PSimHit(locEntryPoint,
340  locExitPoint,
341  aHit->getPabs(),
342  aHit->getTof(),
343  aHit->getEnergyLoss(),
344  aHit->getParticleType(),
345  aHit->getUnitID(),
346  aHit->getTrackID(),
347  aHit->getThetaAtEntry(),
348  aHit->getPhiAtEntry(),
349  aHit->getProcessId()));
350  }
351 }
Log< level::Info, true > LogVerbatim
uint32_t getUnitID() const
Definition: BscG4Hit.h:56
int getParticleType() const
Definition: BscG4Hit.h:70
int getProcessId() const
Definition: BscG4Hit.h:94
float getPhiAtEntry() const
Definition: BscG4Hit.h:78
float getTof() const
Definition: BscG4Hit.h:68
float getPabs() const
Definition: BscG4Hit.h:67
Local3DPoint ConvertToLocal3DPoint(const G4ThreeVector &point) const
int getTrackID() const
Definition: BscG4Hit.h:53
TrackingSlaveSD * slave
Definition: TimingSD.h:75
float getThetaAtEntry() const
Definition: BscG4Hit.h:77
float getEnergyLoss() const
Definition: BscG4Hit.h:69
BscG4HitCollection * theHC
Definition: TimingSD.h:79
const G4ThreeVector & getExitLocalP() const
Definition: BscG4Hit.h:35
virtual bool processHits(const PSimHit &)
const G4ThreeVector & getEntryLocalP() const
Definition: BscG4Hit.h:32

◆ fillHits()

void TimingSD::fillHits ( edm::PSimHitContainer cc,
const std::string &  hname 
)
overridevirtual

Implements SensitiveTkDetector.

Definition at line 360 of file TimingSD.cc.

References gpuPixelDoublets::cc, TrackingSlaveSD::hits(), TrackingSlaveSD::name(), and slave.

360  {
361  if (slave->name() == hname) {
362  cc = slave->hits();
363  }
364 }
std::string name() const
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
std::vector< PSimHit > & hits()
TrackingSlaveSD * slave
Definition: TimingSD.h:75

◆ getGlobalEntryPoint()

const G4ThreeVector& TimingSD::getGlobalEntryPoint ( ) const
inlineprotected

Definition at line 63 of file TimingSD.h.

References hitPoint.

63 { return hitPoint; };
G4ThreeVector hitPoint
Definition: TimingSD.h:94

◆ getLocalEntryPoint()

const G4ThreeVector& TimingSD::getLocalEntryPoint ( ) const
inlineprotected

Definition at line 62 of file TimingSD.h.

References hitPointLocal.

Referenced by Bcm1fSD::checkHit(), and PltSD::checkHit().

62 { return hitPointLocal; };
G4ThreeVector hitPointLocal
Definition: TimingSD.h:96

◆ getStepInfo()

void TimingSD::getStepInfo ( const G4Step *  aStep)
private

Definition at line 113 of file TimingSD.cc.

References SensitiveDetector::cmsTrackInformation(), MillePedeFileConverter_cfg::e, edeposit, edepositEM, edepositHAD, energyCut, energyHistoryCut, dqmMemoryStats::float, getTrackID(), hitPoint, hitPointExit, hitPointLocal, hitPointLocalExit, incidentEnergy, info(), createfilelist::int, invgev, invns, G4TrackToParticleID::isGammaElectronPositron(), LogDebug, postStepPoint, funct::pow(), preStepPoint, primaryID, SensitiveDetector::setDetUnitId(), setToLocal(), mathSSE::sqrt(), theTrack, timeFactor, tof, tSlice, tSliceID, and unitID.

Referenced by ProcessHits().

113  {
114  preStepPoint = aStep->GetPreStepPoint();
115  postStepPoint = aStep->GetPostStepPoint();
116  hitPointExit = postStepPoint->GetPosition();
118  const G4Track* newTrack = aStep->GetTrack();
119 
120  // neutral particles deliver energy post step
121  // charged particle start deliver energy pre step
122  if (newTrack->GetDefinition()->GetPDGCharge() == 0.0) {
125  tof = (float)(postStepPoint->GetGlobalTime() * invns);
126  } else {
127  hitPoint = preStepPoint->GetPosition();
129  tof = (float)(preStepPoint->GetGlobalTime() * invns);
130  }
131 
132 #ifdef EDM_ML_DEBUG
133  double distGlobal =
134  std::sqrt(std::pow(hitPoint.x() - hitPointExit.x(), 2) + std::pow(hitPoint.y() - hitPointExit.y(), 2) +
135  std::pow(hitPoint.z() - hitPointExit.z(), 2));
136  double distLocal = std::sqrt(std::pow(hitPointLocal.x() - hitPointLocalExit.x(), 2) +
139  LogDebug("TimingSim") << "TimingSD:"
140  << "\n Global entry point: " << hitPoint << "\n Global exit point: " << hitPointExit
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";
145  }
146 #endif
147 
148  incidentEnergy = preStepPoint->GetKineticEnergy();
149 
150  // should MC truth be saved
151  if (newTrack != theTrack) {
152  theTrack = newTrack;
153  TrackInformation* info = nullptr;
154  if (incidentEnergy > energyCut) {
156  info->setStoreTrack();
157  }
159  if (nullptr == info) {
161  }
162  info->putInHistory();
163  }
164 #ifdef EDM_ML_DEBUG
165  if (info != nullptr) {
166  LogDebug("TimingSim") << "TrackInformation for ID = " << theTrack->GetTrackID();
167  info->Print();
168  }
169 #endif
170  }
171 
172  edeposit *= invgev;
175  edepositHAD = 0.f;
176  } else {
177  edepositEM = 0.f;
179  }
180  // time slice is defined for the entry point
181  tSlice = timeFactor * preStepPoint->GetGlobalTime() * invns;
182  tSliceID = (int)tSlice;
183 
184  unitID = setDetUnitId(aStep);
186 }
static const TGPicture * info(bool iBackgroundIsBlack)
double timeFactor
Definition: TimingSD.h:100
float edepositHAD
Definition: TimingSD.h:108
G4ThreeVector hitPointLocal
Definition: TimingSD.h:96
virtual uint32_t setDetUnitId(const G4Step *step)=0
G4ThreeVector hitPointLocalExit
Definition: TimingSD.h:97
float edepositEM
Definition: TimingSD.h:108
void setToLocal(const G4StepPoint *stepPoint, const G4ThreeVector &globalPoint, G4ThreeVector &localPoint)
Definition: TimingSD.cc:318
static const float invgev
Definition: TimingSD.cc:32
float tof
Definition: TimingSD.h:106
T sqrt(T t)
Definition: SSEVec.h:19
float edeposit
Definition: TimingSD.h:107
TrackInformation * cmsTrackInformation(const G4Track *aTrack)
const G4Track * theTrack
Definition: TimingSD.h:82
double energyHistoryCut
Definition: TimingSD.h:103
const G4StepPoint * preStepPoint
Definition: TimingSD.h:83
int tSliceID
Definition: TimingSD.h:92
double energyCut
Definition: TimingSD.h:102
uint32_t unitID
Definition: TimingSD.h:86
double tSlice
Definition: TimingSD.h:99
static const double invns
Definition: TimingSD.cc:33
const G4StepPoint * postStepPoint
Definition: TimingSD.h:84
static bool isGammaElectronPositron(int pdgCode)
virtual int getTrackID(const G4Track *)
Definition: TimingSD.cc:375
double incidentEnergy
Definition: TimingSD.h:105
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
G4ThreeVector hitPointExit
Definition: TimingSD.h:95
G4ThreeVector hitPoint
Definition: TimingSD.h:94
int primaryID
Definition: TimingSD.h:91
#define LogDebug(id)

◆ getTrackID()

int TimingSD::getTrackID ( const G4Track *  aTrack)
protectedvirtual

Reimplemented in MtdSD.

Definition at line 375 of file TimingSD.cc.

References LogDebug.

Referenced by getStepInfo().

375  {
376  LogDebug("TimingSim") << "primary ID: " << aTrack->GetTrackID();
377  return aTrack->GetTrackID();
378 }
#define LogDebug(id)

◆ hitExists()

bool TimingSD::hitExists ( const G4Step *  aStep)
private

Definition at line 188 of file TimingSD.cc.

References checkHit(), currentHit, newFWLiteAna::found, BscG4Hit::getTimeSliceID(), BscG4Hit::getUnitID(), dqmiolumiharvest::j, previousUnitID, theHC, tsID, tSliceID, unitID, and updateHit().

Referenced by ProcessHits().

188  {
189  if (!currentHit) {
190  return false;
191  }
192 
193  // Update if in the same detector and time-slice
194  if (tSliceID == tsID && unitID == previousUnitID) {
195  updateHit();
196  return true;
197  }
198 
199  //look in the HitContainer whether a hit with the same primID, unitID,
200  //tSliceID already exists:
201 
202  bool found = false;
203  int thehc_entries = theHC->entries();
204  for (int j = 0; j < thehc_entries; ++j) {
205  BscG4Hit* aHit = (*theHC)[j];
206  if (aHit->getTimeSliceID() == tSliceID && aHit->getUnitID() == unitID) {
207  if (checkHit(aStep, aHit)) {
208  currentHit = aHit;
209  found = true;
210  break;
211  }
212  }
213  }
214  if (found) {
215  updateHit();
216  }
217  return found;
218 }
uint32_t previousUnitID
Definition: TimingSD.h:86
uint32_t getUnitID() const
Definition: BscG4Hit.h:56
virtual bool checkHit(const G4Step *, BscG4Hit *)
Definition: TimingSD.cc:220
BscG4Hit * currentHit
Definition: TimingSD.h:81
int tsID
Definition: TimingSD.h:90
int tSliceID
Definition: TimingSD.h:92
uint32_t unitID
Definition: TimingSD.h:86
void updateHit()
Definition: TimingSD.cc:304
int getTimeSliceID() const
Definition: BscG4Hit.h:61
BscG4HitCollection * theHC
Definition: TimingSD.h:79

◆ Initialize()

void TimingSD::Initialize ( G4HCofThisEvent *  HCE)
override

Definition at line 64 of file TimingSD.cc.

References bysipixelclustmulteventfilter_cfi::collectionName, energyCut, energyHistoryCut, hcID, primID, theHC, timeFactor, and tsID.

64  {
65  edm::LogVerbatim("TimingSim") << "TimingSD : Initialize called for " << GetName() << " time slice factor "
66  << timeFactor << "\n MC truth cuts in are " << energyCut / CLHEP::GeV << " GeV and "
67  << energyHistoryCut / CLHEP::GeV << " GeV";
68 
69  theHC = new BscG4HitCollection(GetName(), collectionName[0]);
70  if (hcID < 0) {
71  hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
72  }
73  HCE->AddHitsCollection(hcID, theHC);
74 
75  tsID = -2;
76  primID = -2;
77 }
Log< level::Info, true > LogVerbatim
double timeFactor
Definition: TimingSD.h:100
int hcID
Definition: TimingSD.h:89
int primID
Definition: TimingSD.h:88
int tsID
Definition: TimingSD.h:90
double energyHistoryCut
Definition: TimingSD.h:103
double energyCut
Definition: TimingSD.h:102
BscG4HitCollection * theHC
Definition: TimingSD.h:79
G4THitsCollection< BscG4Hit > BscG4HitCollection

◆ PrintAll()

void TimingSD::PrintAll ( )
override

Definition at line 353 of file TimingSD.cc.

References theHC.

353  {
354 #ifdef EDM_ML_DEBUG
355  edm::LogVerbatim("TimingSim") << "TimingSD: Collection " << theHC->GetName();
356 #endif
357  theHC->PrintAllHits();
358 }
Log< level::Info, true > LogVerbatim
BscG4HitCollection * theHC
Definition: TimingSD.h:79

◆ ProcessHits()

bool TimingSD::ProcessHits ( G4Step *  aStep,
G4TouchableHistory *   
)
overridevirtual

Implements SensitiveDetector.

Definition at line 102 of file TimingSD.cc.

References createNewHit(), edeposit, f, getStepInfo(), and hitExists().

102  {
103  edeposit = aStep->GetTotalEnergyDeposit();
104  if (edeposit > 0.f) {
105  getStepInfo(aStep);
106  if (!hitExists(aStep)) {
107  createNewHit(aStep);
108  }
109  }
110  return true;
111 }
void createNewHit(const G4Step *)
Definition: TimingSD.cc:258
void getStepInfo(const G4Step *)
Definition: TimingSD.cc:113
float edeposit
Definition: TimingSD.h:107
double f[11][100]
bool hitExists(const G4Step *)
Definition: TimingSD.cc:188

◆ setCuts()

void TimingSD::setCuts ( double  eCut,
double  historyCut 
)
protected

Definition at line 89 of file TimingSD.cc.

References energyCut, and energyHistoryCut.

Referenced by Bcm1fSD::Bcm1fSD(), MtdSD::MtdSD(), and PltSD::PltSD().

89  {
90  if (eCut > 0.) {
91  energyCut = eCut;
92  }
93  if (historyCut > 0.) {
94  energyHistoryCut = historyCut;
95  }
96 #ifdef EDM_ML_DEBUG
97  edm::LogVerbatim("TimingSim") << "TimingSD : for " << GetName() << " MC truth cuts in are " << energyCut / CLHEP::GeV
98  << " GeV and " << energyHistoryCut / CLHEP::GeV << " GeV";
99 #endif
100 }
Log< level::Info, true > LogVerbatim
double energyHistoryCut
Definition: TimingSD.h:103
double energyCut
Definition: TimingSD.h:102

◆ setTimeFactor()

void TimingSD::setTimeFactor ( double  val)
protected

Definition at line 79 of file TimingSD.cc.

References timeFactor, and heppy_batch::val.

Referenced by MtdSD::MtdSD().

79  {
80  if (val <= 0.0) {
81  return;
82  }
83  timeFactor = val;
84 #ifdef EDM_ML_DEBUG
85  edm::LogVerbatim("TimingSim") << "TimingSD : for " << GetName() << " time slice factor is set to " << timeFactor;
86 #endif
87 }
Log< level::Info, true > LogVerbatim
double timeFactor
Definition: TimingSD.h:100

◆ setToLocal()

void TimingSD::setToLocal ( const G4StepPoint *  stepPoint,
const G4ThreeVector &  globalPoint,
G4ThreeVector &  localPoint 
)
protected

Definition at line 318 of file TimingSD.cc.

Referenced by getStepInfo().

318  {
319  const G4VTouchable* touch = stepPoint->GetTouchable();
320  localPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
321 }

◆ storeHit()

void TimingSD::storeHit ( BscG4Hit hit)
private

Definition at line 247 of file TimingSD.cc.

References primID, and theHC.

Referenced by createNewHit().

247  {
248  if (primID < 0)
249  return;
250  if (hit == nullptr) {
251  edm::LogWarning("BscSim") << "BscSD: hit to be stored is NULL !!";
252  return;
253  }
254 
255  theHC->insert(hit);
256 }
int primID
Definition: TimingSD.h:88
BscG4HitCollection * theHC
Definition: TimingSD.h:79
Log< level::Warning, false > LogWarning

◆ update()

void TimingSD::update ( const BeginOfEvent )
overrideprotectedvirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent *>.

Definition at line 366 of file TimingSD.cc.

References clearHits().

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), progressbar.ProgressBar::finish(), and MatrixUtil.Steps::overwrite().

366  {
367 #ifdef EDM_ML_DEBUG
368  edm::LogVerbatim("TimingSim") << " Dispatched BeginOfEvent for " << GetName();
369 #endif
370  clearHits();
371 }
Log< level::Info, true > LogVerbatim
void clearHits() override
Definition: TimingSD.cc:373

◆ updateHit()

void TimingSD::updateHit ( )
private

Definition at line 304 of file TimingSD.cc.

References BscG4Hit::addEnergyDeposit(), currentHit, edeposit, edepositEM, edepositHAD, postStepPoint, previousUnitID, primaryID, primID, tsID, tSliceID, and unitID.

Referenced by createNewHit(), and hitExists().

304  {
306 
307 #ifdef EDM_ML_DEBUG
308  edm::LogVerbatim("TimingSim") << "updateHit: " << GetName() << " add eloss(GeV) " << edeposit
309  << "CurrentHit=" << currentHit << ", PostStepPoint= " << postStepPoint->GetPosition();
310 #endif
311 
312  // buffer for next steps:
313  tsID = tSliceID;
314  primID = primaryID;
316 }
uint32_t previousUnitID
Definition: TimingSD.h:86
Log< level::Info, true > LogVerbatim
float edepositHAD
Definition: TimingSD.h:108
int primID
Definition: TimingSD.h:88
BscG4Hit * currentHit
Definition: TimingSD.h:81
float edepositEM
Definition: TimingSD.h:108
int tsID
Definition: TimingSD.h:90
float edeposit
Definition: TimingSD.h:107
int tSliceID
Definition: TimingSD.h:92
void addEnergyDeposit(float em, float hd)
Definition: BSCG4Hit.cc:113
uint32_t unitID
Definition: TimingSD.h:86
const G4StepPoint * postStepPoint
Definition: TimingSD.h:84
int primaryID
Definition: TimingSD.h:91

Member Data Documentation

◆ currentHit

BscG4Hit* TimingSD::currentHit
private

Definition at line 81 of file TimingSD.h.

Referenced by createNewHit(), hitExists(), and updateHit().

◆ edeposit

float TimingSD::edeposit
private

Definition at line 107 of file TimingSD.h.

Referenced by getStepInfo(), ProcessHits(), and updateHit().

◆ edepositEM

float TimingSD::edepositEM
private

Definition at line 108 of file TimingSD.h.

Referenced by getStepInfo(), and updateHit().

◆ edepositHAD

float TimingSD::edepositHAD
private

Definition at line 108 of file TimingSD.h.

Referenced by getStepInfo(), and updateHit().

◆ energyCut

double TimingSD::energyCut
private

Definition at line 102 of file TimingSD.h.

Referenced by getStepInfo(), Initialize(), and setCuts().

◆ energyHistoryCut

double TimingSD::energyHistoryCut
private

Definition at line 103 of file TimingSD.h.

Referenced by getStepInfo(), Initialize(), and setCuts().

◆ hcID

int TimingSD::hcID
private

Definition at line 89 of file TimingSD.h.

Referenced by Initialize().

◆ hitPoint

G4ThreeVector TimingSD::hitPoint
private

Definition at line 94 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), getGlobalEntryPoint(), and getStepInfo().

◆ hitPointExit

G4ThreeVector TimingSD::hitPointExit
private

Definition at line 95 of file TimingSD.h.

Referenced by getStepInfo().

◆ hitPointLocal

G4ThreeVector TimingSD::hitPointLocal
private

Definition at line 96 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), getLocalEntryPoint(), and getStepInfo().

◆ hitPointLocalExit

G4ThreeVector TimingSD::hitPointLocalExit
private

Definition at line 97 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), and getStepInfo().

◆ incidentEnergy

double TimingSD::incidentEnergy
private

Definition at line 105 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), and getStepInfo().

◆ postStepPoint

const G4StepPoint* TimingSD::postStepPoint
private

Definition at line 84 of file TimingSD.h.

Referenced by getStepInfo(), and updateHit().

◆ preStepPoint

const G4StepPoint* TimingSD::preStepPoint
private

Definition at line 83 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), and getStepInfo().

◆ previousUnitID

uint32_t TimingSD::previousUnitID
private

Definition at line 86 of file TimingSD.h.

Referenced by hitExists(), and updateHit().

◆ primaryID

int TimingSD::primaryID
private

Definition at line 91 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), getStepInfo(), and updateHit().

◆ primID

int TimingSD::primID
private

Definition at line 88 of file TimingSD.h.

Referenced by Initialize(), storeHit(), and updateHit().

◆ slave

TrackingSlaveSD* TimingSD::slave
private

Definition at line 75 of file TimingSD.h.

Referenced by clearHits(), EndOfEvent(), fillHits(), TimingSD(), and ~TimingSD().

◆ theEnumerator

G4ProcessTypeEnumerator* TimingSD::theEnumerator
private

Definition at line 76 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), TimingSD(), and ~TimingSD().

◆ theHC

BscG4HitCollection* TimingSD::theHC
private

Definition at line 79 of file TimingSD.h.

Referenced by EndOfEvent(), hitExists(), Initialize(), PrintAll(), and storeHit().

◆ theManager

const SimTrackManager* TimingSD::theManager
private

Definition at line 78 of file TimingSD.h.

◆ theTrack

const G4Track* TimingSD::theTrack
private

Definition at line 82 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), and getStepInfo().

◆ timeFactor

double TimingSD::timeFactor
private

Definition at line 100 of file TimingSD.h.

Referenced by getStepInfo(), Initialize(), and setTimeFactor().

◆ tof

float TimingSD::tof
private

Definition at line 106 of file TimingSD.h.

Referenced by checkHit(), createNewHit(), and getStepInfo().

◆ tsID

int TimingSD::tsID
private

Definition at line 90 of file TimingSD.h.

Referenced by hitExists(), Initialize(), and updateHit().

◆ tSlice

double TimingSD::tSlice
private

Definition at line 99 of file TimingSD.h.

Referenced by createNewHit(), and getStepInfo().

◆ tSliceID

int TimingSD::tSliceID
private

Definition at line 92 of file TimingSD.h.

Referenced by createNewHit(), getStepInfo(), hitExists(), and updateHit().

◆ unitID

uint32_t TimingSD::unitID
private

Definition at line 86 of file TimingSD.h.

Referenced by createNewHit(), getStepInfo(), hitExists(), and updateHit().