CMS 3D CMS Logo

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

#include <FP420SD.h>

Inheritance diagram for FP420SD:
SensitiveTkDetector Observer< const BeginOfRun * > Observer< const BeginOfEvent * > Observer< const EndOfEvent * > SensitiveDetector

Public Member Functions

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

Protected Attributes

float edepositEM
 
float edepositHAD
 
G4int emPDG
 
G4int epPDG
 
G4int gammaPDG
 

Private Member Functions

void CreateNewHit ()
 
void GetStepInfo (G4Step *aStep)
 
G4bool HitExists ()
 
void ResetForNewPrimary ()
 
G4ThreeVector SetToLocal (const G4ThreeVector &global)
 
G4ThreeVector SetToLocalExit (const G4ThreeVector &globalPoint)
 
void StoreHit (FP420G4Hit *)
 
void Summarize ()
 
void update (const BeginOfRun *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const BeginOfEvent *) override
 This routine will be called when the appropriate signal arrives. More...
 
void update (const ::EndOfEvent *) override
 
void UpdateHit ()
 

Private Attributes

FP420G4HitcurrentHit
 
G4VPhysicalVolume * currentPV
 
float edeposit
 
float Eloss
 
G4ThreeVector entrancePoint
 
int eventno
 
G4ThreeVector exitPoint
 
G4int hcID
 
G4ThreeVector hitPoint
 
G4ThreeVector hitPointExit
 
G4ThreeVector hitPointLocal
 
G4ThreeVector hitPointLocalExit
 
float incidentEnergy
 
FP420NumberingSchemenumberingScheme
 
float Pabs
 
int ParentId
 
short ParticleType
 
float PhiAtEntry
 
G4StepPoint * postStepPoint
 
G4StepPoint * preStepPoint
 
uint32_t previousUnitID
 
unsigned int primaryID
 
unsigned int primID
 
TrackingSlaveSDslave
 
G4ThreeVector theEntryPoint
 
G4ThreeVector theExitPoint
 
FP420G4HitCollectiontheHC
 
const SimTrackManagertheManager
 
float ThetaAtEntry
 
G4Track * theTrack
 
float Tof
 
G4int tsID
 
G4double tSlice
 
G4int tSliceID
 
uint32_t unitID
 
float Vx
 
float Vy
 
float Vz
 
float X
 
float Y
 
float Z
 

Additional Inherited Members

- Protected Types inherited from SensitiveDetector
enum  coordinates { WorldCoordinates, LocalCoordinates }
 
- 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 > &)
 
- Protected Member Functions inherited from Observer< const EndOfEvent * >
virtual void update (const EndOfEvent *)=0
 This routine will be called when the appropriate signal arrives. More...
 

Detailed Description

Definition at line 41 of file FP420SD.h.

Constructor & Destructor Documentation

FP420SD::FP420SD ( const std::string &  name,
const DDCompactView cpv,
const SensitiveDetectorCatalog clg,
edm::ParameterSet const &  p,
const SimTrackManager manager 
)

Definition at line 46 of file FP420SD.cc.

References edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), numberingScheme, and slave.

51  : SensitiveTkDetector(name, cpv, clg, p),
52  numberingScheme(nullptr),
53  hcID(-1),
54  theHC(nullptr),
55  theManager(manager),
56  currentHit(nullptr),
57  theTrack(nullptr),
58  currentPV(nullptr),
59  unitID(0),
60  previousUnitID(0),
61  preStepPoint(nullptr),
62  postStepPoint(nullptr),
63  eventno(0) {
64  //Parameters
65  edm::ParameterSet m_p = p.getParameter<edm::ParameterSet>("FP420SD");
66  int verbn = m_p.getUntrackedParameter<int>("Verbosity");
67  //int verbn = 1;
68 
69  SetVerboseLevel(verbn);
70 
71  slave = new TrackingSlaveSD(name);
72 
73  if (name == "FP420SI") {
74  if (verbn > 0) {
75  edm::LogInfo("FP420Sim") << "name = FP420SI and new FP420NumberingSchem";
76  }
78  } else {
79  edm::LogWarning("FP420Sim") << "FP420SD: ReadoutName not supported\n";
80  }
81 }
int eventno
Definition: FP420SD.h:131
T getUntrackedParameter(std::string const &, T const &) const
TrackingSlaveSD * slave
Definition: FP420SD.h:84
G4StepPoint * preStepPoint
Definition: FP420SD.h:108
G4int hcID
Definition: FP420SD.h:93
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
G4Track * theTrack
Definition: FP420SD.h:99
uint32_t previousUnitID
Definition: FP420SD.h:102
G4VPhysicalVolume * currentPV
Definition: FP420SD.h:100
uint32_t unitID
Definition: FP420SD.h:102
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:85
const SimTrackManager * theManager
Definition: FP420SD.h:95
G4StepPoint * postStepPoint
Definition: FP420SD.h:109
FP420G4Hit * currentHit
Definition: FP420SD.h:98
SensitiveTkDetector(const std::string &iname, const DDCompactView &cpv, const SensitiveDetectorCatalog &clg, edm::ParameterSet const &p)
FP420SD::~FP420SD ( )
override

Definition at line 83 of file FP420SD.cc.

References numberingScheme, and slave.

83  {
84  delete slave;
85  delete numberingScheme;
86 }
TrackingSlaveSD * slave
Definition: FP420SD.h:84
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:85

Member Function Documentation

void FP420SD::clear ( void  )
override

Definition at line 402 of file FP420SD.cc.

402 {}
void FP420SD::clearHits ( )
overridevirtual

Implements SensitiveDetector.

Definition at line 441 of file FP420SD.cc.

References TrackingSlaveSD::Initialize(), and slave.

Referenced by update().

441  {
442  //AZ:
443  slave->Initialize();
444 }
TrackingSlaveSD * slave
Definition: FP420SD.h:84
virtual void Initialize()
void FP420SD::CreateNewHit ( )
private

Definition at line 234 of file FP420SD.cc.

References currentHit, currentPV, Eloss, hitPoint, hitPointLocal, hitPointLocalExit, incidentEnergy, LogDebug, NULL, Pabs, ParentId, ParticleType, PhiAtEntry, previousUnitID, primaryID, primID, FP420G4Hit::setEnergyLoss(), FP420G4Hit::setEntry(), FP420G4Hit::setEntryLocalP(), FP420G4Hit::setExitLocalP(), FP420G4Hit::setIncidentEnergy(), FP420G4Hit::setPabs(), FP420G4Hit::setParentId(), FP420G4Hit::setParticleType(), FP420G4Hit::setPhiAtEntry(), FP420G4Hit::setThetaAtEntry(), FP420G4Hit::setTimeSlice(), FP420G4Hit::setTof(), FP420G4Hit::setTrackID(), FP420G4Hit::setUnitID(), FP420G4Hit::setVx(), FP420G4Hit::setVy(), FP420G4Hit::setVz(), FP420G4Hit::setX(), FP420G4Hit::setY(), FP420G4Hit::setZ(), StoreHit(), ThetaAtEntry, theTrack, Tof, tsID, tSlice, tSliceID, unitID, Vx, Vy, Vz, X, Y, and Z.

Referenced by ProcessHits().

234  {
235 #ifdef debug
236  // << " MVid = " << currentPV->GetMother()->GetCopyNo()
237  LogDebug("FP420Sim") << "FP420SD CreateNewHit for"
238  << " PV " << currentPV->GetName() << " PVid = " << currentPV->GetCopyNo() << " Unit " << unitID
239  << std::endl;
240  LogDebug("FP420Sim") << " primary " << primaryID << " time slice " << tSliceID << " For Track "
241  << theTrack->GetTrackID() << " which is a " << theTrack->GetDefinition()->GetParticleName();
242 
243  if (theTrack->GetTrackID() == 1) {
244  LogDebug("FP420Sim") << " of energy " << theTrack->GetTotalEnergy();
245  } else {
246  LogDebug("FP420Sim") << " daughter of part. " << theTrack->GetParentID();
247  }
248 
249  LogDebug("FP420Sim") << " and created by ";
250  if (theTrack->GetCreatorProcess() != NULL)
251  LogDebug("FP420Sim") << theTrack->GetCreatorProcess()->GetProcessName();
252  else
253  LogDebug("FP420Sim") << "NO process";
254  LogDebug("FP420Sim") << std::endl;
255 #endif
256 
257  currentHit = new FP420G4Hit;
262 
269 
270  // currentHit->setEntry(entrancePoint);
272 
275 
277  currentHit->setVx(Vx);
278  currentHit->setVy(Vy);
279  currentHit->setVz(Vz);
280 
281  currentHit->setX(X);
282  currentHit->setY(Y);
283  currentHit->setZ(Z);
284  //AZ:12.10.2007
285  // UpdateHit();
286  // buffer for next steps:
287  tsID = tSliceID;
288  primID = primaryID;
290 
292 }
#define LogDebug(id)
void setY(float t)
Definition: FP420G4Hit.cc:159
void setPhiAtEntry(float f)
Definition: FP420G4Hit.cc:153
float ThetaAtEntry
Definition: FP420SD.h:121
void setVz(float p)
Definition: FP420G4Hit.cc:174
void setEntry(const G4ThreeVector &xyz)
Definition: FP420G4Hit.cc:104
void setZ(float t)
Definition: FP420G4Hit.cc:162
float Pabs
Definition: FP420SD.h:116
void setPabs(float e)
Definition: FP420G4Hit.cc:143
#define NULL
Definition: scimark2.h:8
void setVx(float p)
Definition: FP420G4Hit.cc:168
void setTrackID(int i)
Definition: FP420G4Hit.cc:122
G4int tsID
Definition: FP420SD.h:97
unsigned int primaryID
Definition: FP420SD.h:104
float Eloss
Definition: FP420SD.h:118
unsigned int primID
Definition: FP420SD.h:104
void setEnergyLoss(float e)
Definition: FP420G4Hit.cc:146
void setTof(float e)
Definition: FP420G4Hit.cc:144
float Vz
Definition: FP420SD.h:125
G4Track * theTrack
Definition: FP420SD.h:99
G4int tSliceID
Definition: FP420SD.h:103
void setTimeSlice(double d)
Definition: FP420G4Hit.cc:128
void setEntryLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:107
void setIncidentEnergy(double e)
Definition: FP420G4Hit.cc:119
uint32_t previousUnitID
Definition: FP420SD.h:102
G4VPhysicalVolume * currentPV
Definition: FP420SD.h:100
void setX(float t)
Definition: FP420G4Hit.cc:156
float Tof
Definition: FP420SD.h:117
void setExitLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:110
uint32_t unitID
Definition: FP420SD.h:102
float PhiAtEntry
Definition: FP420SD.h:122
short ParticleType
Definition: FP420SD.h:119
void setParticleType(short i)
Definition: FP420G4Hit.cc:147
void setThetaAtEntry(float t)
Definition: FP420G4Hit.cc:152
G4ThreeVector hitPointLocalExit
Definition: FP420SD.h:115
G4double tSlice
Definition: FP420SD.h:106
float incidentEnergy
Definition: FP420SD.h:91
void setUnitID(unsigned int i)
Definition: FP420G4Hit.cc:125
int ParentId
Definition: FP420SD.h:124
float Z
Definition: FP420SD.h:126
float Vy
Definition: FP420SD.h:125
void setParentId(int p)
Definition: FP420G4Hit.cc:165
float X
Definition: FP420SD.h:126
FP420G4Hit * currentHit
Definition: FP420SD.h:98
G4ThreeVector hitPointLocal
Definition: FP420SD.h:114
G4ThreeVector hitPoint
Definition: FP420SD.h:112
float Y
Definition: FP420SD.h:126
void StoreHit(FP420G4Hit *)
Definition: FP420SD.cc:224
void setVy(float p)
Definition: FP420G4Hit.cc:171
float Vx
Definition: FP420SD.h:125
void FP420SD::DrawAll ( )
override

