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

DEPRECATED AND WILL BE REMOVED. More...

#include <LArG4H62004FCALSDTool.h>

Inheritance diagram for LArG4H62004FCALSDTool:
Collaboration diagram for LArG4H62004FCALSDTool:

Public Member Functions

 LArG4H62004FCALSDTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual ~LArG4H62004FCALSDTool ()=default
StatusCode initializeSD () override final
StatusCode Gather () override final
 End of an athena event.
StatusCode initialize () override final
void setupHelpers (LArG4SimpleSD *) const
 Helper method to pass the ID helper pointers to the SDs.
void setupHelpers (LArG4CalibSD *) const
 Overload of the above method for calib SDs.
virtual StatusCode SetupEvent () override
 Beginning of an athena event.
virtual StatusCode SetupEvent (HitCollectionMap &) override
virtual StatusCode Gather (HitCollectionMap &) override

Protected Member Functions

G4VSensitiveDetector * makeSD () const override final
void setupAllSDs (const std::map< G4VSensitiveDetector *, std::vector< std::string > * > &configuration) const
 Method actually doing the work to assign all of these SDs FIXME: this argument type is nasty:
bool match (const char *first, const char *second) const
 Helper function for matching strings with wildcards.
StatusCode assignSD (std::unique_ptr< G4VSensitiveDetector > sd, const std::vector< std::string > &volumes) const
 Assign SD to a list of volumes.
G4VSensitiveDetector * getSD ()
 Retrieve the current SD.
void SetSensitiveDetector (G4LogicalVolume *, G4VSensitiveDetector *) const
 Method stolen from G4VUserDetectorConstruction in G4 10.2.

Protected Attributes

Gaudi::Property< G4bool > m_doPID {this, "ParticleID", false}
 Are we set up to run with PID hits?
Gaudi::Property< std::string > m_timeBinType {this, "TimeBinType", "Default"}
 What time binning type for regular hits?
Gaudi::Property< float > m_timeBinWidth {this, "TimeBinWidth", 2.5*CLHEP::ns}
 What time bin width for regular hits?
Gaudi::Property< G4bool > m_useFrozenShowers {this, "UseFrozenShowers", false}
 Is there going to be a fast simulation coming into this SD?
const LArEM_IDm_larEmID {nullptr}
 Pointers to the identifier helpers.
const LArFCAL_IDm_larFcalID {nullptr}
const LArHEC_IDm_larHecID {nullptr}
const CaloDM_IDm_caloDmID {nullptr}
Gaudi::Property< std::vector< std::string > > m_volumeNames {this, "LogicalVolumeNames", {}}
 All the volumes to which this SD is assigned.
Gaudi::Property< std::vector< std::string > > m_outputCollectionNames {this, "OutputCollectionNames", {}}
 Names of all output collections written out by this SD.
Gaudi::Property< bool > m_noVolumes {this, "NoVolumes", false}
 This SensitiveDetector has no volumes associated with it.

Private Member Functions

StatusCode initializeCalculators () override final
void setSD (G4VSensitiveDetector *)
 Set the current SD.

Static Private Member Functions

static bool matchStrings (const char *first, const char *second)
 Match two strings with wildcard support.

Private Attributes

SG::WriteHandle< LArHitContainerm_HitColl
ServiceHandle< ILArCalculatorSvcm_fcal1calc {this, "FCAL1Calculator", "FCAL1Calculator"}
ServiceHandle< ILArCalculatorSvcm_fcal2calc {this, "FCAL2Calculator", "FCAL2Calculator"}
ServiceHandle< ILArCalculatorSvcm_fcalcoldcalc {this, "FCALColdCalculator", "FCALColdCalculator"}
LArG4SimpleSDm_fcal1SD {nullptr}
LArG4SimpleSDm_fcal2SD {nullptr}
LArG4SimpleSDm_fcalColdSD {nullptr}
Gaudi::Property< std::vector< std::string > > m_fcal1Volumes {this, "FCAL1Volumes"}
Gaudi::Property< std::vector< std::string > > m_fcal2Volumes {this, "FCAL2Volumes"}
Gaudi::Property< std::vector< std::string > > m_fcalColdVolumes {this, "FCALColdVolumes"}
G4VSensitiveDetector * m_SD {}
 The sensitive detector to which this thing corresponds.

