ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
FCS_Param::FCS_StepInfoSDTool Class Reference

A base class for tools that manage FCS_StepInfoSDs. More...

#include <FCS_StepInfoSDTool.h>

Inheritance diagram for FCS_Param::FCS_StepInfoSDTool:
Collaboration diagram for FCS_Param::FCS_StepInfoSDTool:

Public Member Functions

 FCS_StepInfoSDTool (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor. More...
 
StatusCode initialize () override final
 Initialize the tool. More...
 
StatusCode Gather () override final
 Calls down to all the SDs to pack their hits into one collection. More...
 
StatusCode initializeSD () override
 Setup an SD in the current thread. More...
 
virtual StatusCode SetupEvent () override
 Beginning of an athena event. More...
 
virtual StatusCode SetupEvent (HitCollectionMap &) override
 
virtual StatusCode Gather (HitCollectionMap &) override
 

Protected Member Functions

StatusCode assignSD (G4VSensitiveDetector *sd, const std::vector< std::string > &volumes) const
 Assign SD to a list of volumes. More...
 
G4VSensitiveDetector * getSD ()
 Retrieve the current SD. More...
 
void SetSensitiveDetector (G4LogicalVolume *, G4VSensitiveDetector *) const
 Method stolen from G4VUserDetectorConstruction in G4 10.2. More...
 

Protected Attributes

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...
 

Private Member Functions

G4VSensitiveDetector * makeSD () const override final
 Create the SD wrapper for current worker thread. More...
 
virtual StatusCode initializeCalculators ()
 Initialize Calculator Services. More...
 
std::unique_ptr< FCS_StepInfoSDmakeOneLArSD (const std::string &name, ILArCalculatorSvc *calc, const std::vector< std::string > &volumes) const
 Helper method to create one SD. More...
 
std::unique_ptr< FCS_StepInfoSDmakeOneTileSD (const std::string &name, ITileCalculator *calc, const std::vector< std::string > &volumes) const
 Helper method to create one SD. More...
 
void setSD (G4VSensitiveDetector *)
 Set the current SD. More...
 

Static Private Member Functions

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

Private Attributes

std::string m_hitCollName
 Hit collection name. More...
 
ServiceHandle< ILArCalculatorSvcm_bpsmodcalc
 
ServiceHandle< ILArCalculatorSvcm_embcalc
 
ServiceHandle< ILArCalculatorSvcm_emepiwcalc
 
ServiceHandle< ILArCalculatorSvcm_emeniwcalc
 
ServiceHandle< ILArCalculatorSvcm_emepowcalc
 
ServiceHandle< ILArCalculatorSvcm_emenowcalc
 
ServiceHandle< ILArCalculatorSvcm_emepscalc
 
ServiceHandle< ILArCalculatorSvcm_emepobarcalc
 
ServiceHandle< ILArCalculatorSvcm_emenobarcalc
 
ServiceHandle< ILArCalculatorSvcm_heccalc
 
ServiceHandle< ILArCalculatorSvcm_fcal1calc
 
ServiceHandle< ILArCalculatorSvcm_fcal2calc
 
ServiceHandle< ILArCalculatorSvcm_fcal3calc
 
ServiceHandle< ITileCalculatorm_tileCalculator
 
FCS_Param::Config m_config
 
G4VSensitiveDetector * m_SD {}
 The sensitive detector to which this thing corresponds. More...
 
SD volumes
std::vector< std::string > m_stacVolumes
 
std::vector< std::string > m_presBarVolumes
 
std::vector< std::string > m_posIWVolumes
 
std::vector< std::string > m_negIWVolumes
 
std::vector< std::string > m_posOWVolumes
 
std::vector< std::string > m_negOWVolumes
 
std::vector< std::string > m_presECVolumes
 
std::vector< std::string > m_pBOBVolumes
 
std::vector< std::string > m_nBOBVolumes
 
std::vector< std::string > m_fcal1Volumes
 
std::vector< std::string > m_fcal2Volumes
 
std::vector< std::string > m_fcal3Volumes
 
std::vector< std::string > m_sliceVolumes
 
std::vector< std::string > m_tileVolumes
 
Calo identifier helpers
const LArEM_IDm_larEmID
 
const LArFCAL_IDm_larFcalID
 
const LArHEC_IDm_larHecID
 
const TileIDm_tileID
 

Detailed Description

A base class for tools that manage FCS_StepInfoSDs.

Todo:
Add more details.
Author
Steve Farrell Steve.nosp@m.n.Fa.nosp@m.rrell.nosp@m.@cer.nosp@m.n.ch

Definition at line 40 of file FCS_StepInfoSDTool.h.

Constructor & Destructor Documentation

◆ FCS_StepInfoSDTool()

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

Constructor.

Definition at line 36 of file FCS_StepInfoSDTool.cxx.

40  m_hitCollName("MergedEventSteps"),
41  m_bpsmodcalc("EMBPresamplerCalculator", name),
42  m_embcalc("EMBCalculator", name),
43  m_emepiwcalc("EMECPosInnerWheelCalculator", name),
44  m_emeniwcalc("EMECNegInnerWheelCalculator", name),
45  m_emepowcalc("EMECPosOuterWheelCalculator", name),
46  m_emenowcalc("EMECNegOuterWheelCalculator", name),
47  m_emepscalc("EMECPresamplerCalculator", name),
48  m_emepobarcalc("EMECPosBackOuterBarretteCalculator", name),
49  m_emenobarcalc("EMECNegBackOuterBarretteCalculator", name),
50  m_heccalc("HECWheelCalculator", name),
51  m_fcal1calc("FCAL1Calculator", name),
52  m_fcal2calc("FCAL2Calculator", name),
53  m_fcal3calc("FCAL3Calculator", name),
54  m_tileCalculator("TileGeoG4SDCalc", name),
55  m_larEmID(nullptr),
56  m_larFcalID(nullptr),
57  m_larHecID(nullptr),
58  m_tileID(nullptr),
59  m_config() {
60  declareProperty("HitCollectionName", m_hitCollName);
61  declareProperty("StacVolumes", m_stacVolumes);
62  declareProperty("PresamplerVolumes", m_presBarVolumes);
63  declareProperty("PosIWVolumes", m_posIWVolumes);
64  declareProperty("NegIWVolumes", m_negIWVolumes);
65  declareProperty("PosOWVolumes", m_posOWVolumes);
66  declareProperty("NegOWVolumes", m_negOWVolumes);
67  declareProperty("PresVolumes", m_presECVolumes);
68  declareProperty("PosBOBarretteVolumes", m_pBOBVolumes);
69  declareProperty("NegBOBarretteVolumes", m_nBOBVolumes);
70  declareProperty("FCAL1Volumes", m_fcal1Volumes);
71  declareProperty("FCAL2Volumes", m_fcal2Volumes);
72  declareProperty("FCAL3Volumes", m_fcal3Volumes);
73  declareProperty("SliceVolumes", m_sliceVolumes);
74  declareProperty("TileVolumes", m_tileVolumes);
75 
76  declareProperty("EMBPSCalculator", m_bpsmodcalc);
77  declareProperty("EMBCalculator", m_embcalc);
78  declareProperty("EMECPosIWCalculator", m_emepiwcalc);
79  declareProperty("EMECNegIWCalculator", m_emeniwcalc);
80  declareProperty("EMECPosOWCalculator", m_emepowcalc);
81  declareProperty("EMECNegOWCalculator", m_emenowcalc);
82  declareProperty("EMECPSCalculator", m_emepscalc);
83  declareProperty("EMECPosBOBCalculator", m_emepobarcalc);
84  declareProperty("EMECNegBOBCalculator", m_emenobarcalc);
85  declareProperty("HECWActiveCalculator", m_heccalc);
86  declareProperty("FCAL1Calculator", m_fcal1calc);
87  declareProperty("FCAL2Calculator", m_fcal2calc);
88  declareProperty("FCAL3Calculator", m_fcal3calc);
89  declareProperty("TileCalculator", m_tileCalculator);
90 
91  declareProperty("shift_lar_subhit", m_config.shift_lar_subhit, "");
92  declareProperty("shorten_lar_step", m_config.shorten_lar_step, "");
93 
94  declareProperty("maxRadiusLateral", m_config.m_maxRadiusLateral, "");
95  declareProperty("maxRadiusLongitudinal", m_config.m_maxRadiusLongitudinal,
96  "");
97 
98  declareProperty("maxTime", m_config.m_maxTime, "");
99  declareProperty("maxTimeLAr", m_config.m_maxTimeLAr, "");
100  declareProperty("maxTimeHEC", m_config.m_maxTimeHEC, "");
101  declareProperty("maxTimeFCAL", m_config.m_maxTimeFCAL, "");
102  declareProperty("maxTimeTile", m_config.m_maxTimeTile, "");
103 }

Member Function Documentation

◆ 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.

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

◆ Gather() [1/2]

StatusCode FCS_Param::FCS_StepInfoSDTool::Gather ( )
finaloverridevirtual

Calls down to all the SDs to pack their hits into one collection.

Reimplemented from SensitiveDetectorBase.

Definition at line 168 of file FCS_StepInfoSDTool.cxx.

168  {
169  ATH_MSG_DEBUG("Gathering hits to write out in " << name());
170  auto* sdWrapper = dynamic_cast<FCS_StepInfoSDWrapper*>(getSD());
171  if (!sdWrapper) {
172  ATH_MSG_ERROR("Failed to cast SD to FCS_StepInfoSDWrapper");
173  return StatusCode::FAILURE;
174  }
175  sdWrapper->EndOfAthenaEvent();
176  return StatusCode::SUCCESS;
177 }

◆ Gather() [2/2]

virtual StatusCode SensitiveDetectorBase::Gather ( HitCollectionMap )
inlineoverridevirtualinherited

◆ 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.

124 {
125 #ifdef G4MULTITHREADED
126  // Get current thread-ID
127  const auto tid = std::this_thread::get_id();
128  // Retrieve it from the SD map
129  auto sdPair = m_sdThreadMap.find(tid);
130  if(sdPair == m_sdThreadMap.end()) return nullptr;
131  return sdPair->second;
132 #else
133  return m_SD;
134 #endif
135 }

◆ initialize()

StatusCode FCS_Param::FCS_StepInfoSDTool::initialize ( )
finaloverride

Initialize the tool.

Definition at line 108 of file FCS_StepInfoSDTool.cxx.

108  {
109  ATH_MSG_DEBUG("Initializing " << name());
110 
111  const CaloIdManager* idMgr = nullptr;
112  CHECK(detStore()->retrieve(idMgr));
113  m_larEmID = idMgr->getEM_ID();
114  if (m_larEmID == nullptr) {
115  ATH_MSG_ERROR("Invalid LAr EM ID helper");
116  return StatusCode::FAILURE;
117  }
118  m_larFcalID = idMgr->getFCAL_ID();
119  if (m_larFcalID == nullptr) {
120  ATH_MSG_ERROR("Invalid LAr FCAL ID helper");
121  return StatusCode::FAILURE;
122  }
123  m_larHecID = idMgr->getHEC_ID();
124  if (m_larHecID == nullptr) {
125  ATH_MSG_ERROR("Invalid LAr HEC ID helper");
126  return StatusCode::FAILURE;
127  }
128  m_tileID = idMgr->getTileID();
129  if (m_tileID == nullptr) {
130  ATH_MSG_ERROR("Invalid Tile ID helper");
131  return StatusCode::FAILURE;
132  }
133 
134  // No general volume list for SensitiveDetectorBase
135  m_noVolumes = true;
136 
138 
139  return StatusCode::SUCCESS;
140 }

◆ initializeCalculators()

StatusCode FCS_Param::FCS_StepInfoSDTool::initializeCalculators ( )
privatevirtual

Initialize Calculator Services.

Definition at line 145 of file FCS_StepInfoSDTool.cxx.

145  {
146  // Lots of calculators !!!
147  ATH_CHECK(m_bpsmodcalc.retrieve());
148  ATH_CHECK(m_embcalc.retrieve());
149  ATH_CHECK(m_emepiwcalc.retrieve());
150  ATH_CHECK(m_emeniwcalc.retrieve());
151  ATH_CHECK(m_emepowcalc.retrieve());
152  ATH_CHECK(m_emenowcalc.retrieve());
153  ATH_CHECK(m_emepscalc.retrieve());
154  ATH_CHECK(m_emepobarcalc.retrieve());
155  ATH_CHECK(m_emenobarcalc.retrieve());
156  ATH_CHECK(m_heccalc.retrieve());
157  ATH_CHECK(m_fcal1calc.retrieve());
158  ATH_CHECK(m_fcal2calc.retrieve());
159  ATH_CHECK(m_fcal3calc.retrieve());
160  ATH_CHECK(m_tileCalculator.retrieve());
161 
162  return StatusCode::SUCCESS;
163 }

◆ 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.

31 {
32  ATH_MSG_VERBOSE( name() << "::initializeSD()" );
33 
34  // Sanity check for volume configuration problems.
35  // It would be better to have a more robust solution for this.
36  if(m_volumeNames.empty() != m_noVolumes) {
37  ATH_MSG_ERROR("Initializing SD from " << name() << ", NoVolumes = "
38  << (m_noVolumes? "true" : "false") << ", but LogicalVolumeNames = "
39  << m_volumeNames.value());
40  return StatusCode::FAILURE;
41  }
42 
43  // Make sure SD isn't already registered
44  if(getSD())
45  {
46  ATH_MSG_ERROR("Trying to create a SD which already exists!");
47  return StatusCode::FAILURE;
48  }
49 
50  // Make the SD stored by this tool
51  auto* sd = makeSD();
52  if(!sd)
53  {
54  ATH_MSG_ERROR("Failed to create SD!");
55  return StatusCode::FAILURE;
56  }
57  setSD(sd);
58 
59  // Assign the SD to our list of volumes
60  ATH_CHECK( assignSD( getSD(), m_volumeNames.value() ) );
61 
62  ATH_MSG_DEBUG( "Initialized and added SD " << name() );
63  return StatusCode::SUCCESS;
64 }

◆ makeOneLArSD()

std::unique_ptr< FCS_StepInfoSD > FCS_Param::FCS_StepInfoSDTool::makeOneLArSD ( const std::string &  name,
ILArCalculatorSvc calc,
const std::vector< std::string > &  volumes 
) const
private

Helper method to create one SD.

Definition at line 223 of file FCS_StepInfoSDTool.cxx.

225  {
226  ATH_MSG_VERBOSE(name() << " makeOneSD");
227 
228  // Parse the wildcard patterns for existing volume names
229  auto parsedVolumes = LArG4::findLogicalVolumes(
230  volumes, msg()); // from LArG4Code/VolumeUtils.h
231 
232  // Inject the Calculator into m_config
234  config.m_LArCalculator = calc;
235  if (!calc) {
236  throw GaudiException(
237  "nullptr for ILArCalculatorSvc provided to constructor for: " + sdName,
238  name(), StatusCode::FAILURE);
239  }
240  if (msgLvl(MSG::VERBOSE)) {
241  config.verboseLevel = 10;
242  } else if (msgLvl(MSG::DEBUG)) {
243  config.verboseLevel = 5;
244  }
245  // Create the simple SD
246  std::unique_ptr<FCS_StepInfoSD> sd =
247  std::make_unique<LArFCS_StepInfoSD>(sdName, config);
248  sd->setupHelpers(m_larEmID, m_larFcalID, m_larHecID, m_tileID);
249 
250  // Assign the volumes to the SD
251  if (this->assignSD(sd.get(), parsedVolumes).isFailure()) {
252  // TODO: can I just return NULL here?
253  throw GaudiException("Failed to assign sd: " + sdName, name(),
254  StatusCode::FAILURE);
255  }
256  return sd;
257 }

◆ makeOneTileSD()

std::unique_ptr< FCS_StepInfoSD > FCS_Param::FCS_StepInfoSDTool::makeOneTileSD ( const std::string &  name,
ITileCalculator calc,
const std::vector< std::string > &  volumes 
) const
private

Helper method to create one SD.

Definition at line 262 of file FCS_StepInfoSDTool.cxx.

264  {
265  ATH_MSG_VERBOSE(name() << " makeOneSD");
266 
267  // Inject the Calculator into m_config
269  config.m_TileCalculator = calc;
270  if (!calc) {
271  throw GaudiException(
272  "nullptr for ITileCalculator provided to constructor for: " + sdName,
273  name(), StatusCode::FAILURE);
274  }
275  if (msgLvl(MSG::VERBOSE)) {
276  config.verboseLevel = 10;
277  } else if (msgLvl(MSG::DEBUG)) {
278  config.verboseLevel = 5;
279  }
280  // Create the simple SD
281  std::unique_ptr<FCS_StepInfoSD> sd =
282  std::make_unique<TileFCS_StepInfoSD>(sdName, config);
283  sd->setupHelpers(m_larEmID, m_larFcalID, m_larHecID, m_tileID);
284 
285  // Assign the volumes to the SD
286  if (this->assignSD(sd.get(), volumes).isFailure()) {
287  // TODO: can I just return NULL here?
288  throw GaudiException("Failed to assign sd: " + sdName, name(),
289  StatusCode::FAILURE);
290  }
291  return sd;
292 }

◆ makeSD()

G4VSensitiveDetector * FCS_Param::FCS_StepInfoSDTool::makeSD ( ) const
finaloverrideprivate

Create the SD wrapper for current worker thread.

Definition at line 182 of file FCS_StepInfoSDTool.cxx.

182  {
183  // Create the wrapper
184  auto* sdWrapper =
185  new FCS_StepInfoSDWrapper("FCS_StepInfoSDWrapper", m_hitCollName);
186 
187  // Create the SDs.
188  sdWrapper->addSD(makeOneLArSD("Barrel::Presampler::Module::StepInfo",
190  sdWrapper->addSD(
191  makeOneLArSD("EMB::STAC::StepInfo", &*m_embcalc, m_stacVolumes));
192  sdWrapper->addSD(makeOneLArSD("EMEC::Pos::InnerWheel::StepInfo",
194  sdWrapper->addSD(makeOneLArSD("EMEC::Neg::InnerWheel::StepInfo",
196  sdWrapper->addSD(makeOneLArSD("EMEC::Pos::OuterWheel::StepInfo",
198  sdWrapper->addSD(makeOneLArSD("EMEC::Neg::OuterWheel::StepInfo",
200  sdWrapper->addSD(makeOneLArSD("Endcap::Presampler::LiquidArgon::StepInfo",
202  sdWrapper->addSD(makeOneLArSD("EMEC::Pos::BackOuterBarrette::StepInfo",
204  sdWrapper->addSD(makeOneLArSD("EMEC::Neg::BackOuterBarrette::StepInfo",
206  sdWrapper->addSD(makeOneLArSD("FCAL::Module1::Gap::StepInfo", &*m_fcal1calc,
207  m_fcal1Volumes));
208  sdWrapper->addSD(makeOneLArSD("FCAL::Module2::Gap::StepInfo", &*m_fcal2calc,
209  m_fcal2Volumes));
210  sdWrapper->addSD(makeOneLArSD("FCAL::Module3::Gap::StepInfo", &*m_fcal3calc,
211  m_fcal3Volumes));
212  sdWrapper->addSD(makeOneLArSD("HEC::Module::Depth::Slice::Wheel::StepInfo",
214  sdWrapper->addSD(makeOneTileSD("Tile::Scintillator::StepInfo",
216 
217  return sdWrapper;
218 }

◆ 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.

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

◆ 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.

138 {
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) );
143 #else
144  m_SD = sd;
145 #endif
146 }

◆ 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.

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

◆ 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 MuonWallSDTool, AFP_SensitiveDetectorTool, AFP_SiDSensitiveDetectorTool, AFP_TDSensitiveDetectorTool, CaloCellContainerSDTool, and ALFA_SensitiveDetectorTool.

Definition at line 70 of file SensitiveDetectorBase.h.

70 { return StatusCode::SUCCESS; }

◆ SetupEvent() [2/2]

virtual StatusCode SensitiveDetectorBase::SetupEvent ( HitCollectionMap )
inlineoverridevirtualinherited

Member Data Documentation

◆ m_bpsmodcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_bpsmodcalc
private

Definition at line 92 of file FCS_StepInfoSDTool.h.

◆ m_config

FCS_Param::Config FCS_Param::FCS_StepInfoSDTool::m_config
private

Definition at line 123 of file FCS_StepInfoSDTool.h.

◆ m_embcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_embcalc
private

Definition at line 94 of file FCS_StepInfoSDTool.h.

◆ m_emeniwcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emeniwcalc
private

Definition at line 97 of file FCS_StepInfoSDTool.h.

◆ m_emenobarcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emenobarcalc
private

Definition at line 107 of file FCS_StepInfoSDTool.h.

◆ m_emenowcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emenowcalc
private

Definition at line 101 of file FCS_StepInfoSDTool.h.

◆ m_emepiwcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emepiwcalc
private

Definition at line 95 of file FCS_StepInfoSDTool.h.

◆ m_emepobarcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emepobarcalc
private

Definition at line 105 of file FCS_StepInfoSDTool.h.

◆ m_emepowcalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emepowcalc
private

Definition at line 99 of file FCS_StepInfoSDTool.h.

◆ m_emepscalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_emepscalc
private

Definition at line 104 of file FCS_StepInfoSDTool.h.

◆ m_fcal1calc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_fcal1calc
private

Definition at line 111 of file FCS_StepInfoSDTool.h.

◆ m_fcal1Volumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_fcal1Volumes
private

Definition at line 84 of file FCS_StepInfoSDTool.h.

◆ m_fcal2calc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_fcal2calc
private

Definition at line 112 of file FCS_StepInfoSDTool.h.

◆ m_fcal2Volumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_fcal2Volumes
private

Definition at line 85 of file FCS_StepInfoSDTool.h.

◆ m_fcal3calc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_fcal3calc
private

Definition at line 113 of file FCS_StepInfoSDTool.h.

◆ m_fcal3Volumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_fcal3Volumes
private

Definition at line 86 of file FCS_StepInfoSDTool.h.

◆ m_heccalc

ServiceHandle<ILArCalculatorSvc> FCS_Param::FCS_StepInfoSDTool::m_heccalc
private

Definition at line 110 of file FCS_StepInfoSDTool.h.

◆ m_hitCollName

std::string FCS_Param::FCS_StepInfoSDTool::m_hitCollName
private

Hit collection name.

Definition at line 71 of file FCS_StepInfoSDTool.h.

◆ m_larEmID

const LArEM_ID* FCS_Param::FCS_StepInfoSDTool::m_larEmID
private

Definition at line 118 of file FCS_StepInfoSDTool.h.

◆ m_larFcalID

const LArFCAL_ID* FCS_Param::FCS_StepInfoSDTool::m_larFcalID
private

Definition at line 119 of file FCS_StepInfoSDTool.h.

◆ m_larHecID

const LArHEC_ID* FCS_Param::FCS_StepInfoSDTool::m_larHecID
private

Definition at line 120 of file FCS_StepInfoSDTool.h.

◆ m_nBOBVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_nBOBVolumes
private

Definition at line 83 of file FCS_StepInfoSDTool.h.

◆ m_negIWVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_negIWVolumes
private

Definition at line 78 of file FCS_StepInfoSDTool.h.

◆ m_negOWVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_negOWVolumes
private

Definition at line 80 of file FCS_StepInfoSDTool.h.

◆ 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.

◆ 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.

◆ m_pBOBVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_pBOBVolumes
private

Definition at line 82 of file FCS_StepInfoSDTool.h.

◆ m_posIWVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_posIWVolumes
private

Definition at line 77 of file FCS_StepInfoSDTool.h.

◆ m_posOWVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_posOWVolumes
private

Definition at line 79 of file FCS_StepInfoSDTool.h.

◆ m_presBarVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_presBarVolumes
private

Definition at line 76 of file FCS_StepInfoSDTool.h.

◆ m_presECVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_presECVolumes
private

Definition at line 81 of file FCS_StepInfoSDTool.h.

◆ m_SD

G4VSensitiveDetector* SensitiveDetectorBase::m_SD {}
privateinherited

The sensitive detector to which this thing corresponds.

Definition at line 125 of file SensitiveDetectorBase.h.

◆ m_sliceVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_sliceVolumes
private

Definition at line 87 of file FCS_StepInfoSDTool.h.

◆ m_stacVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_stacVolumes
private

Definition at line 75 of file FCS_StepInfoSDTool.h.

◆ m_tileCalculator

ServiceHandle<ITileCalculator> FCS_Param::FCS_StepInfoSDTool::m_tileCalculator
private

Definition at line 114 of file FCS_StepInfoSDTool.h.

◆ m_tileID

const TileID* FCS_Param::FCS_StepInfoSDTool::m_tileID
private

Definition at line 121 of file FCS_StepInfoSDTool.h.

◆ m_tileVolumes

std::vector<std::string> FCS_Param::FCS_StepInfoSDTool::m_tileVolumes
private

Definition at line 88 of file FCS_StepInfoSDTool.h.

◆ 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.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
SensitiveDetectorBase::SetupEvent
virtual StatusCode SetupEvent() override
Beginning of an athena event.
Definition: SensitiveDetectorBase.h:70
FCS_Param::FCS_StepInfoSDTool::m_fcal1calc
ServiceHandle< ILArCalculatorSvc > m_fcal1calc
Definition: FCS_StepInfoSDTool.h:111
FCS_Param::FCS_StepInfoSDTool::makeOneTileSD
std::unique_ptr< FCS_StepInfoSD > makeOneTileSD(const std::string &name, ITileCalculator *calc, const std::vector< std::string > &volumes) const
Helper method to create one SD.
Definition: FCS_StepInfoSDTool.cxx:262
FCS_Param::FCS_StepInfoSDTool::m_larHecID
const LArHEC_ID * m_larHecID
Definition: FCS_StepInfoSDTool.h:120
FCS_Param::FCS_StepInfoSDTool::m_fcal1Volumes
std::vector< std::string > m_fcal1Volumes
Definition: FCS_StepInfoSDTool.h:84
FCS_Param::FCS_StepInfoSDTool::m_fcal2Volumes
std::vector< std::string > m_fcal2Volumes
Definition: FCS_StepInfoSDTool.h:85
SensitiveDetectorBase::m_SD
G4VSensitiveDetector * m_SD
The sensitive detector to which this thing corresponds.
Definition: SensitiveDetectorBase.h:125
FCS_Param::FCS_StepInfoSDTool::m_negOWVolumes
std::vector< std::string > m_negOWVolumes
Definition: FCS_StepInfoSDTool.h:80
PowhegControl_ttHplus_NLO.ss
ss
Definition: PowhegControl_ttHplus_NLO.py:83
FCS_Param::Config::m_maxRadiusLateral
std::vector< double > m_maxRadiusLateral
property, see LArG4GenShowerLib::LArG4GenShowerLib
Definition: FCS_StepInfoSD.h:46
FCS_Param::FCS_StepInfoSDTool::initializeCalculators
virtual StatusCode initializeCalculators()
Initialize Calculator Services.
Definition: FCS_StepInfoSDTool.cxx:145
FCS_Param::FCS_StepInfoSDTool::m_posOWVolumes
std::vector< std::string > m_posOWVolumes
Definition: FCS_StepInfoSDTool.h:79
python.base_data.config
config
Definition: base_data.py:20
CaloIdManager::getEM_ID
const LArEM_ID * getEM_ID(void) const
Definition: CaloIdManager.cxx:80
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:135
FCS_Param::FCS_StepInfoSDTool::m_fcal2calc
ServiceHandle< ILArCalculatorSvc > m_fcal2calc
Definition: FCS_StepInfoSDTool.h:112
LArG4::findLogicalVolumes
std::set< std::string > findLogicalVolumes(const std::string &pattern)
Search for logical volumes in the G4 volume store.
FCS_Param::Config::shift_lar_subhit
bool shift_lar_subhit
Definition: FCS_StepInfoSD.h:40
FCS_Param::FCS_StepInfoSDTool::m_emepobarcalc
ServiceHandle< ILArCalculatorSvc > m_emepobarcalc
Definition: FCS_StepInfoSDTool.h:105
SensitiveDetectorBase::SensitiveDetectorBase
SensitiveDetectorBase(const std::string &type, const std::string &name, const IInterface *parent)
Standard constructor.
Definition: SensitiveDetectorBase.cxx:22
FCS_Param::FCS_StepInfoSDTool::m_embcalc
ServiceHandle< ILArCalculatorSvc > m_embcalc
Definition: FCS_StepInfoSDTool.h:94
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
FCS_Param::FCS_StepInfoSDTool::m_presECVolumes
std::vector< std::string > m_presECVolumes
Definition: FCS_StepInfoSDTool.h:81
SensitiveDetectorBase::getSD
G4VSensitiveDetector * getSD()
Retrieve the current SD.
Definition: SensitiveDetectorBase.cxx:123
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
config
Definition: PhysicsAnalysis/AnalysisCommon/AssociationUtils/python/config.py:1
FCS_Param::FCS_StepInfoSDTool::m_stacVolumes
std::vector< std::string > m_stacVolumes
Definition: FCS_StepInfoSDTool.h:75
FCS_Param::FCS_StepInfoSDTool::m_presBarVolumes
std::vector< std::string > m_presBarVolumes
Definition: FCS_StepInfoSDTool.h:76
FCS_Param::FCS_StepInfoSDTool::m_negIWVolumes
std::vector< std::string > m_negIWVolumes
Definition: FCS_StepInfoSDTool.h:78
python.selector.AtlRunQuerySelectorLhcOlc.sd
sd
Definition: AtlRunQuerySelectorLhcOlc.py:611
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
FCS_Param::Config::m_maxRadiusLongitudinal
std::vector< double > m_maxRadiusLongitudinal
property, see LArG4GenShowerLib::LArG4GenShowerLib
Definition: FCS_StepInfoSD.h:49
FCS_Param::FCS_StepInfoSDTool::m_emenobarcalc
ServiceHandle< ILArCalculatorSvc > m_emenobarcalc
Definition: FCS_StepInfoSDTool.h:107
FCS_Param::FCS_StepInfoSDTool::m_larFcalID
const LArFCAL_ID * m_larFcalID
Definition: FCS_StepInfoSDTool.h:119
FCS_Param::FCS_StepInfoSDTool::m_emepowcalc
ServiceHandle< ILArCalculatorSvc > m_emepowcalc
Definition: FCS_StepInfoSDTool.h:99
CaloIdManager::getTileID
const TileID * getTileID(void) const
Definition: CaloIdManager.cxx:100
FCS_Param::FCS_StepInfoSDTool::makeOneLArSD
std::unique_ptr< FCS_StepInfoSD > makeOneLArSD(const std::string &name, ILArCalculatorSvc *calc, const std::vector< std::string > &volumes) const
Helper method to create one SD.
Definition: FCS_StepInfoSDTool.cxx:223
CaloIdManager::getHEC_ID
const LArHEC_ID * getHEC_ID(void) const
Definition: CaloIdManager.cxx:95
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
CaloIdManager
This class initializes the Calo (LAr and Tile) offline identifiers.
Definition: CaloIdManager.h:45
FCS_Param::FCS_StepInfoSDTool::m_fcal3calc
ServiceHandle< ILArCalculatorSvc > m_fcal3calc
Definition: FCS_StepInfoSDTool.h:113
FCS_Param::FCS_StepInfoSDTool::m_tileVolumes
std::vector< std::string > m_tileVolumes
Definition: FCS_StepInfoSDTool.h:88
FCS_Param::Config::m_maxTimeTile
double m_maxTimeTile
Definition: FCS_StepInfoSD.h:57
FCS_Param::FCS_StepInfoSDTool::m_bpsmodcalc
ServiceHandle< ILArCalculatorSvc > m_bpsmodcalc
Definition: FCS_StepInfoSDTool.h:92
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
CaloIdManager::getFCAL_ID
const LArFCAL_ID * getFCAL_ID(void) const
Definition: CaloIdManager.cxx:85
FCS_Param::FCS_StepInfoSDTool::m_hitCollName
std::string m_hitCollName
Hit collection name.
Definition: FCS_StepInfoSDTool.h:71
FCS_Param::Config::m_maxTime
double m_maxTime
Definition: FCS_StepInfoSD.h:53
FCS_Param::FCS_StepInfoSDTool::m_config
FCS_Param::Config m_config
Definition: FCS_StepInfoSDTool.h:123
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
FCS_Param::Config::m_maxTimeFCAL
double m_maxTimeFCAL
Definition: FCS_StepInfoSD.h:56
FCS_Param::FCS_StepInfoSDTool::m_tileCalculator
ServiceHandle< ITileCalculator > m_tileCalculator
Definition: FCS_StepInfoSDTool.h:114
FCS_Param::FCS_StepInfoSDWrapper
detail::SDWrapper< FCS_StepInfoSD, ISF_FCS_Parametrization::FCS_StepInfoCollection > FCS_StepInfoSDWrapper
Template instantiation for LArG4SimpleSD.
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h:85
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
FCS_Param::FCS_StepInfoSDTool::m_sliceVolumes
std::vector< std::string > m_sliceVolumes
Definition: FCS_StepInfoSDTool.h:87
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
FCS_Param::FCS_StepInfoSDTool::m_tileID
const TileID * m_tileID
Definition: FCS_StepInfoSDTool.h:121
FCS_Param::FCS_StepInfoSDTool::m_larEmID
const LArEM_ID * m_larEmID
Definition: FCS_StepInfoSDTool.h:118
SensitiveDetectorBase::SetSensitiveDetector
void SetSensitiveDetector(G4LogicalVolume *, G4VSensitiveDetector *) const
Method stolen from G4VUserDetectorConstruction in G4 10.2.
Definition: SensitiveDetectorBase.cxx:178
FCS_Param::Config::m_maxTimeHEC
double m_maxTimeHEC
Definition: FCS_StepInfoSD.h:55
FCS_Param::FCS_StepInfoSDTool::m_heccalc
ServiceHandle< ILArCalculatorSvc > m_heccalc
Definition: FCS_StepInfoSDTool.h:110
FCS_Param::FCS_StepInfoSDTool::m_emepscalc
ServiceHandle< ILArCalculatorSvc > m_emepscalc
Definition: FCS_StepInfoSDTool.h:104
SensitiveDetectorBase::matchStrings
static bool matchStrings(const char *first, const char *second)
Match two strings with wildcard support.
Definition: SensitiveDetectorBase.cxx:150
SensitiveDetectorBase::m_volumeNames
Gaudi::Property< std::vector< std::string > > m_volumeNames
All the volumes to which this SD is assigned.
Definition: SensitiveDetectorBase.h:96
FCS_Param::Config::m_maxTimeLAr
double m_maxTimeLAr
Definition: FCS_StepInfoSD.h:54
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
SensitiveDetectorBase::m_noVolumes
Gaudi::Property< bool > m_noVolumes
This SensitiveDetector has no volumes associated with it.
Definition: SensitiveDetectorBase.h:101
FCS_Param::FCS_StepInfoSDTool::m_emepiwcalc
ServiceHandle< ILArCalculatorSvc > m_emepiwcalc
Definition: FCS_StepInfoSDTool.h:95
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
FCS_Param::detail::SDWrapper
A template class which wraps multiple sensitive detectors.
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimSD/src/SDWrapper.h:47
SensitiveDetectorBase::Gather
virtual StatusCode Gather() override
End of an athena event.
Definition: SensitiveDetectorBase.h:78
SensitiveDetectorBase::setSD
void setSD(G4VSensitiveDetector *)
Set the current SD.
Definition: SensitiveDetectorBase.cxx:137
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:13
FCS_Param::Config
Definition: FCS_StepInfoSD.h:37
FCS_Param::Config::shorten_lar_step
bool shorten_lar_step
Definition: FCS_StepInfoSD.h:41
FCS_Param::FCS_StepInfoSDTool::m_posIWVolumes
std::vector< std::string > m_posIWVolumes
Definition: FCS_StepInfoSDTool.h:77
beamspotnt.calc
calc
Definition: bin/beamspotnt.py:1251
FCS_Param::FCS_StepInfoSDTool::m_nBOBVolumes
std::vector< std::string > m_nBOBVolumes
Definition: FCS_StepInfoSDTool.h:83
FCS_Param::FCS_StepInfoSDTool::m_emeniwcalc
ServiceHandle< ILArCalculatorSvc > m_emeniwcalc
Definition: FCS_StepInfoSDTool.h:97
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
FCS_Param::FCS_StepInfoSDTool::m_fcal3Volumes
std::vector< std::string > m_fcal3Volumes
Definition: FCS_StepInfoSDTool.h:86
SensitiveDetectorBase::assignSD
StatusCode assignSD(G4VSensitiveDetector *sd, const std::vector< std::string > &volumes) const
Assign SD to a list of volumes.
Definition: SensitiveDetectorBase.cxx:70
FCS_Param::FCS_StepInfoSDTool::m_emenowcalc
ServiceHandle< ILArCalculatorSvc > m_emenowcalc
Definition: FCS_StepInfoSDTool.h:101
FCS_Param::FCS_StepInfoSDTool::m_pBOBVolumes
std::vector< std::string > m_pBOBVolumes
Definition: FCS_StepInfoSDTool.h:82