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

#include <DumpGeo.h>

Inheritance diagram for DumpGeo:
Collaboration diagram for DumpGeo:

Public Member Functions

 DumpGeo (const std::string &name, ISvcLocator *pSvcLocator) ATLAS_CTORDTOR_NOT_THREAD_SAFE
 ~DumpGeo ()=default
StatusCode initialize ()
StatusCode execute ()
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

Gaudi::Property< std::string > m_atlasRelease {this, "AtlasRelease", "", "The current, in use Atlas release"}
Gaudi::Property< std::string > m_detDescrTag {this, "AtlasVersion", "", "The current, in use Atlas Detector Description Geometry TAG"}
Gaudi::Property< std::string > m_outFileName {this, "OutSQLiteFileName", "", "The name of the output SQLite file"}
Gaudi::Property< std::vector< std::string > > m_user_filterDetManagersList { this, "UserFilterDetManager", {}, "Doc", "OrderedSet<T>"}
Gaudi::Property< bool > m_showTreetopContent {this, "ShowTreetopContent", false, "Show the content of the Treetops; by default, only the list of Treetops is shown."}
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 34 of file DumpGeo.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ DumpGeo()

DumpGeo::DumpGeo ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 79 of file DumpGeo.cxx.

80 : AthAlgorithm(name, svcLocator) {}
AthAlgorithm()
Default constructor:

◆ ~DumpGeo()

DumpGeo::~DumpGeo ( )
default

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode DumpGeo::execute ( )
inline

Definition at line 41 of file DumpGeo.h.

41{return StatusCode::SUCCESS;};

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ initialize()

StatusCode DumpGeo::initialize ( )

Definition at line 83 of file DumpGeo.cxx.

83 {
84 ATH_MSG_DEBUG("in initialize()");
85
86 ATH_MSG_INFO("===================================================");
87 ATH_MSG_INFO("\t\tLaunching DumpGeo");
88 ATH_MSG_INFO("===================================================");
89
90 ATH_MSG_INFO("Accessing the ATLAS geometry...");
91 const GeoModelExperiment* theExpt = nullptr;
92 ATH_CHECK(detStore()->retrieve(theExpt, "ATLAS"));
93
94 // Get the ATLAS GEOMETRY 'World' volume
95 PVConstLink world(theExpt->getPhysVol());
96
98 "User filter DetectorManagers: " << m_user_filterDetManagersList);
99
100 ServiceHandle<IGeoDbTagSvc> geoDbTag("GeoDbTagSvc", name());
101 ATH_CHECK(geoDbTag.retrieve());
103 "This is the Geometry TAG we are dumping: " << geoDbTag->atlasVersion());
104
105 GeoPhysVol* volTop = createTheWorld();
106
107 // Get list of managers
108 // We fill a set from the output vector,
109 // so we can use its built-in 'count' method later,
110 // to search for DetManagers
111 ATH_MSG_INFO("Dumping the GeoModel tree...");
112 std::set<std::string> managersList{};
113 {
114 std::vector<std::string> blub = theExpt->getListOfManagers();
115 managersList.insert(blub.begin(), blub.end());
116 }
117 if (msgLvl(MSG::INFO)) {
118 ATH_MSG_INFO("List of the GeoModel Detector Managers that are being dumped: ");
119 for (auto const& man : managersList) {
120 // get the DetectorManager
121 const GeoVDetectorManager* manager = theExpt->getManager(man);
122 unsigned int nTreetops = manager->getNumTreeTops();
123 std::cout << "\t" << man << " [contains " << nTreetops << " treetops]"
124 << std::endl;
125 for (unsigned int i = 0; i < nTreetops; ++i) {
126 PVConstLink treetop(manager->getTreeTop(i));
127 // get treetop's volume
128 const GeoVPhysVol* vol = treetop;
129 // get treetop's logvol's name
130 std::string volName = vol->getLogVol()->getName();
131 std::cout << "\t\t treetop: " << volName << std::endl;
132 }
133 }
134 }
135
136 if (!(m_user_filterDetManagersList.empty())) {
137 // Convert the list of det managers passed by the user into a set
138 std::set<std::string> user_managersList{};
139 {
140 user_managersList.insert(m_user_filterDetManagersList.begin(),
142 }
143 // safety check:
144 // check that all DetManagers requested by the user are in the list
145 // If not, print an error message to warn the user and return
146 for (auto& userDet : user_managersList) {
147 if (!managersList.count(userDet)) {
149 "This Detector Manager you requested to dump is not in the list of "
150 "DetectorManagers for the geometry tag you are using: "
151 << userDet);
152 throw GaudiException(
153 "The Detector Manager you requested to dump is not in the list of "
154 "DetectorManagers.",
155 "DumpGeo", StatusCode::FAILURE);
156 }
157 }
158
159 if (!(managersList.empty())) {
160 for (auto const& mm : managersList) {
161 // get the DetectorManager
162 const GeoVDetectorManager* manager = theExpt->getManager(mm);
163
164 // get the name of the DetectorManager
165 std::string detManName = manager->getName();
166 ATH_MSG_INFO("\tDetectorManager: " << detManName);
167
168 // get the DetManager's TreeTops
169 unsigned int nTreetops = manager->getNumTreeTops();
170 ATH_MSG_INFO("\t" << mm << " - # TreeTops: " << nTreetops);
171
172 if ((nTreetops > 0) && user_managersList.count(detManName)) {
173
174 for (unsigned int i = 0; i < nTreetops; ++i) {
175
176 PVConstLink treetop(manager->getTreeTop(i));
177
178 // get treetop's volume
179 const GeoVPhysVol* vol = treetop;
180
181 // get volume's transform
182 // NOTE: we use getDefX() to get the transform without any alignment
183 GeoTransform* volXf = new GeoTransform(vol->getDefX());
184
185 // get volume's logvol's name
186 std::string volName = vol->getLogVol()->getName();
187 ATH_MSG_INFO("\t* treetop " << i << ": " << volName);
188
189 // Add to the main volume a GeoNameTag with the name of the
190 // DetectorManager
191 volTop->add(new GeoNameTag(detManName));
192 // add Transform and Volume to the main PhysVol
193 volTop->add(volXf);
194 volTop->add(const_cast<GeoVPhysVol*>(vol));
195
197 ATH_MSG_INFO("You enabled the option 'showTreetopContent', so we now print the content of the first layers of child volumes of the Treetops...");
198 unsigned v1{0};
199 GeoVolumeCursor av(treetop);
200 while (!av.atEnd()) {
201 ++v1;
202 if(1==v1) ATH_MSG_INFO("first level of child volumes:");
203 ATH_MSG_INFO("\t\t- child's name: " << av.getName());
204 ATH_MSG_INFO("\t\t- child's n. sub-nodes: " << av.getVolume()->getNChildNodes());
205 ATH_MSG_INFO("\t\t- child's n. sub-volumes: " << av.getVolume()->getNChildVols());
206
207
208 unsigned v2{0};
209 GeoVolumeCursor av2(av.getVolume());
210 while (!av2.atEnd()) {
211 ++v2;
212 if(1==v2) ATH_MSG_INFO("second level of child volumes:");
213 ATH_MSG_INFO("\t\t\t- child's logvol's name: " << av2.getVolume()->getLogVol()->getName());
214
215 unsigned v3{0};
216 GeoVolumeCursor av3(av2.getVolume());
217 while (!av3.atEnd()) {
218 ++v3;
219 if(1==v3) ATH_MSG_INFO("third level of child volumes:");
220 ATH_MSG_INFO("\t\t\t\t- child's logvol's name: " << av3.getVolume()->getLogVol()->getName());
221 av3.next(); // increment volume cursor.
222 } // end while
223
224 av2.next(); // increment volume cursor.
225 } // end while
226
227 av.next(); // increment volume cursor.
228 } // end while
229 }
230 }
231 }
232 }
233 }
234 }
235
236 // DEBUG inspection
237 if (msgLvl(MSG::DEBUG)) {
239 "Looping over top volumes in the GeoModel tree (children of the "
240 "'World' volume)...");
241 GeoVolumeCursor av(world);
242 while (!av.atEnd()) {
243 std::string volname = av.getName();
244 ATH_MSG_DEBUG("\t* relevant NameTag:" << volname);
245 av.next(); // increment volume cursor.
246 }
247 }
248
249 ATH_MSG_INFO("Creating the SQLite DB file...");
250 if (m_outFileName.empty()) {
251 ATH_MSG_FATAL("The name of the output SQLite file is not set!");
252 throw GaudiException("The name of the output SQLite file is not set!",
253 "DumpGeo", StatusCode::FAILURE);
254 }
255 ATH_MSG_INFO("Output file name: " << m_outFileName);
256
257 // open the DB connection
258 GMDBManager db(m_outFileName);
259
260 // check the DB connection
261 if (db.checkIsDBOpen())
262 ATH_MSG_INFO("OK! Database is open!");
263 else {
264 ATH_MSG_ERROR(" ***** Database ERROR!! Exiting...");
265 throw GaudiException(
266 "The GeoModel SQLite .db file could not be opened successfully.",
267 "DumpGeo", StatusCode::FAILURE);
268 }
269
270 ATH_MSG_INFO("Traversing the GeoModel tree...");
271 // Dump the tree volumes into a DB
272 // 1. init the GeoModel node action
273 GeoModelIO::WriteGeoModel dumpGeoModelGraph(db);
274 // 2. visit all GeoModel nodes
275 if (!(m_user_filterDetManagersList.empty())) {
276 volTop->exec(&dumpGeoModelGraph);
277 } else {
278 world->exec(&dumpGeoModelGraph);
279 }
280 ATH_MSG_INFO("Saving the GeoModel tree to the DB...");
281 // 3. save it to an SQLite file
282 dumpGeoModelGraph.saveToDB();
283 ATH_MSG_ALWAYS("DONE. Geometry saved to " << m_outFileName);
284
285 // Quick test if DEBUG
286 if (msgLvl(MSG::DEBUG)) {
288 "Test - list of all the GeoMaterial nodes in the persistified "
289 "geometry:");
290 db.printAllMaterials();
292 "Test - list of all the GeoElement nodes in the persistified "
293 "geometry:");
294 db.printAllElements();
295 }
296
297 ATH_MSG_DEBUG("End of DumpGeo::init().");
298 return StatusCode::SUCCESS;
299}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_ALWAYS(x)
#define ATH_MSG_DEBUG(x)
GeoPhysVol * createTheWorld()
Definition DumpGeo.cxx:45
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
Gaudi::Property< bool > m_showTreetopContent
Definition DumpGeo.h:51
Gaudi::Property< std::vector< std::string > > m_user_filterDetManagersList
Definition DumpGeo.h:50
Gaudi::Property< std::string > m_outFileName
Definition DumpGeo.h:48
const GeoVDetectorManager * getManager(const std::string &name) const
GeoPhysVol * getPhysVol()
Destructor.
std::vector< std::string > getListOfManagers() const
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
#define ATH_MSG_WARNING(x)
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_atlasRelease

Gaudi::Property<std::string> DumpGeo::m_atlasRelease {this, "AtlasRelease", "", "The current, in use Atlas release"}
private

Definition at line 46 of file DumpGeo.h.

46{this, "AtlasRelease", "", "The current, in use Atlas release"};

◆ m_detDescrTag

Gaudi::Property<std::string> DumpGeo::m_detDescrTag {this, "AtlasVersion", "", "The current, in use Atlas Detector Description Geometry TAG"}
private

Definition at line 47 of file DumpGeo.h.

47{this, "AtlasVersion", "", "The current, in use Atlas Detector Description Geometry TAG"};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_outFileName

Gaudi::Property<std::string> DumpGeo::m_outFileName {this, "OutSQLiteFileName", "", "The name of the output SQLite file"}
private

Definition at line 48 of file DumpGeo.h.

48{this, "OutSQLiteFileName", "", "The name of the output SQLite file"};

◆ m_showTreetopContent

Gaudi::Property<bool> DumpGeo::m_showTreetopContent {this, "ShowTreetopContent", false, "Show the content of the Treetops; by default, only the list of Treetops is shown."}
private

Definition at line 51 of file DumpGeo.h.

51{this, "ShowTreetopContent", false, "Show the content of the Treetops; by default, only the list of Treetops is shown."};

◆ m_user_filterDetManagersList

Gaudi::Property<std::vector<std::string> > DumpGeo::m_user_filterDetManagersList { this, "UserFilterDetManager", {}, "Doc", "OrderedSet<T>"}
private

Definition at line 49 of file DumpGeo.h.

50{ this, "UserFilterDetManager", {}, "Doc", "OrderedSet<T>"};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


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