ATLAS Offline Software
Loading...
Searching...
No Matches
NeutronFastSim Class Reference

#include <NeutronFastSim.h>

Inheritance diagram for NeutronFastSim:
Collaboration diagram for NeutronFastSim:

Public Member Functions

 NeutronFastSim (const std::string &name, G4Region *region, const std::string &fsSDname, const double etaCut, const double timeCut)
 ~NeutronFastSim ()
G4bool IsApplicable (const G4ParticleDefinition &) override final
virtual G4bool ModelTrigger (const G4FastTrack &) override final
void DoIt (const G4FastTrack &, G4FastStep &) override final

Protected Attributes

G4double m_Energy
TrackFastSimSDm_fsSD
bool m_init
std::string m_fsSDname
double m_etaCut
double m_timeCut

Detailed Description

Definition at line 17 of file NeutronFastSim.h.

Constructor & Destructor Documentation

◆ NeutronFastSim()

NeutronFastSim::NeutronFastSim ( const std::string & name,
G4Region * region,
const std::string & fsSDname,
const double etaCut,
const double timeCut )

Definition at line 17 of file NeutronFastSim.cxx.

18 : G4VFastSimulationModel(name, region)
19 , m_Energy(5)
20 , m_fsSD(0)
21 , m_init(false)
22 , m_fsSDname(fsSDname)
23 , m_etaCut(etaCut)
24 , m_timeCut(timeCut)
25{
26}
std::string m_fsSDname
TrackFastSimSD * m_fsSD

◆ ~NeutronFastSim()

NeutronFastSim::~NeutronFastSim ( )
inline

Definition at line 22 of file NeutronFastSim.h.

22{}

Member Function Documentation

◆ DoIt()

void NeutronFastSim::DoIt ( const G4FastTrack & fastTrack,
G4FastStep & fastStep )
finaloverride

Definition at line 64 of file NeutronFastSim.cxx.

65{
66 if (m_fsSD) m_fsSD->WriteTrack( fastTrack.GetPrimaryTrack() , false , false );
67 fastStep.KillPrimaryTrack();
68}

◆ IsApplicable()

G4bool NeutronFastSim::IsApplicable ( const G4ParticleDefinition & )
finaloverride

Definition at line 28 of file NeutronFastSim.cxx.

29{
30 if (!m_init){
31 m_init = true;
32
33 G4SDManager *sdm = G4SDManager::GetSDMpointer();
34 G4VSensitiveDetector * vsd = sdm->FindSensitiveDetector( m_fsSDname );
35 if (!vsd) {
36 G4cout << "NeutronFastSim::IsApplicable WARNING Could not get TrackFastSimSD sensitive detector. If you are not writing track records this is expected." << G4endl;
37 } else {
38 m_fsSD = dynamic_cast<TrackFastSimSD*>(vsd);
39 if (!m_fsSD) {
40 G4cout << "NeutronFastSim::IsApplicable WARNING Could not cast the SD. If you are not writing track records this is expected." << G4endl;
41 }
42 } // found the SD
43 } // End of lazy init
44 return true;
45}

◆ ModelTrigger()

G4bool NeutronFastSim::ModelTrigger ( const G4FastTrack & fastTrack)
finaloverridevirtual

Definition at line 47 of file NeutronFastSim.cxx.

48{
49 // Trigger if the neutron energy is below our threshold or if the time is over 150 ns
50 if (fastTrack.GetPrimaryTrack()->GetDefinition() == G4Neutron::NeutronDefinition() ){
51 return (m_Energy<0?true:fastTrack.GetPrimaryTrack()->GetKineticEnergy()<m_Energy) || fastTrack.GetPrimaryTrack()->GetGlobalTime()>m_timeCut;
52 }
53
54 // Not a neutron... Pick it up if the primary had eta>6.0
55 AtlasG4EventUserInfo *atlasG4EvtUserInfo=static_cast<AtlasG4EventUserInfo*>(G4EventManager::GetEventManager()->GetConstCurrentEvent()->GetUserInformation());
56 HepMC::ConstGenParticlePtr primaryGenParticle = atlasG4EvtUserInfo->GetCurrentPrimaryGenParticle();
57 if (std::abs(primaryGenParticle->momentum().eta())>m_etaCut && !HepMC::is_simulation_particle(primaryGenParticle)){
58 return true;
59 } else {
60 return false;
61 }
62}
HepMC::ConstGenParticlePtr GetCurrentPrimaryGenParticle() const
return a pointer to the HepMC::GenParticle used to create the current G4PrimaryParticle.
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
const GenParticle * ConstGenParticlePtr
Definition GenParticle.h:38

Member Data Documentation

◆ m_Energy

G4double NeutronFastSim::m_Energy
protected

Definition at line 31 of file NeutronFastSim.h.

◆ m_etaCut

double NeutronFastSim::m_etaCut
protected

Definition at line 35 of file NeutronFastSim.h.

◆ m_fsSD

TrackFastSimSD* NeutronFastSim::m_fsSD
protected

Definition at line 32 of file NeutronFastSim.h.

◆ m_fsSDname

std::string NeutronFastSim::m_fsSDname
protected

Definition at line 34 of file NeutronFastSim.h.

◆ m_init

bool NeutronFastSim::m_init
protected

Definition at line 33 of file NeutronFastSim.h.

◆ m_timeCut

double NeutronFastSim::m_timeCut
protected

Definition at line 36 of file NeutronFastSim.h.


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