Detailed Description

DEPRECATED AND WILL BE REMOVED.

Please see LArG4::H62004FCALSDTool instead.

Definition at line 21 of file LArG4H62004FCALSDTool.h.

Constructor & Destructor Documentation

◆ LArG4H62004FCALSDTool()

LArG4H62004FCALSDTool::LArG4H62004FCALSDTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

◆ ~LArG4H62004FCALSDTool()

virtual LArG4H62004FCALSDTool::~LArG4H62004FCALSDTool ( )
virtualdefault

Member Function Documentation

◆ assignSD()

StatusCode SensitiveDetectorBase::assignSD ( std::unique_ptr< G4VSensitiveDetector > sd,
const std::vector< std::string > & volumes ) const
protectedinherited

Assign SD to a list of volumes.

This method supports wild card matching

Definition at line 64 of file SensitiveDetectorBase.cxx.

66{
67 // Propagate verbosity setting to the SD
68 if(msgLvl(MSG::VERBOSE)) sd->SetVerboseLevel(10);
69 else if(msgLvl(MSG::DEBUG)) sd->SetVerboseLevel(5);
70
71 // Add the sensitive detector to the SD manager in G4 for SDs,
72 // even if it has no volumes associated to it.
73 auto sdMgr = G4SDManager::GetSDMpointer();
74 auto sdPtr = sd.get();
75 // SDManager is now the SD owner
76 sdMgr->AddNewDetector(sd.release());
77
78 if(!volumes.empty()) {
79 bool gotOne = false;
80 auto logicalVolumeStore = G4LogicalVolumeStore::GetInstance();
81 for(const auto& volumeName : volumes) {
82 // Keep track of how many volumes we find with this name string.
83 // We allow for multiple matches.
84 int numFound = 0;
85
86 // Find volumes with this name
87 for(auto* logVol : *logicalVolumeStore) {
88
89 ATH_MSG_VERBOSE("Check whether "<<logVol->GetName()<<" belongs to the set of sensitive detectors "<<volumeName);
90 if( matchStrings( volumeName.data(), logVol->GetName() ) ){
91 ++numFound;
92 SetSensitiveDetector(logVol, sdPtr);
93 }
94
95 }
96 // Warn if no volumes were found
97 if(numFound == 0) {
98 ATH_MSG_WARNING("Volume " << volumeName <<
99 " not found in G4LogicalVolumeStore.");
100 }
101 else {
102 ATH_MSG_VERBOSE("Found " << numFound << " copies of LV " << volumeName <<
103 "; SD " << sd->GetName() << " assigned.");
104 gotOne = true;
105 }
106
107 }
108
109 // Abort if we have failed to assign any volume
110 if(!gotOne) {
111 ATH_MSG_ERROR( "Failed to assign *any* volume to SD " << name() <<
112 " and expected at least one. Size of the volume store "<<G4LogicalVolumeStore::GetInstance()->size() );
113 return StatusCode::FAILURE;
114 }
115 }
116
117 return StatusCode::SUCCESS;
118}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
static bool matchStrings(const char *first, const char *second)
Match two strings with wildcard support.
void SetSensitiveDetector(G4LogicalVolume *, G4VSensitiveDetector *) const
Method stolen from G4VUserDetectorConstruction in G4 10.2.

◆ Gather() [1/2]

StatusCode LArG4H62004FCALSDTool::Gather ( )
finaloverridevirtual

End of an athena event.

Store the output collection in SG at this point. If we are using a WriteHandle, then this can be empty!

Reimplemented from SensitiveDetectorBase.

◆ Gather() [2/2]

◆ getSD()

G4VSensitiveDetector * SensitiveDetectorBase::getSD ( )
protectedinherited

Retrieve the current SD.

In AthenaMT, this means the thread-local SD. Otherwise, it is simply the single SD.

