test
CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FP420SD.cc
Go to the documentation of this file.
1 // File: FP420SD.cc
3 // Date: 02.2006
4 // Description: Sensitive Detector class for FP420
5 // Modifications:
7 
8 //#include "Geometry/Vector/interface/LocalPoint.h"
9 //#include "Geometry/Vector/interface/LocalVector.h"
10 
15 
19 
24 
28 
30 
31 #include "G4Track.hh"
32 #include "G4SDManager.hh"
33 #include "G4VProcess.hh"
34 #include "G4EventManager.hh"
35 #include "G4Step.hh"
36 #include "G4ParticleTable.hh"
37 
38 #include "G4SystemOfUnits.hh"
39 
40 #include <string>
41 #include <vector>
42 #include <iostream>
43 
45 
46 #ifdef DUMPPROCESSES
47 #include "G4VProcess.hh"
48 #endif
49 
50 using std::cout;
51 using std::endl;
52 using std::vector;
53 using std::string;
54 
55 //#define debug
56 //-------------------------------------------------------------------
59  edm::ParameterSet const & p, const SimTrackManager* manager) :
60  SensitiveTkDetector(name, cpv, clg, p), numberingScheme(0), name(name),
61  hcID(-1), theHC(0), theManager(manager), currentHit(0), theTrack(0),
62  currentPV(0), unitID(0), previousUnitID(0), preStepPoint(0),
63  postStepPoint(0), eventno(0){
64 //-------------------------------------------------------------------
65 /*
66 FP420SD::FP420SD(G4String name, const DDCompactView & cpv,
67  edm::ParameterSet const & p, const SimTrackManager* manager) :
68  CaloSD(name, cpv, p, manager), numberingScheme(0), name(name),hcID(-1),
69  theHC(0), currentHit(0), theTrack(0), currentPV(0),
70  unitID(0), previousUnitID(0), preStepPoint(0), postStepPoint(0), eventno(0){
71 */
72 //-------------------------------------------------------------------
73 
74 
75 
76  //Add FP420 Sentitive Detector Name
77  collectionName.insert(name);
78 
79 
80  //Parameters
82  int verbn = m_p.getUntrackedParameter<int>("Verbosity");
83  //int verbn = 1;
84 
85  SetVerboseLevel(verbn);
86  LogDebug("FP420Sim")
87  << "*******************************************************\n"
88  << "* *\n"
89  << "* Constructing a FP420SD with name " << name << "\n"
90  << "* *\n"
91  << "*******************************************************";
92 
93 
94  slave = new TrackingSlaveSD(name);
95 
96  //
97  // attach detectors (LogicalVolumes)
98  //
99  std::vector<std::string> lvNames = clg.logicalNames(name);
100 
101  this->Register();
102 
103  for (std::vector<std::string>::iterator it=lvNames.begin();
104  it !=lvNames.end(); it++) {
105  this->AssignSD(*it);
106  edm::LogInfo("FP420Sim") << "FP420SD : Assigns SD to LV " << (*it);
107  }
108 
109  if (name == "FP420SI") {
110  if (verbn > 0) {
111  edm::LogInfo("FP420Sim") << "name = FP420SI and new FP420NumberingSchem";
112  std::cout << "name = FP420SI and new FP420NumberingSchem"<< std::endl;
113  }
115  } else {
116  edm::LogWarning("FP420Sim") << "FP420SD: ReadoutName not supported\n";
117  std::cout << "FP420SD: ReadoutName not supported"<< std::endl;
118  }
119 
120  edm::LogInfo("FP420Sim") << "FP420SD: Instantiation completed";
121  std::cout << "FP420SD: Instantiation completed"<< std::endl;
122  }
123 
124 
125 
126 
128  //AZ:
129  if (slave) delete slave;
130 
131  if (numberingScheme)
132  delete numberingScheme;
133 
134 }
135 
136 double FP420SD::getEnergyDeposit(G4Step* aStep) {
137  return aStep->GetTotalEnergyDeposit();
138 }
139 
140 void FP420SD::Initialize(G4HCofThisEvent * HCE) {
141 #ifdef debug
142  LogDebug("FP420Sim") << "FP420SD : Initialize called for " << name << std::endl;
143 #endif
144 
146  if (hcID<0)
147  hcID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
148  HCE->AddHitsCollection(hcID, theHC);
149 
150  tsID = -2;
151  // primID = -2;
152  primID = 0;
153 
155 }
156 
157 
158 bool FP420SD::ProcessHits(G4Step * aStep, G4TouchableHistory * ) {
159 
160  if (aStep == NULL) {
161  return true;
162  } else {
163  GetStepInfo(aStep);
164  // LogDebug("FP420Sim") << edeposit <<std::endl;
165 
166  //AZ
167 #ifdef debug
168  LogDebug("FP420Sim") << "FP420SD : number of hits = " << theHC->entries() << std::endl;
169 #endif
170 
171  if (HitExists() == false && edeposit>0. && theHC->entries()< 200 ){
172  CreateNewHit();
173  return true;
174  }
175  }
176  return true;
177 }
178 
179 void FP420SD::GetStepInfo(G4Step* aStep) {
180 
181  preStepPoint = aStep->GetPreStepPoint();
182  postStepPoint= aStep->GetPostStepPoint();
183  theTrack = aStep->GetTrack();
184  hitPoint = preStepPoint->GetPosition();
185  currentPV = preStepPoint->GetPhysicalVolume();
186  hitPointExit = postStepPoint->GetPosition();
187 
188  hitPointLocal = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPoint);
189  hitPointLocalExit = preStepPoint->GetTouchable()->GetHistory()->GetTopTransform().TransformPoint(hitPointExit);
190 
191 
192  G4int particleCode = theTrack->GetDefinition()->GetPDGEncoding();
193  if (particleCode == emPDG ||
194  particleCode == epPDG ||
195  particleCode == gammaPDG ) {
196  edepositEM = getEnergyDeposit(aStep); edepositHAD = 0.;
197  } else {
198  edepositEM = 0.; edepositHAD = getEnergyDeposit(aStep);
199  }
200  edeposit = aStep->GetTotalEnergyDeposit();
201  tSlice = (postStepPoint->GetGlobalTime() )/nanosecond;
202  tSliceID = (int) tSlice;
203  unitID = setDetUnitId(aStep);
204 #ifdef debug
205  LogDebug("FP420Sim") << "unitID=" << unitID <<std::endl;
206 #endif
207  primaryID = theTrack->GetTrackID();
208  // Position = hitPoint;
209  Pabs = aStep->GetPreStepPoint()->GetMomentum().mag()/GeV;
210  //Tof = 1400. + aStep->GetPostStepPoint()->GetGlobalTime()/nanosecond;
211  Tof = aStep->GetPostStepPoint()->GetGlobalTime()/nanosecond;
212  Eloss = aStep->GetTotalEnergyDeposit()/GeV;
213  ParticleType = theTrack->GetDefinition()->GetPDGEncoding();
214  ThetaAtEntry = aStep->GetPreStepPoint()->GetPosition().theta()/deg;
215  PhiAtEntry = aStep->GetPreStepPoint()->GetPosition().phi()/deg;
216 
217  ParentId = theTrack->GetParentID();
218  Vx = theTrack->GetVertexPosition().x();
219  Vy = theTrack->GetVertexPosition().y();
220  Vz = theTrack->GetVertexPosition().z();
221  X = hitPoint.x();
222  Y = hitPoint.y();
223  Z = hitPoint.z();
224 }
225 
226 uint32_t FP420SD::setDetUnitId(G4Step * aStep) {
227 
228  return (numberingScheme == 0 ? 0 : numberingScheme->getUnitID(aStep));
229 }
230 
231 
233  if (primaryID<1) {
234  edm::LogWarning("FP420Sim") << "***** FP420SD error: primaryID = "
235  << primaryID
236  << " maybe detector name changed";
237  }
238 
239  // Update if in the same detector, time-slice and for same track
240  // if (primaryID == primID && tSliceID == tsID && unitID==previousUnitID) {
241  if (tSliceID == tsID && unitID==previousUnitID) {
242  //AZ:
243  UpdateHit();
244  return true;
245  }
246  // Reset entry point for new primary
247  if (primaryID != primID)
249 
250  //look in the HitContainer whether a hit with the same primID, unitID,
251  //tSliceID already exists:
252 
253  G4bool found = false;
254 
255  // LogDebug("FP420Sim") << "FP420SD: HCollection= " << theHC->entries() <<std::endl;
256 
257  for (int j=0; j<theHC->entries()&&!found; j++) {
258  FP420G4Hit* aPreviousHit = (*theHC)[j];
259  if (aPreviousHit->getTrackID() == primaryID &&
260  aPreviousHit->getTimeSliceID() == tSliceID &&
261  aPreviousHit->getUnitID() == unitID ) {
262  //AZ:
263  currentHit = aPreviousHit;
264  found = true;
265  }
266  }
267 
268  if (found) {
269  //AZ:
270  UpdateHit();
271  return true;
272  } else {
273  return false;
274  }
275 }
276 
277 
279 
282  incidentEnergy = preStepPoint->GetKineticEnergy();
283 
284 }
285 
286 
288 
289  // if (primID<0) return;
290  if (hit == 0 ) {
291  edm::LogWarning("FP420Sim") << "FP420SD: hit to be stored is NULL !!";
292  return;
293  }
294 
295  theHC->insert( hit );
296 }
297 
298 
300 
301 #ifdef debug
302  // << " MVid = " << currentPV->GetMother()->GetCopyNo()
303  LogDebug("FP420Sim") << "FP420SD CreateNewHit for"
304  << " PV " << currentPV->GetName()
305  << " PVid = " << currentPV->GetCopyNo()
306  << " Unit " << unitID <<std::endl;
307  LogDebug("FP420Sim") << " primary " << primaryID
308  << " time slice " << tSliceID
309  << " For Track " << theTrack->GetTrackID()
310  << " which is a " << theTrack->GetDefinition()->GetParticleName();
311 
312  if (theTrack->GetTrackID()==1) {
313  LogDebug("FP420Sim") << " of energy " << theTrack->GetTotalEnergy();
314  } else {
315  LogDebug("FP420Sim") << " daughter of part. " << theTrack->GetParentID();
316  }
317 
318  LogDebug("FP420Sim") << " and created by " ;
319  if (theTrack->GetCreatorProcess()!=NULL)
320  LogDebug("FP420Sim") << theTrack->GetCreatorProcess()->GetProcessName() ;
321  else
322  LogDebug("FP420Sim") << "NO process";
323  LogDebug("FP420Sim") << std::endl;
324 #endif
325 
326 
327  currentHit = new FP420G4Hit;
332 
339 
340 // currentHit->setEntry(entrancePoint);
342 
345 
347  currentHit->setVx(Vx);
348  currentHit->setVy(Vy);
349  currentHit->setVz(Vz);
350 
351  currentHit->setX(X);
352  currentHit->setY(Y);
353  currentHit->setZ(Z);
354  //AZ:12.10.2007
355  // UpdateHit();
356  // buffer for next steps:
357  tsID = tSliceID;
358  primID = primaryID;
360 
362 }
363 
364 
366  //
367  if (Eloss > 0.) {
369 
370 #ifdef debug
371  LogDebug("FP420Sim") << "updateHit: add eloss " << Eloss <<std::endl;
372  LogDebug("FP420Sim") << "CurrentHit=" << currentHit
373  << ", PostStepPoint=" << postStepPoint->GetPosition() << std::endl;
374 #endif
375  //AZ
376  // currentHit->setEnergyLoss(Eloss);
378  }
379 
380 
381 
382  // buffer for next steps:
383  tsID = tSliceID;
384  primID = primaryID;
386 }
387 
388 
389 G4ThreeVector FP420SD::SetToLocal(const G4ThreeVector& global){
390 
391  const G4VTouchable* touch= preStepPoint->GetTouchable();
392  theEntryPoint = touch->GetHistory()->GetTopTransform().TransformPoint(global);
393  return theEntryPoint;
394 }
395 
396 
397 G4ThreeVector FP420SD::SetToLocalExit(const G4ThreeVector& globalPoint){
398 
399  const G4VTouchable* touch= postStepPoint->GetTouchable();
400  theExitPoint = touch->GetHistory()->GetTopTransform().TransformPoint(globalPoint);
401  return theExitPoint;
402 }
403 
404 
405 void FP420SD::EndOfEvent(G4HCofThisEvent* ) {
406 
407  // here we loop over transient hits and make them persistent
408 
409  // if(theHC->entries() > 100){
410  // LogDebug("FP420Sim") << "FP420SD: warning!!! Number of hits exceed 100 and =" << theHC->entries() << "\n";
411  // }
412  // for (int j=0; j<theHC->entries() && j<100; j++) {
413  int nhitsHPS240=0;
414  int nhitsFP420=0;
415  for (int j=0; j<theHC->entries(); j++) {
416  FP420G4Hit* aHit = (*theHC)[j];
417  if((fabs(aHit->getTof())> 780. && fabs(aHit->getTof())< 840.)) ++nhitsHPS240;
418  if((fabs(aHit->getTof())>1380. && fabs(aHit->getTof())<1450.)) ++nhitsFP420;
419  // if(fabs(aHit->getTof()) < 1700.) {
420  if((fabs(aHit->getTof())>780. && fabs(aHit->getTof())<840. && nhitsHPS240<200.) || ( fabs(aHit->getTof())>1380. && fabs(aHit->getTof())<1450. && nhitsFP420<200.)) {
421 
422 
423 #ifdef ddebug
424  // LogDebug("FP420SD") << " FP420Hit " << j << " " << *aHit << std::endl;
425  LogDebug("FP420Sim") << "hit number" << j << "unit ID = "<<aHit->getUnitID()<< "\n";
426  LogDebug("FP420Sim") << "entry z " << aHit->getEntry().z()<< "\n";
427  LogDebug("FP420Sim") << "entr theta " << aHit->getThetaAtEntry()<< "\n";
428 #endif
429 
430  // Local3DPoint locExitPoint(0,0,0);
431  // Local3DPoint locEntryPoint(aHit->getEntry().x(),
432  // aHit->getEntry().y(),
433  // aHit->getEntry().z());
434  Local3DPoint locExitPoint(aHit->getExitLocalP().x(),
435  aHit->getExitLocalP().y(),
436  aHit->getExitLocalP().z());
437  Local3DPoint locEntryPoint(aHit->getEntryLocalP().x(),
438  aHit->getEntryLocalP().y(),
439  aHit->getEntryLocalP().z());
440  // implicit conversion (slicing) to PSimHit!!!
441  slave->processHits(PSimHit(locEntryPoint,locExitPoint,//entryPoint(), exitPoint() Local3DPoint
442  aHit->getPabs(),// pabs() float
443  aHit->getTof(), // tof() float
444  aHit->getEnergyLoss(), // energyLoss() float
445  aHit->getParticleType(),// particleType() int
446  aHit->getUnitID(), // detUnitId() unsigned int
447  aHit->getTrackID(),// trackId() unsigned int
448  aHit->getThetaAtEntry(),// thetaAtEntry() float
449  aHit->getPhiAtEntry())); // phiAtEntry() float
450 
451  //PSimHit( const Local3DPoint& entry, const Local3DPoint& exit,
452  // float pabs, float tof, float eloss, int particleType,
453  // unsigned int detId, unsigned int trackId,
454  // float theta, float phi, unsigned short processType=0) :
455 
456  // LocalVector direction = hit.exitPoint() - hit.entryPoint();
457  //hit.energyLoss
458 
459 
460  /*
461  aHit->getEM(), -
462  aHit->getHadr(), -
463  aHit->getIncidentEnergy(), -
464  aHit->getTimeSlice(), -
465  aHit->getEntry(), -
466  aHit->getParentId(),
467  aHit->getEntryLocalP(), -
468  aHit->getExitLocalP(), -
469  aHit->getX(), -
470  aHit->getY(), -
471  aHit->getZ(), -
472  aHit->getVx(), -
473  aHit->getVy(), -
474  aHit->getVz())); -
475  */
476  }//if Tof<1600. if nhits<100
477  } // for loop on hits
478 
479  Summarize();
480 }
481 
482 
484 }
485 
486 
488 }
489 
490 
492 }
493 
494 
496  LogDebug("FP420Sim") << "FP420SD: Collection " << theHC->GetName() << "\n";
497  theHC->PrintAllHits();
498 }
499 
500 
501 //void FP420SD::SetNumberingScheme(FP420NumberingScheme* scheme){
502 //
503 // if (numberingScheme)
504 // delete numberingScheme;
505 // numberingScheme = scheme;
506 //
507 //}
508 
510  if (slave->name() == n) {
511  c=slave->hits();
512  std::cout << "FP420SD: fillHits to PSimHitContainer for name= " << name << std::endl;
513  }
514 }
515 
517  LogDebug("ForwardSim") << " Dispatched BeginOfEvent for " << GetName()
518  << " !" ;
519  clearHits();
520  eventno = (*i)()->GetEventID();
521 }
522 
524 
525  G4ParticleTable * theParticleTable = G4ParticleTable::GetParticleTable();
526  G4String particleName;
527  emPDG = theParticleTable->FindParticle(particleName="e-")->GetPDGEncoding();
528  epPDG = theParticleTable->FindParticle(particleName="e+")->GetPDGEncoding();
529  gammaPDG = theParticleTable->FindParticle(particleName="gamma")->GetPDGEncoding();
530 
531 }
532 
533 void FP420SD::update (const ::EndOfEvent*) {
534 }
535 
537  //AZ:
538  slave->Initialize();
539 }
540 
541 std::vector<std::string> FP420SD::getNames(){
542  std::vector<std::string> temp;
543  temp.push_back(slave->name());
544  return temp;
545 }
546 
#define LogDebug(id)
FP420SD(std::string, const DDCompactView &, SensitiveDetectorCatalog &, edm::ParameterSet const &, const SimTrackManager *)
Definition: FP420SD.cc:57
int eventno
Definition: FP420SD.h:178
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
G4ThreeVector theExitPoint
Definition: FP420SD.h:127
G4int emPDG
Definition: FP420SD.h:183
std::vector< std::string > getNames()
Definition: FP420SD.cc:541
std::vector< std::string > logicalNames(std::string &readoutName)
void setY(float t)
Definition: FP420G4Hit.cc:169
const double GeV
Definition: MathUtil.h:16
G4ThreeVector SetToLocalExit(const G4ThreeVector &globalPoint)
Definition: FP420SD.cc:397
void setPhiAtEntry(float f)
Definition: FP420G4Hit.cc:163
float getTof() const
Definition: FP420G4Hit.cc:149
float ThetaAtEntry
Definition: FP420SD.h:167
virtual void Initialize(G4HCofThisEvent *HCE)
Definition: FP420SD.cc:140
void setVz(float p)
Definition: FP420G4Hit.cc:184
void setEntry(const G4ThreeVector &xyz)
Definition: FP420G4Hit.cc:116
virtual double getEnergyDeposit(G4Step *step)
Definition: FP420SD.cc:136
G4ThreeVector hitPointExit
Definition: FP420SD.h:159
std::string name() const
G4ThreeVector getExitLocalP() const
Definition: FP420G4Hit.cc:121
virtual bool ProcessHits(G4Step *, G4TouchableHistory *)
Definition: FP420SD.cc:158
void setZ(float t)
Definition: FP420G4Hit.cc:172
float Pabs
Definition: FP420SD.h:162
void setPabs(float e)
Definition: FP420G4Hit.cc:153
TrackingSlaveSD * slave
Definition: FP420SD.h:122
#define NULL
Definition: scimark2.h:8
G4StepPoint * preStepPoint
Definition: FP420SD.h:153
void ResetForNewPrimary()
Definition: FP420SD.cc:278
float getPabs() const
Definition: FP420G4Hit.cc:148
type of data representation of DDCompactView
Definition: DDCompactView.h:77
void setVx(float p)
Definition: FP420G4Hit.cc:178
G4int hcID
Definition: FP420SD.h:138
void setTrackID(int i)
Definition: FP420G4Hit.cc:134
unsigned int getTrackID() const
Definition: FP420G4Hit.cc:133
void addEnergyDeposit(double em, double hd)
Definition: FP420G4Hit.cc:143
G4int tsID
Definition: FP420SD.h:142
static TrackerG4SimHitNumberingScheme & numberingScheme(const DDCompactView &cpv, const GeometricDet &det)
unsigned int primaryID
Definition: FP420SD.h:149
float Eloss
Definition: FP420SD.h:164
unsigned int primID
Definition: FP420SD.h:149
virtual uint32_t setDetUnitId(G4Step *)
Definition: FP420SD.cc:226
float getPhiAtEntry() const
Definition: FP420G4Hit.cc:160
virtual void EndOfEvent(G4HCofThisEvent *eventHC)
Definition: FP420SD.cc:405
G4ThreeVector exitPoint
Definition: FP420SD.h:125
float edeposit
Definition: FP420SD.h:155
void update(const BeginOfRun *)
This routine will be called when the appropriate signal arrives.
Definition: FP420SD.cc:523
unsigned int getUnitID() const
Definition: FP420G4Hit.cc:136
void setEnergyLoss(float e)
Definition: FP420G4Hit.cc:156
std::vector< PSimHit > & hits()
std::string name
Definition: FP420SD.h:137
std::string const collectionName[nCollections]
Definition: Collections.h:45
G4ThreeVector theEntryPoint
Definition: FP420SD.h:126
void setTof(float e)
Definition: FP420G4Hit.cc:154
virtual void Initialize()
float edepositHAD
Definition: FP420SD.h:182
float Vz
Definition: FP420SD.h:171
void GetStepInfo(G4Step *aStep)
Definition: FP420SD.cc:179
G4int gammaPDG
Definition: FP420SD.h:185
FP420G4HitCollection * theHC
Definition: FP420SD.h:139
void CreateNewHit()
Definition: FP420SD.cc:299
ParticleType
G4Track * theTrack
Definition: FP420SD.h:144
void Summarize()
Definition: FP420SD.cc:483
int j
Definition: DBlmapReader.cc:9
G4int tSliceID
Definition: FP420SD.h:148
G4ThreeVector getEntryLocalP() const
Definition: FP420G4Hit.cc:118
G4bool HitExists()
Definition: FP420SD.cc:232
void fillHits(edm::PSimHitContainer &, std::string use)
Definition: FP420SD.cc:509
void setTimeSlice(double d)
Definition: FP420G4Hit.cc:140
virtual void clear()
Definition: FP420SD.cc:487
virtual unsigned int getUnitID(const G4Step *aStep) const
float getEnergyLoss() const
Definition: FP420G4Hit.cc:150
void setEntryLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:119
G4THitsCollection< FP420G4Hit > FP420G4HitCollection
void setIncidentEnergy(double e)
Definition: FP420G4Hit.cc:131
uint32_t previousUnitID
Definition: FP420SD.h:147
int getTimeSliceID() const
Definition: FP420G4Hit.cc:141
G4VPhysicalVolume * currentPV
Definition: FP420SD.h:145
void setX(float t)
Definition: FP420G4Hit.cc:166
float Tof
Definition: FP420SD.h:163
void setExitLocalP(const G4ThreeVector &xyz1)
Definition: FP420G4Hit.cc:122
virtual void DrawAll()
Definition: FP420SD.cc:491
int getParticleType() const
Definition: FP420G4Hit.cc:151
uint32_t unitID
Definition: FP420SD.h:147
float PhiAtEntry
Definition: FP420SD.h:168
float edepositEM
Definition: FP420SD.h:182
virtual ~FP420SD()
Definition: FP420SD.cc:127
void setParticleType(short i)
Definition: FP420G4Hit.cc:157
void setThetaAtEntry(float t)
Definition: FP420G4Hit.cc:162
G4ThreeVector hitPointLocalExit
Definition: FP420SD.h:161
virtual void AssignSD(std::string &vname)
FP420NumberingScheme * numberingScheme
Definition: FP420SD.h:123
G4double tSlice
Definition: FP420SD.h:151
G4ThreeVector SetToLocal(const G4ThreeVector &global)
Definition: FP420SD.cc:389
float incidentEnergy
Definition: FP420SD.h:134
virtual void clearHits()
Definition: FP420SD.cc:536
void setUnitID(unsigned int i)
Definition: FP420G4Hit.cc:137
int ParentId
Definition: FP420SD.h:170
G4ThreeVector entrancePoint
Definition: FP420SD.h:125
float Z
Definition: FP420SD.h:172
float Vy
Definition: FP420SD.h:171
virtual bool processHits(const PSimHit &)
tuple cout
Definition: gather_cfg.py:121
void UpdateHit()
Definition: FP420SD.cc:365
std::vector< PSimHit > PSimHitContainer
G4ThreeVector getEntry() const
Definition: FP420G4Hit.cc:115
G4int epPDG
Definition: FP420SD.h:184
G4StepPoint * postStepPoint
Definition: FP420SD.h:154
void setParentId(int p)
Definition: FP420G4Hit.cc:175
float X
Definition: FP420SD.h:172
FP420G4Hit * currentHit
Definition: FP420SD.h:143
G4ThreeVector hitPointLocal
Definition: FP420SD.h:160
G4ThreeVector hitPoint
Definition: FP420SD.h:157
void addEnergyLoss(float e)
Definition: FP420G4Hit.cc:155
virtual void PrintAll()
Definition: FP420SD.cc:495
float getThetaAtEntry() const
Definition: FP420G4Hit.cc:159
float Y
Definition: FP420SD.h:172
void StoreHit(FP420G4Hit *)
Definition: FP420SD.cc:287
void setVy(float p)
Definition: FP420G4Hit.cc:181
float Vx
Definition: FP420SD.h:171