Definition at line 404 of file FP420SD.cc.

404 {}
void FP420SD::EndOfEvent ( G4HCofThisEvent *  eventHC)
override

Definition at line 327 of file FP420SD.cc.

References FP420G4Hit::getEnergyLoss(), FP420G4Hit::getEntry(), FP420G4Hit::getEntryLocalP(), FP420G4Hit::getExitLocalP(), FP420G4Hit::getPabs(), FP420G4Hit::getParticleType(), FP420G4Hit::getPhiAtEntry(), FP420G4Hit::getThetaAtEntry(), FP420G4Hit::getTof(), FP420G4Hit::getTrackID(), FP420G4Hit::getUnitID(), LogDebug, TrackingSlaveSD::processHits(), slave, Summarize(), and theHC.

327  {
328  // here we loop over transient hits and make them persistent
329 
330  // if(theHC->entries() > 100){
331  // LogDebug("FP420Sim") << "FP420SD: warning!!! Number of hits exceed 100 and =" << theHC->entries() << "\n";
332  // }
333  // for (int j=0; j<theHC->entries() && j<100; j++) {
334  int nhitsHPS240 = 0;
335  int nhitsFP420 = 0;
336  for (int j = 0; j < theHC->entries(); j++) {
337  FP420G4Hit* aHit = (*theHC)[j];
338  if ((fabs(aHit->getTof()) > 780. && fabs(aHit->getTof()) < 840.))
339  ++nhitsHPS240;
340  if ((fabs(aHit->getTof()) > 1380. && fabs(aHit->getTof()) < 1450.))
341  ++nhitsFP420;
342  // if(fabs(aHit->getTof()) < 1700.) {
343  if ((fabs(aHit->getTof()) > 780. && fabs(aHit->getTof()) < 840. && nhitsHPS240 < 200.) ||
344  (fabs(aHit->getTof()) > 1380. && fabs(aHit->getTof()) < 1450. && nhitsFP420 < 200.)) {
345 #ifdef ddebug
346  // LogDebug("FP420SD") << " FP420Hit " << j << " " << *aHit << std::endl;
347  LogDebug("FP420Sim") << "hit number" << j << "unit ID = " << aHit->getUnitID() << "\n";
348  LogDebug("FP420Sim") << "entry z " << aHit->getEntry().z() << "\n";
349  LogDebug("FP420Sim") << "entr theta " << aHit->getThetaAtEntry() << "\n";
350 #endif
351 
352  // Local3DPoint locExitPoint(0,0,0);
353  // Local3DPoint locEntryPoint(aHit->getEntry().x(),
354  // aHit->getEntry().y(),
355  // aHit->getEntry().z());
356  Local3DPoint locExitPoint(aHit->getExitLocalP().x(), aHit->getExitLocalP().y(), aHit->getExitLocalP().z());
357  Local3DPoint locEntryPoint(aHit->getEntryLocalP().x(), aHit->getEntryLocalP().y(), aHit->getEntryLocalP().z());
358  // implicit conversion (slicing) to PSimHit!!!
359  slave->processHits(PSimHit(locEntryPoint,
360  locExitPoint, //entryPoint(), exitPoint() Local3DPoint
361  aHit->getPabs(), // pabs() float
362  aHit->getTof(), // tof() float
363  aHit->getEnergyLoss(), // energyLoss() float
364  aHit->getParticleType(), // particleType() int
365  aHit->getUnitID(), // detUnitId() unsigned int
366  aHit->getTrackID(), // trackId() unsigned int
367  aHit->getThetaAtEntry(), // thetaAtEntry() float
368  aHit->getPhiAtEntry())); // phiAtEntry() float
369 
370  //PSimHit( const Local3DPoint& entry, const Local3DPoint& exit,
371  // float pabs, float tof, float eloss, int particleType,
372  // unsigned int detId, unsigned int trackId,
373  // float theta, float phi, unsigned short processType=0) :
374 
375  // LocalVector direction = hit.exitPoint() - hit.entryPoint();
376  //hit.energyLoss
377 
378  /*
379  aHit->getEM(), -
380  aHit->getHadr(), -
381  aHit->getIncidentEnergy(), -
382  aHit->getTimeSlice(), -
383  aHit->getEntry(), -
384  aHit->getParentId(),
385  aHit->getEntryLocalP(), -
386  aHit->getExitLocalP(), -
387  aHit->getX(), -
388  aHit->getY(), -
389  aHit->getZ(), -
390  aHit->getVx(), -
391  aHit->getVy(), -
392  aHit->getVz())); -
393  */
394  } //if Tof<1600. if nhits<100
395  } // for loop on hits
396 
397  Summarize();
398 }
#define LogDebug(id)
float getTof() const
Definition: FP420G4Hit.cc:139
G4ThreeVector getExitLocalP() const
Definition: FP420G4Hit.cc:109
TrackingSlaveSD * slave
Definition: FP420SD.h:84
float getPabs() const
Definition: FP420G4Hit.cc:138
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:121
float getPhiAtEntry() const
Definition: FP420G4Hit.cc:150
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:124
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
void Summarize()
Definition: FP420SD.cc:400
G4ThreeVector getEntryLocalP() const
Definition: FP420G4Hit.cc:106
float getEnergyLoss() const
Definition: FP420G4Hit.cc:140
int getParticleType() const
Definition: FP420G4Hit.cc:141
virtual bool processHits(const PSimHit &)
G4ThreeVector getEntry() const
Definition: FP420G4Hit.cc:103
float getThetaAtEntry() const
Definition: FP420G4Hit.cc:149
void FP420SD::fillHits ( edm::PSimHitContainer cc,
const std::string &  hname 
)
overridevirtual

Implements SensitiveTkDetector.

Definition at line 419 of file FP420SD.cc.

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

419  {
420  if (slave->name() == hname) {
421  cc = slave->hits();
422  }
423 }
std::string name() const
TrackingSlaveSD * slave
Definition: FP420SD.h:84
std::vector< PSimHit > & hits()
double FP420SD::getEnergyDeposit ( G4Step *  step)
virtual

Definition at line 88 of file FP420SD.cc.

Referenced by GetStepInfo().

88 { return aStep->GetTotalEnergyDeposit(); }
void FP420SD::GetStepInfo ( G4Step *  aStep)
private

Definition at line 127 of file FP420SD.cc.

References currentPV, edeposit, edepositEM, edepositHAD, Eloss, emPDG, epPDG, gammaPDG, getEnergyDeposit(), GeV, hitPoint, hitPointExit, hitPointLocal, hitPointLocalExit, createfilelist::int, LogDebug, Pabs, ParentId, ParticleType, PhiAtEntry, postStepPoint, preStepPoint, primaryID, setDetUnitId(), ThetaAtEntry, theTrack, Tof, tSlice, tSliceID, unitID, Vx, Vy, Vz, X, Y, and Z.

Referenced by ProcessHits().

127  {
128  preStepPoint = aStep->GetPreStepPoint();
129  postStepPoint = aStep->GetPostStepPoint();
130  theTrack = aStep->GetTrack();
131  hitPoint = preStepPoint->GetPosition();
132  currentPV = preStepPoint->GetPhysicalVolume();
133  hitPointExit = postStepPoint->GetPosition();
134 
135  hitPointLocal = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPoint);
136  hitPointLocalExit = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPointExit);
137 
138  G4int particleCode = theTrack->GetDefinition()->GetPDGEncoding();
139  if (particleCode == emPDG || particleCode == epPDG || particleCode == gammaPDG) {
140  edepositEM = getEnergyDeposit(aStep);
141  edepositHAD = 0.;
142  } else {
143  edepositEM = 0.;
144  edepositHAD = getEnergyDeposit(aStep);
145  }
146  edeposit = aStep->GetTotalEnergyDeposit();
147  tSlice = (postStepPoint->GetGlobalTime()) / nanosecond;
148  tSliceID = (int)tSlice;
149  unitID = setDetUnitId(aStep);
150 #ifdef debug
151  LogDebug("FP420Sim") << "unitID=" << unitID << std::endl;
152 #endif
153  primaryID = theTrack->GetTrackID();
154  // Position = hitPoint;
155  Pabs = aStep->GetPreStepPoint()->GetMomentum().mag() / GeV;
156  //Tof = 1400. + aStep->GetPostStepPoint()->GetGlobalTime()/nanosecond;
157  Tof = aStep->GetPostStepPoint()->GetGlobalTime() / nanosecond;
158  Eloss = aStep->GetTotalEnergyDeposit() / GeV;
159  ParticleType = theTrack->GetDefinition()->GetPDGEncoding();
160  ThetaAtEntry = aStep->GetPreStepPoint()->GetPosition().theta() / deg;
161  PhiAtEntry = aStep->GetPreStepPoint()->GetPosition().phi() / deg;
162 
163  ParentId = theTrack->GetParentID();
164  Vx = theTrack->GetVertexPosition().x();
165  Vy = theTrack->GetVertexPosition().y();
166  Vz = theTrack->GetVertexPosition().z();
167  X = hitPoint.x();
168  Y = hitPoint.y();
169  Z = hitPoint.z();
170 }
#define LogDebug(id)
G4int emPDG
Definition: FP420SD.h:135
const double GeV
Definition: MathUtil.h:16
float ThetaAtEntry
Definition: FP420SD.h:121
virtual double getEnergyDeposit(G4Step *step)
Definition: FP420SD.cc:88
G4ThreeVector hitPointExit
Definition: FP420SD.h:113
float Pabs
Definition: FP420SD.h:116
G4StepPoint * preStepPoint
Definition: FP420SD.h:108
unsigned int primaryID
Definition: FP420SD.h:104
float Eloss
Definition: FP420SD.h:118
float edeposit
Definition: FP420SD.h:110
float edepositHAD
Definition: FP420SD.h:134
float Vz
Definition: FP420SD.h:125
G4int gammaPDG
Definition: FP420SD.h:137
G4Track * theTrack
Definition: FP420SD.h:99
G4int tSliceID
Definition: FP420SD.h:103
uint32_t setDetUnitId(const G4Step *) override
Definition: FP420SD.cc:172
G4VPhysicalVolume * currentPV
Definition: FP420SD.h:100
float Tof
Definition: FP420SD.h:117
uint32_t unitID
Definition: FP420SD.h:102
float PhiAtEntry
Definition: FP420SD.h:122
float edepositEM
Definition: FP420SD.h:134
short ParticleType
Definition: FP420SD.h:119
G4ThreeVector hitPointLocalExit
Definition: FP420SD.h:115
G4double tSlice
Definition: FP420SD.h:106
int ParentId
Definition: FP420SD.h:124
float Z
Definition: FP420SD.h:126
float Vy
Definition: FP420SD.h:125
G4int epPDG
Definition: FP420SD.h:136
G4StepPoint * postStepPoint
Definition: FP420SD.h:109
float X
Definition: FP420SD.h:126
G4ThreeVector hitPointLocal
Definition: FP420SD.h:114
G4ThreeVector hitPoint
Definition: FP420SD.h:112
float Y
Definition: FP420SD.h:126
float Vx
Definition: FP420SD.h:125
G4bool FP420SD::HitExists ( )
private

