Belle II Software development
BkgSensitiveDiode Class Reference

Class for ECL Sensitive Detector for neutron background study. More...

#include <SensitiveDetector.h>

Inheritance diagram for BkgSensitiveDiode:
SensitiveDetectorBase

Public Member Functions

 BkgSensitiveDiode (const G4String &)
 Constructor.
 
bool step (G4Step *aStep, G4TouchableHistory *history) override
 Process each step and calculate variables defined in ECLHit.
 

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

int m_trackID
 track id
 
ROOT::Math::XYZVector m_startPos
 particle position at the entrance in volume
 
ROOT::Math::XYZVector m_startMom
 particle momentum at the entrance in volume
 
double m_startTime
 global time
 
double m_startEnergy
 particle energy at the entrance in volume
 
double m_energyDeposit
 energy deposited in volume
 
double m_trackLength
 length of the track in the volume
 
ECLGeometryParm_eclp
 pointer to ECLGeometryPar
 
StoreArray< MCParticlem_mcParticles
 MCParticle array.
 
StoreArray< BeamBackHitm_eclBeamBkgHits
 BeamBackHit array.
 
RelationArray m_eclBeamBkgHitRel
 MCParticle to BeamBackHit relation array.
 
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

Class for ECL Sensitive Detector for neutron background study.

Definition at line 116 of file SensitiveDetector.h.

Constructor & Destructor Documentation

◆ BkgSensitiveDiode()

BkgSensitiveDiode ( const G4String &  name)
explicit

Constructor.

Definition at line 306 of file SensitiveDetector.cc.

306 :
307 Simulation::SensitiveDetectorBase(name, Const::invalidDetector),
309{
311 m_eclBeamBkgHits.registerInDataStore();
313
315 m_energyDeposit = 0;
316 m_startEnergy = 0;
317 m_startTime = 0;
318 m_trackLength = 0;
319 m_trackID = -1;
320}
double m_energyDeposit
energy deposited in volume
double m_startEnergy
particle energy at the entrance in volume
double m_trackLength
length of the track in the volume
ECLGeometryPar * m_eclp
pointer to ECLGeometryPar
StoreArray< MCParticle > m_mcParticles
MCParticle array.
RelationArray m_eclBeamBkgHitRel
MCParticle to BeamBackHit relation array.
StoreArray< BeamBackHit > m_eclBeamBkgHits
BeamBackHit array.
static ECLGeometryPar * Instance()
Static method to get a reference to the ECLGeometryPar instance.
static void registerMCParticleRelation(const std::string &name, RelationArray::EConsolidationAction ignoreAction=RelationArray::c_negativeWeight)
Register an relation involving MCParticles.
bool registerRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, DataStore::EStoreFlags storeFlags=DataStore::c_WriteOut, const std::string &namedRelation="") const
Register a relation to the given StoreArray.
Definition: StoreArray.h:140

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

bool step ( G4Step *  aStep,
G4TouchableHistory *  history 
)
overridevirtual

Process each step and calculate variables defined in ECLHit.

Implements SensitiveDetectorBase.

Definition at line 325 of file SensitiveDetector.cc.

