ATLAS Offline Software
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
InDetDD::VolumeBuilder Class Reference

#include <VolumeBuilder.h>

Inheritance diagram for InDetDD::VolumeBuilder:
Collaboration diagram for InDetDD::VolumeBuilder:

Public Types

using PhysVolPtr = GeoIntrusivePtr< GeoPhysVol >
 

Public Member Functions

 VolumeBuilder (const Zone &zone, const std::vector< const ServiceVolume * > &services)
 
 VolumeBuilder (const std::vector< const ServiceVolume * > &services)
 
 VolumeBuilder (const Zone &zone, const std::vector< const ServiceVolume * > &services, const std::vector< const ServiceVolume * > &servEnv, const std::vector< const ServiceVolume * > &servChild)
 
void setRegion (const std::string &region, double zcenter)
 
void setMaterialManager (InDetMaterialManager *matManager)
 
const std::vector< const ServiceVolume * > & services ()
 
const std::vector< const ServiceVolume * > & servicesEnv ()
 
const std::vector< const ServiceVolume * > & servicesChild ()
 
void buildAndPlace (const std::string &region, GeoPhysVol *parent, double zcenter=0)
 
void buildAndPlace (const std::string &region, GeoFullPhysVol *parent, double zcenter=0)
 
void buildAndPlaceEnvelope (const std::string &region, GeoFullPhysVol *parent, int iParent, int iElement, double zcenter=0)
 
void buildAndPlaceEnvelope (const std::string &region, GeoPhysVol *parent, int iParent, int iElement, double zcenter=0)
 
void addServices (const Zone &zone, const std::vector< const ServiceVolume * > &services)
 
PhysVolPtr build (int iElement)
 
int numCopies (int iElement)
 
GeoTransform * getPlacement (int iElement, int iCopy)
 
GeoTransform * getPlacementEnvelope (int iElement, int iCopy, int iMothElement)
 
bool isEnvelopeOrChild (int iElement)
 
int getEnvelopeNum (int iElement)
 
int getParentNum (int iElement)
 
bool isChildService (int iElt, int iChld)
 
double getZcenter (int iElt)
 
bool msgLvl (const MSG::Level lvl) const
 Test the output level. More...
 
MsgStream & msg () const
 The standard message stream. More...
 
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream. More...
 
void setLevel (MSG::Level lvl)
 Change the current logging level. More...
 

Private Member Functions

void initMessaging () const
 Initialize our message level and MessageSvc. More...
 

Private Attributes

std::string m_region
 
double m_zcenter
 
const std::vector< const ServiceVolume * > * m_services
 
const std::vector< const ServiceVolume * > * m_servEnvelope
 
const std::vector< const ServiceVolume * > * m_servChild
 
VolumeSplitter m_splitter
 
InDetMaterialManagerm_matManager
 
std::string m_nm
 Message source name. More...
 
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels) More...
 
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer. More...
 
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level. More...
 
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging) More...
 

Detailed Description

Definition at line 25 of file InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h.

Member Typedef Documentation

◆ PhysVolPtr

using InDetDD::VolumeBuilder::PhysVolPtr = GeoIntrusivePtr<GeoPhysVol>

Constructor & Destructor Documentation

◆ VolumeBuilder() [1/3]

VolumeBuilder::VolumeBuilder ( const Zone zone,
const std::vector< const ServiceVolume * > &  services 
)

Definition at line 20 of file VolumeBuilder.cxx.

21  : AthMessaging("InDetDDVolumeBuilder"),
22  m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
23  m_zcenter(0),
24  m_services(nullptr),
25  m_servEnvelope(nullptr),
26  m_servChild(nullptr),
27  m_matManager(nullptr) {
29  }

◆ VolumeBuilder() [2/3]

VolumeBuilder::VolumeBuilder ( const std::vector< const ServiceVolume * > &  services)

Definition at line 31 of file VolumeBuilder.cxx.

32  : AthMessaging("InDetDDVolumeBuilder"),
33  m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
34  m_zcenter(0),
36  m_servEnvelope(nullptr),
37  m_servChild(nullptr),
38  m_matManager(nullptr)
39  {}

