ATLAS Offline Software
Public Member Functions | Protected Attributes | List of all members
NeutronFastSim Class Reference

#include <NeutronFastSim.h>

Inheritance diagram for NeutronFastSim:
Collaboration diagram for NeutronFastSim:

Public Member Functions

 NeutronFastSim (const std::string &name, 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 16 of file NeutronFastSim.h.

Constructor & Destructor Documentation

◆ NeutronFastSim()

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

Definition at line 17 of file NeutronFastSim.cxx.

18  : G4VFastSimulationModel(name)
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 }

◆ ~NeutronFastSim()

NeutronFastSim::~NeutronFastSim ( )
inline

Definition at line 21 of file NeutronFastSim.h.

21 {}

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 }

Member Data Documentation

◆ m_Energy

G4double NeutronFastSim::m_Energy
protected

Definition at line 30 of file NeutronFastSim.h.

◆ m_etaCut

double NeutronFastSim::m_etaCut
protected

Definition at line 34 of file NeutronFastSim.h.

◆ m_fsSD

TrackFastSimSD* NeutronFastSim::m_fsSD
protected

Definition at line 31 of file NeutronFastSim.h.

◆ m_fsSDname

std::string NeutronFastSim::m_fsSDname
protected

Definition at line 33 of file NeutronFastSim.h.

◆ m_init

bool NeutronFastSim::m_init
protected

Definition at line 32 of file NeutronFastSim.h.

◆ m_timeCut

double NeutronFastSim::m_timeCut
protected

Definition at line 35 of file NeutronFastSim.h.


The documentation for this class was generated from the following files:
AtlasG4EventUserInfo
This class is attached to G4Event objects as UserInformation. It holds a pointer to the HepMC::GenEve...
Definition: AtlasG4EventUserInfo.h:21
TrackFastSimSD
Definition: TrackFastSimSD.h:24
NeutronFastSim::m_fsSDname
std::string m_fsSDname
Definition: NeutronFastSim.h:33
NeutronFastSim::m_Energy
G4double m_Energy
Definition: NeutronFastSim.h:30
HepMC::is_simulation_particle
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...
Definition: MagicNumbers.h:342
NeutronFastSim::m_timeCut
double m_timeCut
Definition: NeutronFastSim.h:35
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:221
AtlasG4EventUserInfo::GetCurrentPrimaryGenParticle
HepMC::ConstGenParticlePtr GetCurrentPrimaryGenParticle() const
return a pointer to the HepMC::GenParticle used to create the current G4PrimaryParticle.
Definition: AtlasG4EventUserInfo.h:44
NeutronFastSim::m_etaCut
double m_etaCut
Definition: NeutronFastSim.h:34
TrackFastSimSD::WriteTrack
void WriteTrack(const G4Track *, const bool, const bool)
Definition: TrackFastSimSD.cxx:97
NeutronFastSim::m_fsSD
TrackFastSimSD * m_fsSD
Definition: NeutronFastSim.h:31
NeutronFastSim::m_init
bool m_init
Definition: NeutronFastSim.h:32