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
 
 SensitiveDetector (const std::string &iname, const DDCompactView &cpv, const SensitiveDetectorCatalog &, edm::ParameterSet const &p)
 
 ~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
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 42 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.

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

Definition at line 73 of file FP420SD.cc.

References numberingScheme, and slave.

73  {
74  delete slave;
75  delete numberingScheme;
76 }
TrackingSlaveSD * slave
Definition: FP420SD.h:85
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:86

Member Function Documentation

void FP420SD::clear ( void  )
override

Definition at line 428 of file FP420SD.cc.

428  {
429 }
void FP420SD::clearHits ( )
overridevirtual

Implements SensitiveDetector.

Definition at line 474 of file FP420SD.cc.

References TrackingSlaveSD::Initialize(), and slave.

Referenced by update().

474  {
475  //AZ:
476  slave->Initialize();
477 }
TrackingSlaveSD * slave
Definition: FP420SD.h:85
virtual void Initialize()
void FP420SD::CreateNewHit ( )
private

Definition at line 240 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().

240  {
241 
242 #ifdef debug
243  // << " MVid = " << currentPV->GetMother()->GetCopyNo()
244  LogDebug("FP420Sim") << "FP420SD CreateNewHit for"
245  << " PV " << currentPV->GetName()
246  << " PVid = " << currentPV->GetCopyNo()
247  << " Unit " << unitID <<std::endl;
248  LogDebug("FP420Sim") << " primary " << primaryID
249  << " time slice " << tSliceID
250  << " For Track " << theTrack->GetTrackID()
251  << " which is a " << theTrack->GetDefinition()->GetParticleName();
252 
253  if (theTrack->GetTrackID()==1) {
254  LogDebug("FP420Sim") << " of energy " << theTrack->GetTotalEnergy();
255  } else {
256  LogDebug("FP420Sim") << " daughter of part. " << theTrack->GetParentID();
257  }
258 
259  LogDebug("FP420Sim") << " and created by " ;
260  if (theTrack->GetCreatorProcess()!=NULL)
261  LogDebug("FP420Sim") << theTrack->GetCreatorProcess()->GetProcessName() ;
262  else
263  LogDebug("FP420Sim") << "NO process";
264  LogDebug("FP420Sim") << std::endl;
265 #endif
266 
267 
268  currentHit = new FP420G4Hit;
273 
280 
281 // currentHit->setEntry(entrancePoint);
283 
286 
288  currentHit->setVx(Vx);
289  currentHit->setVy(Vy);
290  currentHit->setVz(Vz);
291 
292  currentHit->setX(X);
293  currentHit->setY(Y);
294  currentHit->setZ(Z);
295  //AZ:12.10.2007
296  // UpdateHit();
297  // buffer for next steps:
298  tsID = tSliceID;
299  primID = primaryID;
301 
303 }
#define LogDebug(id)
void setY(float t)
Definition: FP420G4Hit.cc:169
void setPhiAtEntry(float f)
Definition: FP420G4Hit.cc:163
float ThetaAtEntry
Definition: FP420SD.h:122
void setVz(float p)
Definition: FP420G4Hit.cc:184
void setEntry(const G4ThreeVector &xyz)
Definition: FP420G4Hit.cc:116
void setZ(float t)
Definition: FP420G4Hit.cc:172
float Pabs
Definition: FP420SD.h:117
void setPabs(float e)
Definition: FP420G4Hit.cc:153
#define NULL
Definition: scimark2.h:8
void setVx(float p)
Definition: FP420G4Hit.cc:178
void setTrackID(int i)
Definition: FP420G4Hit.cc:134
G4int tsID
Definition: FP420SD.h:98
unsigned int primaryID
Definition: FP420SD.h:105
float Eloss
Definition: FP420SD.h:119
unsigned int primID
Definition: FP420SD.h:105
void setEnergyLoss(float e)
Definition: FP420G4Hit.cc:156
void setTof(float e)
Definition: FP420G4Hit.cc:154
float Vz
Definition: FP420SD.h:126
G4Track * theTrack
Definition: FP420SD.h:100
G4int tSliceID
Definition: FP420SD.h:104
void setTimeSlice(double d)
Definition: FP420G4Hit.cc:140
void setEntryLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:119
void setIncidentEnergy(double e)
Definition: FP420G4Hit.cc:131
uint32_t previousUnitID
Definition: FP420SD.h:103
G4VPhysicalVolume * currentPV
Definition: FP420SD.h:101
void setX(float t)
Definition: FP420G4Hit.cc:166
float Tof
Definition: FP420SD.h:118
void setExitLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:122
uint32_t unitID
Definition: FP420SD.h:103
float PhiAtEntry
Definition: FP420SD.h:123
short ParticleType
Definition: FP420SD.h:120
void setParticleType(short i)
Definition: FP420G4Hit.cc:157
void setThetaAtEntry(float t)
Definition: FP420G4Hit.cc:162
G4ThreeVector hitPointLocalExit
Definition: FP420SD.h:116
G4double tSlice
Definition: FP420SD.h:107
float incidentEnergy
Definition: FP420SD.h:92
void setUnitID(unsigned int i)
Definition: FP420G4Hit.cc:137
int ParentId
Definition: FP420SD.h:125
float Z
Definition: FP420SD.h:127
float Vy
Definition: FP420SD.h:126
void setParentId(int p)
Definition: FP420G4Hit.cc:175
float X
Definition: FP420SD.h:127
FP420G4Hit * currentHit
Definition: FP420SD.h:99
G4ThreeVector hitPointLocal
Definition: FP420SD.h:115
G4ThreeVector hitPoint
Definition: FP420SD.h:113
float Y
Definition: FP420SD.h:127
void StoreHit(FP420G4Hit *)
Definition: FP420SD.cc:228
void setVy(float p)
Definition: FP420G4Hit.cc:181
float Vx
Definition: FP420SD.h:126
void FP420SD::DrawAll ( )
override