326{
327 const G4StepPoint& s0 = *aStep->GetPreStepPoint();
328 const G4Track& track = *aStep->GetTrack();
329
330 if (m_trackID != track.GetTrackID()) { //TrackID changed, store track information
331 m_trackID = track.GetTrackID();
332 //Get world position
333 const G4ThreeVector& worldPosition = s0.GetPosition();
334 const double mm2cm = Unit::mm / Unit::cm;
335 m_startPos.SetXYZ(worldPosition.x() * mm2cm, worldPosition.y() * mm2cm, worldPosition.z() * mm2cm);
336 //Get momentum
337 const G4ThreeVector& momentum = s0.GetMomentum() ;
338 m_startMom.SetXYZ(momentum.x() * Unit::MeV, momentum.y() * Unit::MeV, momentum.z() * Unit::MeV);
339 //Get time
340 m_startTime = s0.GetGlobalTime();
341 //Get energy
342 m_startEnergy = s0.GetKineticEnergy() * Unit::MeV;
343 //Reset energy deposit;
344 m_energyDeposit = 0;
345 //Reset track length;
346 m_trackLength = 0;
347 }
348 //Update energy deposit
349 m_energyDeposit += aStep->GetTotalEnergyDeposit() * Unit::MeV;
350 m_trackLength += aStep->GetStepLength() * Unit::mm;
351 //Save Hit if track leaves volume or is killed
352 if (track.GetNextVolume() != track.GetVolume() ||
353 track.GetTrackStatus() >= fStopAndKill) {
354 int pdgCode = track.GetDefinition()->GetPDGEncoding();
355 double endEnergy = track.GetKineticEnergy() * Unit::MeV;
356 double neutWeight = 0;
357 if (pdgCode == Const::neutron.getPDGCode()) {
358 BkgNeutronWeight& wt = BkgNeutronWeight::getInstance();
359 neutWeight = wt.getWeight(m_startEnergy / Unit::MeV);
360 }
361
362 int bkgHitNumber = m_eclBeamBkgHits.getEntries();
363 m_eclBeamBkgHitRel.add(m_trackID, bkgHitNumber);
364
365 int cellID = m_eclp->TouchableDiodeToCellID(s0.GetTouchable());
366 m_eclBeamBkgHits.appendNew(6, cellID, pdgCode, m_trackID, m_startPos, m_startMom, m_startTime, endEnergy, m_startEnergy,
367 m_energyDeposit, m_trackLength, neutWeight);
368
369 //Reset TrackID
370 m_trackID = 0;
371 }
372 return true;
373}
static const ParticleType neutron
neutron particle
Definition: Const.h:675
ROOT::Math::XYZVector m_startPos
particle position at the entrance in volume
ROOT::Math::XYZVector m_startMom
particle momentum at the entrance in volume
int TouchableDiodeToCellID(const G4VTouchable *)
Mapping from G4VTouchable copyNumbers to Crystal CellID.
void add(index_type from, index_type to, weight_type weight=1.0)
Add a new element to the relation.
static const double mm
[millimeters]
Definition: Unit.h:70
static const double MeV
[megaelectronvolt]
Definition: Unit.h:114
static const double cm
Standard units with the value = 1.
Definition: Unit.h:47
static BkgNeutronWeight & getInstance()
Return a reference to the singleton BkgNeutronWeight instance.

Member Data Documentation

◆ m_eclBeamBkgHitRel

RelationArray m_eclBeamBkgHitRel
private

MCParticle to BeamBackHit relation array.

Definition at line 134 of file SensitiveDetector.h.

◆ m_eclBeamBkgHits

StoreArray<BeamBackHit> m_eclBeamBkgHits
private

BeamBackHit array.

Definition at line 133 of file SensitiveDetector.h.

◆ m_eclp

ECLGeometryPar* m_eclp
private

pointer to ECLGeometryPar

Definition at line 131 of file SensitiveDetector.h.

◆ m_energyDeposit

double m_energyDeposit
private

energy deposited in volume

Definition at line 129 of file SensitiveDetector.h.

◆ m_mcParticles

StoreArray<MCParticle> m_mcParticles
private

MCParticle array.

Definition at line 132 of file SensitiveDetector.h.

◆ m_startEnergy

double m_startEnergy
private

particle energy at the entrance in volume

Definition at line 128 of file SensitiveDetector.h.

◆ m_startMom

ROOT::Math::XYZVector m_startMom
private

particle momentum at the entrance in volume

Definition at line 126 of file SensitiveDetector.h.

◆ m_startPos

ROOT::Math::XYZVector m_startPos
private

particle position at the entrance in volume

Definition at line 125 of file SensitiveDetector.h.

◆ m_startTime

double m_startTime
private

global time

Definition at line 127 of file SensitiveDetector.h.

◆ m_subdetector

Const::EDetector m_subdetector
privateinherited

Subdetector the class belongs to.

Definition at line 91 of file SensitiveDetectorBase.h.

◆ m_trackID

int m_trackID
private

track id

Definition at line 124 of file SensitiveDetector.h.

◆ m_trackLength

double m_trackLength
private

length of the track in the volume

Definition at line 130 of file SensitiveDetector.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: