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 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 47 of file FP420SD.cc.

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

49  :
50  SensitiveTkDetector(name, cpv, clg, p), numberingScheme(nullptr),
51  hcID(-1), theHC(nullptr), theManager(manager), currentHit(nullptr), theTrack(nullptr),
52  currentPV(nullptr), unitID(0), previousUnitID(0), preStepPoint(nullptr),
53  postStepPoint(nullptr), eventno(0){
54 
55  //Parameters
56  edm::ParameterSet m_p = p.getParameter<edm::ParameterSet>("FP420SD");
57  int verbn = m_p.getUntrackedParameter<int>("Verbosity");
58  //int verbn = 1;
59 
60  SetVerboseLevel(verbn);
61 
62  slave = new TrackingSlaveSD(name);
63 
64  if (name == "FP420SI") {
65  if (verbn > 0) {
66  edm::LogInfo("FP420Sim") << "name = FP420SI and new FP420NumberingSchem";
67  }
69  } else {
70  edm::LogWarning("FP420Sim") << "FP420SD: ReadoutName not supported\n";
71  }
72 }
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 74 of file FP420SD.cc.

References numberingScheme, and slave.

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

Member Function Documentation

void FP420SD::clear ( void  )
override

Definition at line 429 of file FP420SD.cc.

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

Implements SensitiveDetector.

Definition at line 475 of file FP420SD.cc.

References TrackingSlaveSD::Initialize(), and slave.

Referenced by update().

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

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

241  {
242 
243 #ifdef debug
244  // << " MVid = " << currentPV->GetMother()->GetCopyNo()
245  LogDebug("FP420Sim") << "FP420SD CreateNewHit for"
246  << " PV " << currentPV->GetName()
247  << " PVid = " << currentPV->GetCopyNo()
248  << " Unit " << unitID <<std::endl;
249  LogDebug("FP420Sim") << " primary " << primaryID
250  << " time slice " << tSliceID
251  << " For Track " << theTrack->GetTrackID()
252  << " which is a " << theTrack->GetDefinition()->GetParticleName();
253 
254  if (theTrack->GetTrackID()==1) {
255  LogDebug("FP420Sim") << " of energy " << theTrack->GetTotalEnergy();
256  } else {
257  LogDebug("FP420Sim") << " daughter of part. " << theTrack->GetParentID();
258  }
259 
260  LogDebug("FP420Sim") << " and created by " ;
261  if (theTrack->GetCreatorProcess()!=NULL)
262  LogDebug("FP420Sim") << theTrack->GetCreatorProcess()->GetProcessName() ;
263  else
264  LogDebug("FP420Sim") << "NO process";
265  LogDebug("FP420Sim") << std::endl;
266 #endif
267 
268 
269  currentHit = new FP420G4Hit;
274 
281 
282 // currentHit->setEntry(entrancePoint);
284 
287 
289  currentHit->setVx(Vx);
290  currentHit->setVy(Vy);
291  currentHit->setVz(Vz);
292 
293  currentHit->setX(X);
294  currentHit->setY(Y);
295  currentHit->setZ(Z);
296  //AZ:12.10.2007
297  // UpdateHit();
298  // buffer for next steps:
299  tsID = tSliceID;
300  primID = primaryID;
302 
304 }
#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:229
void setVy(float p)
Definition: FP420G4Hit.cc:181
float Vx
Definition: FP420SD.h:126
void FP420SD::DrawAll ( )
override

Definition at line 433 of file FP420SD.cc.

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

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

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

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

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

Definition at line 79 of file FP420SD.cc.

Referenced by GetStepInfo().

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

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