Definition at line 120 of file SensitiveDetectorBase.cxx.

121{
122#ifdef G4MULTITHREADED
123 // Get current thread-ID
124 const auto tid = std::this_thread::get_id();
125 // Retrieve it from the SD map
126 auto sdPair = m_sdThreadMap.find(tid);
127 if(sdPair == m_sdThreadMap.end()) return nullptr;
128 return sdPair->second;
129#else
130 return m_SD;
131#endif
132}
G4VSensitiveDetector * m_SD
The sensitive detector to which this thing corresponds.

◆ initialize()

StatusCode LArG4SDTool::initialize ( )
finaloverrideinherited

◆ initializeCalculators()

StatusCode LArG4H62004FCALSDTool::initializeCalculators ( )
finaloverrideprivatevirtual

Reimplemented from LArG4SDTool.

◆ initializeSD()

StatusCode LArG4H62004FCALSDTool::initializeSD ( )
finaloverride

◆ makeSD()

G4VSensitiveDetector * LArG4SDTool::makeSD ( ) const
inlinefinaloverrideprotectedinherited

Definition at line 54 of file LArG4SDTool.h.

54{ return nullptr; }

◆ match()

bool LArG4SDTool::match ( const char * first,
const char * second ) const
protectedinherited

Helper function for matching strings with wildcards.

◆ matchStrings()

bool SensitiveDetectorBase::matchStrings ( const char * first,
const char * second )
staticprivateinherited

Match two strings with wildcard support.

Compares two strings character by character with optional * wildcard in the first argument

Definition at line 147 of file SensitiveDetectorBase.cxx.

148{
149 // If we reach at the end of both strings, we are done
150 if (*first == '\0' && *second == '\0')
151 return true;
152
153 // If there are consecutive '*' present in the first string
154 // advance to the next character
155 if(*first == '*' && *(first + 1) == '*')
156 return matchStrings(first + 1, second);
157
158 // Make sure that the characters after '*' are present in second string.
159 if (*first == '*' && *(first + 1) != '\0' && *second == '\0')
160 return false;
161
162 // If the current characters of both strings match
163 if (*first == *second)
164 return matchStrings(first + 1, second + 1);
165
166 // If there is *, then there are two possibilities
167 // a) We consider current character of second string
168 // b) We ignore current character of second string.
169 if (*first == '*')
170 return matchStrings(first + 1, second) || matchStrings(first, second + 1);
171 return false;
172}

◆ setSD()

void SensitiveDetectorBase::setSD ( G4VSensitiveDetector * sd)
privateinherited

Set the current SD.

In hive, this gets assigned as the thread-local SD.

Definition at line 134 of file SensitiveDetectorBase.cxx.

135{
136#ifdef G4MULTITHREADED
137 const auto tid = std::this_thread::get_id();
138 ATH_MSG_DEBUG("Creating and registering SD " << sd << " in thread " << tid);
139 m_sdThreadMap.insert( std::make_pair(tid, sd) );
140#else
141 m_SD = sd;
142#endif
143}
#define ATH_MSG_DEBUG(x)

◆ SetSensitiveDetector()

void SensitiveDetectorBase::SetSensitiveDetector ( G4LogicalVolume * logVol,
G4VSensitiveDetector * aSD ) const
protectedinherited

Method stolen from G4VUserDetectorConstruction in G4 10.2.

Definition at line 174 of file SensitiveDetectorBase.cxx.

176{
177 // New Logic: allow for "multiple" SDs being attached to a single LV.
178 // To do that we use a special proxy SD called G4MultiSensitiveDetector
179
180 // Get existing SD if already set and check if it is of the special type
181 G4VSensitiveDetector* originalSD = logVol->GetSensitiveDetector();
182 if ( originalSD == nullptr )
183 {
184 logVol->SetSensitiveDetector(aSD);
185 }
186 else
187 {
188 G4MultiSensitiveDetector* msd = dynamic_cast<G4MultiSensitiveDetector*>(originalSD);
189 if ( msd != nullptr )
190 {
191 msd->AddSD(aSD);
192 }
193 else
194 {
195 // Construct a unique name using the volume address
196 std::stringstream ss;
198 const G4String msdname = "/MultiSD_" + logVol->GetName() + ss.str();
199 msd = new G4MultiSensitiveDetector(std::move(msdname));
200 // We need to register the proxy to have correct handling of IDs
201 G4SDManager::GetSDMpointer()->AddNewDetector(msd);
202 msd->AddSD(originalSD);
203 msd->AddSD(aSD);
204 logVol->SetSensitiveDetector(msd);
205 }
206 }
207}
static Double_t ss