◆ VolumeBuilder() [3/3]

VolumeBuilder::VolumeBuilder ( const Zone zone,
const std::vector< const ServiceVolume * > &  services,
const std::vector< const ServiceVolume * > &  servEnv,
const std::vector< const ServiceVolume * > &  servChild 
)

Definition at line 41 of file VolumeBuilder.cxx.

44  : AthMessaging("InDetDDVolumeBuilder"),
45  m_region("None"), // Empty refers to a valid region. Set some default so we can check it is actually set.
46  m_zcenter(0),
47  m_services(nullptr),
48  m_servEnvelope(&servEnvelope),
49  m_servChild(&servChild),
50  m_matManager(nullptr) {
52  }

Member Function Documentation

◆ addServices()

void VolumeBuilder::addServices ( const Zone zone,
const std::vector< const ServiceVolume * > &  services 
)

Definition at line 55 of file VolumeBuilder.cxx.

55  {
57  }

◆ build()

PhysVolPtr VolumeBuilder::build ( int  iElement)

Definition at line 187 of file VolumeBuilder.cxx.

187  {
188  if (m_region == "None") {
189  ATH_MSG_ERROR("No region set. Cannot build services");
190  return nullptr;
191  }
192  const ServiceVolume& param = *(services()[iElement]);
193  // If the subelement does not belong to the current region return 0.
194  if (param.region() != m_region) return nullptr;
195 
196  const GeoShape* serviceShape = param.getShape();
197  double volume = param.origVolume();
198  std::string logName = param.fullLabel();
199  const GeoMaterial* serviceMat = param.material();
200  std::string materialName;
201  if (!serviceMat) {
202  materialName = param.materialName();
203  if (m_matManager) {
204  //serviceMat = m_matManager->getMaterialForVolume(materialName,volume/param.fractionInRegion());
205  // FIXME
206  serviceMat = m_matManager->getMaterialForVolume(materialName, volume);
207  } else {
208  ATH_MSG_ERROR("Material manager not available. Cannot build material.");
209  return nullptr;
210  }
211  } else {
212  materialName = serviceMat->getName();
213  }
214  if (msgLvl(MSG::DEBUG)) {
215  msg(MSG::DEBUG) << "Volume/material: " << logName << "/" << materialName << endmsg;
216  if (!param.shapeType().empty()) msg(MSG::DEBUG) << " shape: " << param.shapeType() << endmsg;
217  msg(MSG::DEBUG) << " volume (cm3): " << volume / Gaudi::Units::cm3 << endmsg;
218  msg(MSG::DEBUG) << " rmin,rmax,zmin,zmax: "
219  << param.rmin() << ", "
220  << param.rmax() << ", "
221  << param.zmin() << ", "
222  << param.zmax() << endmsg;
223  }
224  // Or use volume of original volume in param.
225  //const GeoMaterial* serviceMat = mat_mgr->getMaterialForVolume(param.material(),param.origVolume());
226  GeoLogVol* serviceLog = new GeoLogVol(logName, serviceShape, serviceMat);
227  PhysVolPtr servicePhys{new GeoPhysVol(serviceLog)};
228  return servicePhys;
229  }

◆ buildAndPlace() [1/2]

void VolumeBuilder::buildAndPlace ( const std::string &  region,
GeoFullPhysVol *  parent,
double  zcenter = 0 
)

Definition at line 99 of file VolumeBuilder.cxx.

99  {
100  // Get volumes defined by Volume splitter and add them on top GeoPhysVol
101  setRegion(region, zcenter);
102  for (unsigned int iElement = 0; iElement < services().size(); ++iElement) {
103  if (!isEnvelopeOrChild(iElement)) {
104  PhysVolPtr physVol{build(iElement)};
105  if (physVol) {
106  for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
107  parent->add(getPlacement(iElement, iCopy));
108  parent->add(physVol);
109  }
110  }
111  }
112  }
113  // if region is not Pixel -> stop here
114  if (region.compare("Pixel") != 0) return;
115 
116  for (unsigned int iElement = 0; iElement < services().size(); ++iElement) {
117  if (getEnvelopeNum(iElement) > 0 && services()[iElement]->envelopeParent() == 0) {
118  buildAndPlaceEnvelope(region, parent, -1, iElement, zcenter);
119  }
120  }
121  }

◆ buildAndPlace() [2/2]

void VolumeBuilder::buildAndPlace ( const std::string &  region,
GeoPhysVol *  parent,
double  zcenter = 0 
)

Definition at line 83 of file VolumeBuilder.cxx.

83  {
84  // Get volumes defined by Volume splitter and add them on top GeoPhysVol
85  setRegion(region, zcenter);
86  for (unsigned int iElement = 0; iElement < services().size(); ++iElement)
87  if (!isEnvelopeOrChild(iElement)) {
88  PhysVolPtr physVol{build(iElement)};
89  if (physVol) {
90  for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
91  parent->add(getPlacement(iElement, iCopy));
92  parent->add(physVol);
93  }
94  }
95  }
96  }

◆ buildAndPlaceEnvelope() [1/2]

void VolumeBuilder::buildAndPlaceEnvelope ( const std::string &  region,
GeoFullPhysVol *  parent,
int  iParent,
int  iElement,
double  zcenter = 0 
)

Definition at line 124 of file VolumeBuilder.cxx.

125  {
126  PhysVolPtr physVol{build(iElement)};
127  if (physVol) {
128  for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
129  if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() > 0) {
130  // if volume is a child volume : build and place it
131  buildAndPlaceEnvelope(region, physVol, iElement, iChild, zcenter);
132  }
133  }
134  for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
135  if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() == 0) {
136  // if volume is not a child volume
137  PhysVolPtr physVol_child{build(iChild)};
138  if (physVol_child) {
139  for (int iCopy2 = 0; iCopy2 < numCopies(iChild); ++iCopy2) {
140  physVol->add(getPlacementEnvelope(iChild, iCopy2, iElement));
141  physVol->add(physVol_child);
142  }
143  }
144  }
145  }
146  for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
147  // add all the copies
148  if (iParent < 0) parent->add(getPlacement(iElement, iCopy));
149  else parent->add(getPlacementEnvelope(iElement, iCopy, iParent));
150  parent->add(physVol);
151  }
152  }
153  }

◆ buildAndPlaceEnvelope() [2/2]

void VolumeBuilder::buildAndPlaceEnvelope ( const std::string &  region,
GeoPhysVol *  parent,
int  iParent,
int  iElement,
double  zcenter = 0 
)

Definition at line 156 of file VolumeBuilder.cxx.

157  {
158  PhysVolPtr physVol{build(iElement)};
159  if (physVol) {
160  for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
161  if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() > 0) {
162  // if volume is a child volume : build and place it
163  buildAndPlaceEnvelope(region, physVol, iElement, iChild, zcenter);
164  }
165  }
166  for (unsigned int iChild = 0; iChild < services().size(); ++iChild) {
167  if (isChildService(iElement, iChild) && services()[iChild]->envelopeNum() == 0) {
168  // if volume is not a child volume
169  PhysVolPtr physVol_child{build(iChild)};
170  if (physVol_child) {
171  for (int iCopy2 = 0; iCopy2 < numCopies(iChild); ++iCopy2) {
172  physVol->add(getPlacementEnvelope(iChild, iCopy2, iElement));
173  physVol->add(physVol_child);
174  }
175  }
176  }
177  }
178  for (int iCopy = 0; iCopy < numCopies(iElement); ++iCopy) {
179  // add all the copies
180  if (iParent < 0) parent->add(getPlacement(iElement, iCopy));
181  else parent->add(getPlacementEnvelope(iElement, iCopy, iParent));
182  parent->add(physVol);
183  }
184  }
185  }

◆ getEnvelopeNum()

int VolumeBuilder::getEnvelopeNum ( int  iElement)

Definition at line 238 of file VolumeBuilder.cxx.

238  {
239  const ServiceVolume& param = *(services()[iElement]);
240  return param.envelopeNum();
241  }

◆ getParentNum()

int VolumeBuilder::getParentNum ( int  iElement)

Definition at line 244 of file VolumeBuilder.cxx.

244  {
245  const ServiceVolume& param = *(services()[iElement]);
246  return param.envelopeParent();
247  }

◆ getPlacement()

GeoTransform * VolumeBuilder::getPlacement ( int  iElement,
int  iCopy 
)

Definition at line 274 of file VolumeBuilder.cxx.

274  {
275  const ServiceVolume& param = *(services()[iElement]);
276  // NB. Corrected for placement in endcaps
277  double zpos = param.zposition() - m_zcenter;
278  // Shift along Z axis ( IBL shift )
279  double zshift = param.zShift();
280  zpos += zshift;
281  // Check if we need to rotate around Y axis.
282  bool rotateAroundY = false;
283  if (param.needsRotation()) { // zpos will always be negative in this case
284  zpos = -zpos;
285  rotateAroundY = true;
286  }
287  // Most are just translated in z
288  GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
289  double phiStart = 0;
290  // BOX, ROD and TRAP need special treatment.
291  const std::string& shapeType = param.shapeType();
292  if (shapeType == "TRAP" || shapeType == "TRAP2") {
293  // Need to rotate by -90 deg.
294  xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform;
295  }
296  if (shapeType == "TRAP2") {
297  xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform; // * GeoTrf::RotateX3D(-90.*Gaudi::Units::deg);
298  }
299  if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
300  double radius = 0.5 * (param.rmin() + param.rmax());
301  xform = GeoTrf::TranslateX3D(radius) * xform;
302  phiStart = param.phiLoc();
303  } else if (shapeType == "ROD" || shapeType == "ROD2") {
304  double radius = param.rmin();
305  xform = GeoTrf::TranslateX3D(radius) * xform;
306  phiStart = param.phiLoc();
307  }
308  // For volumes that are placed more than once.
309  double deltaPhi = 0;
310  if (iCopy > 0) {
311  deltaPhi = 2. * M_PI / param.nCopies();
312  }
313  double phi = phiStart + deltaPhi * iCopy;
314  if (phi) {
315  xform = GeoTrf::RotateZ3D(phi) * xform;
316  }
317  // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
318  if (rotateAroundY) {
319  xform = GeoTrf::RotateY3D(180. * Gaudi::Units::degree) * xform;
320  }
321  return new GeoTransform(xform);
322  }

◆ getPlacementEnvelope()

GeoTransform * VolumeBuilder::getPlacementEnvelope ( int  iElement,
int  iCopy,
int  iMothElement 
)

Definition at line 325 of file VolumeBuilder.cxx.

325  {
326  const ServiceVolume& param = *(services()[iElement]);
327  const ServiceVolume& paramEnv = *(services()[iEnvElement]);
328  double zCenter = (paramEnv.zmin() + paramEnv.zmax()) * 0.5;
329  double rCenter = 0.;
330  bool bMoveToCenter = false;
331  if (paramEnv.shapeType() == "BOX") bMoveToCenter = true;
332  if (paramEnv.shapeType() == "TUBE" && paramEnv.zsymm() == 1 && fabs(paramEnv.zmin()) > 0.01) bMoveToCenter = true;
333  if (bMoveToCenter) rCenter = (paramEnv.rmin() + paramEnv.rmax()) * 0.5;
334  // NB. Corrected for placement in endcaps
335  double zpos = param.zposition() - zCenter;
336  // Check if we need to rotate around Y axis.
337  bool rotateAroundY = false;
338  if (param.needsRotation()) { // zpos will always be negative in this case
339  zpos = -zpos;
340  rotateAroundY = true;
341  }
342  // Most are just translated in z
343  GeoTrf::Transform3D xform = GeoTrf::TranslateZ3D(zpos);
344  const std::string& shapeType = param.shapeType();
345  double phiStart = 0;
346  // BOX, ROD and TRAP need special treatment.
347  if (shapeType == "TRAP") {
348  // Need to rotate by -90 deg.
349  xform = GeoTrf::RotateZ3D(-90. * Gaudi::Units::deg) * xform;
350  }
351  if (shapeType == "TRAP2") {
352  // Need to rotate by -90 deg.
353  xform = GeoTrf::RotateX3D(-90. * Gaudi::Units::deg) * xform;
354  }
355  if (shapeType == "BOX" || shapeType == "TRAP" || shapeType == "TRAP2") {
356  double radius = 0.5 * (param.rmin() + param.rmax()) - rCenter;
357  xform = GeoTrf::TranslateX3D(radius) * xform;
358  phiStart = param.phiLoc();
359  } else if (shapeType == "ROD" || shapeType == "ROD2") {
360  double radius = param.rmin();
361  xform = GeoTrf::TranslateX3D(radius) * xform;
362  phiStart = param.phiLoc();
363  }
364  // For volumes that are placed more than once.
365  double deltaPhi = 0;
366  if (iCopy > 0) {
367  deltaPhi = 2. * M_PI / param.nCopies();
368  }
369  double phi = phiStart + deltaPhi * iCopy;
370  if (phi) {
371  xform = GeoTrf::RotateZ3D(phi) * xform;
372  }
373  // For shapes that are not symmetric about a rotation around Y axis. We need to rotate.
374  if (rotateAroundY) {
375  xform = GeoTrf::RotateY3D(180. * Gaudi::Units::degree) * xform;
376  }
377  return new GeoTransform(xform);
378  }