122  {
123 
124  preStepPoint = aStep->GetPreStepPoint();
125  postStepPoint= aStep->GetPostStepPoint();
126  theTrack = aStep->GetTrack();
127  hitPoint = preStepPoint->GetPosition();
128  currentPV = preStepPoint->GetPhysicalVolume();
129  hitPointExit = postStepPoint->GetPosition();
130 
131  hitPointLocal = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPoint);
132  hitPointLocalExit = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPointExit);
133 
134 
135  G4int particleCode = theTrack->GetDefinition()->GetPDGEncoding();
136  if (particleCode == emPDG ||
137  particleCode == epPDG ||
138  particleCode == gammaPDG ) {
139  edepositEM = getEnergyDeposit(aStep); edepositHAD = 0.;
140  } else {
141  edepositEM = 0.; edepositHAD = getEnergyDeposit(aStep);
142  }
143  edeposit = aStep->GetTotalEnergyDeposit();
144  tSlice = (postStepPoint->GetGlobalTime() )/nanosecond;
145  tSliceID = (int) tSlice;
146  unitID = setDetUnitId(aStep);
147 #ifdef debug
148  LogDebug("FP420Sim") << "unitID=" << unitID <<std::endl;
149 #endif
150  primaryID = theTrack->GetTrackID();
151  // Position = hitPoint;
152  Pabs = aStep->GetPreStepPoint()->GetMomentum().mag()/GeV;
153  //Tof = 1400. + aStep->GetPostStepPoint()->GetGlobalTime()/nanosecond;
154  Tof = aStep->GetPostStepPoint()->GetGlobalTime()/nanosecond;
155  Eloss = aStep->GetTotalEnergyDeposit()/GeV;
156  ParticleType = theTrack->GetDefinition()->GetPDGEncoding();
157  ThetaAtEntry = aStep->GetPreStepPoint()->GetPosition().theta()/deg;
158  PhiAtEntry = aStep->GetPreStepPoint()->GetPosition().phi()/deg;
159 
160  ParentId = theTrack->GetParentID();
161  Vx = theTrack->GetVertexPosition().x();
162  Vy = theTrack->GetVertexPosition().y();
163  Vz = theTrack->GetVertexPosition().z();
164  X = hitPoint.x();
165  Y = hitPoint.y();
166  Z = hitPoint.z();
167 }
#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:79
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:169
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 174 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().

174  {
175  if (primaryID<1) {
176  edm::LogWarning("FP420Sim") << "***** FP420SD error: primaryID = "
177  << primaryID
178  << " 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 &&
202  aPreviousHit->getTimeSliceID() == tSliceID &&
203  aPreviousHit->getUnitID() == unitID ) {
204  //AZ:
205  currentHit = aPreviousHit;
206  found = true;
207  }
208  }
209 
210  if (found) {
211  //AZ:
212  UpdateHit();
213  return true;
214  } else {
215  return false;
216  }
217 }
void ResetForNewPrimary()
Definition: FP420SD.cc:220
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:307
FP420G4Hit * currentHit
Definition: FP420SD.h:99
void FP420SD::Initialize ( G4HCofThisEvent *  HCE)
override

Definition at line 83 of file FP420SD.cc.

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

83  {
84 #ifdef debug
85  LogDebug("FP420Sim") << "FP420SD : Initialize called for " << name << std::endl;
86 #endif
87 
88  theHC = new FP420G4HitCollection(GetName(), collectionName[0]);
89  if (hcID<0)
90  hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
91  HCE->AddHitsCollection(hcID, theHC);
92 
93  tsID = -2;
94  // primID = -2;
95  primID = 0;
96 
98 }
#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 437 of file FP420SD.cc.

References LogDebug, and theHC.

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

Implements SensitiveDetector.

Definition at line 101 of file FP420SD.cc.

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

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

Definition at line 220 of file FP420SD.cc.

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

Referenced by HitExists().

220  {
221 
224  incidentEnergy = preStepPoint->GetKineticEnergy();
225 
226 }
G4ThreeVector SetToLocalExit(const G4ThreeVector &globalPoint)
Definition: FP420SD.cc:339
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:331
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 169 of file FP420SD.cc.

References FP420NumberingScheme::getUnitID(), and numberingScheme.

Referenced by GetStepInfo().

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

Definition at line 331 of file FP420SD.cc.

References preStepPoint, and theEntryPoint.

Referenced by ResetForNewPrimary().

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

Definition at line 339 of file FP420SD.cc.

References postStepPoint, and theExitPoint.

Referenced by ResetForNewPrimary().

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

Definition at line 229 of file FP420SD.cc.

References theHC.

Referenced by CreateNewHit().

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

Definition at line 425 of file FP420SD.cc.

Referenced by EndOfEvent().

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

This routine will be called when the appropriate signal arrives.

Implements Observer< const BeginOfRun * >.

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

462  {
463 
464  G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
465  G4String particleName;
466  emPDG = theParticleTable->FindParticle(particleName="e-")->GetPDGEncoding();
467  epPDG = theParticleTable->FindParticle(particleName="e+")->GetPDGEncoding();
468  gammaPDG = theParticleTable->FindParticle(particleName="gamma")->GetPDGEncoding();
469 
470 }
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 455 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().

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

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

307  {
308  //
309  if (Eloss > 0.) {
311 
312 #ifdef debug
313  LogDebug("FP420Sim") << "updateHit: add eloss " << Eloss <<std::endl;
314  LogDebug("FP420Sim") << "CurrentHit=" << currentHit
315  << ", PostStepPoint=" << postStepPoint->GetPosition() << std::endl;
316 #endif
317  //AZ
318  // currentHit->setEnergyLoss(Eloss);
320  }
321 
322 
323 
324  // buffer for next steps:
325  tsID = tSliceID;
326  primID = primaryID;
328 }
#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().