Definition at line 176 of file FP420SD.cc.

References currentHit, runEdmFileComparison::found, FP420G4Hit::getTimeSliceID(), FP420G4Hit::getTrackID(), FP420G4Hit::getUnitID(), previousUnitID, primaryID, primID, ResetForNewPrimary(), theHC, tsID, tSliceID, unitID, and UpdateHit().

Referenced by ProcessHits().

176  {
177  if (primaryID < 1) {
178  edm::LogWarning("FP420Sim") << "***** FP420SD error: primaryID = " << primaryID << " maybe detector name changed";
179  }
180 
181  // Update if in the same detector, time-slice and for same track
182  // if (primaryID == primID && tSliceID == tsID && unitID==previousUnitID) {
183  if (tSliceID == tsID && unitID == previousUnitID) {
184  //AZ:
185  UpdateHit();
186  return true;
187  }
188  // Reset entry point for new primary
189  if (primaryID != primID)
191 
192  //look in the HitContainer whether a hit with the same primID, unitID,
193  //tSliceID already exists:
194 
195  G4bool found = false;
196 
197  // LogDebug("FP420Sim") << "FP420SD: HCollection= " << theHC->entries() <<std::endl;
198 
199  for (int j = 0; j < theHC->entries() && !found; j++) {
200  FP420G4Hit* aPreviousHit = (*theHC)[j];
201  if (aPreviousHit->getTrackID() == primaryID && aPreviousHit->getTimeSliceID() == tSliceID &&
202  aPreviousHit->getUnitID() == unitID) {
203  //AZ:
204  currentHit = aPreviousHit;
205  found = true;
206  }
207  }
208 
209  if (found) {
210  //AZ:
211  UpdateHit();
212  return true;
213  } else {
214  return false;
215  }
216 }
void ResetForNewPrimary()
Definition: FP420SD.cc:218
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:121
G4int tsID
Definition: FP420SD.h:97
unsigned int primaryID
Definition: FP420SD.h:104
unsigned int primID
Definition: FP420SD.h:104
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:124
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
G4int tSliceID
Definition: FP420SD.h:103
uint32_t previousUnitID
Definition: FP420SD.h:102
int getTimeSliceID() const
Definition: FP420G4Hit.cc:129
uint32_t unitID
Definition: FP420SD.h:102
void UpdateHit()
Definition: FP420SD.cc:294
FP420G4Hit * currentHit
Definition: FP420SD.h:98
void FP420SD::Initialize ( G4HCofThisEvent *  HCE)
override

Definition at line 90 of file FP420SD.cc.

References ecaldqm::collectionName, hcID, LogDebug, dataset::name, primID, theHC, and tsID.

90  {
91 #ifdef debug
92  LogDebug("FP420Sim") << "FP420SD : Initialize called for " << name << std::endl;
93 #endif
94 
95  theHC = new FP420G4HitCollection(GetName(), collectionName[0]);
96  if (hcID < 0)
97  hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
98  HCE->AddHitsCollection(hcID, theHC);
99 
100  tsID = -2;
101  // primID = -2;
102  primID = 0;
103 
105 }
#define LogDebug(id)
G4int hcID
Definition: FP420SD.h:93
G4int tsID
Definition: FP420SD.h:97
unsigned int primID
Definition: FP420SD.h:104
std::string const collectionName[nCollections]
Definition: Collections.h:47
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
G4THitsCollection< FP420G4Hit > FP420G4HitCollection
void FP420SD::PrintAll ( )
override

Definition at line 406 of file FP420SD.cc.

References LogDebug, and theHC.

406  {
407  LogDebug("FP420Sim") << "FP420SD: Collection " << theHC->GetName() << "\n";
408  theHC->PrintAllHits();
409 }
#define LogDebug(id)
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
bool FP420SD::ProcessHits ( G4Step *  aStep,
G4TouchableHistory *   
)
overridevirtual

Implements SensitiveDetector.

Definition at line 107 of file FP420SD.cc.

References CreateNewHit(), edeposit, GetStepInfo(), HitExists(), LogDebug, and theHC.

107  {
108  if (aStep == nullptr) {
109  return true;
110  } else {
111  GetStepInfo(aStep);
112  // LogDebug("FP420Sim") << edeposit <<std::endl;
113 
114  //AZ
115 #ifdef debug
116  LogDebug("FP420Sim") << "FP420SD : number of hits = " << theHC->entries() << std::endl;
117 #endif
118 
119  if (HitExists() == false && edeposit > 0. && theHC->entries() < 200) {
120  CreateNewHit();
121  return true;
122  }
123  }
124  return true;
125 }
#define LogDebug(id)
float edeposit
Definition: FP420SD.h:110
void GetStepInfo(G4Step *aStep)
Definition: FP420SD.cc:127
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
void CreateNewHit()
Definition: FP420SD.cc:234
G4bool HitExists()
Definition: FP420SD.cc:176
void FP420SD::ResetForNewPrimary ( )
private

Definition at line 218 of file FP420SD.cc.

References entrancePoint, exitPoint, hitPoint, hitPointExit, incidentEnergy, preStepPoint, SetToLocal(), and SetToLocalExit().

Referenced by HitExists().

218  {
221  incidentEnergy = preStepPoint->GetKineticEnergy();
222 }
G4ThreeVector SetToLocalExit(const G4ThreeVector &globalPoint)
Definition: FP420SD.cc:321
G4ThreeVector hitPointExit
Definition: FP420SD.h:113
G4StepPoint * preStepPoint
Definition: FP420SD.h:108
G4ThreeVector exitPoint
Definition: FP420SD.h:87
G4ThreeVector SetToLocal(const G4ThreeVector &global)
Definition: FP420SD.cc:315
float incidentEnergy
Definition: FP420SD.h:91
G4ThreeVector entrancePoint
Definition: FP420SD.h:87
G4ThreeVector hitPoint
Definition: FP420SD.h:112
uint32_t FP420SD::setDetUnitId ( const G4Step *  aStep)
overridevirtual

Implements SensitiveDetector.

Definition at line 172 of file FP420SD.cc.

References FP420NumberingScheme::getUnitID(), and numberingScheme.

Referenced by GetStepInfo().

172  {
173  return (numberingScheme == nullptr ? 0 : numberingScheme->getUnitID(aStep));
174 }
virtual unsigned int getUnitID(const G4Step *aStep) const
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:85
G4ThreeVector FP420SD::SetToLocal ( const G4ThreeVector &  global)
private

Definition at line 315 of file FP420SD.cc.

References preStepPoint, and theEntryPoint.

Referenced by ResetForNewPrimary().

315  {
316  const G4VTouchable* touch = preStepPoint->GetTouchable();
317  theEntryPoint = touch->GetHistory()->GetTopTransform().TransformPoint(global);
318  return theEntryPoint;
319 }
G4StepPoint * preStepPoint
Definition: FP420SD.h:108
G4ThreeVector theEntryPoint
Definition: FP420SD.h:88
G4ThreeVector FP420SD::SetToLocalExit ( const G4ThreeVector &  globalPoint)
private

Definition at line 321 of file FP420SD.cc.

References postStepPoint, and theExitPoint.

Referenced by ResetForNewPrimary().

321  {
322  const G4VTouchable* touch = postStepPoint->GetTouchable();
323  theExitPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
324  return theExitPoint;
325 }
G4ThreeVector theExitPoint
Definition: FP420SD.h:89
G4StepPoint * postStepPoint
Definition: FP420SD.h:109
void FP420SD::StoreHit ( FP420G4Hit hit)
private

Definition at line 224 of file FP420SD.cc.

References theHC.

Referenced by CreateNewHit().

224  {
225  // if (primID<0) return;
226  if (hit == nullptr) {
227  edm::LogWarning("FP420Sim") << "FP420SD: hit to be stored is NULL !!";
228  return;
229  }
230 
231  theHC->insert(hit);
232 }
FP420G4HitCollection * theHC
Definition: FP420SD.h:94
void FP420SD::Summarize ( )
private

Definition at line 400 of file FP420SD.cc.

