ATLAS Offline Software
Public Member Functions | Protected Member Functions | Protected Attributes | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
InDet::TRT_LayerBuilderImpl Class Reference

#include <TRT_LayerBuilderImpl.h>

Inheritance diagram for InDet::TRT_LayerBuilderImpl:
Collaboration diagram for InDet::TRT_LayerBuilderImpl:

Public Member Functions

virtual ~TRT_LayerBuilderImpl ()=default
 Destructor. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

 TRT_LayerBuilderImpl (const std::string &, const std::string &, const IInterface *)
 AlgTool style constructor. More...
 
std::unique_ptr< const std::vector< Trk::CylinderLayer * > > cylindricalLayersImpl (const InDetDD::TRT_DetElementContainer *trtContainer) const
 
std::unique_ptr< const std::vector< Trk::DiscLayer * > > discLayersImpl (const InDetDD::TRT_DetElementContainer *trtContainer) const
 
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
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. More...
 

Protected Attributes

double m_layerStrawRadius {2.0*Gaudi::Units::mm}
 straw radius More...
 
DoubleProperty m_layerThickness {this, "LayerThickness", 0.1*Gaudi::Units::mm}
 modelled layer thickness More...
 
BooleanProperty m_modelGeometry {this, "ModelLayersOnly", true}
 Build the geometry with model layers. More...
 
UnsignedIntegerProperty m_modelBarrelLayers {this, "ModelBarrelLayers", 7}
 model barrel layers with material More...
 
UnsignedIntegerProperty m_modelEndcapLayers {this, "ModelEndcapLayers", 14}
 model endcap layers with material More...
 
UnsignedIntegerProperty m_barrelLayerBinsZ {this, "BarrelLayerBinsZ", 25}
 Bins for the Barrel material - in z. More...
 
UnsignedIntegerProperty m_barrelLayerBinsPhi {this, "BarrelLayerBinsPhi", 1}
 Bins for the Barrel material - in phi. More...
 
UnsignedIntegerProperty m_endcapLayerBinsR {this, "EndcapLayerBinsR", 25}
 Bins for the Endcap material - in r. More...
 
UnsignedIntegerProperty m_endcapLayerBinsPhi {this, "EndcapLayerBinsPhi", 1}
 Bins for the Endcap material - in phi. More...
 
BooleanProperty m_endcapConly {this, "EndcapConly", false}
 Only build the endcapC. More...
 
BooleanProperty m_registerStraws {this, "RegisterStraws", false}
 register the straws More...
 
IntegerProperty m_barrelSectorAtPiBoundary {this, "BarrelSectorAtPi", 16}
 this is the barrel Sector where +pi/-pi is within More...
 
StringProperty m_identification {this, "Identification", "TRT"}
 string identification More...
 

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> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Friends

class TRT_VolumeBuilder
 Declare the TRT_VolumeBuilder as friend. More...
 

Detailed Description

Author
Andre.nosp@m.as.S.nosp@m.alzbu.nosp@m.rger.nosp@m.@cern.nosp@m..ch

Definition at line 50 of file TRT_LayerBuilderImpl.h.

Member Typedef Documentation

◆ StoreGateSvc_t

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

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ ~TRT_LayerBuilderImpl()

virtual InDet::TRT_LayerBuilderImpl::~TRT_LayerBuilderImpl ( )
virtualdefault

Destructor.

◆ TRT_LayerBuilderImpl()

InDet::TRT_LayerBuilderImpl::TRT_LayerBuilderImpl ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)
protected

AlgTool style constructor.

Definition at line 59 of file TRT_LayerBuilderImpl.cxx.

59  :
60  AthAlgTool(t,n,p)
61 {
62 }

Member Function Documentation

◆ cylindricalLayersImpl()

std::unique_ptr< const std::vector< Trk::CylinderLayer * > > InDet::TRT_LayerBuilderImpl::cylindricalLayersImpl ( const InDetDD::TRT_DetElementContainer trtContainer) const
protected

Definition at line 66 of file TRT_LayerBuilderImpl.cxx.

66  {
67  ATH_MSG_DEBUG( "Building cylindrical layers for the TRT " );
68  PtrVectorWrapper<Trk::CylinderLayer> barrelLayers;
69 
70  // get Numerology and Id HElper
71  const InDetDD::TRT_Numerology* trtNums = trtContainer->getTRTNumerology();
72 
73  // get the TRT ID Helper
74  const TRT_ID* trtIdHelper = nullptr;
75  if (detStore()->retrieve(trtIdHelper, "TRT_ID").isFailure()) {
76  ATH_MSG_ERROR("Could not get TRT ID helper");
77  return nullptr;
78  }
79 
80  int nBarrelRings = trtNums->getNBarrelRings();
81  int nBarrelPhiSectors = trtNums->getNBarrelPhi();
82  double layerPhiStep = 2*M_PI/nBarrelPhiSectors;
83 
84  int nTotalBarrelLayers = 0;
85 
86  // get the overall dimensions
87  double rMin = 10e10;
88  double rMax = 0.;
89 
90  double layerZmax = 0.;
91  double layerZmin = 10e10;
92 
93  // pre-loop for overall layer numbers & some ordering ---------------------------------------
94  for (int ring=0; ring < nBarrelRings; ring++) {
95  // the number of barrel layers
96  int nBarrelLayers = trtNums->getNBarrelLayers(ring);
97  nTotalBarrelLayers += nBarrelLayers;
98  // loop over layers
99  for (int layer=0; layer < nBarrelLayers; layer++){
100  for (int phisec=0; phisec <nBarrelPhiSectors; ++phisec)
101  {
102  for (int iposneg=0; iposneg<2; ++iposneg){
103  // get the element
104  const InDetDD::TRT_BarrelElement* trtbar = trtContainer->getBarrelDetElement(iposneg, ring, phisec, layer); // TODO share this line
105 
106  // get overall dimensions only one time
107  const Trk::PlaneSurface* elementSurface = dynamic_cast<const Trk::PlaneSurface*>(&(trtbar->surface()));
108  if (!elementSurface) {
109  ATH_MSG_WARNING( "elementSurface: dynamic_cast to Trk::PlaneSurface failed - skipping ... ring/layer/phisec/iposneg = " << ring << "/" << layer << "/" << phisec << "/" << iposneg );
110  continue;
111  }
112  const Trk::RectangleBounds* elementBounds = dynamic_cast<const Trk::RectangleBounds*>(&(trtbar->bounds()));
113  if (!elementBounds) {
114  ATH_MSG_WARNING( "elementBounds: dynamic_cast to Trk::RectangleBounds failed - skipping ... ring/layer/phisec/iposneg = " << ring << "/" << layer << "/" << phisec << "/" << iposneg );
115  continue;
116  }
117  double elementZcenter = (elementSurface->center()).z();
118  double elementZmin = std::abs(elementZcenter - elementBounds->halflengthY());
119  double elementZmax = std::abs(elementZcenter + elementBounds->halflengthY());
120  // take what you need
121  takeSmaller(layerZmin, elementZmin); takeBigger(layerZmax, elementZmax);
122  // get the radial dimensions
123  double currentR = trtbar->center().perp();
124  takeSmallerBigger(rMin,rMax,currentR);
125  }
126  }
127  }
128  }
129 
130  if (nTotalBarrelLayers==0) {
131  ATH_MSG_WARNING( "nTotalBarrelLayers = 0 ... aborting and returning 0 !" );
132  return nullptr;
133  }
134 
135  // calculate delta(R) steps and delta(R)
136  double rDiff = std::abs(rMax-rMin);
137  double rStep = rDiff/(m_modelBarrelLayers+1);
138  double layerHalflength = layerZmax;
139 
140  // prepare the material
141  if ( std::abs(rDiff) <= 0.1 ) {
142  return nullptr;
143  }
144 
145  // fix the positions where the layers are - these are used for the model geometry and the complex geometry ---------------
146  std::vector<double> layerRadii;
147  layerRadii.reserve(m_modelBarrelLayers);
148  for (unsigned int ilay = 1; ilay <= m_modelBarrelLayers; ++ilay)
149  layerRadii.push_back(rMin+ilay*rStep-0.5*m_layerThickness);
150  // these are the layer iterators
151  auto layerRadiusIter = layerRadii.begin();
152  auto layerRadiusIterEnd = layerRadii.end();
153 
154  // (A) model geometry section
156 
157  ATH_MSG_VERBOSE( " -> " << layerRadii.size() << " cylindrical barrel layers between " << rMin << " and " << rMax << " ( at step "<< rStep << " )");
158 
159  // create the layers
160  for ( ; layerRadiusIter != layerRadiusIterEnd; ++layerRadiusIter ) {
161  // ----- prepare the BinnedLayerMaterial -----------------------------------------------------
162  Trk::BinnedLayerMaterial* layerMaterial = nullptr;
163  // -- material with 1D binning
164  Trk::BinUtility layerBinUtility1DZ(m_barrelLayerBinsZ,-layerHalflength, layerHalflength, Trk::open, Trk::binZ);
165  if (m_barrelLayerBinsPhi==1u){
166  // no binning in phi
167  layerMaterial =new Trk::BinnedLayerMaterial(layerBinUtility1DZ);
168  } else { // -- material with 2D binning : Rphi*Z optimized for cylinder layer
169  Trk::BinUtility layerBinUtility2DRPhiZ(m_barrelLayerBinsPhi,
170  -(*layerRadiusIter)*M_PI,
171  (*layerRadiusIter)*M_PI,
172  Trk::closed,
173  Trk::binRPhi);
174  layerBinUtility2DRPhiZ += layerBinUtility1DZ;
175  layerMaterial =new Trk::BinnedLayerMaterial(layerBinUtility2DRPhiZ);
176  }
177  // Barrel layers are centered around (0,0,0) by definition
178  barrelLayers->push_back(
179  new Trk::CylinderLayer(std::make_shared<Trk::CylinderBounds>(
180  *layerRadiusIter, layerHalflength),
181  *layerMaterial, m_layerThickness));
182  ATH_MSG_VERBOSE(" --> Creating a layer at radius : " << *layerRadiusIter);
183  delete layerMaterial;
184  }
185  } else {
186 
187  // (B) complex geometry section
188  float nMaterialLayerStep = 1.*nTotalBarrelLayers/m_modelBarrelLayers;
189  // complex geo should build same # of mat. layers as model geo; counter to check this:
190  unsigned int cMaterialLayerCount = 0;
191  // inclusive layer counter over all rings, used to determine mat. layer position
192  unsigned int cLayer=0;
193 
194  // loop over rings
195  ATH_MSG_VERBOSE("TRT Barrel has " << nBarrelRings << " rings.");
196 
197  for (int ring=0; ring < nBarrelRings; ring++){
198 
199  int nBarrelLayers = trtNums->getNBarrelLayers(ring);
200  ATH_MSG_VERBOSE("-> Ring " << ring << " has " << nBarrelLayers << " barrel layers.");
201  // loop over layers
202  for (int layer=0; layer < nBarrelLayers; layer++){
203 
204  // ----------------------------------------------------------------------------------
205  ATH_MSG_VERBOSE("--> Layer " << layer << " is being built with " << nBarrelPhiSectors << " secors in phi.");
206 
207  // increase inclusive layer counter for next material layer
208  ++cLayer;
209 
210  // set layer dimensions radius
211  double layerRadius = 0.;
212  double layerRadiusMin = 10e10;
213  double layerRadiusMax = 0.;
214  double layerPhiMin = 10.;
215  double layerPhiMax = -10;
216 
217  // per phi sector we make a 2D binnin in phi-z
218  std::vector< std::pair<Trk::BinnedArray2D<Trk::Surface>, Amg::Vector3D > > layerSectorArrays;
219  Amg::Vector3D layerSectorPosition(0.,0.,0.);
220 
221  // the sector approaching surfaces
222  std::vector< std::pair< std::shared_ptr<const Trk::ApproachSurfaces>, Amg::Vector3D > > layerApproachSurfaces;
223 
224  // layer sector arrays
225  for (int phisec=0; phisec < nBarrelPhiSectors; phisec++){
226  // ----------------------------------------------------------------------------------
227  ATH_MSG_VERBOSE("---> Sector " << phisec << " gahtering the details.");
228  // -------------- a phi sector (expands in +/- z) -----------------------------------
229 
230  // order the straws onto layers
231  std::vector< Trk::SurfaceOrderPosition > strawsPerPhiSecLayer;
232  // get the min an max phi, the min and max z
233  double phiMin = 10.;
234  double phiMax = -10.;
235  // sector stuff
236  int sectorStraws = 0;
237  // positive and negative sector
238  for (int posneg=0; posneg<2; ++posneg){
239  // sort the elements
240  const InDetDD::TRT_BarrelElement* currentElement = trtContainer->getBarrelDetElement(posneg, ring, phisec, layer); // TODO share this line
241  // get overall dimensions only one time
242  const Trk::PlaneSurface* elementSurface = dynamic_cast<const Trk::PlaneSurface*>(&(currentElement->surface()));
243  if (!elementSurface) {
244  ATH_MSG_WARNING( "elementSurface: dynamic_cast to Trk::PlaneSurface failed - skipping ... ring/layer/phisec/posneg = " << ring << "/" << layer << "/" << phisec << "/" << posneg );
245  continue;
246  }
247 
248  // create teh approach surfaces --------------------------------------------------------------------------------------------------
249  // getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec )
251  const Amg::Transform3D& elementTransform = elementSurface->transform();
252  const Amg::Vector3D& elementCenter = elementSurface->center();
253  const Amg::Vector3D& elementNormal = elementSurface->normal();
254  Amg::RotationMatrix3D elementRotation = elementTransform.rotation();
255  // outer / inner
256  Amg::Vector3D outerCenter(elementCenter+(0.5*m_layerThickness+m_layerStrawRadius)*elementNormal);
257  Amg::Vector3D innerCenter(elementCenter-(0.5*m_layerThickness+m_layerStrawRadius)*elementNormal);
258 
259  // assign the layer sector position for the straw array ordering
260  layerSectorPosition = elementSurface->center();
261 
262  // now register the two surfaces
263  aSurfaces->push_back(new Trk::PlaneSurface(Amg::Transform3D(Amg::getTransformFromRotTransl(elementRotation, innerCenter))));
264  aSurfaces->push_back(new Trk::PlaneSurface(Amg::Transform3D(Amg::getTransformFromRotTransl(elementRotation, outerCenter))));
265 
266  // now register it to for building the array
267  layerApproachSurfaces.emplace_back( std::shared_ptr<const Trk::ApproachSurfaces>(aSurfaces),elementCenter);
268  // screen output
269  ATH_MSG_VERBOSE("---> Sector " << phisec << " - posneg - " << posneg << " - with central phi = " << elementSurface->center().phi() );
270  // sector phi centers
271  takeSmallerBigger(layerPhiMin,layerPhiMax,elementSurface->center().phi());
272 
273  // loop over straws, fill them and find the phi boundaries
274  for (unsigned int istraw=0; istraw<currentElement->nStraws(); ++istraw)
275  {
276  Identifier strawId = trtIdHelper->straw_id(currentElement->identify(), istraw);
277  const Trk::Surface* currentStraw = &(currentElement->surface(strawId));
278  // get the phi values
279  double currentPhi = currentStraw->center().phi();
280  if (phisec == m_barrelSectorAtPiBoundary && currentPhi < 0.){
281  currentPhi = M_PI + currentPhi;
282  currentPhi += M_PI;
283  }
284  // the layer radius
285  takeSmallerBigger(layerRadiusMin,layerRadiusMax,currentStraw->center().perp());
286  takeSmallerBigger(phiMin, phiMax, currentPhi);
287  // make the ordering position
288  Amg::Vector3D strawOrderPos(currentStraw->center());
289  /*
290  * The above line was using the nodel (not delete option for the old shared object
291  * now that SharedObject is a shared_ptr typedef do the same with empty deleter
292  */
293  // Something like
294  // std::shared_ptr<Trk::Surface> =
295  // std::make_shared<Trk::Surface>(.....)) could be fine
296  //
297  // As things are now
298  // 1) Notice that basically we couple the DetElement owned
299  // surface to the Tracking Geometry passing a no-op deleter
300  // (no delete happens) to the shared_ptr(SharedObject is
301  // typedef of shared_ptr)
302  // 2) The const_cast here make the
303  // code non MT safe. For now we handle this by being careful
304  // on lifetimes and non-re-entrant TG construction.
305  std::shared_ptr<Trk::Surface> sharedSurface(const_cast<Trk::Surface*>(currentStraw),
306  Trk::do_not_delete<Trk::Surface>);
307  strawsPerPhiSecLayer.emplace_back(sharedSurface, strawOrderPos);
308  // and record
309  ++sectorStraws;
310  } // loop over straws done
311  } // loop over posneg done
312  // show the phiMin/phiMax to the screen
313  // prepare the
314  // fix to CID 24918
315  if (!sectorStraws) {
316  return nullptr;
317  }
318  double deltaPhi = (phiMax-phiMin);
319  double phiStep = deltaPhi/(0.5*sectorStraws-1);
320  ATH_MSG_VERBOSE("---> Sector " << phisec << " - with " << 0.5*sectorStraws << " straws - straw phiMin/phiMax (step) = " << phiMin << " / " << phiMax << " (" << phiStep << ")");
321  // phi min / phi max
322  phiMin -= 0.5*phiStep;
323  phiMax += 0.5*phiStep;
324  // correct for the +pi/-pi module
325  // now create the BinUtility
326  auto layerStrawPhiZUtility = Trk::BinUtility(sectorStraws/2,phiMin,phiMax,Trk::open, Trk::binPhi);
327  layerStrawPhiZUtility += Trk::BinUtility(2,-layerZmax, layerZmax, Trk::open, Trk::binZ);
328  // create the 2D BinnedArray
329  Trk::BinnedArray2D<Trk::Surface> layerStrawPhiSector(strawsPerPhiSecLayer,layerStrawPhiZUtility);
330  ATH_MSG_VERBOSE("---> Sector " << phisec << " - BinnedArray for straws prepared for " << strawsPerPhiSecLayer.size() << " straws.");
331  // fill the array
332  layerSectorArrays.emplace_back(std::move(layerStrawPhiSector), layerSectorPosition);
333  // ---------------- enf of phi sector ----------------------------------------------------
334  } // loop over PhiSectors done
335 
336  // build the mean of the layer Radius
337  layerRadius = 0.5*(layerRadiusMin+layerRadiusMax)+0.5*m_layerStrawRadius;
338 
339  bool assignMaterial = false;
340  if (cLayer==(unsigned)int((cMaterialLayerCount+1)*nMaterialLayerStep)) {
341  assignMaterial = true;
342  ++cMaterialLayerCount;
343  ATH_MSG_VERBOSE( "--> Creating a material+straw layer at radius : " << layerRadius );
344  } else
345  ATH_MSG_VERBOSE( "--> Creating a straw layer at radius : " << layerRadius );
346 
347  // now order the plane layers to sit on cylindrical layers
348  auto barrelLayerBounds = std::make_shared<Trk::CylinderBounds>(layerRadius, layerHalflength);
349 
350  // ---- correct phi -------------------------------------------------------------------
351  ATH_MSG_VERBOSE(" prepare approach description with " << nBarrelPhiSectors << " barrel sectors.");
352  ATH_MSG_VERBOSE(" min phi / max phi detected : " << layerPhiMin << " / " << layerPhiMax );
353  double layerPhiMinCorrected = layerPhiMin-0.5*layerPhiStep;
354  double layerPhiMaxCorrected = layerPhiMax+0.5*layerPhiStep;
355  // catch if the minPhi falls below M_PI
356  if (layerPhiMinCorrected < -M_PI){
357  layerPhiMinCorrected += layerPhiStep;
358  layerPhiMaxCorrected += layerPhiStep;
359  }
360  ATH_MSG_VERBOSE(" min phi / max phi corrected : " << layerPhiMinCorrected << " / " << layerPhiMaxCorrected );
361 
362  // the sector surfaces
363  auto layerSectorBinUtility = Trk::BinUtility(nBarrelPhiSectors,layerPhiMinCorrected,layerPhiMaxCorrected,Trk::closed,Trk::binPhi);
364  auto strawArray = std::make_unique<Trk::BinnedArrayArray2D<Trk::Surface>>(std::move(layerSectorArrays), layerSectorBinUtility );
365 
366  ATH_MSG_VERBOSE("--> Layer " << layer << " has been built with " << strawArray->arrayObjects().size() << " straws.");
367 
368  // ApproachDescriptor
369  // build a BinUtility for the ApproachDescritptor
370  auto aDescriptorBinUtility = Trk::BinUtility(nBarrelPhiSectors,layerPhiMinCorrected,layerPhiMaxCorrected,Trk::closed,Trk::binPhi);
371  aDescriptorBinUtility += Trk::BinUtility(2,-layerHalflength,layerHalflength,Trk::open, Trk::binZ);
372 
373  auto aDescriptorBinnedArray = std::make_unique<Trk::BinnedArray2D<const Trk::ApproachSurfaces>> (layerApproachSurfaces, aDescriptorBinUtility);
374 
375  // build an approach surface
376  auto approachSurface = std::make_unique<Trk::CylinderSurface>(
377  std::make_shared<Trk::CylinderBounds>(*barrelLayerBounds));
379  std::move(aDescriptorBinnedArray), std::move(approachSurface));
380 
381  // do not give every layer material properties
382  if (assignMaterial) {
383  // ----- prepare the BinnedLayerMaterial -----------------------------------------------------
384  Trk::BinnedLayerMaterial* layerMaterial = nullptr;
385  // -- material with 1D binning
386  Trk::BinUtility layerBinUtilityZ(m_barrelLayerBinsZ, -layerHalflength, layerHalflength, Trk::open, Trk::binZ );
387  if (m_barrelLayerBinsPhi==1u){
388  layerMaterial =new Trk::BinnedLayerMaterial(layerBinUtilityZ);
389  } else { // -- material with 2D binning: RPhiZ binning
390  Trk::BinUtility layerBinUtilityRPhiZ(m_barrelLayerBinsPhi,
391  -layerRadius*M_PI, layerRadius*M_PI,
392  Trk::closed,
393  Trk::binRPhi);
394  layerBinUtilityRPhiZ += layerBinUtilityZ;
395  layerMaterial =new Trk::BinnedLayerMaterial(layerBinUtilityRPhiZ);
396  }
397 
398  barrelLayers->push_back(new Trk::CylinderLayer(barrelLayerBounds,
399  std::move(strawArray),
400  *layerMaterial,
402  std::make_unique<InDet::TRT_OverlapDescriptor>(trtIdHelper),
403  aDescritpor));
404  delete layerMaterial;
405 
406  } else
407  barrelLayers->push_back(new Trk::CylinderLayer(barrelLayerBounds,
408  std::move(strawArray),
410  std::make_unique<InDet::TRT_OverlapDescriptor>(trtIdHelper),
411  aDescritpor));
412  } // loop over layers
413  } // loop over rings
414 
415  ATH_MSG_VERBOSE(" Built number of TRT barrel material layers: " << cMaterialLayerCount);
416  // In Complex geo # of material layers should match the expected # of layers,
417  // else a mis-match in layer and material map index occurs.
418  // This mis-match will results layers getting incorrect material properties.
419  if (cMaterialLayerCount!=m_modelBarrelLayers) {
420  ATH_MSG_WARNING(" Complex geo built incorrect # of TRT barrel material layers: "
421  << cMaterialLayerCount << " / " << m_modelBarrelLayers);
422  }
423  }// complex geometry
424 
425  // return what you have
426  return std::unique_ptr<const std::vector<Trk::CylinderLayer*> > (barrelLayers.release());
427 }