◆ setupAllSDs()

void LArG4SDTool::setupAllSDs ( const std::map< G4VSensitiveDetector *, std::vector< std::string > * > & configuration) const
protectedinherited

Method actually doing the work to assign all of these SDs FIXME: this argument type is nasty:

  • non-const ptr to list of strings

◆ SetupEvent() [1/2]

virtual StatusCode SensitiveDetectorBase::SetupEvent ( )
inlineoverridevirtualinherited

Beginning of an athena event.

This is where collection initialization should happen. If we are using a WriteHandle, then this could be empty.

Reimplemented in AFP_SensitiveDetectorTool, AFP_SiDSensitiveDetectorTool, AFP_TDSensitiveDetectorTool, ALFA_SensitiveDetectorTool, CaloCellContainerSDTool, and MuonWallSDTool.

Definition at line 70 of file SensitiveDetectorBase.h.

70{ return StatusCode::SUCCESS; }

◆ SetupEvent() [2/2]

◆ setupHelpers() [1/2]

void LArG4SDTool::setupHelpers ( LArG4CalibSD * ) const
inherited

Overload of the above method for calib SDs.

◆ setupHelpers() [2/2]

void LArG4SDTool::setupHelpers ( LArG4SimpleSD * ) const
inherited

Helper method to pass the ID helper pointers to the SDs.

Member Data Documentation

◆ m_caloDmID

const CaloDM_ID* LArG4SDTool::m_caloDmID {nullptr}
protectedinherited

Definition at line 74 of file LArG4SDTool.h.

74{nullptr};

◆ m_doPID

Gaudi::Property<G4bool> LArG4SDTool::m_doPID {this, "ParticleID", false}
protectedinherited

Are we set up to run with PID hits?

Definition at line 57 of file LArG4SDTool.h.

57{this, "ParticleID", false};

◆ m_fcal1calc

ServiceHandle<ILArCalculatorSvc> LArG4H62004FCALSDTool::m_fcal1calc {this, "FCAL1Calculator", "FCAL1Calculator"}
private

Definition at line 42 of file LArG4H62004FCALSDTool.h.

42{this, "FCAL1Calculator", "FCAL1Calculator"};

◆ m_fcal1SD

LArG4SimpleSD* LArG4H62004FCALSDTool::m_fcal1SD {nullptr}
private

Definition at line 46 of file LArG4H62004FCALSDTool.h.

46{nullptr};

◆ m_fcal1Volumes

Gaudi::Property<std::vector<std::string> > LArG4H62004FCALSDTool::m_fcal1Volumes {this, "FCAL1Volumes"}
private

Definition at line 49 of file LArG4H62004FCALSDTool.h.

49{this, "FCAL1Volumes"};

◆ m_fcal2calc

ServiceHandle<ILArCalculatorSvc> LArG4H62004FCALSDTool::m_fcal2calc {this, "FCAL2Calculator", "FCAL2Calculator"}
private

Definition at line 43 of file LArG4H62004FCALSDTool.h.

43{this, "FCAL2Calculator", "FCAL2Calculator"};

◆ m_fcal2SD

LArG4SimpleSD* LArG4H62004FCALSDTool::m_fcal2SD {nullptr}
private

Definition at line 47 of file LArG4H62004FCALSDTool.h.

47{nullptr};

◆ m_fcal2Volumes

Gaudi::Property<std::vector<std::string> > LArG4H62004FCALSDTool::m_fcal2Volumes {this, "FCAL2Volumes"}
private

