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 > &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 > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &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 58 of file TRT_LayerBuilderImpl.cxx.

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

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 65 of file TRT_LayerBuilderImpl.cxx.

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

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T > &  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 > &  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 > &  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 > &  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 > &  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 429 of file TRT_LayerBuilderImpl.cxx.

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

◆ 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:44
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
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
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:44
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.
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
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:210
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:731
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
Trk::CylinderBounds
Definition: CylinderBounds.h:46
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
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:39
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
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
Trk::SharedObject
std::shared_ptr< T > SharedObject
Definition: SharedObject.h:24
h
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:34
Trk::CylinderBounds::clone
virtual CylinderBounds * clone() const override
Virtual constructor.
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:623
InDetDD::TRT_Numerology::getNEndcapPhi
unsigned int getNEndcapPhi() const
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
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:62
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
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)
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
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