◆ declareGaudiProperty() [1/4]

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

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

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::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  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

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

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

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::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  }

◆ detStore()

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

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

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ discLayersImpl()

std::unique_ptr< const std::vector< Trk::DiscLayer * > > InDet::TRT_LayerBuilderImpl::discLayersImpl ( const InDetDD::TRT_DetElementContainer trtContainer) const
protected

Definition at line 431 of file TRT_LayerBuilderImpl.cxx.

432 {
433  ATH_MSG_DEBUG( "Building disc-like layers for the TRT " );
434 
435  const InDetDD::TRT_Numerology* trtNums = trtContainer->getTRTNumerology();
436  // get the TRT ID Helper
437  const TRT_ID* trtIdHelper = nullptr;
438  if (detStore()->retrieve(trtIdHelper, "TRT_ID").isFailure()) {
439  ATH_MSG_ERROR("Could not get TRT ID helper");
440  return nullptr;
441  }
442  unsigned int nEndcapWheels = trtNums->getNEndcapWheels();
443  unsigned int nEndcapPhiSectors = trtNums->getNEndcapPhi();
444 
445  // total layer numbers
446  int numTotalLayers = 0;
447 
448  // zMin / zMax
449  double zMin = 10e10;
450  double zMax = 0.;
451 
452  const Trk::DiscBounds* sectorDiscBounds = nullptr;
453 
454  // preloop for overall numbers
455  for (unsigned int iwheel=0; iwheel<nEndcapWheels; ++iwheel)
456  {
457  unsigned int nEndcapLayers = trtNums->getNEndcapLayers(iwheel);
458  numTotalLayers += nEndcapLayers;
459  for (unsigned int ilayer = 0; ilayer<nEndcapLayers; ++ilayer){
460  const InDetDD::TRT_EndcapElement* sectorDiscElement = trtContainer->getEndcapDetElement(0, iwheel, ilayer, 0); // TODO share this line
461 
462  // get a reference element for dimensions
463  if (!sectorDiscBounds){
464  sectorDiscBounds = dynamic_cast<const Trk::DiscBounds*>(&(sectorDiscElement->bounds()));
465  }
466 
467  double currentZ = std::abs(sectorDiscElement->center().z());
468  takeSmallerBigger(zMin,zMax,currentZ);
469  }
470  }
471  if (numTotalLayers==0) {
472  ATH_MSG_WARNING( "numTotalLayers = 0 ... aborting and returning 0 !" );
473  return nullptr;
474  }
475 
476  if (!sectorDiscBounds) {
477  ATH_MSG_WARNING( "fullDiscBounds do not exist ... aborting and returning 0 !" );
478  return nullptr;
479  }
480  auto fullDiscBounds = std::make_unique<Trk::DiscBounds>(sectorDiscBounds->rMin(), sectorDiscBounds->rMax());
481 
482  PtrVectorWrapper<Trk::DiscLayer> endcapLayers;
483 
484  // the BinUtility for the material
485  std::unique_ptr<Trk::BinnedLayerMaterial> layerMaterial;
486  // -- material with 1D binning
487  Trk::BinUtility layerBinUtilityR(m_endcapLayerBinsR,
488  fullDiscBounds->rMin(),
489  fullDiscBounds->rMax(),
490  Trk::open,
491  Trk::binR);
492  if (m_barrelLayerBinsPhi==1u)
493  layerMaterial = std::make_unique<Trk::BinnedLayerMaterial>(layerBinUtilityR);
494  else { // -- material with 2D binning
495  Trk::BinUtility layerBinUtilityPhi(m_barrelLayerBinsPhi,
496  -M_PI, M_PI,
497  Trk::closed,
498  Trk::binPhi);
499  // make it rPhi now
500  layerBinUtilityR += layerBinUtilityPhi;
501  layerMaterial = std::make_unique<Trk::BinnedLayerMaterial>(layerBinUtilityR);
502  }
503 
504  // global geometry statistics
505  double zDiff = std::abs(zMax-zMin);
506  double zStep = zDiff/(m_modelEndcapLayers+1);
507 
508  // loop for surface ordering
509  int maxendcaps=2;
510  if (m_endcapConly) maxendcaps=1;
511 
512  for (int iposneg=0; iposneg<maxendcaps; ++iposneg){
513 
514  // fill the positions of the disc layers
515  std::vector<double> zPositions;
516  zPositions.reserve(m_modelEndcapLayers);
517 
518  double stepdir = iposneg ? 1. : -1.;
519  double zStart = stepdir*zMin;
520 
521  ATH_MSG_VERBOSE( " -> Creating " << m_modelEndcapLayers << " disc-layers on each side between "
522  << zMin << " and " << zMax << " ( at step "<< zStep << " )");
523 
524  // take a different modelling for the layers - use these layers for the model geometry and the real geometry
525  for (unsigned int izpos = 1; izpos <= m_modelEndcapLayers; ++izpos){
526  zPositions.push_back(zStart + stepdir * double(izpos) * zStep - 0.5 * m_layerThickness);
527  }
528 
529  std::vector<double>::const_iterator zPosIter = zPositions.begin();
530  std::vector<double>::const_iterator zPosIterEnd = zPositions.end();
531 
532  // (a) simplified geometry
533  if (m_modelGeometry){
534  // build the layers actually
535  for ( ; zPosIter != zPosIterEnd; ++zPosIter){
536  ATH_MSG_VERBOSE( " --> Creating a layer at z pos : " << (*zPosIter) );
537  Amg::Transform3D zPosTrans =
538  Amg::Transform3D(Amg::Translation3D(0., 0., (*zPosIter)));
539  endcapLayers->push_back(new Trk::DiscLayer(zPosTrans,
540  std::make_shared<Trk::DiscBounds>(*fullDiscBounds),
541  *layerMaterial,
543  }
544 
545  } else {
546  // (b) complex geometry
547  float nMaterialLayerStep = 1.*numTotalLayers/m_modelEndcapLayers;
548  // inclusive layer counter over all wheels
549  unsigned int cLayer = 0;
550  // complex geo should build same # of mat. layers as model geo; counter to check this:
551  unsigned int cMaterialLayerCount = 0;
552 
553  // complex geometry - needs a little bit of joggling
554  for (unsigned int iwheel=0; iwheel<nEndcapWheels; ++iwheel)
555  {
556  // do the loop per side
557  unsigned int nEndcapLayers = trtNums->getNEndcapLayers(iwheel);
558  for (unsigned int ilayer = 0; ilayer < nEndcapLayers; ++ilayer){
559 
560  // increase inclusive layer counter for next material layer
561  ++cLayer;
562 
563  // count the straws;
564  int numberOfStraws = 0;
565 
566  // check if dynamic cast worked
567  if (fullDiscBounds){
568  // get a reference element for dimensions
569  const InDetDD::TRT_EndcapElement* sectorDiscElement = trtContainer->getEndcapDetElement(iposneg, iwheel, ilayer, 0); // TODO share this line
570 
571  // take the position, but not the rotation (the rotation has to be standard)
572  Amg::Vector3D fullDiscPosition(sectorDiscElement->surface().transform().translation());
573  double discZ = fullDiscPosition.z();
574 
575  // check if we need to build a straw layer or not
576  bool assignMaterial = false;
577  if (cLayer == (unsigned)int((cMaterialLayerCount+1)*nMaterialLayerStep)) {
578  assignMaterial = true;
579  ++cMaterialLayerCount;
580  ATH_MSG_VERBOSE( "--> Creating a material+straw layer at z-pos : " << discZ );
581  } else {
582  ATH_MSG_VERBOSE( "--> Creating a straw layer at z-pos : " << discZ );
583  }
584 
585  // order the straws onto layers
586  std::vector< Trk::SurfaceOrderPosition > strawPerEndcapLayer;
587 
588  // the layer thickness - for approaching surfaces
589  double zMin = 10e10;
590  double zMax = -10e10;
591 
592  for (unsigned int iphisec=0; iphisec<nEndcapPhiSectors; ++iphisec){
593  ATH_MSG_VERBOSE("Building sector " << iphisec << " of endcap wheel " << iwheel );
594  const InDetDD::TRT_EndcapElement* currentElement = trtContainer->getEndcapDetElement(iposneg, iwheel, ilayer, iphisec); // TODO share this line
595  unsigned int nstraws = currentElement->nStraws();
596  for (unsigned int istraw=0; istraw<nstraws; istraw++){
597  Identifier strawId = trtIdHelper->straw_id(currentElement->identify(), istraw);
598  const Trk::Surface* currentStraw = &(currentElement->surface(strawId));
599  Amg::Vector3D strawOrderPos(currentStraw->center());
600  // get the z position
601  double zPos = currentStraw->center().z();
602  takeSmaller(zMin,zPos);
603  takeBigger(zMax,zPos);
604  // Something like
605  // std::shared_ptr<Trk::Surface> =
606  // std::make_shared<Trk::Surface>(currentElement)) could be fine
607  //
608  // As things are now
609  // 1) Notice that basically we couple the DetElement owned
610  // surface to the Tracking Geometry passing a no-op deleter
611  // (no delete happens) to the shared_ptr(SharedObject is
612  // typedef of shared_ptr)
613  // 2) The const_cast here make the
614  // code non MT safe. For now we handle this by being careful
615  // on lifetimes and non-re-entrant TG construction.
616  std::shared_ptr<Trk::Surface> sharedSurface(const_cast<Trk::Surface*>(currentStraw),
617  [](Trk::Surface*) {});
618  strawPerEndcapLayer.emplace_back(sharedSurface, strawOrderPos);
619  ++numberOfStraws;
620  }
621  }
622  // fix to CID 11326
623  if (!numberOfStraws){
624  return nullptr;
625  }
626  auto currentBinUtility = Trk::BinUtility(numberOfStraws, -M_PI, M_PI, Trk::closed, Trk::binPhi);
627  auto strawArray = std::make_unique<Trk::BinnedArray1D<Trk::Surface>>(strawPerEndcapLayer, currentBinUtility);
628  Trk::DiscLayer* currentLayer = nullptr;
629 
630  // redefine the discZ
631  discZ = 0.5*(zMin+zMax);
632  Amg::Transform3D fullDiscTransform = Amg::Transform3D(Amg::Translation3D(0.,0.,discZ));
633 
634  ATH_MSG_VERBOSE("TRT Disc being build at z Position " << discZ << " ( from " << zMin << " / " << zMax << " )");
635 
636  // create the approach offset
637  auto aSurfaces = std::make_unique<Trk::ApproachSurfaces>();
638  // get the position of the approach surfaces
639  const Amg::Vector3D aspPosition(0.,0.,zMin-m_layerStrawRadius);
640  const Amg::Vector3D asnPosition(0.,0.,zMax+m_layerStrawRadius);
641 
642  // create new surfaces
643  Amg::Transform3D asnTransform = Amg::Transform3D(Amg::Translation3D(asnPosition));
644  Amg::Transform3D aspTransform = Amg::Transform3D(Amg::Translation3D(aspPosition));
645  // order in an optimised way for collision direction
646  if (discZ > 0.){
647  aSurfaces->push_back( new Trk::DiscSurface(asnTransform, std::make_shared<Trk::DiscBounds>(*fullDiscBounds)));
648  aSurfaces->push_back( new Trk::DiscSurface(aspTransform, std::make_shared<Trk::DiscBounds>(*fullDiscBounds)) );
649  } else {
650  aSurfaces->push_back( new Trk::DiscSurface(aspTransform, std::make_shared<Trk::DiscBounds>(*fullDiscBounds)) );
651  aSurfaces->push_back( new Trk::DiscSurface(asnTransform, std::make_shared<Trk::DiscBounds>(*fullDiscBounds)) );
652  }
653  // approach descriptor
654  Trk::ApproachDescriptor* aDescriptor = new Trk::ApproachDescriptor(std::move(aSurfaces),false);
655 
656  // do not give every layer material properties
657  if (assignMaterial)
658  currentLayer = new Trk::DiscLayer(fullDiscTransform,
659  std::make_shared<Trk::DiscBounds>(*fullDiscBounds),
660  std::move(strawArray),
661  *layerMaterial,
663  std::make_unique<InDet::TRT_OverlapDescriptor>(trtIdHelper),
664  aDescriptor);
665  else if (!m_modelGeometry)
666  currentLayer = new Trk::DiscLayer(fullDiscTransform,
667  std::make_shared<Trk::DiscBounds>(*fullDiscBounds),
668  std::move(strawArray),
670  std::make_unique<InDet::TRT_OverlapDescriptor>(trtIdHelper),
671  aDescriptor);
672 
673  if (currentLayer) endcapLayers->push_back(currentLayer);
674  } // end of sectorDiscBounds if
675  } // end of layer loop
676  } // end of wheel loop
677 
678  ATH_MSG_VERBOSE(" Built # of TRT material layers: " << cMaterialLayerCount << "in ispos: " << iposneg << "ring");
679  // # of material layers should match the expected # of layers,
680  // else a mis-match in layer and material map index occurs.
681  // This mis-match will results layers getting incorrect material properties.
682  if (cMaterialLayerCount != m_modelEndcapLayers) {
683  ATH_MSG_WARNING(" Built incorrect # of TRT material layers: "
684  << cMaterialLayerCount << " / " << m_modelEndcapLayers << "in ispos" << iposneg << "ring" );
685  }
686 
687  } // model/real geometry
688  } // end of posneg loop
689 
690  return std::unique_ptr<const std::vector<Trk::DiscLayer*> > (endcapLayers.release());
691 }

◆ evtStore() [1/2]

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

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

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

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

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

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< AlgTool > >::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() [1/2]

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msg() [2/2]

MsgStream& AthCommonMsg< AlgTool >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::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< AlgTool > >::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< AlgTool > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

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

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in DerivationFramework::CfAthAlgTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and asg::AsgMetadataTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Friends And Related Function Documentation

◆ TRT_VolumeBuilder

friend class TRT_VolumeBuilder
friend

Declare the TRT_VolumeBuilder as friend.

Definition at line 54 of file TRT_LayerBuilderImpl.h.

Member Data Documentation

◆ m_barrelLayerBinsPhi

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_barrelLayerBinsPhi {this, "BarrelLayerBinsPhi", 1}
protected

Bins for the Barrel material - in phi.

Definition at line 78 of file TRT_LayerBuilderImpl.h.

◆ m_barrelLayerBinsZ

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_barrelLayerBinsZ {this, "BarrelLayerBinsZ", 25}
protected

Bins for the Barrel material - in z.

Definition at line 77 of file TRT_LayerBuilderImpl.h.

◆ m_barrelSectorAtPiBoundary

IntegerProperty InDet::TRT_LayerBuilderImpl::m_barrelSectorAtPiBoundary {this, "BarrelSectorAtPi", 16}
protected

this is the barrel Sector where +pi/-pi is within

Definition at line 84 of file TRT_LayerBuilderImpl.h.

◆ m_detStore

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

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_endcapConly

BooleanProperty InDet::TRT_LayerBuilderImpl::m_endcapConly {this, "EndcapConly", false}
protected

Only build the endcapC.

Definition at line 81 of file TRT_LayerBuilderImpl.h.

◆ m_endcapLayerBinsPhi

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_endcapLayerBinsPhi {this, "EndcapLayerBinsPhi", 1}
protected

Bins for the Endcap material - in phi.

Definition at line 80 of file TRT_LayerBuilderImpl.h.

◆ m_endcapLayerBinsR

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_endcapLayerBinsR {this, "EndcapLayerBinsR", 25}
protected

Bins for the Endcap material - in r.

Definition at line 79 of file TRT_LayerBuilderImpl.h.

◆ m_evtStore

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

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_identification

StringProperty InDet::TRT_LayerBuilderImpl::m_identification {this, "Identification", "TRT"}
protected

string identification

Definition at line 86 of file TRT_LayerBuilderImpl.h.

◆ m_layerStrawRadius

double InDet::TRT_LayerBuilderImpl::m_layerStrawRadius {2.0*Gaudi::Units::mm}
protected

straw radius

Definition at line 71 of file TRT_LayerBuilderImpl.h.

◆ m_layerThickness

DoubleProperty InDet::TRT_LayerBuilderImpl::m_layerThickness {this, "LayerThickness", 0.1*Gaudi::Units::mm}
protected

modelled layer thickness

Definition at line 72 of file TRT_LayerBuilderImpl.h.

◆ m_modelBarrelLayers

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_modelBarrelLayers {this, "ModelBarrelLayers", 7}
protected

model barrel layers with material

Definition at line 74 of file TRT_LayerBuilderImpl.h.

◆ m_modelEndcapLayers

UnsignedIntegerProperty InDet::TRT_LayerBuilderImpl::m_modelEndcapLayers {this, "ModelEndcapLayers", 14}
protected

model endcap layers with material

Definition at line 75 of file TRT_LayerBuilderImpl.h.

◆ m_modelGeometry

BooleanProperty InDet::TRT_LayerBuilderImpl::m_modelGeometry {this, "ModelLayersOnly", true}
protected

Build the geometry with model layers.

Definition at line 73 of file TRT_LayerBuilderImpl.h.

◆ m_registerStraws

BooleanProperty InDet::TRT_LayerBuilderImpl::m_registerStraws {this, "RegisterStraws", false}
protected

register the straws

Definition at line 83 of file TRT_LayerBuilderImpl.h.

◆ m_varHandleArraysDeclared

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

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
Trk::RectangleBounds
Definition: RectangleBounds.h:38
InDet::TRT_LayerBuilderImpl::m_layerStrawRadius
double m_layerStrawRadius
straw radius
Definition: TRT_LayerBuilderImpl.h:71
InDet::TRT_LayerBuilderImpl::m_endcapLayerBinsR
UnsignedIntegerProperty m_endcapLayerBinsR
Bins for the Endcap material - in r.
Definition: TRT_LayerBuilderImpl.h:79
InDetDD::TRT_BarrelElement
Definition: TRT_BarrelElement.h:43
InDet::TRT_LayerBuilderImpl::m_barrelSectorAtPiBoundary
IntegerProperty m_barrelSectorAtPiBoundary
this is the barrel Sector where +pi/-pi is within
Definition: TRT_LayerBuilderImpl.h:84
InDet::TRT_LayerBuilderImpl::m_barrelLayerBinsPhi
UnsignedIntegerProperty m_barrelLayerBinsPhi
Bins for the Barrel material - in phi.
Definition: TRT_LayerBuilderImpl.h:78
Trk::binZ
@ binZ
Definition: BinningType.h:49
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:161
takeSmallerBigger
#define takeSmallerBigger(cSmallest, cBiggest, test)
Definition: RobustTrackingGeometryBuilderImpl.h:45
InDetDD::TRT_BaseElement::nStraws
unsigned int nStraws() const
Number of straws in the element.
M_PI
#define M_PI
Definition: ActiveFraction.h:11
InDetDD::TRT_EndcapElement
Definition: TRT_EndcapElement.h:43
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
Trk::closed
@ closed
Definition: BinningType.h:41
InDet::TRT_LayerBuilderImpl::m_layerThickness
DoubleProperty m_layerThickness
modelled layer thickness
Definition: TRT_LayerBuilderImpl.h:72
Trk::DiscSurface
Definition: DiscSurface.h:54
Trk::ApproachDescriptor
Definition: ApproachDescriptor.h:25
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDet::TRT_LayerBuilderImpl::m_modelBarrelLayers
UnsignedIntegerProperty m_modelBarrelLayers
model barrel layers with material
Definition: TRT_LayerBuilderImpl.h:74
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
Trk::ApproachSurfaces
Definition: IApproachDescriptor.h:25
Trk::DiscBounds::rMax
double rMax() const
This method returns outer radius.
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:77
InDet::TRT_LayerBuilderImpl::m_modelEndcapLayers
UnsignedIntegerProperty m_modelEndcapLayers
model endcap layers with material
Definition: TRT_LayerBuilderImpl.h:75
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
takeBigger
#define takeBigger(current, test)
Definition: RobustTrackingGeometryBuilderImpl.h:44
IDTPMcnv.htype
htype
Definition: IDTPMcnv.py:29
Amg::getTransformFromRotTransl
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
Definition: GeoPrimitivesHelpers.h:172
InDet::TRT_LayerBuilderImpl::m_modelGeometry
BooleanProperty m_modelGeometry
Build the geometry with model layers.
Definition: TRT_LayerBuilderImpl.h:73
InDetDD::TRT_Numerology::getNEndcapWheels
unsigned int getNEndcapWheels() const
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
Trk::DiscBounds::rMin
double rMin() const
This method returns inner radius.
InDetDD::TRT_Numerology
Definition: TRT_Numerology.h:22
python.utils.AtlRunQueryDQUtils.p
p
Definition: AtlRunQueryDQUtils.py:209
AthCommonDataStore
Definition: AthCommonDataStore.h:52
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
z
#define z
beamspotman.n
n
Definition: beamspotman.py:729
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Definition: AthCommonDataStore.h:145
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Trk::Surface::normal
virtual const Amg::Vector3D & normal() const
Returns the normal vector of the Surface (i.e.
InDetDD::TRT_Numerology::getNBarrelPhi
unsigned int getNBarrelPhi() const
InDetDD::TRT_BaseElement::identify
virtual Identifier identify() const override final
identifier of this detector element:
InDetDD::TRT_Numerology::getNBarrelLayers
unsigned int getNBarrelLayers(unsigned int iMod) const
Trk::DiscLayer
Definition: DiscLayer.h:45
AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
Trk::BinnedLayerMaterial
Definition: BinnedLayerMaterial.h:33
AthAlgTool::AthAlgTool
AthAlgTool()
Default constructor:
InDet::TRT_LayerBuilderImpl::m_endcapConly
BooleanProperty m_endcapConly
Only build the endcapC.
Definition: TRT_LayerBuilderImpl.h:81
Trk::BinnedArray2D
Definition: BinnedArray2D.h:37
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
Trk::BinUtility
Definition: BinUtility.h:39
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
Trk::CylinderLayer
Definition: CylinderLayer.h:43
InDetDD::TRT_DetElementContainer::getBarrelDetElement
const TRT_BarrelElement * getBarrelDetElement(unsigned int positive, unsigned int moduleIndex, unsigned int phiIndex, unsigned int strawLayerIndex) const
Definition: TRT_DetElementContainer.cxx:44
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
Trk::RectangleBounds::halflengthY
double halflengthY() const
for consitant naming
InDet::TRT_LayerBuilderImpl::m_registerStraws
BooleanProperty m_registerStraws
register the straws
Definition: TRT_LayerBuilderImpl.h:83
takeSmaller
#define takeSmaller(current, test)
Definition: RobustTrackingGeometryBuilderImpl.h:43
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDetDD::TRT_BaseElement::bounds
virtual const Trk::SurfaceBounds & bounds() const override final
Straw layer bounds.
Trk::open
@ open
Definition: BinningType.h:40
Trk::binR
@ binR
Definition: BinningType.h:50
TRT_ID
Definition: TRT_ID.h:84
a
TList * a
Definition: liststreamerinfos.cxx:10
h
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
Trk::binRPhi
@ binRPhi
Definition: BinningType.h:52
Trk::PlaneSurface
Definition: PlaneSurface.h:64
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
InDetDD::TRT_BaseElement::center
virtual const Amg::Vector3D & center() const override final
Element Surface: center of a straw layer.
InDetDD::TRT_DetElementContainer::getTRTNumerology
const TRT_Numerology * getTRTNumerology() const
Definition: TRT_DetElementContainer.cxx:39
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:629
InDetDD::TRT_Numerology::getNEndcapPhi
unsigned int getNEndcapPhi() const
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:801
InDetDD::TRT_Numerology::getNEndcapLayers
unsigned int getNEndcapLayers(unsigned int iWheel) const
InDetDD::TRT_Numerology::getNBarrelRings
unsigned int getNBarrelRings() const
InDet::TRT_LayerBuilderImpl::m_barrelLayerBinsZ
UnsignedIntegerProperty m_barrelLayerBinsZ
Bins for the Barrel material - in z.
Definition: TRT_LayerBuilderImpl.h:77
InDetDD::TRT_DetElementContainer::getEndcapDetElement
const TRT_EndcapElement * getEndcapDetElement(unsigned int positive, unsigned int wheelIndex, unsigned int strawLayerIndex, unsigned int phiIndex) const
Definition: TRT_DetElementContainer.cxx:67
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:79
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
InDetDD::TRT_BaseElement::surface
virtual const Trk::Surface & surface() const override final
Element Surface: access to the Surface (straw layer)
fitman.k
k
Definition: fitman.py:528
Trk::DiscBounds
Definition: DiscBounds.h:44
TRT_ID::straw_id
Identifier straw_id(int barrel_ec, int phi_module, int layer_or_wheel, int straw_layer, int straw) const
Three ways of getting id for a single straw:
Definition: TRT_ID.h:581
Trk::binPhi
@ binPhi
Definition: BinningType.h:51
Identifier
Definition: IdentifierFieldParser.cxx:14