◆ getZcenter()

double VolumeBuilder::getZcenter ( int  iElt)

Definition at line 250 of file VolumeBuilder.cxx.

250  {
251  const ServiceVolume& param = *(services()[iElement]);
252  return (param.zmin() + param.zmax()) * 0.5;
253  }

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40 {
42  m_lvl = m_imsg ?
43  static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
44  MSG::INFO;
45 }

◆ isChildService()

bool VolumeBuilder::isChildService ( int  iElt,
int  iChld 
)

Definition at line 256 of file VolumeBuilder.cxx.

256  {
257  const ServiceVolume& param1 = *(services()[iElt]);
258  const ServiceVolume& param2 = *(services()[iChld]);
259  if (iElt == iChld || param1.envelopeNum() != param2.envelopeParent()) return false;
260  if (param1.zsymm() == 1) {
261  double zmin = (param1.zmin() * param2.zmin());
262  double zmax = (param1.zmax() * param2.zmax());
263  return zmin > 0 && zmax > 0;
264  }
265  return true;
266  }

◆ isEnvelopeOrChild()

bool VolumeBuilder::isEnvelopeOrChild ( int  iElement)

Definition at line 232 of file VolumeBuilder.cxx.

232  {
233  const ServiceVolume& param = *(services()[iElement]);
234  return !(param.envelopeNum() == 0 && param.envelopeParent() == 0);
235  }

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 164 of file AthMessaging.h.

165 {
166  MsgStream* ms = m_msg_tls.get();
167  if (!ms) {
168  if (!m_initialized.test_and_set()) initMessaging();
169  ms = new MsgStream(m_imsg,m_nm);
170  m_msg_tls.reset( ms );
171  }
172 
173  ms->setLevel (m_lvl);
174  return *ms;
175 }

◆ msg() [2/2]

MsgStream & AthMessaging::msg ( const MSG::Level  lvl) const
inlineinherited

The standard message stream.

Returns a reference to the default message stream May not be invoked before sysInitialize() has been invoked.

Definition at line 179 of file AthMessaging.h.

180 { return msg() << lvl; }

◆ msgLvl()

bool AthMessaging::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Test the output level.

Parameters
lvlThe message level to test against
Returns
boolean Indicating if messages at given level will be printed
Return values
trueMessages at level "lvl" will be printed

Definition at line 151 of file AthMessaging.h.

152 {
153  if (!m_initialized.test_and_set()) initMessaging();
154  if (m_lvl <= lvl) {
155  msg() << lvl;
156  return true;
157  } else {
158  return false;
159  }
160 }

◆ numCopies()

int VolumeBuilder::numCopies ( int  iElement)