Definition at line 50 of file LArG4H62004FCALSDTool.h.

50{this, "FCAL2Volumes"};

◆ m_fcalcoldcalc

ServiceHandle<ILArCalculatorSvc> LArG4H62004FCALSDTool::m_fcalcoldcalc {this, "FCALColdCalculator", "FCALColdCalculator"}
private

Definition at line 44 of file LArG4H62004FCALSDTool.h.

44{this, "FCALColdCalculator", "FCALColdCalculator"};

◆ m_fcalColdSD

LArG4SimpleSD* LArG4H62004FCALSDTool::m_fcalColdSD {nullptr}
private

Definition at line 48 of file LArG4H62004FCALSDTool.h.

48{nullptr};

◆ m_fcalColdVolumes

Gaudi::Property<std::vector<std::string> > LArG4H62004FCALSDTool::m_fcalColdVolumes {this, "FCALColdVolumes"}
private

Definition at line 51 of file LArG4H62004FCALSDTool.h.

51{this, "FCALColdVolumes"};

◆ m_HitColl

SG::WriteHandle<LArHitContainer> LArG4H62004FCALSDTool::m_HitColl
private

Definition at line 40 of file LArG4H62004FCALSDTool.h.

◆ m_larEmID

const LArEM_ID* LArG4SDTool::m_larEmID {nullptr}
protectedinherited

Pointers to the identifier helpers.

Definition at line 71 of file LArG4SDTool.h.

71{nullptr};

◆ m_larFcalID

const LArFCAL_ID* LArG4SDTool::m_larFcalID {nullptr}
protectedinherited

Definition at line 72 of file LArG4SDTool.h.

72{nullptr};

◆ m_larHecID

const LArHEC_ID* LArG4SDTool::m_larHecID {nullptr}
protectedinherited

Definition at line 73 of file LArG4SDTool.h.

73{nullptr};

◆ m_noVolumes

Gaudi::Property<bool> SensitiveDetectorBase::m_noVolumes {this, "NoVolumes", false}
protectedinherited

This SensitiveDetector has no volumes associated with it.

Definition at line 101 of file SensitiveDetectorBase.h.

101{this, "NoVolumes", false};

◆ m_outputCollectionNames

Gaudi::Property<std::vector<std::string> > SensitiveDetectorBase::m_outputCollectionNames {this, "OutputCollectionNames", {}}
protectedinherited

Names of all output collections written out by this SD.

Definition at line 98 of file SensitiveDetectorBase.h.

98{this, "OutputCollectionNames", {}};

◆ m_SD

G4VSensitiveDetector* SensitiveDetectorBase::m_SD {}
privateinherited

The sensitive detector to which this thing corresponds.

Definition at line 125 of file SensitiveDetectorBase.h.

125{};

◆ m_timeBinType

Gaudi::Property<std::string> LArG4SDTool::m_timeBinType {this, "TimeBinType", "Default"}
protectedinherited

What time binning type for regular hits?

Definition at line 59 of file LArG4SDTool.h.

59{this, "TimeBinType", "Default"};

◆ m_timeBinWidth

Gaudi::Property<float> LArG4SDTool::m_timeBinWidth {this, "TimeBinWidth", 2.5*CLHEP::ns}
protectedinherited

What time bin width for regular hits?

Definition at line 61 of file LArG4SDTool.h.

61{this, "TimeBinWidth", 2.5*CLHEP::ns};

◆ m_useFrozenShowers

Gaudi::Property<G4bool> LArG4SDTool::m_useFrozenShowers {this, "UseFrozenShowers", false}
protectedinherited

Is there going to be a fast simulation coming into this SD?

Definition at line 63 of file LArG4SDTool.h.

63{this, "UseFrozenShowers", false};

◆ m_volumeNames

Gaudi::Property<std::vector<std::string> > SensitiveDetectorBase::m_volumeNames {this, "LogicalVolumeNames", {}}
protectedinherited

All the volumes to which this SD is assigned.

Definition at line 96 of file SensitiveDetectorBase.h.

96{this, "LogicalVolumeNames", {}};

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