Belle II Software development
AWESOMESensitiveDetector Class Reference

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

#include <AWESOMESensitiveDetector.h>

Inheritance diagram for AWESOMESensitiveDetector:
SensitiveDetectorBase

Public Member Functions

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

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

StoreArray< MCParticlem_MCParticles
 MC particles.
 
StoreArray< AWESOMESimHitm_SimHits
 AWESOME simulated hits.
 
RelationArray m_MCParticlesToSimHits {m_MCParticles, m_SimHits}
 Relation array between MCParticles and AWESOMESimHits.
 
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 AWESOME detector.

Definition at line 27 of file AWESOMESensitiveDetector.h.

Constructor & Destructor Documentation

◆ AWESOMESensitiveDetector()

Constructor.

Definition at line 26 of file AWESOMESensitiveDetector.cc.

26 :
27 Simulation::SensitiveDetectorBase{"AwesomeSensitiveDetector", Const::EDetector::TEST}
28{
29 /* MCParticles must be optional, not required. */
30 m_MCParticles.isOptional();
31 /* Register the simulted hits and all the necessary relations in the datastore. */
32 m_SimHits.registerInDataStore();
33 m_MCParticles.registerRelationTo(m_SimHits);
34 /*
35 * Register the Relation so that the Geant4 TrackIDs get replaced by the actual
36 * MCParticle indices after simulating the events. This is needed as
37 * secondary particles might not be stored so everything relating to those
38 * particles will be attributed to the last saved mother particle.
39 */
41}
StoreArray< AWESOMESimHit > m_SimHits
AWESOME simulated hits.
RelationArray m_MCParticlesToSimHits
Relation array between MCParticles and AWESOMESimHits.
StoreArray< MCParticle > m_MCParticles
MC particles.
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; }

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

◆ 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()

bool step ( G4Step * step,
G4TouchableHistory *  )
overridevirtual

Step processing method.

Parameters
stepThe G4Step with the current step information.
Returns
true if a hit was created, false otherwise.

Implements SensitiveDetectorBase.

Definition at line 43 of file AWESOMESensitiveDetector.cc.

44{
45 /* Get some basic information from Geant4. */
46 const G4Track& track = *step->GetTrack();
47 const int trackID = track.GetTrackID();
48 const double energyDep = step->GetTotalEnergyDeposit() * Unit::MeV;
49 G4StepPoint* preStep = step->GetPreStepPoint();
50 G4StepPoint* postStep = step->GetPostStepPoint();
51 /* Ignore everything below 1 eV. */
52 if (energyDep < Unit::eV)
53 return false;
54 /*
55 * Compute other useful quantities to be stored.
56 * We must be sure that the quantities are stored using the proper Belle2 units:
57 * positions in cm, time in ns, etc.
58 */
59 const CLHEP::Hep3Vector position = 0.5 * (preStep->GetPosition() + postStep->GetPosition()) / CLHEP::cm; // Now in cm
60 const double time = 0.5 * (preStep->GetGlobalTime() + postStep->GetGlobalTime()); // Already in ns
61 /* Store the simulated hit. */
62 AWESOMESimHit* simHit = m_SimHits.appendNew();
63 simHit->setEnergyDep(energyDep);
64 simHit->setPosition(ROOT::Math::XYZVector(position));
65 simHit->setTime(time);
66 /*
67 * Add a relation between the current MCParticle and the simulated hit.
68 * Since the MCParticle index is not yet defined we use the trackID from Geant4.
69 */
70 m_MCParticlesToSimHits.add(trackID, simHit->getArrayIndex());
71 return true;
72}
void setEnergyDep(float energyDep)
Set the deposited energy.
void setPosition(ROOT::Math::XYZVector position)
Set the vector for position.
void setTime(float time)
Set the time.
bool step(G4Step *step, G4TouchableHistory *) override
Step processing method.
int getArrayIndex() const
Returns this object's array index (in StoreArray), or -1 if not found.
static const double eV
[electronvolt]
Definition Unit.h:112
static const double MeV
[megaelectronvolt]
Definition Unit.h:114

Member Data Documentation

◆ m_MCParticles

StoreArray<MCParticle> m_MCParticles
private

MC particles.

Definition at line 44 of file AWESOMESensitiveDetector.h.

◆ m_MCParticlesToSimHits

RelationArray m_MCParticlesToSimHits {m_MCParticles, m_SimHits}
private

Relation array between MCParticles and AWESOMESimHits.

Definition at line 50 of file AWESOMESensitiveDetector.h.

50{m_MCParticles, m_SimHits};

◆ m_SimHits

StoreArray<AWESOMESimHit> m_SimHits
private

AWESOME simulated hits.

Definition at line 47 of file AWESOMESensitiveDetector.h.

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