ATLAS Offline Software
Loading...
Searching...
No Matches
VP1JobConfigInfo.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5
7// //
8// Implementation of class VP1JobConfigInfo //
9// //
10// Author: Thomas H. Kittelmann (Thomas.Kittelmann@cern.ch) //
11// Initial version: March 2008 //
12// //
14
16#include "VP1Utils/VP1DetInfo.h"
19#include "VP1Base/IVP1System.h"
20#include "VP1Base/VP1Msg.h"
22
23#include "GeoModelKernel/GeoVolumeCursor.h"
26
27#include <QString>
28
29//____________________________________________________________________
31public:
32 static void ensureInit();
33 static bool actualInit(StoreGateSvc* detStore);
34 static bool initialised;
35
36 static GeoPVConstLink geoModelWorld;
38 static bool hasITkGeometry;
39 static bool hasPixelGeometry;
40 static bool hasSCTGeometry;
41 static bool hasTRTGeometry;
44 static bool hasLArGeometry;
45 static bool hasTileGeometry;
46 static bool hasMuonGeometry;
47 static bool hasMuonNSWGeometry;
48 static bool hasLUCIDGeometry;
49 static bool hasBCMGeometry;
51
52 static void turnOffAll();
53};
54
56// init default values
72
73//____________________________________________________________________
75{
77 hasITkGeometry = false;
78 hasPixelGeometry = false;
79 hasSCTGeometry = false;
80 hasTRTGeometry = false;
82 hasBeamPipeGeometry = false;
83 hasLArGeometry = false;
84 hasTileGeometry = false;
85 hasMuonGeometry = false;
86 hasLUCIDGeometry = false;
87 hasBCMGeometry = false;
89}
90
91//____________________________________________________________________
93{
94 if (initialised)
95 return;
96 if (VP1Msg::verbose())
97 VP1Msg::messageVerbose("VP1JobConfigInfo initialising");
98 initialised = true;
100 VP1Msg::message("VP1JobConfigInfo ERROR: Problems initialising. "
101 "Will assume all subsystems are off in this job!");
102 turnOffAll();
103 }
104 if (VP1Msg::verbose()) {
105 VP1Msg::messageVerbose("VP1JobConfigInfo => Found job configuration:");
106 VP1Msg::messageVerbose("VP1JobConfigInfo => hasGeoModelExperiment = "+QString(hasGeoModelExperiment?"On":"Off"));
107 VP1Msg::messageVerbose("VP1JobConfigInfo => hasITkGeometry = "+QString(hasITkGeometry?"On":"Off"));
108 VP1Msg::messageVerbose("VP1JobConfigInfo => hasPixelGeometry = "+QString(hasPixelGeometry?"On":"Off"));
109 VP1Msg::messageVerbose("VP1JobConfigInfo => hasSCTGeometry = "+QString(hasSCTGeometry?"On":"Off"));
110 VP1Msg::messageVerbose("VP1JobConfigInfo => hasTRTGeometry = "+QString(hasTRTGeometry?"On":"Off"));
111 VP1Msg::messageVerbose("VP1JobConfigInfo => hasInDetServiceMaterialGeometry = "+QString(hasInDetServiceMaterialGeometry?"On":"Off"));
112 VP1Msg::messageVerbose("VP1JobConfigInfo => hasBeamPipeGeometry = "+QString(hasBeamPipeGeometry?"On":"Off"));
113 VP1Msg::messageVerbose("VP1JobConfigInfo => hasLArGeometry = "+QString(hasLArGeometry?"On":"Off"));
114 VP1Msg::messageVerbose("VP1JobConfigInfo => hasTileGeometry = "+QString(hasTileGeometry?"On":"Off"));
115 VP1Msg::messageVerbose("VP1JobConfigInfo => hasMuonGeometry = "+QString(hasMuonGeometry?"On":"Off"));
116 VP1Msg::messageVerbose("VP1JobConfigInfo => hasMuonNSWGeometry = "+QString(hasMuonNSWGeometry?"On":"Off"));
117 VP1Msg::messageVerbose("VP1JobConfigInfo => hasLUCIDGeometry = "+QString(hasLUCIDGeometry?"On":"Off"));
118 VP1Msg::messageVerbose("VP1JobConfigInfo => hasBCMGeometry = "+QString(hasBCMGeometry?"On":"Off"));
119 VP1Msg::messageVerbose("VP1JobConfigInfo => hasCavernInfraGeometry = "+QString(hasCavernInfraGeometry?"On":"Off"));
120 }
121
122}
123
124//____________________________________________________________________
139
140//____________________________________________________________________
142{
143 if (!detStore)
144 return false;
145
146 VP1SGContentsHelper sg_contents(detStore);
147 const QString geomodelkey = "ATLAS";
148 if (!sg_contents.contains<GeoModelExperiment>(geomodelkey)) {
149 if (VP1Msg::verbose())
150 VP1Msg::messageVerbose("VP1JobConfigInfo: No GeoModelExperiment in detectorStore. Concluding all subsystems are off.");
151 turnOffAll();
152 return true;
153 }
154
155 VP1SGAccessHelper sg_access(detStore);
156
157 const GeoModelExperiment * theExpt;
158 if (!sg_access.retrieve(theExpt,geomodelkey)) {
159 if (VP1Msg::verbose())
160 VP1Msg::messageVerbose("VP1JobConfigInfo: No GeoModelExperiment in detectorStore. Concluding all subsystems are off.");
161 turnOffAll();
162 return true;
163 }
164 if (VP1Msg::verbose())
165 VP1Msg::messageVerbose("VP1JobConfigInfo: Retrieved GeoModelExperiment/"+geomodelkey);
166
167 const GeoPhysVol * worldPhysVol = theExpt->getPhysVol();
168 if (!worldPhysVol) {
169 VP1Msg::message("VP1JobConfigInfo: ERROR: GeoModelExperiment has null physical volume.");
170 turnOffAll();
171 return false;
172 }
173 if (VP1Msg::verbose())
174 VP1Msg::messageVerbose("VP1JobConfigInfo: Retrieved GeoModelExperiment physical volumes");
175
177 PVConstLink world(worldPhysVol);
178
179 GeoVolumeCursor av(world);
180
181
182 while (!av.atEnd()) {
183 std::string name = av.getName();
184 if ( !hasPixelGeometry && (name=="Pixel" or name=="ITkPixel")) {
185 hasPixelGeometry = true;
186 if (not hasITkGeometry and name == "ITkPixel")
187 hasITkGeometry = true;
188 if ( !hasBCMGeometry ) {
189 //Loop under the top Pixel volume to check if there are BCM volumes
190 //present in the current config:
191 GeoVolumeCursor pv(av.getVolume());
192 while (!pv.atEnd()) {
193 if (pv.getVolume()->getLogVol()->getName()=="bcmModLog") {
194 hasBCMGeometry = true;
195 break;
196 }
197 pv.next();
198 }
199 }
200 }
201 if ( !hasSCTGeometry && (name=="SCT" or name=="ITkStrip")) {
202 hasSCTGeometry = true;
203 if (not hasITkGeometry and name == "ITkStrip")
204 hasITkGeometry = true;
205 }
206 if ( !hasTRTGeometry && name=="TRT") hasTRTGeometry = true;
207 if ( !hasInDetServiceMaterialGeometry && name=="InDetServMat") hasInDetServiceMaterialGeometry = true;
208 if ( !hasBeamPipeGeometry && name=="BeamPipe") hasBeamPipeGeometry = true;
209 if ( !hasLArGeometry && name=="LArBarrel") hasLArGeometry = true;
210 if ( !hasLArGeometry && name=="LArEndcapPos") hasLArGeometry = true;
211 if ( !hasLArGeometry && name=="LArEndcapNeg") hasLArGeometry = true;
212 if ( !hasTileGeometry && name=="Tile") hasTileGeometry = true;
213 if ( !hasMuonGeometry && name=="Muon") {
214 hasMuonGeometry = true;
215 if ( !hasMuonNSWGeometry ) {
216 //Loop under the top Muon volume to check if there are NSW volumes
217 //present in the current config:
218 GeoVolumeCursor pv(av.getVolume());
219 while (!pv.atEnd()) {
220 if (pv.getVolume()->getLogVol()->getName()=="NewSmallWheel") {
221 hasMuonNSWGeometry = true;
222 break;
223 }
224 pv.next();
225 }
226 }
227 }
228 if ( !hasLUCIDGeometry && (name=="LucidSideA"||name=="LucidSideC")) hasLUCIDGeometry = true;
229 //FIXME: Look for CavernInfra as well!!!
230
231 av.next(); // increment volume cursor.
232 }
233
234 Imp::geoModelWorld = worldPhysVol;
235
236 return true;
237}
238
239//____________________________________________________________________
240const GeoPVConstLink * VP1JobConfigInfo::geoModelWorld()
241{
243 return Imp::geoModelWorld == GeoPVConstLink() ? 0 : &Imp::geoModelWorld;
244}
defines an "iterator" over instances of a given type in StoreGateSvc
GeoPhysVol * getPhysVol()
Destructor.
The Athena Transient Store API.
static StoreGateSvc * detectorStore()
static bool hasInDetServiceMaterialGeometry
static bool actualInit(StoreGateSvc *detStore)
static GeoPVConstLink geoModelWorld
static bool hasTileGeometry()
static bool hasTRTGeometry()
static bool hasInDetServiceMaterialGeometry()
static bool hasMuonNSWGeometry()
static bool hasLArGeometry()
static bool hasLUCIDGeometry()
static bool hasBCMGeometry()
static bool hasGeoModelExperiment()
static bool hasPixelGeometry()
static bool hasSCTGeometry()
static bool hasCavernInfraGeometry()
static bool hasITkGeometry()
static bool hasMuonGeometry()
static bool hasBeamPipeGeometry()
static const GeoPVConstLink * geoModelWorld()
static void messageVerbose(const QString &)
Definition VP1Msg.cxx:84
static bool verbose()
Definition VP1Msg.h:31
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30
bool retrieve(const T *&, const QString &key) const
bool contains(const QString &key) const