Referenced by EndOfEvent().

400 {}
void FP420SD::update ( const BeginOfRun )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfRun * >.

Definition at line 431 of file FP420SD.cc.

References emPDG, epPDG, gammaPDG, and HiggsValidation_cfi::particleName.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

431  {
432  G4ParticleTable* theParticleTable = G4ParticleTable::GetParticleTable();
433  G4String particleName;
434  emPDG = theParticleTable->FindParticle(particleName = "e-")->GetPDGEncoding();
435  epPDG = theParticleTable->FindParticle(particleName = "e+")->GetPDGEncoding();
436  gammaPDG = theParticleTable->FindParticle(particleName = "gamma")->GetPDGEncoding();
437 }
G4int emPDG
Definition: FP420SD.h:135
G4int gammaPDG
Definition: FP420SD.h:137
G4int epPDG
Definition: FP420SD.h:136
void FP420SD::update ( const BeginOfEvent )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent * >.

Definition at line 425 of file FP420SD.cc.

References clearHits(), eventno, and LogDebug.

Referenced by progressbar.ProgressBar::__next__(), MatrixUtil.Matrix::__setitem__(), MatrixUtil.Steps::__setitem__(), Vispa.Gui.VispaWidget.VispaWidget::autosize(), Vispa.Views.LineDecayView.LineDecayContainer::createObject(), Vispa.Views.LineDecayView.LineDecayContainer::deselectAllObjects(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::deselectAllWidgets(), Vispa.Gui.VispaWidget.VispaWidget::enableAutosizing(), progressbar.ProgressBar::finish(), Vispa.Gui.MenuWidget.MenuWidget::leaveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseMoveEvent(), Vispa.Gui.MenuWidget.MenuWidget::mouseMoveEvent(), Vispa.Views.LineDecayView.LineDecayContainer::mouseMoveEvent(), Vispa.Gui.VispaWidgetOwner.VispaWidgetOwner::mouseReleaseEvent(), Vispa.Views.LineDecayView.LineDecayContainer::objectMoved(), MatrixUtil.Steps::overwrite(), Vispa.Views.LineDecayView.LineDecayContainer::removeObject(), Vispa.Gui.ConnectableWidget.ConnectableWidget::removePorts(), Vispa.Gui.FindDialog.FindDialog::reset(), Vispa.Gui.PortConnection.PointToPointConnection::select(), Vispa.Gui.VispaWidget.VispaWidget::select(), Vispa.Views.LineDecayView.LineDecayContainer::select(), Vispa.Gui.VispaWidget.VispaWidget::setText(), Vispa.Gui.VispaWidget.VispaWidget::setTitle(), Vispa.Gui.ZoomableWidget.ZoomableWidget::setZoom(), Vispa.Views.LineDecayView.LineDecayContainer::setZoom(), and Vispa.Gui.PortConnection.PointToPointConnection::updateConnection().

425  {
426  LogDebug("ForwardSim") << " Dispatched BeginOfEvent for " << GetName() << " !";
427  clearHits();
428  eventno = (*i)()->GetEventID();
429 }
#define LogDebug(id)
int eventno
Definition: FP420SD.h:131
void clearHits() override
Definition: FP420SD.cc:441
void FP420SD::update ( const ::EndOfEvent )
overrideprivate
void FP420SD::UpdateHit ( )
private

Definition at line 294 of file FP420SD.cc.

References FP420G4Hit::addEnergyDeposit(), FP420G4Hit::addEnergyLoss(), currentHit, edepositEM, edepositHAD, Eloss, LogDebug, postStepPoint, previousUnitID, primaryID, primID, tsID, tSliceID, and unitID.

Referenced by HitExists().

294  {
295  //
296  if (Eloss > 0.) {
298 
299 #ifdef debug
300  LogDebug("FP420Sim") << "updateHit: add eloss " << Eloss << std::endl;
301  LogDebug("FP420Sim") << "CurrentHit=" << currentHit << ", PostStepPoint=" << postStepPoint->GetPosition()
302  << std::endl;
303 #endif
304  //AZ
305  // currentHit->setEnergyLoss(Eloss);
307  }
308 
309  // buffer for next steps:
310  tsID = tSliceID;
311  primID = primaryID;
313 }
#define LogDebug(id)
void addEnergyDeposit(double em, double hd)
Definition: FP420G4Hit.cc:131
G4int tsID
Definition: FP420SD.h:97
unsigned int primaryID
Definition: FP420SD.h:104
float Eloss
Definition: FP420SD.h:118
unsigned int primID
Definition: FP420SD.h:104
float edepositHAD
Definition: FP420SD.h:134
G4int tSliceID
Definition: FP420SD.h:103
uint32_t previousUnitID
Definition: FP420SD.h:102
uint32_t unitID
Definition: FP420SD.h:102
float edepositEM
Definition: FP420SD.h:134
G4StepPoint * postStepPoint
Definition: FP420SD.h:109
FP420G4Hit * currentHit
Definition: FP420SD.h:98
void addEnergyLoss(float e)
Definition: FP420G4Hit.cc:145

Member Data Documentation

FP420G4Hit* FP420SD::currentHit
private

Definition at line 98 of file FP420SD.h.

Referenced by CreateNewHit(), HitExists(), and UpdateHit().

G4VPhysicalVolume* FP420SD::currentPV
private

Definition at line 100 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::edeposit
private

Definition at line 110 of file FP420SD.h.

Referenced by GetStepInfo(), and ProcessHits().

float FP420SD::edepositEM
protected

Definition at line 134 of file FP420SD.h.

Referenced by GetStepInfo(), and UpdateHit().

float FP420SD::edepositHAD
protected

Definition at line 134 of file FP420SD.h.

Referenced by GetStepInfo(), and UpdateHit().

float FP420SD::Eloss
private

Definition at line 118 of file FP420SD.h.

Referenced by CreateNewHit(), GetStepInfo(), and UpdateHit().

G4int FP420SD::emPDG
protected

Definition at line 135 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

G4ThreeVector FP420SD::entrancePoint
private

Definition at line 87 of file FP420SD.h.

Referenced by ResetForNewPrimary().

G4int FP420SD::epPDG
protected

Definition at line 136 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

int FP420SD::eventno
private

Definition at line 131 of file FP420SD.h.

Referenced by update().

G4ThreeVector FP420SD::exitPoint
private

Definition at line 87 of file FP420SD.h.

Referenced by ResetForNewPrimary().

G4int FP420SD::gammaPDG
protected

Definition at line 137 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

G4int FP420SD::hcID
private

Definition at line 93 of file FP420SD.h.

Referenced by Initialize().

G4ThreeVector FP420SD::hitPoint
private

Definition at line 112 of file FP420SD.h.

Referenced by CreateNewHit(), GetStepInfo(), and ResetForNewPrimary().

G4ThreeVector FP420SD::hitPointExit
private

Definition at line 113 of file FP420SD.h.

Referenced by GetStepInfo(), and ResetForNewPrimary().

G4ThreeVector FP420SD::hitPointLocal
private

Definition at line 114 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4ThreeVector FP420SD::hitPointLocalExit
private

Definition at line 115 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::incidentEnergy
private

Definition at line 91 of file FP420SD.h.

Referenced by CreateNewHit(), and ResetForNewPrimary().

FP420NumberingScheme* FP420SD::numberingScheme
private

Definition at line 85 of file FP420SD.h.

Referenced by FP420SD(), setDetUnitId(), and ~FP420SD().

float FP420SD::Pabs
private

Definition at line 116 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

int FP420SD::ParentId
private

Definition at line 124 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

short FP420SD::ParticleType
private

Definition at line 119 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::PhiAtEntry
private

Definition at line 122 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4StepPoint* FP420SD::postStepPoint
private

Definition at line 109 of file FP420SD.h.

Referenced by GetStepInfo(), SetToLocalExit(), and UpdateHit().

G4StepPoint* FP420SD::preStepPoint
private

Definition at line 108 of file FP420SD.h.

Referenced by GetStepInfo(), ResetForNewPrimary(), and SetToLocal().

uint32_t FP420SD::previousUnitID
private

Definition at line 102 of file FP420SD.h.

Referenced by CreateNewHit(), HitExists(), and UpdateHit().

unsigned int FP420SD::primaryID
private

Definition at line 104 of file FP420SD.h.

Referenced by CreateNewHit(), GetStepInfo(), HitExists(), and UpdateHit().

unsigned int FP420SD::primID
private

Definition at line 104 of file FP420SD.h.

Referenced by CreateNewHit(), HitExists(), Initialize(), and UpdateHit().

TrackingSlaveSD* FP420SD::slave
private

Definition at line 84 of file FP420SD.h.

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

G4ThreeVector FP420SD::theEntryPoint
private

Definition at line 88 of file FP420SD.h.

Referenced by SetToLocal().

G4ThreeVector FP420SD::theExitPoint
private

Definition at line 89 of file FP420SD.h.

Referenced by SetToLocalExit().

FP420G4HitCollection* FP420SD::theHC
private

Definition at line 94 of file FP420SD.h.

Referenced by EndOfEvent(), HitExists(), Initialize(), PrintAll(), ProcessHits(), and StoreHit().

const SimTrackManager* FP420SD::theManager
private

Definition at line 95 of file FP420SD.h.

float FP420SD::ThetaAtEntry
private

Definition at line 121 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4Track* FP420SD::theTrack
private

Definition at line 99 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Tof
private

Definition at line 117 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4int FP420SD::tsID
private

Definition at line 97 of file FP420SD.h.

Referenced by CreateNewHit(), HitExists(), Initialize(), and UpdateHit().

G4double FP420SD::tSlice
private

Definition at line 106 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4int FP420SD::tSliceID
private

Definition at line 103 of file FP420SD.h.

Referenced by CreateNewHit(), GetStepInfo(), HitExists(), and UpdateHit().

uint32_t FP420SD::unitID
private

Definition at line 102 of file FP420SD.h.

Referenced by CreateNewHit(), GetStepInfo(), HitExists(), and UpdateHit().

float FP420SD::Vx
private

Definition at line 125 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Vy
private

Definition at line 125 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Vz
private

Definition at line 125 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::X
private

Definition at line 126 of file FP420SD.h.

Referenced by svgfig.Curve.Sample::__repr__(), CreateNewHit(), and GetStepInfo().

float FP420SD::Y
private

Definition at line 126 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Z
private

Definition at line 126 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().