Definition at line 432 of file FP420SD.cc.

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

Definition at line 346 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.

346  {
347 
348  // here we loop over transient hits and make them persistent
349 
350  // if(theHC->entries() > 100){
351  // LogDebug("FP420Sim") << "FP420SD: warning!!! Number of hits exceed 100 and =" << theHC->entries() << "\n";
352  // }
353  // for (int j=0; j<theHC->entries() && j<100; j++) {
354  int nhitsHPS240=0;
355  int nhitsFP420=0;
356  for (int j=0; j<theHC->entries(); j++) {
357  FP420G4Hit* aHit = (*theHC)[j];
358  if((fabs(aHit->getTof())> 780. && fabs(aHit->getTof())< 840.)) ++nhitsHPS240;
359  if((fabs(aHit->getTof())>1380. && fabs(aHit->getTof())<1450.)) ++nhitsFP420;
360  // if(fabs(aHit->getTof()) < 1700.) {
361  if((fabs(aHit->getTof())>780. && fabs(aHit->getTof())<840. && nhitsHPS240<200.) || ( fabs(aHit->getTof())>1380. && fabs(aHit->getTof())<1450. && nhitsFP420<200.)) {
362 
363 
364 #ifdef ddebug
365  // LogDebug("FP420SD") << " FP420Hit " << j << " " << *aHit << std::endl;
366  LogDebug("FP420Sim") << "hit number" << j << "unit ID = "<<aHit->getUnitID()<< "\n";
367  LogDebug("FP420Sim") << "entry z " << aHit->getEntry().z()<< "\n";
368  LogDebug("FP420Sim") << "entr theta " << aHit->getThetaAtEntry()<< "\n";
369 #endif
370 
371  // Local3DPoint locExitPoint(0,0,0);
372  // Local3DPoint locEntryPoint(aHit->getEntry().x(),
373  // aHit->getEntry().y(),
374  // aHit->getEntry().z());
375  Local3DPoint locExitPoint(aHit->getExitLocalP().x(),
376  aHit->getExitLocalP().y(),
377  aHit->getExitLocalP().z());
378  Local3DPoint locEntryPoint(aHit->getEntryLocalP().x(),
379  aHit->getEntryLocalP().y(),
380  aHit->getEntryLocalP().z());
381  // implicit conversion (slicing) to PSimHit!!!
382  slave->processHits(PSimHit(locEntryPoint,locExitPoint,//entryPoint(), exitPoint() Local3DPoint
383  aHit->getPabs(),// pabs() float
384  aHit->getTof(), // tof() float
385  aHit->getEnergyLoss(), // energyLoss() float
386  aHit->getParticleType(),// particleType() int
387  aHit->getUnitID(), // detUnitId() unsigned int
388  aHit->getTrackID(),// trackId() unsigned int
389  aHit->getThetaAtEntry(),// thetaAtEntry() float
390  aHit->getPhiAtEntry())); // phiAtEntry() float
391 
392  //PSimHit( const Local3DPoint& entry, const Local3DPoint& exit,
393  // float pabs, float tof, float eloss, int particleType,
394  // unsigned int detId, unsigned int trackId,
395  // float theta, float phi, unsigned short processType=0) :
396 
397  // LocalVector direction = hit.exitPoint() - hit.entryPoint();
398  //hit.energyLoss
399 
400 
401  /*
402  aHit->getEM(), -
403  aHit->getHadr(), -
404  aHit->getIncidentEnergy(), -
405  aHit->getTimeSlice(), -
406  aHit->getEntry(), -
407  aHit->getParentId(),
408  aHit->getEntryLocalP(), -
409  aHit->getExitLocalP(), -
410  aHit->getX(), -
411  aHit->getY(), -
412  aHit->getZ(), -
413  aHit->getVx(), -
414  aHit->getVy(), -
415  aHit->getVz())); -
416  */
417  }//if Tof<1600. if nhits<100
418  } // for loop on hits
419 
420  Summarize();
421 }
#define LogDebug(id)
float getTof() const
Definition: FP420G4Hit.cc:149
G4ThreeVector getExitLocalP() const
Definition: FP420G4Hit.cc:121
TrackingSlaveSD * slave
Definition: FP420SD.h:85
float getPabs() const
Definition: FP420G4Hit.cc:148
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:133
float getPhiAtEntry() const
Definition: FP420G4Hit.cc:160
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:136
FP420G4HitCollection * theHC
Definition: FP420SD.h:95
void Summarize()
Definition: FP420SD.cc:424
G4ThreeVector getEntryLocalP() const
Definition: FP420G4Hit.cc:118
float getEnergyLoss() const
Definition: FP420G4Hit.cc:150
int getParticleType() const
Definition: FP420G4Hit.cc:151
virtual bool processHits(const PSimHit &)
G4ThreeVector getEntry() const
Definition: FP420G4Hit.cc:115
float getThetaAtEntry() const
Definition: FP420G4Hit.cc:159
void FP420SD::fillHits ( edm::PSimHitContainer cc,
const std::string &  hname 
)
overridevirtual

Implements SensitiveTkDetector.

Definition at line 450 of file FP420SD.cc.

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

450  {
451  if (slave->name() == hname) { cc=slave->hits(); }
452 }
std::string name() const
TrackingSlaveSD * slave
Definition: FP420SD.h:85
std::vector< PSimHit > & hits()
double FP420SD::getEnergyDeposit ( G4Step *  step)
virtual

Definition at line 78 of file FP420SD.cc.

Referenced by GetStepInfo().

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

Definition at line 121 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().

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

Definition at line 173 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().

173  {
174  if (primaryID<1) {
175  edm::LogWarning("FP420Sim") << "***** FP420SD error: primaryID = "
176  << primaryID
177  << " maybe detector name changed";
178  }
179 
180  // Update if in the same detector, time-slice and for same track
181  // if (primaryID == primID && tSliceID == tsID && unitID==previousUnitID) {
182  if (tSliceID == tsID && unitID==previousUnitID) {
183  //AZ:
184  UpdateHit();
185  return true;
186  }
187  // Reset entry point for new primary
188  if (primaryID != primID)
190 
191  //look in the HitContainer whether a hit with the same primID, unitID,
192  //tSliceID already exists:
193 
194  G4bool found = false;
195 
196  // LogDebug("FP420Sim") << "FP420SD: HCollection= " << theHC->entries() <<std::endl;
197 
198  for (int j=0; j<theHC->entries()&&!found; j++) {
199  FP420G4Hit* aPreviousHit = (*theHC)[j];
200  if (aPreviousHit->getTrackID() == primaryID &&
201  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:219
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:133
G4int tsID
Definition: FP420SD.h:98
unsigned int primaryID
Definition: FP420SD.h:105
unsigned int primID
Definition: FP420SD.h:105
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:136
FP420G4HitCollection * theHC
Definition: FP420SD.h:95
G4int tSliceID
Definition: FP420SD.h:104
uint32_t previousUnitID
Definition: FP420SD.h:103
int getTimeSliceID() const
Definition: FP420G4Hit.cc:141
uint32_t unitID
Definition: FP420SD.h:103
void UpdateHit()
Definition: FP420SD.cc:306
FP420G4Hit * currentHit
Definition: FP420SD.h:99
void FP420SD::Initialize ( G4HCofThisEvent *  HCE)
override

Definition at line 82 of file FP420SD.cc.

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

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

Definition at line 436 of file FP420SD.cc.

References LogDebug, and theHC.

436  {
437  LogDebug("FP420Sim") << "FP420SD: Collection " << theHC->GetName() << "\n";
438  theHC->PrintAllHits();
439 }
#define LogDebug(id)
FP420G4HitCollection * theHC
Definition: FP420SD.h:95
bool FP420SD::ProcessHits ( G4Step *  aStep,
G4TouchableHistory *   
)
overridevirtual

Implements SensitiveDetector.

Definition at line 100 of file FP420SD.cc.

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

100  {
101 
102  if (aStep == nullptr) {
103  return true;
104  } else {
105  GetStepInfo(aStep);
106  // LogDebug("FP420Sim") << edeposit <<std::endl;
107 
108  //AZ
109 #ifdef debug
110  LogDebug("FP420Sim") << "FP420SD : number of hits = " << theHC->entries() << std::endl;
111 #endif
112 
113  if (HitExists() == false && edeposit>0. && theHC->entries()< 200 ){
114  CreateNewHit();
115  return true;
116  }
117  }
118  return true;
119 }
#define LogDebug(id)
float edeposit
Definition: FP420SD.h:111
void GetStepInfo(G4Step *aStep)
Definition: FP420SD.cc:121
FP420G4HitCollection * theHC
Definition: FP420SD.h:95
void CreateNewHit()
Definition: FP420SD.cc:240
G4bool HitExists()
Definition: FP420SD.cc:173
void FP420SD::ResetForNewPrimary ( )
private

Definition at line 219 of file FP420SD.cc.

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

Referenced by HitExists().

219  {
220 
223  incidentEnergy = preStepPoint->GetKineticEnergy();
224 
225 }
G4ThreeVector SetToLocalExit(const G4ThreeVector &globalPoint)
Definition: FP420SD.cc:338
G4ThreeVector hitPointExit
Definition: FP420SD.h:114
G4StepPoint * preStepPoint
Definition: FP420SD.h:109
G4ThreeVector exitPoint
Definition: FP420SD.h:88
G4ThreeVector SetToLocal(const G4ThreeVector &global)
Definition: FP420SD.cc:330
float incidentEnergy
Definition: FP420SD.h:92
G4ThreeVector entrancePoint
Definition: FP420SD.h:88
G4ThreeVector hitPoint
Definition: FP420SD.h:113
uint32_t FP420SD::setDetUnitId ( const G4Step *  aStep)
overridevirtual

Implements SensitiveDetector.

Definition at line 168 of file FP420SD.cc.

References FP420NumberingScheme::getUnitID(), and numberingScheme.

Referenced by GetStepInfo().

168  {
169 
170  return (numberingScheme == nullptr ? 0 : numberingScheme->getUnitID(aStep));
171 }
virtual unsigned int getUnitID(const G4Step *aStep) const
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:86
G4ThreeVector FP420SD::SetToLocal ( const G4ThreeVector &  global)
private

Definition at line 330 of file FP420SD.cc.

References preStepPoint, and theEntryPoint.

Referenced by ResetForNewPrimary().

330  {
331 
332  const G4VTouchable* touch= preStepPoint->GetTouchable();
333  theEntryPoint = touch->GetHistory()->GetTopTransform().TransformPoint(global);
334  return theEntryPoint;
335 }
G4StepPoint * preStepPoint
Definition: FP420SD.h:109
G4ThreeVector theEntryPoint
Definition: FP420SD.h:89
G4ThreeVector FP420SD::SetToLocalExit ( const G4ThreeVector &  globalPoint)
private

Definition at line 338 of file FP420SD.cc.

References postStepPoint, and theExitPoint.

Referenced by ResetForNewPrimary().

338  {
339 
340  const G4VTouchable* touch= postStepPoint->GetTouchable();
341  theExitPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
342  return theExitPoint;
343 }
G4ThreeVector theExitPoint
Definition: FP420SD.h:90
G4StepPoint * postStepPoint
Definition: FP420SD.h:110
void FP420SD::StoreHit ( FP420G4Hit hit)
private

Definition at line 228 of file FP420SD.cc.

References theHC.

Referenced by CreateNewHit().

228  {
229 
230  // if (primID<0) return;
231  if (hit == nullptr ) {
232  edm::LogWarning("FP420Sim") << "FP420SD: hit to be stored is NULL !!";
233  return;
234  }
235 
236  theHC->insert( hit );
237 }
FP420G4HitCollection * theHC
Definition: FP420SD.h:95
void FP420SD::Summarize ( )
private

Definition at line 424 of file FP420SD.cc.

Referenced by EndOfEvent().

424  {
425 }
void FP420SD::update ( const BeginOfRun )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfRun * >.

Definition at line 461 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().

461  {
462 
463  G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
464  G4String particleName;
465  emPDG = theParticleTable->FindParticle(particleName="e-")->GetPDGEncoding();
466  epPDG = theParticleTable->FindParticle(particleName="e+")->GetPDGEncoding();
467  gammaPDG = theParticleTable->FindParticle(particleName="gamma")->GetPDGEncoding();
468 
469 }
G4int emPDG
Definition: FP420SD.h:138
G4int gammaPDG
Definition: FP420SD.h:140
G4int epPDG
Definition: FP420SD.h:139
void FP420SD::update ( const BeginOfEvent )
overrideprivatevirtual

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfEvent * >.

Definition at line 454 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().

454  {
455  LogDebug("ForwardSim") << " Dispatched BeginOfEvent for " << GetName()
456  << " !" ;
457  clearHits();
458  eventno = (*i)()->GetEventID();
459 }
#define LogDebug(id)
int eventno
Definition: FP420SD.h:133
void clearHits() override
Definition: FP420SD.cc:474
void FP420SD::update ( const ::EndOfEvent )
overrideprivate
void FP420SD::UpdateHit ( )
private

Definition at line 306 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().

306  {
307  //
308  if (Eloss > 0.) {
310 
311 #ifdef debug
312  LogDebug("FP420Sim") << "updateHit: add eloss " << Eloss <<std::endl;
313  LogDebug("FP420Sim") << "CurrentHit=" << currentHit
314  << ", PostStepPoint=" << postStepPoint->GetPosition() << std::endl;
315 #endif
316  //AZ
317  // currentHit->setEnergyLoss(Eloss);
319  }
320 
321 
322 
323  // buffer for next steps:
324  tsID = tSliceID;
325  primID = primaryID;
327 }
#define LogDebug(id)
void addEnergyDeposit(double em, double hd)
Definition: FP420G4Hit.cc:143
G4int tsID
Definition: FP420SD.h:98
unsigned int primaryID
Definition: FP420SD.h:105
float Eloss
Definition: FP420SD.h:119
unsigned int primID
Definition: FP420SD.h:105
float edepositHAD
Definition: FP420SD.h:137
G4int tSliceID
Definition: FP420SD.h:104
uint32_t previousUnitID
Definition: FP420SD.h:103
uint32_t unitID
Definition: FP420SD.h:103
float edepositEM
Definition: FP420SD.h:137
G4StepPoint * postStepPoint
Definition: FP420SD.h:110
FP420G4Hit * currentHit
Definition: FP420SD.h:99
void addEnergyLoss(float e)
Definition: FP420G4Hit.cc:155

Member Data Documentation

FP420G4Hit* FP420SD::currentHit
private

Definition at line 99 of file FP420SD.h.

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

G4VPhysicalVolume* FP420SD::currentPV
private

Definition at line 101 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::edeposit
private

Definition at line 111 of file FP420SD.h.

Referenced by GetStepInfo(), and ProcessHits().

float FP420SD::edepositEM
protected

Definition at line 137 of file FP420SD.h.

Referenced by GetStepInfo(), and UpdateHit().

float FP420SD::edepositHAD
protected

Definition at line 137 of file FP420SD.h.

Referenced by GetStepInfo(), and UpdateHit().

float FP420SD::Eloss
private

Definition at line 119 of file FP420SD.h.

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

G4int FP420SD::emPDG
protected

Definition at line 138 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

G4ThreeVector FP420SD::entrancePoint
private

Definition at line 88 of file FP420SD.h.

Referenced by ResetForNewPrimary().

G4int FP420SD::epPDG
protected

Definition at line 139 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

int FP420SD::eventno
private

Definition at line 133 of file FP420SD.h.

Referenced by update().

G4ThreeVector FP420SD::exitPoint
private

Definition at line 88 of file FP420SD.h.

Referenced by ResetForNewPrimary().

G4int FP420SD::gammaPDG
protected

Definition at line 140 of file FP420SD.h.

Referenced by GetStepInfo(), and update().

G4int FP420SD::hcID
private

Definition at line 94 of file FP420SD.h.

Referenced by Initialize().

G4ThreeVector FP420SD::hitPoint
private

Definition at line 113 of file FP420SD.h.

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

G4ThreeVector FP420SD::hitPointExit
private

Definition at line 114 of file FP420SD.h.

Referenced by GetStepInfo(), and ResetForNewPrimary().

G4ThreeVector FP420SD::hitPointLocal
private

Definition at line 115 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4ThreeVector FP420SD::hitPointLocalExit
private

Definition at line 116 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::incidentEnergy
private

Definition at line 92 of file FP420SD.h.

Referenced by CreateNewHit(), and ResetForNewPrimary().

FP420NumberingScheme* FP420SD::numberingScheme
private

Definition at line 86 of file FP420SD.h.

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

float FP420SD::Pabs
private

Definition at line 117 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

int FP420SD::ParentId
private

Definition at line 125 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

short FP420SD::ParticleType
private

Definition at line 120 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::PhiAtEntry
private

Definition at line 123 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4StepPoint* FP420SD::postStepPoint
private

Definition at line 110 of file FP420SD.h.

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

G4StepPoint* FP420SD::preStepPoint
private

Definition at line 109 of file FP420SD.h.

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

uint32_t FP420SD::previousUnitID
private

Definition at line 103 of file FP420SD.h.

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

unsigned int FP420SD::primaryID
private

Definition at line 105 of file FP420SD.h.

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

unsigned int FP420SD::primID
private

Definition at line 105 of file FP420SD.h.

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

TrackingSlaveSD* FP420SD::slave
private

Definition at line 85 of file FP420SD.h.

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

G4ThreeVector FP420SD::theEntryPoint
private

Definition at line 89 of file FP420SD.h.

Referenced by SetToLocal().

G4ThreeVector FP420SD::theExitPoint
private

Definition at line 90 of file FP420SD.h.

Referenced by SetToLocalExit().

FP420G4HitCollection* FP420SD::theHC
private

Definition at line 95 of file FP420SD.h.

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

const SimTrackManager* FP420SD::theManager
private

Definition at line 96 of file FP420SD.h.

float FP420SD::ThetaAtEntry
private

Definition at line 122 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4Track* FP420SD::theTrack
private

Definition at line 100 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Tof
private

Definition at line 118 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4int FP420SD::tsID
private

Definition at line 98 of file FP420SD.h.

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

G4double FP420SD::tSlice
private

Definition at line 107 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

G4int FP420SD::tSliceID
private

Definition at line 104 of file FP420SD.h.

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

uint32_t FP420SD::unitID
private

Definition at line 103 of file FP420SD.h.

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

float FP420SD::Vx
private

Definition at line 126 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Vy
private

Definition at line 126 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Vz
private

Definition at line 126 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::X
private

Definition at line 127 of file FP420SD.h.

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

float FP420SD::Y
private

Definition at line 127 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().

float FP420SD::Z
private

Definition at line 127 of file FP420SD.h.

Referenced by CreateNewHit(), and GetStepInfo().