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

#include <ZDC_G4CalibSD.h>

Inheritance diagram for ZDC_G4CalibSD:
Collaboration diagram for ZDC_G4CalibSD:

Public Member Functions

 ZDC_G4CalibSD (const G4String &a_name, const G4String &hitCollectionName, bool doPID=false)
virtual ~ZDC_G4CalibSD ()
 ZDC_G4CalibSD (const ZDC_G4CalibSD &)=delete
ZDC_G4CalibSDoperator= (const ZDC_G4CalibSD &)=delete
G4bool ProcessHits (G4Step *a_step, G4TouchableHistory *) override
G4bool SpecialHit (G4Step *a_step, const std::vector< G4double > &a_energies)

Protected Member Functions

G4bool SimpleHit (const Identifier &id, const std::vector< double > &energies)

Private Member Functions

 FRIEND_TEST (ZDC_G4CalibSDtest, ProcessHits)
 FRIEND_TEST (ZDC_G4CalibSDtest, SpecialHit)
 FRIEND_TEST (ZDC_G4CalibSDtest, SimpleHit)
ZDC_CalibrationHitContainerBuildergetHitCollection () const

Private Attributes

std::string m_hitCollectionName
ZDC_CalibrationHitContainerBuilderm_HitColl {}
std::vector< G4double > m_energies
G4int m_numberInvalidHits
G4bool m_doPID
Identifier m_id
CaloG4::SimulationEnergiesm_simulationEnergies
ZDC_EscapedEnergyProcessingm_zdc_eep = nullptr

Detailed Description

Definition at line 22 of file ZDC_G4CalibSD.h.

Constructor & Destructor Documentation

◆ ZDC_G4CalibSD() [1/2]

ZDC_G4CalibSD::ZDC_G4CalibSD ( const G4String & a_name,
const G4String & hitCollectionName,
bool doPID = false )

Definition at line 15 of file ZDC_G4CalibSD.cxx.

16 : G4VSensitiveDetector(a_name), m_hitCollectionName(hitCollectionName), m_numberInvalidHits(0), m_doPID(doPID)
17{
18 m_simulationEnergies = new CaloG4::SimulationEnergies();
19}
CaloG4::SimulationEnergies * m_simulationEnergies
std::string m_hitCollectionName
G4int m_numberInvalidHits

◆ ~ZDC_G4CalibSD()

ZDC_G4CalibSD::~ZDC_G4CalibSD ( )
virtual

Definition at line 21 of file ZDC_G4CalibSD.cxx.

22{
23 if (verboseLevel > 5 && m_numberInvalidHits > 0)
24 {
25 G4cout << "Destructor: Sensitive Detector <" << SensitiveDetectorName << "> had " << m_numberInvalidHits
26 << " G4Step energy deposits outside the region determined by its Calculator." << G4endl;
27 }
29}

◆ ZDC_G4CalibSD() [2/2]

ZDC_G4CalibSD::ZDC_G4CalibSD ( const ZDC_G4CalibSD & )
delete

Member Function Documentation

◆ FRIEND_TEST() [1/3]

ZDC_G4CalibSD::FRIEND_TEST ( ZDC_G4CalibSDtest ,
ProcessHits  )
private

◆ FRIEND_TEST() [2/3]

ZDC_G4CalibSD::FRIEND_TEST ( ZDC_G4CalibSDtest ,
SimpleHit  )
private

◆ FRIEND_TEST() [3/3]

ZDC_G4CalibSD::FRIEND_TEST ( ZDC_G4CalibSDtest ,
SpecialHit  )
private

◆ getHitCollection()

ZDC_CalibrationHitContainerBuilder * ZDC_G4CalibSD::getHitCollection ( ) const
private

Definition at line 119 of file ZDC_G4CalibSD.cxx.

120{
121 auto* eventInfo = AtlasG4EventUserInfo::GetEventUserInfo();
122 if (!eventInfo) {
123 return nullptr;
124 }
125 auto hitCollections = eventInfo->GetHitCollectionMap();
126 return hitCollections ? hitCollections->Find<ZDC_CalibrationHitContainerBuilder>(m_hitCollectionName) : nullptr;
127}
static AtlasG4EventUserInfo * GetEventUserInfo()

◆ operator=()

ZDC_G4CalibSD & ZDC_G4CalibSD::operator= ( const ZDC_G4CalibSD & )
delete

◆ ProcessHits()

G4bool ZDC_G4CalibSD::ProcessHits ( G4Step * a_step,
G4TouchableHistory *  )
override

Definition at line 31 of file ZDC_G4CalibSD.cxx.