Definition at line 269 of file VolumeBuilder.cxx.

269  {
270  return services()[iElement]->nCopies();
271  }

◆ services()

const std::vector< const ServiceVolume * > & VolumeBuilder::services ( )

Definition at line 66 of file VolumeBuilder.cxx.

66  {
67  // Return volumes defined in VolumeSplitter
68  if (m_services) return *m_services;
69  return m_splitter.getVolumes();
70  }

◆ servicesChild()

const std::vector< const ServiceVolume * > & VolumeBuilder::servicesChild ( )

Definition at line 78 of file VolumeBuilder.cxx.

78  {
79  return *m_servChild;
80  }

◆ servicesEnv()

const std::vector< const ServiceVolume * > & VolumeBuilder::servicesEnv ( )

Definition at line 73 of file VolumeBuilder.cxx.

73  {
74  return *m_servEnvelope;
75  }

◆ setLevel()

void AthMessaging::setLevel ( MSG::Level  lvl)
inherited

Change the current logging level.

Use this rather than msg().setLevel() for proper operation with MT.

Definition at line 28 of file AthMessaging.cxx.

29 {
30  m_lvl = lvl;
31 }

◆ setMaterialManager()

void InDetDD::VolumeBuilder::setMaterialManager ( InDetMaterialManager matManager)
inline

◆ setRegion()

void VolumeBuilder::setRegion ( const std::string &  region,
double  zcenter 
)

Definition at line 60 of file VolumeBuilder.cxx.

60  {
61  m_region = region;
62  m_zcenter = zcenter;
63  }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

std::atomic_flag m_initialized AthMessaging::ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
mutableprivateinherited

Messaging initialized (initMessaging)

Definition at line 141 of file AthMessaging.h.

◆ m_imsg

std::atomic<IMessageSvc*> AthMessaging::m_imsg { nullptr }
mutableprivateinherited

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

◆ m_lvl

std::atomic<MSG::Level> AthMessaging::m_lvl { MSG::NIL }
mutableprivateinherited

Current logging level.

Definition at line 138 of file AthMessaging.h.

◆ m_matManager

InDetMaterialManager* InDetDD::VolumeBuilder::m_matManager
private

◆ m_msg_tls

boost::thread_specific_ptr<MsgStream> AthMessaging::m_msg_tls
mutableprivateinherited

MsgStream instance (a std::cout like with print-out levels)

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_region

std::string InDetDD::VolumeBuilder::m_region
private

◆ m_servChild

const std::vector<const ServiceVolume *>* InDetDD::VolumeBuilder::m_servChild
private

◆ m_servEnvelope

const std::vector<const ServiceVolume *>* InDetDD::VolumeBuilder::m_servEnvelope
private

◆ m_services

const std::vector<const ServiceVolume *>* InDetDD::VolumeBuilder::m_services
private

◆ m_splitter

VolumeSplitter InDetDD::VolumeBuilder::m_splitter
private

◆ m_zcenter

double InDetDD::VolumeBuilder::m_zcenter
private

