ATLAS Offline Software
TileVolumeBuilder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // TileVolumeBuilder.cxx, (c) ATLAS Detector software
8 
9 // Tile
11 // Tile
13 // Calo
17 #include "CaloDetDescr/CaloDetDescrElement.h"
18 // GeoModel
19 #include "GeoModelKernel/GeoFullPhysVol.h"
20 #include "GeoModelKernel/GeoLogVol.h"
21 #include "GeoModelKernel/GeoShape.h"
22 #include "GeoModelKernel/GeoTubs.h"
23 #include "GeoModelKernel/GeoTube.h"
24 #include "GeoModelKernel/GeoPcon.h"
25 #include "GeoModelKernel/GeoTrd.h"
26 #include "GeoModelKernel/GeoMaterial.h"
27 #include "GeoModelKernel/GeoVPhysVol.h"
28 #include "GeoModelKernel/GeoVolumeCursor.h"
29 #include "GeoModelKernel/Units.h"
30 // Trk
33 //#include "TrkDetDescrInterfaces/IMaterialEffectsOnTrackProvider.h"
39 #include "TrkGeometry/Material.h"
41 #include "TrkGeometry/DiscLayer.h"
49 #include "TrkSurfaces/DiscBounds.h"
50 // Gaudi
51 #include "GaudiKernel/MsgStream.h"
52 #include "GaudiKernel/SystemOfUnits.h"
53 // StoreGate
54 #include "StoreGate/StoreGateSvc.h"
55 
56 using Gaudi::Units::mm;
57 using std::make_unique;
58 
59 // constructor
60 Tile::TileVolumeBuilder::TileVolumeBuilder(const std::string& t, const std::string& n, const IInterface* p) :
61  AthAlgTool(t,n,p),
62  m_tileMgr(nullptr),
63  m_tileMgrLocation("Tile"),
64  m_trackingVolumeHelper("Trk::TrackingVolumeHelper/TrackingVolumeHelper"),
65  m_trackingVolumeCreator("Trk::CylinderVolumeCreator/TrackingVolumeCreator"),
66  m_tileBarrelEnvelope(25.*mm),
67  m_useCaloSurfBuilder(true),
68  m_tileBarrelLayersPerSampling(1),
69  m_surfBuilder("CaloSurfaceBuilder"),
70  m_forceSymmetry(true)
71 
72 {
73  declareInterface<Trk::ICaloTrackingVolumeBuilder>(this);
74  // declare the properties via Python
75  declareProperty("TileDetManagerLocation", m_tileMgrLocation);
76  // layers and general setup
77  declareProperty("BarrelEnvelopeCover", m_tileBarrelEnvelope);
78  declareProperty("ForceVolumeSymmetry", m_forceSymmetry);
79  // helper tools
80  declareProperty("TrackingVolumeHelper", m_trackingVolumeHelper);
81  declareProperty("TrackingVolumeCreator", m_trackingVolumeCreator);
82  declareProperty("UseCaloSurfBuilder", m_useCaloSurfBuilder);
83  declareProperty("BarrelLayersPerSampling", m_tileBarrelLayersPerSampling);
84  declareProperty("CaloSurfaceBuilder", m_surfBuilder);
85 }
86 
87 // destructor
88 Tile::TileVolumeBuilder::~ TileVolumeBuilder()
89 = default;
90 
91 
92 // Athena standard methods
93 // initialize
95 {
96  // get Tile Detector Description Manager
97  if (detStore()->retrieve(m_tileMgr, m_tileMgrLocation).isFailure()){
98  ATH_MSG_FATAL( "Could not get TileDetDescrManager! Tile TrackingVolumes will not be built" );
99  return StatusCode::FAILURE;
100  }
101 
102  // Retrieve the tracking volume helper -------------------------------------------------
103  if (m_trackingVolumeHelper.retrieve().isFailure())
104  {
105  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trackingVolumeHelper );
106  return StatusCode::FAILURE;
107  } else
108  ATH_MSG_INFO( "Retrieved tool " << m_trackingVolumeHelper );
109 
110  // Retrieve the second volume creator
111  if (m_trackingVolumeCreator.retrieve().isFailure()){
112  ATH_MSG_FATAL( "Failed to retrieve tool " << m_trackingVolumeCreator );
113  return StatusCode::FAILURE;
114  } else
115  ATH_MSG_INFO( "Retrieved tool " << m_trackingVolumeCreator );
116 
117  if(m_surfBuilder.retrieve().isFailure())
118  {
119  ATH_MSG_FATAL( "Failed to retrieve tool " << m_surfBuilder );
120  return StatusCode::FAILURE;
121  } else
122  ATH_MSG_INFO( "Retrieved tool " << m_surfBuilder );
123 
124  ATH_MSG_INFO( " initialize() successful" );
125  return StatusCode::SUCCESS;
126 }
127 
128 std::vector<Trk::TrackingVolume*>*
130 {
131  // the return vector
132  std::vector<Trk::TrackingVolume*>* tileTrackingVolumes = new std::vector<Trk::TrackingVolume*>;
133  // the converter helpers
134  //Trk::GeoShapeConverter geoShapeToVolumeBounds;
135  //Trk::GeoMaterialConverter geoMaterialToMaterialProperties;
136  // dummy material
137  Trk::Material tileMaterial;
138 
139  // dimensions
140  double tileZ = 0.;
141  double gapZ = 0.;
142  // ITC hardcoded : simple shortcut (needs resizing anyway )
143  double plug1Z = 3405.;
144  double plug2Z = 3512.075;
145  double plug1R = 3440.;
146  double plug2R = 2959.;
147  double plug1hZ = 154.5;
148  double plug2hZ = 47.425;
149 
150  // The Volumes To be Created ( by parsing geoModel ) ===========
151  Trk::TrackingVolume* tileBarrel = nullptr;
152  Trk::TrackingVolume* tileGirder = nullptr;
153 
154  Trk::TrackingVolume* tilePositiveExtendedBarrel = nullptr;
155  Trk::TrackingVolume* tileNegativeExtendedBarrel = nullptr;
156 
157  // The Volumes To be Created ( Gap Volumes ) ====================
158  Trk::TrackingVolume* tileBarrelPositiveFingerGap = nullptr;
159  Trk::TrackingVolume* tileBarrelNegativeFingerGap = nullptr;
160  Trk::TrackingVolume* tilePositiveFingerGap = nullptr;
161  Trk::TrackingVolume* tileNegativeFingerGap = nullptr;
162 
163  // The Bounds To be Assigned (for resizing) ====================
164  Trk::CylinderVolumeBounds* tileBarrelBounds = nullptr;
165  std::unique_ptr<Trk::CylinderVolumeBounds> tileBarrelGirderBounds;
166 
167  Trk::CylinderVolumeBounds tilePositiveExtendedBarrelBounds;
168  Trk::CylinderVolumeBounds* itcPlug1Bounds = nullptr;
169  Trk::CylinderVolumeBounds* itcPlug2Bounds = nullptr;
170  Trk::CylinderVolumeBounds* gapBounds = nullptr;
171 
172  // dummy objects
173  Trk::LayerArray* dummyLayers = nullptr;
174  Trk::TrackingVolumeArray* dummyVolumes = nullptr;
175 
176  std::vector<std::pair<const Trk::Surface*, const Trk::Surface*>> entrySurf =
177  m_surfBuilder->entrySurfaces(&caloDDM);
178  std::vector<std::pair<const Trk::Surface*, const Trk::Surface*>> exitSurf =
179  m_surfBuilder->exitSurfaces(&caloDDM);
180 
181  // averaged material properties
182  auto barrelProperties = std::make_unique<Trk::Material>(22.7, 212., 45.8, 21.4, 0.0062);
183  auto extendedBarrelProperties = std::make_unique<Trk::Material>(22.7, 210., 45.8, 21.4, 0.0062);
184  // material properties with layer encoding - to be defined later
185  const Trk::BinnedMaterial* barrelMaterialBinned = nullptr;
186  const Trk::BinnedMaterial* extendedMaterialBinned = nullptr;
187 
188  Trk::Material girderProperties = Trk::Material(28.6, 272.5, 40.4, 19., 0.0049);
189  Trk::Material extendedGirderProperties = Trk::Material(27.9, 266.4, 41., 19.2, 0.005);
190  Trk::Material fingerProperties = Trk::Material(46., 426.6, 34.2, 16.2, 0.0032);
191 
192  unsigned int numTreeTops = m_tileMgr->getNumTreeTops();
193  ATH_MSG_DEBUG( "Retrieved " << numTreeTops << " tree tops from the TileDetDescrManager. " );
194 
195  // layer material can be adjusted here
196  std::vector<Trk::IdentifiedMaterial> matTB;
197  int baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 12;
198  matTB.emplace_back(barrelProperties.get(),0);
199  matTB.emplace_back(barrelProperties.get(),baseID);
200  matTB.emplace_back(barrelProperties.get(),baseID+1);
201  matTB.emplace_back(barrelProperties.get(),baseID+2);
202 
203  // material index
204  std::vector<size_t> ltb{0,1,2,3};
205 
206  // layer material can be adjusted here
207  std::vector<Trk::IdentifiedMaterial> matETB;
208  baseID = Trk::GeometrySignature(Trk::Calo)*1000 + 18;
209  matETB.emplace_back(extendedBarrelProperties.get(),0);
210  matETB.emplace_back(extendedBarrelProperties.get(),baseID);
211  matETB.emplace_back(extendedBarrelProperties.get(),baseID+1);
212  matETB.emplace_back(extendedBarrelProperties.get(),baseID+2);
213 
214  // layer material can be adjusted here
215  //Trk::MaterialProperties barrelFingerGapProperties = Trk::MaterialProperties(1., 130./0.35, 0.003*pow(0.35,3),30.);
216  Trk::Material barrelFingerGapProperties(353., 2254., 20.7, 10., 0.00057);
217 
218  //Trk::MaterialProperties fingerGapProperties = Trk::MaterialProperties(1., 88./0.1, 0.003*pow(0.1,3),30.);
219  Trk::Material fingerGapProperties(552., 3925., 16.4, 8.1, 0.00034);
220 
221  for (unsigned int itreetop = 0; itreetop<numTreeTops; ++itreetop){
222  PVConstLink currentVPhysVolLink = m_tileMgr->getTreeTop(itreetop);
223 
224  // const GeoVPhysVol* top = &(*(m_tileMgr->getTreeTop(itreetop)));
225  //GeoVolumeCursor vol (top);
226  //while (!vol.atEnd()) {
227  // const GeoVPhysVol* cv = &(*(vol.getVolume()));
228  // printInfo(cv);
229  //}
230 
231  const GeoLogVol* currentLogVol = currentVPhysVolLink->getLogVol();
232 
233  unsigned int currentChilds = currentVPhysVolLink->getNChildVols();
234 
235  ATH_MSG_DEBUG( "Processing " << currentLogVol->getName() << "... has "
236  << currentChilds << " childs." );
237  const GeoShape* currentShape = currentLogVol->getShape();
238  ATH_MSG_VERBOSE( " -> the shape is " << currentShape->type() );
239  std::vector<double> zboundaries;
240 
241  ATH_MSG_DEBUG( "Start looping over childs. " );
242  // the loop over the childs
243  for (unsigned int ichild = 0; ichild < currentChilds; ++ichild){
244 
245  PVConstLink currentChildLink = currentVPhysVolLink->getChildVol(ichild);
246  //printInfo(currentChildLink);
247  const GeoLogVol* childLogVol = currentChildLink->getLogVol();
248  const GeoShape* childShape = childLogVol->getShape();
249  ATH_MSG_VERBOSE( " Child: " << childLogVol->getName() << " has shape " << childShape->type() );
250 
251  const GeoTubs* currentTubs = dynamic_cast<const GeoTubs*>(childShape);
252  Trk::CylinderVolumeBounds* childCylVolBounds = currentTubs ? Trk::GeoShapeConverter::convert(currentTubs).release() : nullptr;
253  // get the transform
254  GeoTrf::Transform3D childTransform = currentVPhysVolLink->getXToChildVol(ichild);
255  double childZposition = childTransform.translation().z();
256 
257  if (childCylVolBounds){
258  // screen output
259  ATH_MSG_VERBOSE( " ---> CylinderVolumeBounds created as: " );
260  ATH_MSG_VERBOSE( " ---> Position in z: " << childTransform.translation().z() );
261  ATH_MSG_VERBOSE( *childCylVolBounds );
262 
263  // retrieve split radius from the TileBar2 exit surface
264  double depth = exitSurf[CaloCell_ID::TileBar2].first->bounds().r();
265 
266  switch (itreetop){
267 
268  case 0 : { // Tile Barrel case ==================================================================
269 
270  // the centered one is the TileBarrel
271  if ( fabs(childZposition)< 100.*mm ){
272  //depth is where we split childCylVolBounds
273  tileBarrelBounds = new Trk::CylinderVolumeBounds(childCylVolBounds->innerRadius(),depth,childCylVolBounds->halflengthZ());
274 
275  // assign Bounds
276  tileBarrelGirderBounds = make_unique<Trk::CylinderVolumeBounds>(depth,childCylVolBounds->outerRadius(),childCylVolBounds->halflengthZ());
277 
278  Amg::Transform3D* align=nullptr; // no alignment given yet
279 
280  // construct bin utilities
281  std::vector<float> steps;
282  steps.push_back(childCylVolBounds->innerRadius());
283  steps.push_back(entrySurf[CaloCell_ID::TileBar0].first->bounds().r());
284  steps.push_back(entrySurf[CaloCell_ID::TileBar1].first->bounds().r());
285  steps.push_back(entrySurf[CaloCell_ID::TileBar2].first->bounds().r());
286  steps.push_back(depth);
288 
289  barrelMaterialBinned = new Trk::BinnedMaterial(barrelProperties.get(),rBU,ltb,matTB);
290 
291  tileBarrel = new Trk::AlignableTrackingVolume(nullptr,align,
292  tileBarrelBounds,
293  barrelMaterialBinned,
294  12,
295  "Calo::Detectors::Tile::Barrel");
296  }
297  } break;
298 
299  default : { // Tile Extended Barrel ==================================================================
300 
301  std::string volumeName;
302  std::string girderName;
303  std::vector<double> girderLayerRadius;
304  std::vector<double> layerRadius;
305  std::vector<double> layerEnvelope;
306  Trk::CylinderVolumeBounds* tileExtendedBounds = nullptr;
307  bool tileExtendedBoundsUsed = false;
308  std::unique_ptr<Trk::CylinderVolumeBounds> gapVolBounds;
309 
310  // prepare for the Extended Barrel
311  if (childCylVolBounds->halflengthZ() > 1000.){
312  volumeName = childZposition > 0. ?
313  "Calo::Detectors::Tile::PositiveExtendedBarrel" : "Calo::Detectors::Tile::NegativeExtendedBarrel";
314 
315  //depth is where we split childCylVolBounds
316  tileExtendedBounds = new Trk::CylinderVolumeBounds(childCylVolBounds->innerRadius(),depth,childCylVolBounds->halflengthZ());
317 
318  } else if (childCylVolBounds->halflengthZ() > 100.){
319  // prepare for the EBarrel Finger : (ST) : merge with combined girder
320  //tileFingerBounds = new Trk::CylinderVolumeBounds(depth,childCylVolBounds->outerRadius(),childCylVolBounds->halflengthZ());
321 
322  } else if ( childLogVol->getName()=="Gap" && !gapBounds ) {
323 
324  gapVolBounds = make_unique<Trk::CylinderVolumeBounds>(childCylVolBounds->innerRadius(),childCylVolBounds->outerRadius(),
325  childCylVolBounds->halflengthZ());
326 
327  gapZ = fabs(childZposition);
328 
329  } else {
330  ATH_MSG_VERBOSE( " ---> This Volume is not gonna built !" );
331  break;
332  }
333 
334  // only account for misalignment along z
335  Amg::Vector3D childPosition(0.,0.,childZposition);
336  Trk::TrackingVolume* tileExtendedTrackingVolume = nullptr;
337  Amg::Transform3D* align=nullptr; // no alignment given yet
338 
339  if(m_useCaloSurfBuilder && childCylVolBounds->halflengthZ() > 1000.){
340 
341  // get some output
342  ATH_MSG_VERBOSE ( "[C1] Creating TrackingVolume '" << volumeName );
343 
344  // construct bin utilities
345  std::vector<float> steps;
346  steps.push_back(tileExtendedBounds->innerRadius());
347  steps.push_back(entrySurf[CaloCell_ID::TileExt0].first->bounds().r());
348  steps.push_back(entrySurf[CaloCell_ID::TileExt1].first->bounds().r());
349  steps.push_back(entrySurf[CaloCell_ID::TileExt2].first->bounds().r());
350  steps.push_back(tileExtendedBounds->outerRadius());
352 
353  extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties.get(),eBU,ltb,matETB);
354 
355  tileExtendedTrackingVolume = new Trk::AlignableTrackingVolume(new Amg::Transform3D(Amg::Translation3D(childPosition)),
356  align,
357  tileExtendedBounds,
358  extendedMaterialBinned,
359  18,
360  volumeName);
361  tileExtendedBoundsUsed = true;
362 
363  } else {
364  if ( gapVolBounds ) {
365  gapBounds = gapVolBounds.release();
366 
367  } else if (tileExtendedBounds) {
368 
369  // construct bin utilities
370  std::vector<float> steps;
371  steps.push_back(tileExtendedBounds->innerRadius());
372  steps.push_back(entrySurf[CaloCell_ID::TileExt0].first->bounds().r());
373  steps.push_back(entrySurf[CaloCell_ID::TileExt1].first->bounds().r());
374  steps.push_back(entrySurf[CaloCell_ID::TileExt2].first->bounds().r());
375  steps.push_back(tileExtendedBounds->outerRadius());
377 
378  extendedMaterialBinned = new Trk::BinnedMaterial(extendedBarrelProperties.get(),eBU,ltb,matETB);
379 
380  tileExtendedTrackingVolume = new Trk::AlignableTrackingVolume(new Amg::Transform3D(Amg::Translation3D(childPosition)),
381  align,
382  tileExtendedBounds,
383  extendedMaterialBinned,
384  18,
385  volumeName);
386  tileExtendedBoundsUsed = true;
387  }
388  }
389  // and assign it to the right one
390  if (childCylVolBounds->halflengthZ() > 1000.){
391  if (childZposition > 0.) {
392  tilePositiveExtendedBarrel = tileExtendedTrackingVolume;
393  tilePositiveExtendedBarrelBounds = *tileExtendedBounds;
394  // tileExtendedBoundsUsed = true; - this line is not needed, we copy everything from *tileExtendedBounds to tilePositiveExtendedBarrelBounds
395  } else {
396  tileNegativeExtendedBarrel = tileExtendedTrackingVolume;
397  }
398  } else if (childCylVolBounds->halflengthZ() > 100.) {
399  tileZ = fabs(childZposition)+childCylVolBounds->halflengthZ();
400  }
401  if (!tileExtendedBoundsUsed)
402  delete tileExtendedBounds;
403  } break;
404  } // end of switch
405  } // end of ? cylVolBounds
406  delete childCylVolBounds;
407  } //end of ichild loop
408  } // end of treetop loop
409 
410  if (!gapBounds) std::abort();
411  if (!tileBarrelGirderBounds) std::abort();
412  if (!tilePositiveExtendedBarrel) std::abort();
413  if (!tileNegativeExtendedBarrel) std::abort();
414 
415  ATH_MSG_DEBUG( "TileDetDescrManager parsed successfully! " );
416 
417  // combined girder volume
418  {
419  auto tileGirderBounds = std::make_unique<Trk::CylinderVolumeBounds>
420  (tileBarrelGirderBounds->innerRadius(),
421  tileBarrelGirderBounds->outerRadius(),
422  tileZ);
423 
424  tileGirder =new Trk::TrackingVolume(nullptr,
425  tileGirderBounds.release(),
426  girderProperties,
427  dummyLayers, dummyVolumes,
428  "Calo::Girder::TileCombined");
429  }
430 
431  // build the gap volumes ( crack done by CaloTG )
432  double tileExtZ = tilePositiveExtendedBarrel->center().z()-tilePositiveExtendedBarrelBounds.halflengthZ();
433 
434  // binned material for ITC :
435  std::vector<Trk::IdentifiedMaterial> matITC;
436  // layer material can be adjusted here
437  baseID = Trk::GeometrySignature(Trk::Calo)*1000;
438  matITC.emplace_back(barrelProperties.get(),baseID+15);
439  matITC.emplace_back(barrelProperties.get(),baseID+16);
440  matITC.emplace_back(barrelProperties.get(),baseID+17);
441 
442  // ITCPlug1
443  double p1Z = 0.5*(plug1Z-plug1hZ+tileExtZ);
444  double hp1Z = 0.5*(tileExtZ-plug1Z+plug1hZ);
445  itcPlug1Bounds = new Trk::CylinderVolumeBounds(plug1R,
446  tileBarrelBounds->outerRadius(),
447  hp1Z);
448 
449  Amg::Vector3D itcP1Pos(0.,0.,p1Z);
450  Amg::Vector3D itcP1Neg(0.,0.,-p1Z);
451  Amg::Transform3D* itcP1PosTransform = new Amg::Transform3D(Amg::Translation3D(itcP1Pos));
452  Amg::Transform3D* itcP1NegTransform = new Amg::Transform3D(Amg::Translation3D(itcP1Neg));
453 
454 
455  std::vector<size_t> dummylay(1,1);
456  std::vector<float> bpsteps{float(plug1R), float(tileBarrelBounds->outerRadius())};
457  Trk::BinUtility* rBU = new Trk::BinUtility(bpsteps, Trk::open, Trk::binR);
458  Trk::BinUtility* rBUc = rBU->clone();
459  const Trk::BinnedMaterial* plug1MatPos = new Trk::BinnedMaterial(barrelProperties.get(),rBU,dummylay,matITC);
460  const Trk::BinnedMaterial* plug1MatNeg = new Trk::BinnedMaterial(barrelProperties.get(),rBUc,dummylay,matITC);
461 
462  Amg::Transform3D* align=nullptr;
463 
464  Trk::AlignableTrackingVolume* itcPlug1Pos = new Trk::AlignableTrackingVolume(itcP1PosTransform, align,
465  itcPlug1Bounds,
466  plug1MatPos,
467  16,
468  "Calo::Detectors::Tile::ITCPlug1Pos");
469 
470  Trk::AlignableTrackingVolume* itcPlug1Neg = new Trk::AlignableTrackingVolume(itcP1NegTransform, align,
471  itcPlug1Bounds->clone(),
472  plug1MatNeg,
473  16,
474  "Calo::Detectors::Tile::ITCPlug1Neg");
475 
476  //std::cout <<"ITC Plug1 ok:"<< std::endl;
477 
478  // ITCPlug2
479  double p2Z = 0.5*(plug2Z-plug2hZ+tileExtZ);
480  double hp2Z = 0.5*(tileExtZ-plug2Z+plug2hZ);
481  itcPlug2Bounds = new Trk::CylinderVolumeBounds(plug2R,
482  plug1R,
483  hp2Z);
484 
485  Amg::Vector3D itcP2Pos(0.,0.,p2Z);
486  Amg::Vector3D itcP2Neg(0.,0.,-p2Z);
487  Amg::Transform3D* itcP2PosTransform = new Amg::Transform3D(Amg::Translation3D(itcP2Pos));
488  Amg::Transform3D* itcP2NegTransform = new Amg::Transform3D(Amg::Translation3D(itcP2Neg));
489 
490  std::vector<size_t> p2lay(1,0);
491  std::vector<float> p2steps{float(plug2R), float(plug1R)};
492  Trk::BinUtility* p2BU = new Trk::BinUtility(p2steps, Trk::open, Trk::binR);
493  Trk::BinUtility* p2BUc = p2BU->clone();
494  const Trk::BinnedMaterial* plug2MatPos = new Trk::BinnedMaterial(barrelProperties.get(),p2BU,p2lay,matITC);
495  const Trk::BinnedMaterial* plug2MatNeg = new Trk::BinnedMaterial(barrelProperties.get(),p2BUc,p2lay,matITC);
496 
497  Trk::AlignableTrackingVolume* itcPlug2Pos = new Trk::AlignableTrackingVolume(itcP2PosTransform, align,
498  itcPlug2Bounds,
499  plug2MatPos,
500  15,
501  "Calo::Detectors::Tile::ITCPlug2Pos");
502 
503  Trk::AlignableTrackingVolume* itcPlug2Neg = new Trk::AlignableTrackingVolume(itcP2NegTransform, align,
504  itcPlug2Bounds->clone(),
505  plug2MatNeg,
506  15,
507  "Calo::Detectors::Tile::ITCPlug2Neg");
508 
509  //std::cout <<"ITC Plug2 ok:"<< std::endl;
510 
511  // Gap
512  float gapi = 0.5*(gapZ-gapBounds->halflengthZ()+tileExtZ);
513  double hgZ = 0.5*(tileExtZ-gapZ+gapBounds->halflengthZ());
514  delete gapBounds;
515  gapBounds = new Trk::CylinderVolumeBounds(tileBarrelBounds->innerRadius(),
516  plug2R,
517  hgZ);
518 
519  Amg::Vector3D gPos(0.,0.,gapi);
520  Amg::Vector3D gNeg(0.,0.,-gapi);
521  Amg::Transform3D* gapPosTransform = new Amg::Transform3D(Amg::Translation3D(gPos));
522  Amg::Transform3D* gapNegTransform = new Amg::Transform3D(Amg::Translation3D(gNeg));
523 
524  std::vector<size_t> glay(1,2);
525  std::vector<float> gsteps{float(gapi-gapBounds->halflengthZ()), float(gapi+gapBounds->halflengthZ())};
527  const Trk::BinnedMaterial* gpMat = new Trk::BinnedMaterial(barrelProperties.get(),gp,glay,matITC);
528 
529  Trk::AlignableTrackingVolume* gapPos = new Trk::AlignableTrackingVolume(gapPosTransform, align,
530  gapBounds,
531  gpMat,
532  17,
533  "Calo::Detectors::Tile::GapPos");
534 
535  std::vector<float> nsteps{float(-gapi-gapBounds->halflengthZ()), float(-gapi+gapBounds->halflengthZ())};
537  const Trk::BinnedMaterial* gnMat = new Trk::BinnedMaterial(barrelProperties.get(),gn,glay,matITC);
538 
539  Trk::AlignableTrackingVolume* gapNeg = new Trk::AlignableTrackingVolume(gapNegTransform, align,
540  gapBounds->clone(),
541  gnMat,
542  15,
543  "Calo::Detectors::Tile::GapNeg");
544 
545  // add buffer volumes and glue together gap sections
546  float p1i = itcPlug1Pos->center().z()-itcPlug1Bounds->halflengthZ();
547  float p2i = itcPlug2Pos->center().z()-itcPlug2Bounds->halflengthZ();
548  float gi = gapPos->center().z()-gapBounds->halflengthZ();
549  float zgBuff = 0.5*(p1i+gi);
550  float hgBuff = 0.5*(gi-p1i);
551  Amg::Vector3D gBuffPos(0.,0.,zgBuff);
552  Amg::Vector3D gBuffNeg(0.,0.,-zgBuff);
553  Amg::Transform3D* gBuffPosTransform = new Amg::Transform3D(Amg::Translation3D(gBuffPos));
554  Amg::Transform3D* gBuffNegTransform = new Amg::Transform3D(Amg::Translation3D(gBuffNeg));
555 
556  Trk::CylinderVolumeBounds* gapBuffBounds = new Trk::CylinderVolumeBounds(gapBounds->innerRadius(),
557  gapBounds->outerRadius(),
558  hgBuff);
559 
560 
561  Trk::TrackingVolume* gBufferPos = new Trk::TrackingVolume(gBuffPosTransform,
562  gapBuffBounds,
563  fingerProperties,
564  dummyLayers, dummyVolumes,
565  "Calo::GapVolumes::Tile::GapBufferPos");
566 
567 
568  Trk::TrackingVolume* gBufferNeg = new Trk::TrackingVolume(gBuffNegTransform,
569  gapBuffBounds->clone(),
570  fingerProperties,
571  dummyLayers, dummyVolumes,
572  "Calo::GapVolumes::Tile::GapBufferNeg");
573 
574  Trk::TrackingVolume* positiveGapSector = nullptr;
575  if (gBufferPos) {
576  std::vector<Trk::TrackingVolume*> volsPosGap;
577  volsPosGap.push_back(gBufferPos);
578  volsPosGap.push_back(gapPos);
579  positiveGapSector = m_trackingVolumeCreator->createContainerTrackingVolume
580  (volsPosGap,
581  tileMaterial,
582  "Calo::Container::PositiveGap");
583  }
584  Trk::TrackingVolume* negativeGapSector = nullptr;
585  if (gBufferNeg) {
586  std::vector<Trk::TrackingVolume*> volsNegGap;
587  volsNegGap.push_back(gapNeg);
588  volsNegGap.push_back(gBufferNeg);
589  negativeGapSector = m_trackingVolumeCreator->createContainerTrackingVolume
590  (volsNegGap,
591  tileMaterial,
592  "Calo::Container::NegativeGap");
593  }
594 
595  // plug2 sector
596  float z2Buff = 0.5*(p1i+p2i);
597  float h2Buff = 0.5*(p2i-p1i);
598  Amg::Vector3D p2BuffPos(0.,0.,z2Buff);
599  Amg::Vector3D p2BuffNeg(0.,0.,-z2Buff);
600  Amg::Transform3D* p2BuffPosTransform = new Amg::Transform3D(Amg::Translation3D(p2BuffPos));
601  Amg::Transform3D* p2BuffNegTransform = new Amg::Transform3D(Amg::Translation3D(p2BuffNeg));
602 
603  Trk::CylinderVolumeBounds* p2BuffBounds = new Trk::CylinderVolumeBounds(itcPlug2Bounds->innerRadius(),
604  itcPlug2Bounds->outerRadius(),
605  h2Buff);
606 
607 
608  Trk::TrackingVolume* p2BufferPos = new Trk::TrackingVolume(p2BuffPosTransform,
609  p2BuffBounds,
610  fingerProperties,
611  dummyLayers, dummyVolumes,
612  "Calo::GapVolumes::Tile::Plug2BufferPos");
613 
614 
615  Trk::TrackingVolume* p2BufferNeg = new Trk::TrackingVolume(p2BuffNegTransform,
616  p2BuffBounds->clone(),
617  fingerProperties,
618  dummyLayers, dummyVolumes,
619  "Calo::GapVolumes::Tile::Plug2BufferNeg");
620 
621  Trk::TrackingVolume* positiveP2Sector = nullptr;
622  if (p2BufferPos) {
623  std::vector<Trk::TrackingVolume*> volsPosP2;
624  volsPosP2.push_back(p2BufferPos);
625  volsPosP2.push_back(itcPlug2Pos);
626  positiveP2Sector = m_trackingVolumeCreator->createContainerTrackingVolume
627  (volsPosP2,
628  tileMaterial,
629  "Calo::Container::PositiveP2");
630  }
631  Trk::TrackingVolume* negativeP2Sector = nullptr;
632  if (itcPlug2Neg) {
633  std::vector<Trk::TrackingVolume*> volsNegP2;
634  volsNegP2.push_back(itcPlug2Neg);
635  volsNegP2.push_back(p2BufferNeg);
636  negativeP2Sector = m_trackingVolumeCreator->createContainerTrackingVolume
637  (volsNegP2,
638  tileMaterial,
639  "Calo::Container::NegativeP2");
640  }
641 
642  // glue ITC sector radially
643  Trk::TrackingVolume* positiveITCSector = nullptr;
644  if (positiveGapSector && positiveP2Sector) {
645  std::vector<Trk::TrackingVolume*> volsITCPos;
646  volsITCPos.push_back(positiveGapSector);
647  volsITCPos.push_back(positiveP2Sector);
648  volsITCPos.push_back(itcPlug1Pos);
649  positiveITCSector = m_trackingVolumeCreator->createContainerTrackingVolume
650  (volsITCPos,
651  tileMaterial,
652  "Calo::Container::ITCPos");
653  }
654  Trk::TrackingVolume* negativeITCSector = nullptr;
655  if (negativeGapSector && negativeP2Sector) {
656  std::vector<Trk::TrackingVolume*> volsITCNeg;
657  volsITCNeg.push_back(negativeGapSector);
658  volsITCNeg.push_back(negativeP2Sector);
659  volsITCNeg.push_back(itcPlug1Neg);
660  negativeITCSector = m_trackingVolumeCreator->createContainerTrackingVolume
661  (volsITCNeg,
662  tileMaterial,
663  "Calo::Container::ITCNeg");
664  }
665 
666  ATH_MSG_DEBUG( "Gap volumes (ITC sector) built " );
667 
668  // ------------------------------ BARREL SECTION COMPLETION --------------------------------------------------
669 
670  // the Finger Gap Volumes to be constructed
671  double rMin = tileBarrelBounds->innerRadius();
672  double rMax = tileBarrelBounds->outerRadius();
673 
674  double zFG = 0.5*(tileBarrelBounds->halflengthZ()+p1i);
675  double hZ = 0.5*(p1i-tileBarrelBounds->halflengthZ());
676  Trk::CylinderVolumeBounds* tileBarrelFingerGapBounds = new Trk::CylinderVolumeBounds(rMin,rMax,hZ);
677 
678  Amg::Vector3D pBFPos(0.,0.,zFG);
679  Amg::Vector3D pBFNeg(0.,0.,-zFG);
680  Amg::Transform3D* bfPosTransform = new Amg::Transform3D(Amg::Translation3D(pBFPos));
681  Amg::Transform3D* bfNegTransform = new Amg::Transform3D(Amg::Translation3D(pBFNeg));
682 
683  tileBarrelPositiveFingerGap = new Trk::TrackingVolume(bfPosTransform,
684  tileBarrelFingerGapBounds,
685  barrelFingerGapProperties,
686  dummyLayers, dummyVolumes,
687  "Calo::GapVolumes::Tile::BarrelPositiveFingerGap");
688 
689  tileBarrelNegativeFingerGap = new Trk::TrackingVolume(bfNegTransform,
690  tileBarrelFingerGapBounds->clone(),
691  barrelFingerGapProperties,
692  dummyLayers, dummyVolumes,
693  "Calo::GapVolumes::Tile::BarrelNegativeFingerGap");
694 
695 
696  // ------------------------------ ENDCAP SECTION COMPLETION --------------------------------------------------
697 
698  double zBE = tilePositiveExtendedBarrel->center().z()+tilePositiveExtendedBarrelBounds.halflengthZ();
699  zFG = 0.5*(tileZ + zBE);
700  hZ = 0.5*(tileZ - zBE);
701 
702  Trk::CylinderVolumeBounds* tilePositiveFingerGapBounds = new Trk::CylinderVolumeBounds(
703  tilePositiveExtendedBarrelBounds.innerRadius(),
704  tilePositiveExtendedBarrelBounds.outerRadius(),
705  hZ);
706 
707  Amg::Vector3D pEFPos(0.,0.,zFG);
708  Amg::Vector3D pEFNeg(0.,0.,-zFG);
709  Amg::Transform3D* efPosTransform = new Amg::Transform3D(Amg::Translation3D(pEFPos));
710  Amg::Transform3D* efNegTransform = new Amg::Transform3D(Amg::Translation3D(pEFNeg));
711 
712  tilePositiveFingerGap = new Trk::TrackingVolume(efPosTransform,
713  tilePositiveFingerGapBounds,
714  fingerGapProperties,
715  dummyLayers, dummyVolumes,
716  "Calo::GapVolumes::Tile::PositiveFingerGap");
717 
718  tileNegativeFingerGap = new Trk::TrackingVolume(efNegTransform,
719  tilePositiveFingerGapBounds->clone(),
720  fingerGapProperties,
721  dummyLayers, dummyVolumes,
722  "Calo::GapVolumes::Tile::NegativeFingerGap");
723 
724 
725  // set the color code for displaying
726  tileBarrel->registerColorCode( 4 );
727  tilePositiveExtendedBarrel->registerColorCode( 4 );
728  tileNegativeExtendedBarrel->registerColorCode( 4 );
729 
730  gapPos->registerColorCode( 4 );
731  gapNeg->registerColorCode( 4 );
732  itcPlug1Pos->registerColorCode( 4 );
733  itcPlug1Neg->registerColorCode( 4 );
734  itcPlug2Pos->registerColorCode( 4 );
735  itcPlug2Neg->registerColorCode( 4 );
736 
737  tileGirder->registerColorCode( 12 );
738 
739  // finalize Tile : glue locally and return 1 volume
740  ATH_MSG_DEBUG( "Gluing Tile volumes" );
741 
742  // glue tile volumes in z
743  std::vector<Trk::TrackingVolume*> tileVols;
744  tileVols.push_back(tileNegativeFingerGap);
745  tileVols.push_back(tileNegativeExtendedBarrel);
746  tileVols.push_back(negativeITCSector);
747  tileVols.push_back(tileBarrelNegativeFingerGap);
748  tileVols.push_back(tileBarrel);
749  tileVols.push_back(tileBarrelPositiveFingerGap);
750  tileVols.push_back(positiveITCSector);
751  tileVols.push_back(tilePositiveExtendedBarrel);
752  tileVols.push_back(tilePositiveFingerGap);
753  Trk::TrackingVolume* tileCombinedSector = m_trackingVolumeCreator->createContainerTrackingVolume
754  (tileVols,
755  tileMaterial,
756  "Calo::Container::Tile::InnerSector");
757 
758  // glue with combined girder
759  std::vector<Trk::TrackingVolume*> tileVolumes;
760  tileVolumes.push_back(tileCombinedSector);
761  tileVolumes.push_back(tileGirder);
762  Trk::TrackingVolume* tile = m_trackingVolumeCreator->createContainerTrackingVolume
763  (tileVolumes,
764  tileMaterial,
765  "Calo::Container::Tile::Combined");
766 
767  ATH_MSG_DEBUG( "Combined Tile built " );
768 
769  tileTrackingVolumes->push_back(tile); // [0]
770  tileTrackingVolumes->push_back(tilePositiveExtendedBarrel); // [1]
771 
772  if (msgLvl(MSG::INFO)) {
773  ATH_MSG_DEBUG( "Checking the existence of all Tracking Volumes:" );
774  ATH_MSG_DEBUG( " -> Tile::Barrel ");
775  printCheckResult(msg(MSG::DEBUG), tileBarrel);
776  ATH_MSG_DEBUG( " -> Tile::PositiveExtendedBarrel ");
777  printCheckResult(msg(MSG::DEBUG), tilePositiveExtendedBarrel);
778  ATH_MSG_DEBUG( " -> Tile::NegativeExtendedBarrel ");
779  printCheckResult(msg(MSG::DEBUG), tileNegativeExtendedBarrel);
780  ATH_MSG_DEBUG( " -> Tile::BarrelPositiveFingerGap ");
781  printCheckResult(msg(MSG::DEBUG), tileBarrelPositiveFingerGap);
782  ATH_MSG_DEBUG( " -> Tile::BarrelNegativeFingerGap ");
783  printCheckResult(msg(MSG::DEBUG), tileBarrelNegativeFingerGap);
784  ATH_MSG_DEBUG( " -> Tile::PositiveFingerGap ");
785  printCheckResult(msg(MSG::DEBUG), tilePositiveFingerGap);
786  ATH_MSG_DEBUG( " -> Tile::NegativeFingerGap ");
787  printCheckResult(msg(MSG::DEBUG), tileNegativeFingerGap);
788  ATH_MSG_DEBUG( " -> Tile::Girder ");
789  printCheckResult(msg(MSG::DEBUG), tileGirder);
790  } // end of detailed output
791 
792  throwIntoGarbage (std::move (barrelProperties));
793  throwIntoGarbage (std::move (extendedBarrelProperties));
794 
795  return tileTrackingVolumes;
796 }
797 
799 {
800  if (vol) log << "... ok" << endmsg;
801  else log << "... missing" << endmsg;
802 }
803 
804 
805 
806 void Tile::TileVolumeBuilder::printInfo(const PVConstLink& pv) const
807 {
808  const GeoLogVol* lv = pv->getLogVol();
809  std::cout << "New Tile Object:"<<lv->getName()<<", made of"<<lv->getMaterial()->getName()<<","<<lv->getShape()->type()<<std::endl;
810  //m_geoShapeConverter->decodeShape(lv->getShape());
811  int igen=0;
812  Amg::Transform3D transf = pv->getX();
813  printChildren(pv,igen,transf);
814 }
815 
816 void Tile::TileVolumeBuilder::printChildren(const PVConstLink& pv,int igen, const Amg::Transform3D& trIn) const
817 {
818  // subcomponents
819  unsigned int nc = pv->getNChildVols();
820  igen++;
821  std::string cname;
822  for (unsigned int ic=0; ic<nc; ic++) {
823  Amg::Transform3D transf = trIn*pv->getXToChildVol(ic);
824 
825  //
826  //std::cout << " dumping transform to subcomponent" << std::endl;
827  //std::cout << transf[0][0]<<"," <<transf[0][1]<<"," <<transf[0][2]<<","<<transf[0][3] << std::endl;
828  //std::cout << transf[1][0]<<"," <<transf[1][1]<<"," <<transf[1][2]<<","<<transf[1][3] << std::endl;
829  //std::cout << transf[2][0]<<"," <<transf[2][1]<<"," <<transf[2][2]<<","<<transf[2][3] << std::endl;
830  //
831  const PVConstLink cv = pv->getChildVol(ic);
832  const GeoLogVol* clv = cv->getLogVol();
833  std::cout << " ";
834  std::cout << "subcomponent:"<<igen<<":"<<ic<<":"<<clv->getName()<<", made of"<<clv->getMaterial()->getName()<<","<<clv->getShape()->type()
835  <<std::endl;
836  std::cout << "position:"<< "R:"<<transf.translation().perp()<<",phi:"<< transf.translation().phi()<<",x:"<<transf.translation().x()<<",y:"<<transf.translation().y()<<",z:"<<transf.translation().z()<<std::endl;
837  const GeoTrd* trd=dynamic_cast<const GeoTrd*> (clv->getShape());
838  if (trd) std::cout<<"trddim:"<< trd->getXHalfLength1()<<","<<trd->getXHalfLength2()<<","<<trd->getYHalfLength1()<<","<<trd->getYHalfLength2()<<","<<trd->getZHalfLength()<< std::endl;
839  const GeoTubs* tub=dynamic_cast<const GeoTubs*> (clv->getShape());
840  if (tub) std::cout<<"tubdim:"<< tub->getRMin()<<","<<tub->getRMax()<<","<<tub->getZHalfLength()<< std::endl;
841  const GeoPcon* con=dynamic_cast<const GeoPcon*> (clv->getShape());
842  if (con) {
843  const unsigned int nPlanes=con->getNPlanes();
844  for (unsigned int i=0; i<nPlanes; i++) {
845  std::cout<<"polycone:"<<i<<":"<< con->getRMinPlane(i)<<","<<con->getRMaxPlane(i)<<","<<con->getZPlane(i)<< std::endl;
846  }
847  }
848 
849  if (ic==0 || cname != clv->getName() ) {
850  //m_geoShapeConverter->decodeShape(clv->getShape());
851  printChildren(cv,igen,transf);
852  cname = clv->getName();
853  }
854  }
855 
856 }
857 
858 
859 void Tile::TileVolumeBuilder::throwIntoGarbage (std::unique_ptr<Trk::Material> mat) const
860 {
861  std::scoped_lock lock (m_garbageMutex);
862  m_garbage.push_back (std::move (mat));
863 }
Tile::TileVolumeBuilder::m_tileMgrLocation
std::string m_tileMgrLocation
Location of the CaloDetDescrMgr.
Definition: TileVolumeBuilder.h:84
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
egammaParameters::depth
@ depth
pointing depth of the shower as calculated in egammaqgcld
Definition: egammaParamDefs.h:276
CaloCell_ID_FCS::TileExt2
@ TileExt2
Definition: FastCaloSim_CaloCell_ID.h:39
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
DiscBounds.h
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
Tile::TileVolumeBuilder::m_trackingVolumeCreator
ToolHandle< Trk::ITrackingVolumeCreator > m_trackingVolumeCreator
Second helper for volume creation.
Definition: TileVolumeBuilder.h:87
make_unique
std::unique_ptr< T > make_unique(Args &&... args)
Definition: SkimmingToolEXOT5.cxx:23
Trk::binZ
@ binZ
Definition: BinningType.h:49
Tile::TileVolumeBuilder::m_tileBarrelLayersPerSampling
unsigned int m_tileBarrelLayersPerSampling
if m_useCaloSurfBuilder == true, number of layers per dead material region or sampling
Definition: TileVolumeBuilder.h:92
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
CaloCell_ID_FCS::TileExt0
@ TileExt0
Definition: FastCaloSim_CaloCell_ID.h:37
CaloCell_ID_FCS::TileBar1
@ TileBar1
Definition: FastCaloSim_CaloCell_ID.h:32
Tile::TileVolumeBuilder::throwIntoGarbage
void throwIntoGarbage(std::unique_ptr< Trk::Material > mat) const
Definition: TileVolumeBuilder.cxx:859
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:53
BinnedArray.h
Trk::BinnedMaterial
Definition: BinnedMaterial.h:38
CaloDepthTool.h
Declaration of CaloDepthTool. Created by Claire Bourdarios, 25.10.2004.
Tile::TileVolumeBuilder::printInfo
void printInfo(const GeoPVConstLink &pv) const
Definition: TileVolumeBuilder.cxx:806
DiscLayer.h
BinningType.h
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::Calo
@ Calo
Definition: GeometrySignature.h:28
Trk::TrackingVolume::registerColorCode
void registerColorCode(unsigned int icolor)
Register the color code.
CaloDetDescrManager.h
Definition of CaloDetDescrManager.
TileDetDescrManager.h
ReadCellNoiseFromCool.tile
tile
Definition: ReadCellNoiseFromCool.py:92
CaloDetDescriptor.h
Definition of CaloDetDescriptor.
WriteCellNoiseToCool.gn
gn
Definition: WriteCellNoiseToCool.py:531
GeometryStatics.h
CylinderVolumeBounds.h
Trk::GeometrySignature
GeometrySignature
Definition: GeometrySignature.h:24
beamspotman.steps
int steps
Definition: beamspotman.py:505
lumiFormat.i
int i
Definition: lumiFormat.py:92
TileVolumeBuilder.h
CaloCell_ID_FCS::TileBar0
@ TileBar0
Definition: FastCaloSim_CaloCell_ID.h:31
beamspotman.n
n
Definition: beamspotman.py:731
Tile::TileVolumeBuilder::m_tileBarrelEnvelope
double m_tileBarrelEnvelope
envelope Cover of the Barrel
Definition: TileVolumeBuilder.h:89
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
ITrackingVolumeCreator.h
CylinderSurface.h
Trk::CylinderVolumeBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
Definition: CylinderVolumeBounds.h:207
Tile::TileVolumeBuilder::trackingVolumes
virtual std::vector< Trk::TrackingVolume * > * trackingVolumes(const CaloDetDescrManager &caloDDM) const override final
TrackingVolumeBuilder interface method - returns vector of Volumes.
Definition: TileVolumeBuilder.cxx:129
Tile::TileVolumeBuilder::TileVolumeBuilder
TileVolumeBuilder(const std::string &, const std::string &, const IInterface *)
AlgTool style constructor.
Definition: TileVolumeBuilder.cxx:60
Tile::TileVolumeBuilder::m_trackingVolumeHelper
ToolHandle< Trk::ITrackingVolumeHelper > m_trackingVolumeHelper
Helper Tool to create TrackingVolumes.
Definition: TileVolumeBuilder.h:86
CylinderLayer.h
Trk::Volume::center
const Amg::Vector3D & center() const
returns the center of the volume
Definition: Volume.h:86
Tile::TileVolumeBuilder::initialize
virtual StatusCode initialize() override final
AlgTool initialize method.
Definition: TileVolumeBuilder.cxx:94
checkCorrelInHIST.gi
dictionary gi
Definition: checkCorrelInHIST.py:404
Tile::TileVolumeBuilder::m_useCaloSurfBuilder
bool m_useCaloSurfBuilder
if true use DetDescr based layering, if false use biequidistant layering
Definition: TileVolumeBuilder.h:91
Trk::BinUtility
Definition: BinUtility.h:39
grepfile.ic
int ic
Definition: grepfile.py:33
Trk::CylinderVolumeBounds
Definition: CylinderVolumeBounds.h:70
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
Tile::TileVolumeBuilder::m_surfBuilder
ToolHandle< ICaloSurfaceBuilder > m_surfBuilder
tool required for definition of active volumes
Definition: TileVolumeBuilder.h:94
CaloCell_ID_FCS::TileExt1
@ TileExt1
Definition: FastCaloSim_CaloCell_ID.h:38
Trk::CylinderVolumeBounds::outerRadius
double outerRadius() const
This method returns the outer radius.
Definition: CylinderVolumeBounds.h:191
GeoMaterialConverter.h
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::open
@ open
Definition: BinningType.h:40
python.SystemOfUnits.mm
int mm
Definition: SystemOfUnits.py:83
CylinderBounds.h
Trk::binR
@ binR
Definition: BinningType.h:50
TrackingVolume.h
Trk::GeoShapeConverter::convert
static std::unique_ptr< CylinderVolumeBounds > convert(const GeoTubs *gtub)
Convert a tubs.
Definition: GeoShapeConverter.cxx:57
CaloDetDescrManager
This class provides the client interface for accessing the detector description information common to...
Definition: CaloDetDescrManager.h:473
Trk::CylinderVolumeBounds::innerRadius
double innerRadius() const
This method returns the inner radius.
Definition: CylinderVolumeBounds.h:187
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
Trk::BinUtility::clone
BinUtility * clone() const
Implizit Constructor.
Definition: BinUtility.h:130
python.changerun.pv
pv
Definition: changerun.py:81
GeoShapeConverter.h
DiscSurface.h
Tile::TileVolumeBuilder::printCheckResult
static void printCheckResult(MsgStream &log, const Trk::TrackingVolume *vol)
Definition: TileVolumeBuilder.cxx:798
LVL1::gFEXPos
Definition: gFexPos.h:11
Trk::Material
Definition: Material.h:116
Trk::BinnedArray
Definition: BinnedArray.h:38
python.CaloScaleNoiseConfig.default
default
Definition: CaloScaleNoiseConfig.py:79
AthAlgTool
Definition: AthAlgTool.h:26
Trk::TrackingVolume
Definition: TrackingVolume.h:121
Trk::CylinderVolumeBounds::clone
CylinderVolumeBounds * clone() const override
Virtual constructor.
Definition: CylinderVolumeBounds.h:171
Material
@ Material
Definition: MaterialTypes.h:8
AlignableTrackingVolume.h
StoreGateSvc.h
CaloCell_ID_FCS::TileBar2
@ TileBar2
Definition: FastCaloSim_CaloCell_ID.h:33
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
readCCLHist.float
float
Definition: readCCLHist.py:83
Tile::TileVolumeBuilder::m_forceSymmetry
bool m_forceSymmetry
forces volume symmetry between negative/positive part
Definition: TileVolumeBuilder.h:96
plotBeamSpotMon.nc
int nc
Definition: plotBeamSpotMon.py:83
Material.h
LayerMaterialProperties.h
Tile::TileVolumeBuilder::printChildren
void printChildren(const GeoPVConstLink &pv, int igen, const Amg::Transform3D &trIn) const
Definition: TileVolumeBuilder.cxx:816
Trk::AlignableTrackingVolume
Definition: AlignableTrackingVolume.h:36
ITrackingVolumeHelper.h