32{
33 // If there's no energy, there's no hit. (Aside: Isn't this energy
34 // the same as the energy from the calculator? Not necessarily.
35 // The calculator may include detector effects such as
36 // charge-collection which are not modeled by Geant4.)
37 if (a_step->GetTotalEnergyDeposit() == 0.)
38 return false;
39
40 // Convert the G4Step into (eta,phi,sampling).
41 // Check that hit was valid. (It might be invalid if, for example,
42 // it occurred outside the sensitive region. If such a thing
43 // happens, it means that the geometry definitions in the
44 // detector-construction routine and the calculator do not agree.)
45
46 m_energies.clear();
47 // classify different types of deposits (0: EM, 1: Non-EM, 2: Invisible, 3: Escaped)
48
49 m_simulationEnergies->Energies(a_step, m_energies);
50
51 // identifier needed to specify particular volme we're in. Used in HitCollection to make sure we don't have double hits
52 Identifier id;
53 id = a_step->GetPreStepPoint()->GetPhysicalVolume()->GetCopyNo();
54
55 // build calibHit. check if we've had a hit in this cell already. if we havent add it to the set of cells. If we have add energies to existing energies. ie can't distinguish b/w different hits in single cell so must integrate all this information
56 return SimpleHit (id, m_energies );
57}
std::vector< G4double > m_energies
G4bool SimpleHit(const Identifier &id, const std::vector< double > &energies)

◆ SimpleHit()

G4bool ZDC_G4CalibSD::SimpleHit ( const Identifier & id,
const std::vector< double > & energies )
protected

Definition at line 60 of file ZDC_G4CalibSD.cxx.

61{
62 if (!m_HitColl) {
64 if (!m_HitColl) {
65 return false;
66 }
67 }
68
69 // retreive particle ID
70 int particleID = HepMC::UNDEFINED_ID;
71 int particleUID = HepMC::UNDEFINED_ID;
72 if( m_doPID ) {
73 AtlasG4EventUserInfo * atlasG4EvtUserInfo = dynamic_cast<AtlasG4EventUserInfo*>(G4RunManager::GetRunManager()->GetCurrentEvent()->GetUserInformation());
74 if (atlasG4EvtUserInfo) {
75 particleID = HepMC::barcode(atlasG4EvtUserInfo->GetCurrentPrimaryGenParticle()); // FIXME Barcode-based
76 particleUID = HepMC::uniqueID(atlasG4EvtUserInfo->GetCurrentPrimaryGenParticle());
77 }
78 }
79
80
81 // Reject cases where invisible energy calculation produced values
82 // of order 10e-12 instead of 0 due to rounding errors in that
83 // calculation, or general cases where the energy deposits are
84 // trivially small.
85 if (energies[0] + energies[1] + energies[3] < 0.001 * CLHEP::eV && std::abs(energies[2]) < 0.001 * CLHEP::eV)
86 {
87 return true;
88 }
89
90 // Build the hit.
91 auto hit = std::make_unique<CaloCalibrationHit>(id,
92 energies[0],
93 energies[1],
94 energies[2],
95 energies[3],
96 particleID,
97 particleUID);
98 m_HitColl->MergeHit(std::move(hit));
99
100 return true;
101}
HepMC::ConstGenParticlePtr GetCurrentPrimaryGenParticle() const
return a pointer to the HepMC::GenParticle used to create the current G4PrimaryParticle.
ZDC_CalibrationHitContainerBuilder * m_HitColl
ZDC_CalibrationHitContainerBuilder * getHitCollection() const
int barcode(const T *p)
Definition Barcode.h:16
int uniqueID(const T &p)
constexpr int UNDEFINED_ID

◆ SpecialHit()

G4bool ZDC_G4CalibSD::SpecialHit ( G4Step * a_step,
const std::vector< G4double > & a_energies )

Definition at line 109 of file ZDC_G4CalibSD.cxx.

111{
112 // If we can't get the identifier, something is wrong.
113 Identifier id;
114 id = a_step->GetPreStepPoint()->GetPhysicalVolume()->GetCopyNo();
115
116 return SimpleHit(id, a_energies);
117}

Member Data Documentation

◆ m_doPID

G4bool ZDC_G4CalibSD::m_doPID
private

Definition at line 57 of file ZDC_G4CalibSD.h.

◆ m_energies

std::vector<G4double> ZDC_G4CalibSD::m_energies
private

Definition at line 52 of file ZDC_G4CalibSD.h.

◆ m_HitColl

ZDC_CalibrationHitContainerBuilder* ZDC_G4CalibSD::m_HitColl {}
private

Definition at line 51 of file ZDC_G4CalibSD.h.

51{};

◆ m_hitCollectionName

std::string ZDC_G4CalibSD::m_hitCollectionName
private

Definition at line 49 of file ZDC_G4CalibSD.h.

◆ m_id

Identifier ZDC_G4CalibSD::m_id
private

Definition at line 58 of file ZDC_G4CalibSD.h.

◆ m_numberInvalidHits

G4int ZDC_G4CalibSD::m_numberInvalidHits
private

Definition at line 55 of file ZDC_G4CalibSD.h.

◆ m_simulationEnergies

CaloG4::SimulationEnergies* ZDC_G4CalibSD::m_simulationEnergies
private

Definition at line 59 of file ZDC_G4CalibSD.h.

◆ m_zdc_eep

ZDC_EscapedEnergyProcessing* ZDC_G4CalibSD::m_zdc_eep = nullptr
private

Definition at line 60 of file ZDC_G4CalibSD.h.


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