Belle II Software development
SensitiveDetector Class Reference

The IR Sensitive Detector class. More...

#include <SensitiveDetector.h>

Inheritance diagram for SensitiveDetector:
SensitiveDetectorBase

Public Member Functions

 SensitiveDetector ()
 Constructor.
 
bool step (G4Step *aStep, G4TouchableHistory *) override
 Process each step and calculate variables defined in IRSimHit.
 

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.
 
static void registerMCParticleRelation (const std::string &name, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
 Register an relation involving MCParticles.
 
static void registerMCParticleRelation (const RelationArray &relation, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
 Overload to make it easer to register MCParticle relations.
 

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.
 

Private Attributes

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

The IR Sensitive Detector class.

This class stores Geant4 steps (pieces of tracks) in the IR acitve sensors to IRSimHits. The steps are not aggregated and are intended to be directly digitized. The IRSimHits are saved in a DataStore collection together with their relations to MCParticles (actually, the relations are indexed by trackIDs rather than MCParticles, the relations to MCParticles are later restored by the framework.

The threshold parameter defines minimum energy that a Geant4 step has to deposit to be saved in the DataStore. It is a dimensionless number defining the fraction of a MIP deposition per unit path length.

Detection of photons. The original version only stores hits from charged tracks, meaning that only pair production is taken into account for photons. In this version, also photoeffect and Compton scattering are taken into account.

Based on the implementation of the Mokka VXD sensitive detector class.

Author
Z. Drasal, Charles University Prague (based on TRKSD00 sens. detector)
P. Kvasnicka, Charles University Prague (basf2 implementation)

Definition at line 41 of file SensitiveDetector.h.

Constructor & Destructor Documentation

◆ SensitiveDetector()

Constructor.

Definition at line 38 of file SensitiveDetector.cc.

38 :
39 Simulation::SensitiveDetectorBase("IR ", Const::IR)
40 {
41 StoreArray<MCParticle> mcParticles;
42 StoreArray<IRSimHit> irSimHits;
43 RelationArray irSimHitRel(mcParticles, irSimHits);
44 registerMCParticleRelation(irSimHitRel);
45 }
static void registerMCParticleRelation(const std::string &name, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
Register an relation involving MCParticles.

Member Function Documentation

◆ getMCParticleRelations()

static const std::map< std::string, RelationArray::EConsolidationAction > & getMCParticleRelations ( )
inlinestaticinherited

Return a list of all registered Relations with MCParticles.

Definition at line 42 of file SensitiveDetectorBase.h.

42{ return s_mcRelations; }
static std::map< std::string, RelationArray::EConsolidationAction > s_mcRelations
Static set holding all relations which have to be updated at the end of the Event.

◆ 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.

95 {
96 if (!s_active) return false;
97 bool result = step(aStep, aROhist);
98 // Do not include hits from invalid detector (beast,teastbeam, etc.)
99 if (result && (m_subdetector != Const::invalidDetector)) TrackInfo::getInfo(*aStep->GetTrack()).addSeenInDetector(m_subdetector);
100 return result;
101 }
virtual bool step(G4Step *step, G4TouchableHistory *ROhist)=0
Process a Geant4 step in any of the sensitive volumes attached to this sensitive detector.
Const::EDetector m_subdetector
Subdetector the class belongs to.
static bool s_active
Static bool which indicates wether recording of hits is enabled.
static Payload getInfo(Carrier &obj)
Static function to just return UserInformation attached to the obj of type Carrier.
Definition: UserInfo.h:100

◆ 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.

67 { registerMCParticleRelation(relation.getName(), ignoreAction); }

◆ 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.

23 {
24 std::pair<std::map<std::string, RelationArray::EConsolidationAction>::iterator, bool> insert = s_mcRelations.insert(std::make_pair(
25 name, ignoreAction));
26 //If the relation already exists and the ignoreAction is different we do have a problem
27 if (!insert.second && insert.first->second != ignoreAction) {
28 B2FATAL("MCParticle Relation " << name << " already registered with different ignore action.");
29 }
30 }

◆ 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.

50{ s_active = activeStatus; }

◆ step()

G4bool step ( G4Step *  aStep,
G4TouchableHistory *   
)
overridevirtual

Process each step and calculate variables defined in IRSimHit.

Parameters
aStepCurrent Geant4 step in the sensitive medium.
Returns
true if a hit was stored, o.w. false.

Implements SensitiveDetectorBase.

Definition at line 47 of file SensitiveDetector.cc.

48 {
49 const G4Track& track = *step->GetTrack();
50 const G4int trackID = track.GetTrackID();
51 const G4int partPDGCode = track.GetDefinition()->GetPDGEncoding();
52
53 const G4VPhysicalVolume& g4Volume = *track.GetVolume();
54 string Volname = g4Volume.GetName();
55
56 const G4double depEnergy = step->GetTotalEnergyDeposit() * Unit::MeV;
57
58 const G4StepPoint& preStep = *step->GetPreStepPoint();
59 const G4StepPoint& postStep = *step->GetPostStepPoint();
60 const G4ThreeVector& preStepPos = preStep.GetPosition();
61 const G4ThreeVector& postStepPos = postStep.GetPosition();
62 const G4ThreeVector momIn(preStep.GetMomentum());
63 const G4ThreeVector momOut(postStep.GetMomentum());
64 const G4ThreeVector preStepPosLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(preStepPos);
65 const G4ThreeVector postStepPosLocal = postStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformPoint(postStepPos);
66 const G4ThreeVector momInLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformAxis(momIn);
67 const G4ThreeVector momOutLocal = preStep.GetTouchableHandle()->GetHistory()->GetTopTransform().TransformAxis(momOut);
68 ROOT::Math::XYZVector posInVec(preStepPosLocal.x() * Unit::mm, preStepPosLocal.y() * Unit::mm, preStepPosLocal.z() * Unit::mm);
69 ROOT::Math::XYZVector posOutVec(postStepPosLocal.x() * Unit::mm, postStepPosLocal.y() * Unit::mm, postStepPosLocal.z() * Unit::mm);
70 ROOT::Math::XYZVector momInVec(momInLocal.x() * Unit::MeV, momInLocal.y() * Unit::MeV, momInLocal.z() * Unit::MeV);
71 ROOT::Math::XYZVector momOutVec(momOutLocal.x() * Unit::MeV, momOutLocal.y() * Unit::MeV, momOutLocal.z() * Unit::MeV);
72
73 // B2INFO("Step in volume: " << g4Volume.GetName())
74 // check that user limits are set properly
75 G4UserLimits* userLimits = g4Volume.GetLogicalVolume()->GetUserLimits();
76 if (userLimits) {
77 B2DEBUG(100, "Volume " << g4Volume.GetName() << ": max. allowed step set to " << userLimits->GetMaxAllowedStep(track));
78 }
79
80 StoreArray<IRSimHit> irSimHits;
81 IRSimHit* simHit = irSimHits.appendNew(posInVec, momInVec, posOutVec, momOutVec, partPDGCode, depEnergy, Volname);
82
83 // add relation to MCParticles
84 StoreArray<MCParticle> mcParticles;
85 RelationArray irSimHitRel(mcParticles, irSimHits);
86 irSimHitRel.add(trackID, simHit->getArrayIndex());
87
88 return true;
89 }
static const double mm
[millimeters]
Definition: Unit.h:70
static const double MeV
[megaelectronvolt]
Definition: Unit.h:114
bool step(G4Step *aStep, G4TouchableHistory *) override
Process each step and calculate variables defined in IRSimHit.

Member Data Documentation

◆ m_subdetector

Const::EDetector m_subdetector
privateinherited

Subdetector the class belongs to.

Definition at line 91 of file SensitiveDetectorBase.h.

◆ s_active

bool s_active
staticprivateinherited

Static bool which indicates wether recording of hits is enabled.

Definition at line 89 of file SensitiveDetectorBase.h.

◆ s_mcRelations

map< string, RelationArray::EConsolidationAction > s_mcRelations
staticprivateinherited

Static set holding all relations which have to be updated at the end of the Event.

Definition at line 87 of file SensitiveDetectorBase.h.


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