The documentation for this class was generated from the following files:
AthMessaging::m_lvl
std::atomic< MSG::Level > m_lvl
Current logging level.
Definition: AthMessaging.h:138
ServiceVolume
Definition: InDetServMatGeoModel/src/ServiceVolume.h:14
InDetDD::VolumeSplitter::splitAll
const std::vector< const ServiceVolume * > & splitAll(const Zone &zone, const std::vector< const ServiceVolume * > &)
Definition: VolumeSplitter.cxx:28
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
InDetDD::VolumeBuilder::m_splitter
VolumeSplitter m_splitter
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:62
InDetDD::VolumeBuilder::isEnvelopeOrChild
bool isEnvelopeOrChild(int iElement)
Definition: VolumeBuilder.cxx:232
PixelAthClusterMonAlgCfg.zmin
zmin
Definition: PixelAthClusterMonAlgCfg.py:176
InDetDD::VolumeBuilder::PhysVolPtr
GeoIntrusivePtr< GeoPhysVol > PhysVolPtr
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:44
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
cm3
#define cm3
M_PI
#define M_PI
Definition: ActiveFraction.h:11
deg
#define deg
Definition: SbPolyhedron.cxx:17
InDetDD::VolumeBuilder::m_matManager
InDetMaterialManager * m_matManager
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:63
AthMessaging::m_imsg
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
Definition: AthMessaging.h:135
python.SystemOfUnits.ms
int ms
Definition: SystemOfUnits.py:132
InDetDD::VolumeBuilder::m_servChild
const std::vector< const ServiceVolume * > * m_servChild
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:61
InDetDD::VolumeBuilder::getPlacementEnvelope
GeoTransform * getPlacementEnvelope(int iElement, int iCopy, int iMothElement)
Definition: VolumeBuilder.cxx:325
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
InDetDD::VolumeBuilder::build
PhysVolPtr build(int iElement)
Definition: VolumeBuilder.cxx:187
InDetDD::VolumeBuilder::services
const std::vector< const ServiceVolume * > & services()
Definition: VolumeBuilder.cxx:66
AthMessaging::AthMessaging
AthMessaging()
Default constructor:
TrigConf::MSGTC::Level
Level
Definition: Trigger/TrigConfiguration/TrigConfBase/TrigConfBase/MsgStream.h:21
InDetDD::VolumeBuilder::buildAndPlaceEnvelope
void buildAndPlaceEnvelope(const std::string &region, GeoFullPhysVol *parent, int iParent, int iElement, double zcenter=0)
Definition: VolumeBuilder.cxx:124
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthMessaging::msgLvl
bool msgLvl(const MSG::Level lvl) const
Test the output level.
Definition: AthMessaging.h:151
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
InDetDD::VolumeBuilder::m_region
std::string m_region
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:57
InDetDD::VolumeSplitter::getVolumes
const std::vector< const ServiceVolume * > & getVolumes() const
Definition: VolumeSplitter.h:23
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
InDetMaterialManager::getMaterialForVolume
const GeoMaterial * getMaterialForVolume(const std::string &materialName, double volume, const std::string &newName="")
Create and get material with a density calculated to give weight in predefined weight table.
Definition: InDetMaterialManager.cxx:460
PixelAthClusterMonAlgCfg.zmax
zmax
Definition: PixelAthClusterMonAlgCfg.py:176
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDetDD::VolumeBuilder::numCopies
int numCopies(int iElement)
Definition: VolumeBuilder.cxx:269
InDetDD::VolumeBuilder::setRegion
void setRegion(const std::string &region, double zcenter)
Definition: VolumeBuilder.cxx:60
AthMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AthMessaging.h:164
InDetDD::VolumeBuilder::m_services
const std::vector< const ServiceVolume * > * m_services
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:59
InDetDD::VolumeBuilder::m_zcenter
double m_zcenter
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:58
InDetDD::VolumeBuilder::isChildService
bool isChildService(int iElt, int iChld)
Definition: VolumeBuilder.cxx:256
python.draw_obj.zone
def zone(nx, ny)
Definition: draw_obj.py:288
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
AthMessaging::m_nm
std::string m_nm
Message source name.
Definition: AthMessaging.h:129
DEBUG
#define DEBUG
Definition: page_access.h:11
AthMessaging::initMessaging
void initMessaging() const
Initialize our message level and MessageSvc.
Definition: AthMessaging.cxx:39
AthMessaging::m_msg_tls
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels)
Definition: AthMessaging.h:132
InDetDD::VolumeBuilder::getPlacement
GeoTransform * getPlacement(int iElement, int iCopy)
Definition: VolumeBuilder.cxx:274
InDetDD::VolumeBuilder::m_servEnvelope
const std::vector< const ServiceVolume * > * m_servEnvelope
Definition: InnerDetector/InDetDetDescr/InDetGeoModelUtils/InDetGeoModelUtils/VolumeBuilder.h:60
python.SystemOfUnits.degree
tuple degree
Definition: SystemOfUnits.py:106
InDetDD::VolumeBuilder::getEnvelopeNum
int getEnvelopeNum(int iElement)
Definition: VolumeBuilder.cxx:238