Belle II Software  release-08-01-10
SensitiveDetector Class Reference

Sensitive Detector implementation of the BGO detector. More...

#include <SensitiveDetector.h>

Inheritance diagram for SensitiveDetector:
Collaboration diagram for SensitiveDetector:

Public Member Functions

 SensitiveDetector ()
 Constructor.
 
 ~SensitiveDetector ()
 Destructor.
 
int saveSimHit (const G4int cellId, const G4int trackID, const G4int pid, const G4double tof, const G4double edep, G4ThreeVector mom, TVector3 WightedPos)
 Save BgoSimHit into datastore.
 

Static Public Member Functions

static const std::map< std::string, RelationArray::EConsolidationAction > & getMCParticleRelations ()
 Return a list of all registered Relations with MCParticles.
 
static void setActive (bool activeStatus)
 Enable/Disable all Sensitive Detectors. More...
 
static void registerMCParticleRelation (const std::string &name, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
 Register an relation involving MCParticles. More...
 
static void registerMCParticleRelation (const RelationArray &relation, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
 Overload to make it easer to register MCParticle relations. More...
 

Protected Member Functions

bool step (G4Step *step, G4TouchableHistory *) override
 Step processing method. More...
 

Private Member Functions

virtual bool ProcessHits (G4Step *aStep, G4TouchableHistory *aROhist)
 Check if recording hits is enabled and if so call step() and set the correct MCParticle flag. More...
 

Private Attributes

int m_hitNum
 members of SensitiveDetector

 
int m_EvnetNumber
 The current number of created hits in an event. More...
 
int m_oldEvnetNumber
 The current number of created hits in an event. More...
 
int m_trackID
 The current number of created hits in an event. More...
 
G4ThreeVector m_startPos
 track id
 
G4ThreeVector m_endPos
 Position of prestep.
 
TVector3 m_WightedPos
 Position of poststep.
 
G4ThreeVector m_momentum
 Wighted step Position.
 
double m_startTime
 momentum of track
 
double m_endTime
 global time
 
double m_WightedTime
 global time
 
double m_startEnergy
 global time
 
double m_energyDeposit
 particle energy at the entrance in volume
 
double m_trackLength
 energy deposited in volume
 
int iECLCell
 length of the track in the volume
 
int TimeIndex
 Hit Energy of StoreArray.
 
TVector3 PosCell
 Hit Time of StoreArray.
 
TVector3 VecCell
 center of crystal position
 
double local_pos
 vector of crystal axis
 
double T_ave
 position alongthe vector of crystal axis

 
int firstcall
 flight time to diode sensor

 
int m_phiID
 flag of first call

 
int m_thetaID
 The current phi ID in an event. More...
 
int m_cellID
 The current theta ID in an event. More...
 
Const::EDetector m_subdetector
 Subdetector the class belongs to.
 

Static Private Attributes

static std::map< std::string, RelationArray::EConsolidationActions_mcRelations
 Static set holding all relations which have to be updated at the end of the Event.
 
static bool s_active
 Static bool which indicates wether recording of hits is enabled.
 

Detailed Description

Sensitive Detector implementation of the BGO detector.

Definition at line 24 of file SensitiveDetector.h.

Member Function Documentation

◆ ProcessHits()

bool ProcessHits ( G4Step *  aStep,
G4TouchableHistory *  aROhist 
)
inlineprivatevirtualinherited

Check if recording hits is enabled and if so call step() and set the correct MCParticle flag.

Called by Geant4 for each step inside the sensitive volumes attached

Definition at line 94 of file SensitiveDetectorBase.h.

◆ registerMCParticleRelation() [1/2]

static void registerMCParticleRelation ( const RelationArray relation,
RelationArray::EConsolidationAction  ignoreAction = RelationArray::c_negativeWeight 
)
inlinestaticinherited

Overload to make it easer to register MCParticle relations.

Parameters
relationRelationArray to register
ignoreAction

Definition at line 66 of file SensitiveDetectorBase.h.

◆ registerMCParticleRelation() [2/2]

void registerMCParticleRelation ( const std::string &  name,
RelationArray::EConsolidationAction  ignoreAction = RelationArray::c_negativeWeight 
)
staticinherited

Register an relation involving MCParticles.

All Relations which point from an MCParticle to something have to be registered with addMCParticleRelation() because the index of the MCParticles might change at the end of the event. During simulation, the TrackID should be used as index of the MCParticle

Parameters
nameName of the relation to register
ignoreAction

Definition at line 22 of file SensitiveDetectorBase.cc.

◆ setActive()

static void setActive ( bool  activeStatus)
inlinestaticinherited

Enable/Disable all Sensitive Detectors.

By default, all sensitive detectors won't create hits to make it possible to use the Geant4 Navigator for non-simulation purposes. Only during simulation the sensitive detectors will be enabled to record hits

Parameters
activeStatusbool to indicate wether hits should be recorded

Definition at line 50 of file SensitiveDetectorBase.h.

◆ step()

bool step ( G4Step *  step,
G4TouchableHistory *   
)
overrideprotectedvirtual

Step processing method.

Parameters
stepthe G4Step with the current step information
Returns
true if a Hit has been created, false if the hit was ignored

Implements SensitiveDetectorBase.

Definition at line 70 of file SensitiveDetector.cc.

71  {
72  const G4StepPoint& preStep = *step->GetPreStepPoint();
73  const G4StepPoint& postStep = *step->GetPostStepPoint();
74 
75  G4Track& track = *step->GetTrack();
76  if (m_trackID != track.GetTrackID()) {
77  //TrackID changed, store track informations
78  m_trackID = track.GetTrackID();
79  //Get momentum
80  m_momentum = preStep.GetMomentum() ;
81  //Get energy
82  m_startEnergy = preStep.GetKineticEnergy() ;
83  //Reset energy deposit;
84  m_energyDeposit = 0;
85  //Reset Wighted Time;
86  m_WightedTime = 0;
87  //Reset m_WightedPos;
88  m_WightedPos.SetXYZ(0, 0, 0);
89 
90  }
91  //Update energy deposit
92  m_energyDeposit += step->GetTotalEnergyDeposit() ;
93 
94  m_startTime = preStep.GetGlobalTime();
95  m_endTime = postStep.GetGlobalTime();
96  m_WightedTime += (m_startTime + m_endTime) / 2 * (step->GetTotalEnergyDeposit());
97 
98  m_startPos = preStep.GetPosition();
99  m_endPos = postStep.GetPosition();
100  TVector3 position((m_startPos.getX() + m_endPos.getX()) / 2 / CLHEP::cm, (m_startPos.getY() + m_endPos.getY()) / 2 / CLHEP::cm,
101  (m_startPos.getZ() + m_endPos.getZ()) / 2 / CLHEP::cm);
102  m_WightedPos += position * (step->GetTotalEnergyDeposit());
103 
104  //Save Hit if track leaves volume or is killed
105  if (track.GetNextVolume() != track.GetVolume() || track.GetTrackStatus() >= fStopAndKill) {
106  int pdgCode = track.GetDefinition()->GetPDGEncoding();
107 
108  //const G4VPhysicalVolume& v = * track.GetVolume();
109  //G4ThreeVector posCell = v.GetTranslation();
110  // Get layer ID
111 
112  //if (v.GetName().find("Crystal") != std::string::npos) {
113  //CsiGeometryPar* eclp = CsiGeometryPar::Instance();
114  m_cellID = step->GetTrack()->GetVolume()->GetCopyNo();
115 
116  double dTotalEnergy = 1 / m_energyDeposit; //avoid the error no match for 'operator/'
117  if (m_energyDeposit > 0.) {
118 
120  m_energyDeposit, m_momentum, m_WightedPos * dTotalEnergy);
121  //}
122  }
123 
124  //Reset TrackID
125  m_trackID = 0;
126  }
127 
128  return true;
129  }
double m_energyDeposit
particle energy at the entrance in volume
int m_trackID
The current number of created hits in an event.
TVector3 m_WightedPos
Position of poststep.
G4ThreeVector m_momentum
Wighted step Position.
int m_cellID
The current theta ID in an event.
double m_startTime
momentum of track
G4ThreeVector m_startPos
track id
G4ThreeVector m_endPos
Position of prestep.
bool step(G4Step *step, G4TouchableHistory *) override
Step processing method.
int saveSimHit(const G4int cellId, const G4int trackID, const G4int pid, const G4double tof, const G4double edep, G4ThreeVector mom, TVector3 WightedPos)
Save BgoSimHit into datastore.

Member Data Documentation

◆ m_cellID

int m_cellID
private

The current theta ID in an event.

Used to fill the DataStore ECL array

Definition at line 78 of file SensitiveDetector.h.

◆ m_EvnetNumber

int m_EvnetNumber
private

The current number of created hits in an event.

Used to fill the DataStore ECLHit.

Definition at line 54 of file SensitiveDetector.h.

◆ m_oldEvnetNumber

int m_oldEvnetNumber
private

The current number of created hits in an event.

Used to fill the DataStore ECL EB array.

Definition at line 55 of file SensitiveDetector.h.

◆ m_thetaID

int m_thetaID
private

The current phi ID in an event.

Used to fill the DataStore ECL array

Definition at line 77 of file SensitiveDetector.h.

◆ m_trackID

int m_trackID
private

The current number of created hits in an event.

Used to fill the DataStore

Definition at line 56 of file SensitiveDetector.h.


The documentation for this class was generated from the following files: