Tool for constructing H62004 SDs for FCAL.
More...
#include <H62004FCALSDTool.h>
|
Gaudi::Property< std::vector< std::string > > | m_volumeNames {this, "LogicalVolumeNames", {}} |
| All the volumes to which this SD is assigned. More...
|
|
Gaudi::Property< std::vector< std::string > > | m_outputCollectionNames {this, "OutputCollectionNames", {}} |
| Names of all output collections written out by this SD. More...
|
|
Gaudi::Property< bool > | m_noVolumes {this, "NoVolumes", false} |
| This SensitiveDetector has no volumes associated with it. More...
|
|
Tool for constructing H62004 SDs for FCAL.
Based on the previous LArG4H62004FCALSDTool implementation.
This implementation uses the LAr SD wrapper design for managing multiple SDs when running multi-threaded. See ATLASSIM-2606 for discussions.
Definition at line 27 of file H62004FCALSDTool.h.
◆ H62004FCALSDTool()
LArG4::H62004FCALSDTool::H62004FCALSDTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ assignSD()
StatusCode SensitiveDetectorBase::assignSD |
( |
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 69 of file SensitiveDetectorBase.cxx.
78 auto sdMgr = G4SDManager::GetSDMpointer();
79 sdMgr->AddNewDetector(
sd);
81 if(!volumes.empty()) {
83 auto logicalVolumeStore = G4LogicalVolumeStore::GetInstance();
84 for(
const auto& volumeName : volumes) {
90 for(
auto* logVol : *logicalVolumeStore) {
92 ATH_MSG_VERBOSE(
"Check whether "<<logVol->GetName()<<
" belongs to the set of sensitive detectors "<<volumeName);
93 if(
matchStrings( volumeName.data(), logVol->GetName() ) ){
102 " not found in G4LogicalVolumeStore.");
105 ATH_MSG_VERBOSE(
"Found " << numFound <<
" copies of LV " << volumeName <<
106 "; SD " <<
sd->GetName() <<
" assigned.");
115 " and expected at least one. Size of the volume store "<<G4LogicalVolumeStore::GetInstance()->
size() );
116 return StatusCode::FAILURE;
120 return StatusCode::SUCCESS;
◆ Gather()
StatusCode LArG4::SimpleSDTool::Gather |
( |
| ) |
|
|
finaloverridevirtualinherited |
Calls down to all the SDs to pack their hits into one collection.
Reimplemented from SensitiveDetectorBase.
◆ 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 123 of file SensitiveDetectorBase.cxx.
125 #ifdef G4MULTITHREADED
127 const auto tid = std::this_thread::get_id();
129 auto sdPair = m_sdThreadMap.find(tid);
130 if(sdPair == m_sdThreadMap.end())
return nullptr;
131 return sdPair->second;
◆ initialize()
StatusCode LArG4::SimpleSDTool::initialize |
( |
| ) |
|
|
finaloverrideinherited |
◆ initializeCalculators()
StatusCode LArG4::H62004FCALSDTool::initializeCalculators |
( |
| ) |
|
|
finaloverrideprivatevirtual |
◆ initializeSD()
StatusCode SensitiveDetectorBase::initializeSD |
( |
| ) |
|
|
overrideinherited |
Setup an SD in the current thread.
Separate from the AthAlgTool initialize() method because it needs to be called once per worker thread in AthenaMT. Don't confuse this with the G4 SD method Initialize which is called at the beginning of every G4 event.
Definition at line 30 of file SensitiveDetectorBase.cxx.
38 << (
m_noVolumes?
"true" :
"false") <<
", but LogicalVolumeNames = "
40 return StatusCode::FAILURE;
47 return StatusCode::FAILURE;
55 return StatusCode::FAILURE;
63 return StatusCode::SUCCESS;
◆ makeOneSD()
Override helper method to create one SD.
◆ makeSD()
G4VSensitiveDetector* LArG4::H62004FCALSDTool::makeSD |
( |
| ) |
const |
|
finaloverrideprivate |
Create the SD wrapper for current worker thread.
◆ 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 150 of file SensitiveDetectorBase.cxx.
◆ setSD()
void SensitiveDetectorBase::setSD |
( |
G4VSensitiveDetector * |
sd | ) |
|
|
privateinherited |
Set the current SD.
In hive, this gets assigned as the thread-local SD.
Definition at line 137 of file SensitiveDetectorBase.cxx.
139 #ifdef G4MULTITHREADED
140 const auto tid = std::this_thread::get_id();
141 ATH_MSG_DEBUG(
"Creating and registering SD " <<
sd <<
" in thread " << tid);
142 m_sdThreadMap.insert( std::make_pair(tid,
sd) );
◆ SetSensitiveDetector()
void SensitiveDetectorBase::SetSensitiveDetector |
( |
G4LogicalVolume * |
logVol, |
|
|
G4VSensitiveDetector * |
aSD |
|
) |
| const |
|
protectedinherited |
Method stolen from G4VUserDetectorConstruction in G4 10.2.
Definition at line 177 of file SensitiveDetectorBase.cxx.
184 G4VSensitiveDetector* originalSD = logVol->GetSensitiveDetector();
185 if ( originalSD ==
nullptr )
187 logVol->SetSensitiveDetector(aSD);
191 G4MultiSensitiveDetector* msd =
dynamic_cast<G4MultiSensitiveDetector*
>(originalSD);
192 if ( msd !=
nullptr )
199 std::stringstream
ss;
200 ss << static_cast<const void*>(logVol);
201 const G4String msdname =
"/MultiSD_" + logVol->GetName() +
ss.str();
203 msd =
new G4MultiSensitiveDetector(msdname);
205 G4SDManager::GetSDMpointer()->AddNewDetector(msd);
206 msd->AddSD(originalSD);
208 logVol->SetSensitiveDetector(msd);
◆ SetupEvent()
virtual StatusCode SensitiveDetectorBase::SetupEvent |
( |
| ) |
|
|
inlineoverridevirtualinherited |
◆ useFrozenShowers()
bool LArG4::SimpleSDTool::useFrozenShowers |
( |
| ) |
const |
|
inlineprotectedinherited |
Are we handling frozen shower fast sim?
Definition at line 66 of file SimpleSDTool.h.
◆ m_fcal1calc
◆ m_fcal1Volumes
std::vector<std::string> LArG4::H62004FCALSDTool::m_fcal1Volumes |
|
private |
◆ m_fcal2calc
◆ m_fcal2Volumes
std::vector<std::string> LArG4::H62004FCALSDTool::m_fcal2Volumes |
|
private |
◆ m_fcalcoldcalc
◆ m_fcalColdVolumes
std::vector<std::string> LArG4::H62004FCALSDTool::m_fcalColdVolumes |
|
private |
◆ m_hitCollName
std::string LArG4::H62004FCALSDTool::m_hitCollName |
|
private |
◆ m_larEmID
◆ m_larFcalID
◆ m_larHecID
◆ m_noVolumes
Gaudi::Property<bool> SensitiveDetectorBase::m_noVolumes {this, "NoVolumes", false} |
|
protectedinherited |
◆ m_outputCollectionNames
Gaudi::Property<std::vector<std::string> > SensitiveDetectorBase::m_outputCollectionNames {this, "OutputCollectionNames", {}} |
|
protectedinherited |
◆ m_SD
G4VSensitiveDetector* SensitiveDetectorBase::m_SD {} |
|
privateinherited |
◆ m_timeBinType
std::string LArG4::SimpleSDTool::m_timeBinType |
|
protectedinherited |
What time binning type for regular hits?
Definition at line 74 of file SimpleSDTool.h.
◆ m_timeBinWidth
float LArG4::SimpleSDTool::m_timeBinWidth |
|
protectedinherited |
What time bin width for regular hits?
Definition at line 76 of file SimpleSDTool.h.
◆ m_useFrozenShowers
G4bool LArG4::SimpleSDTool::m_useFrozenShowers |
|
protectedinherited |
Is there going to be a fast simulation coming into this SD?
Definition at line 78 of file SimpleSDTool.h.
◆ m_volumeNames
Gaudi::Property<std::vector<std::string> > SensitiveDetectorBase::m_volumeNames {this, "LogicalVolumeNames", {}} |
|
protectedinherited |
The documentation for this class was generated from the following file: