ATLAS Offline Software
Loading...
Searching...
No Matches
InDetDD::PixelDetectorManager Class Reference

Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel information, access. More...

#include <PixelDetectorManager.h>

Inheritance diagram for InDetDD::PixelDetectorManager:
Collaboration diagram for InDetDD::PixelDetectorManager:

Public Member Functions

 PixelDetectorManager (StoreGateSvc *detStore)
 Constructor.
 PixelDetectorManager (StoreGateSvc *detStore, const std::string &name, const std::string &pixelIDName)
 Constructor with name.
virtual unsigned int getNumTreeTops () const override
 Access to raw geometry:
virtual PVConstLink getTreeTop (unsigned int i) const override
void addTreeTop (const PVConstLink &vol)
 Add a Tree top:
virtual const SiDetectorElementgetDetectorElement (const Identifier &id) const override
 access to individual elements : via Identifier
virtual const SiDetectorElementgetDetectorElement (const IdentifierHash &idHash) const override
 access to individual elements : via IdentifierHash
const SiDetectorElementgetDetectorElement (int barrel_endcap, int layer_wheel, int phi_module, int eta_module) const
 access to individual elements : via element identification
virtual const SiDetectorElementCollectiongetDetectorElementCollection () const override
 access to whole collection via Iterators
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin () const override
virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd () const override
virtual SiDetectorElementCollection::iterator getDetectorElementBegin () override
virtual SiDetectorElementCollection::iterator getDetectorElementEnd () override
virtual void addDetectorElement (SiDetectorElement *element) override
 Add elememts.
virtual void addAlignableTransform (int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
 Add alignable transforms.
virtual void addAlignableTransform (int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVPhysVol *child)
 As above but does a dynamic_cast to GeoVFullPhysVol.
virtual void addAlignableTransform (int, const Identifier &, GeoAlignableTransform *) override
 Add alignable transforms.
virtual void initNeighbours () override
 Initialize the neighbours.
virtual bool isPixel () const override
 Methods to query which manager we have.
virtual bool identifierBelongs (const Identifier &id) const override
 Check identifier is for this detector.
unsigned int getBarrelLayers () const
 Layers built.
unsigned int getEndcapLayers () const
 Layers built.
virtual const PixelModuleDesigngetPixelDesign (int i) const
 Access to module design, Casts to PixelModuleDesign.
bool processSpecialAlignment (const std::string &, InDetDD::AlignFolderType) override
 Process new IBLDist DB folder.
bool processSpecialAlignment (const std::string &key, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const override
virtual bool processGlobalAlignment (const std::string &, int level, FrameType frame, const CondAttrListCollection *obj, GeoVAlignmentStore *alignStore) const override
 Process new global DB folders for L1 and L2.
const std::string & tag () const
 Get tag used in dictionary.
bool isSCT () const
virtual void invalidateAll ()
 Invalidate cache for all detector elements.
virtual void updateAll () const
 Update all caches.
const SiDetectorDesignaddDesign (std::unique_ptr< const SiDetectorDesign > &&)
 Access to module design; returns an observer pointer.
int numDesigns () const
const SiDetectorDesigngetDesign (int i) const
const SiNumerologynumerology () const
 Access Numerology.
SiNumerologynumerology ()
void setCommonItems (std::unique_ptr< const SiCommonItems > &&commonItems)
 Set SiCommonItems.
const VersiongetVersion () const
 Get version information.
const std::string & getLayout () const
void setVersion (const Version &version)
void addChannel (const std::string &key, int level, FrameType frame)
 Alignment access.
void addFolder (const std::string &key)
void addSpecialFolder (const std::string &key)
void addGlobalFolder (const std::string &key)
void addAlignFolderType (const AlignFolderType alignfolder)
StatusCode align ()
StatusCode align (const RawAlignmentObjects &alignObjects, GeoVAlignmentStore *alignStore) const
bool msgLvl (const MSG::Level lvl) const
 Test the output level.
MsgStream & msg () const
 The standard message stream.
MsgStream & msg (const MSG::Level lvl) const
 The standard message stream.
void setLevel (MSG::Level lvl)
 Change the current logging level.

Static Public Member Functions

static bool setAlignableTransformGlobalDelta (ExtendedAlignableTransform *extXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
 Helper method to set delta transform from a global delta - Amg interface.
static bool setAlignableTransformLocalDelta (ExtendedAlignableTransform *extXF, const Amg::Transform3D &localToGlobalXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
 Helper method to set delta transform from a local delta - Amg interface.

Public Attributes

AlignFolderType m_alignfoldertype

Protected Attributes

StoreGateSvcm_detStore
std::atomic_bool m_suppressWarnings

Private Types

typedef std::map< Identifier, std::unique_ptr< ExtendedAlignableTransform > > AlignableTransformMap

Private Member Functions

virtual bool setAlignableTransformDelta (int level, const Identifier &id, const Amg::Transform3D &delta, FrameType frame, GeoVAlignmentStore *alignStore) const override
 implements the main alignment update for delta transforms in different frames, it translates into the LocalDelta or GlobalDelta function of SiDetectorManager
const PixelDetectorManageroperator= (const PixelDetectorManager &right)
 prevent copy and assignment
 PixelDetectorManager (const PixelDetectorManager &right)
virtual const PixelIDgetIdHelper () const override
void printTransform (MSG::Level level, const Amg::Transform3D &tr) const
const LevelInfogetLevel (const std::string &key) const
 Retrieve level information.
bool processAlignmentContainer (const std::string &key) const
 return align folder string to use
bool processAlignmentContainer (const AlignableTransformContainer *container, GeoVAlignmentStore *alignStore) const
bool processKey (const std::string &key, const AlignableTransform *transformCollection, GeoVAlignmentStore *alignStore=nullptr) const
 Called by processAlignmentContainer, applies only one key on the transform Collections.
bool processGlobalAlignmentContainer (const std::string &key, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const
void initMessaging () const
 Initialize our message level and MessageSvc.

Private Attributes

std::vector< PVConstLink > m_volume
SiDetectorElementCollection m_elementCollection
std::vector< AlignableTransformMapm_higherAlignableTransforms
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_alignableTransforms
const PixelIDm_idHelper
bool m_isLogical
 This variable switches the how the local alignment corrections are applied If true they will be calcualted on top of all of other corrections but in the default reference frame If false they will be calcualted on top of all of other corrections but in the globally aligned reference frame.
std::string m_tag
SiNumerology m_numerology
std::vector< std::unique_ptr< const SiDetectorDesign > > m_designs
std::unique_ptr< const SiCommonItemsm_commonItems
Version m_version
std::map< std::string, LevelInfom_keys
std::set< std::string > m_folders
std::set< std::string > m_specialFolders
std::set< std::string > m_globalFolders
std::string m_nm
 Message source name.
boost::thread_specific_ptr< MsgStream > m_msg_tls
 MsgStream instance (a std::cout like with print-out levels).
std::atomic< IMessageSvc * > m_imsg { nullptr }
 MessageSvc pointer.
std::atomic< MSG::Level > m_lvl { MSG::NIL }
 Current logging level.
std::atomic_flag m_initialized ATLAS_THREAD_SAFE = ATOMIC_FLAG_INIT
 Messaging initialized (initMessaging).

Static Private Attributes

static const LevelInfo s_invalidLevel

Detailed Description

Dedicated detector manager extending the functionality of the SiDetectorManager with dedicated pixel information, access.

Author
: Grant Gorfine
  • modified and maintained by Nick Styles & Andreas Salzburger

Definition at line 47 of file PixelDetectorManager.h.

Member Typedef Documentation

◆ AlignableTransformMap

Definition at line 164 of file PixelDetectorManager.h.

Constructor & Destructor Documentation

◆ PixelDetectorManager() [1/3]

InDetDD::PixelDetectorManager::PixelDetectorManager ( StoreGateSvc * detStore)

Constructor.

Definition at line 58 of file PixelDetectorManager.cxx.

59 : PixelDetectorManager(detStore, "Pixel", "PixelID"){ }
PixelDetectorManager(StoreGateSvc *detStore)
Constructor.

◆ PixelDetectorManager() [2/3]

InDetDD::PixelDetectorManager::PixelDetectorManager ( StoreGateSvc * detStore,
const std::string & name,
const std::string & pixelIDName )

Constructor with name.

Definition at line 25 of file PixelDetectorManager.cxx.

28 : SiDetectorManager(detStore, name),
29 m_idHelper(nullptr),
30 m_isLogical(false) // Change to true to change the definition of local module corrections
31 {
32 //
33 // Initialized the Identifier helper.
34 //
35 if (pixelIDName == "PLR_ID") {
36 const PLR_ID* plr_idHelper;
37 StatusCode sc = detStore->retrieve(plr_idHelper, pixelIDName);
38 if (sc.isFailure()) {
39 ATH_MSG_ERROR("Could not retrieve PLR_ID helper");
40 }
41 m_idHelper = plr_idHelper;
42 } else {
43 StatusCode sc = detStore->retrieve(m_idHelper, pixelIDName);
44 if (sc.isFailure()) {
45 ATH_MSG_ERROR("Could not retrieve PixelID helper");
46 }
47 }
48
49 // Initialize the collections.
50 if (m_idHelper) {
51 m_elementCollection.resize(m_idHelper->wafer_hash_max());
52 m_alignableTransforms.resize(m_idHelper->wafer_hash_max());
53 }
54 //https://its.cern.ch/jira/browse/ATLASRECTS-4886
56 }
#define ATH_MSG_ERROR(x,...)
static Double_t sc
std::vector< std::unique_ptr< ExtendedAlignableTransform > > m_alignableTransforms
SiDetectorElementCollection m_elementCollection
bool m_isLogical
This variable switches the how the local alignment corrections are applied If true they will be calcu...
SiDetectorManager(StoreGateSvc *detStore, const std::string &name)
StatusCode retrieve(const T *&ptr) const
Retrieve the default object into a const T*.
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ PixelDetectorManager() [3/3]

InDetDD::PixelDetectorManager::PixelDetectorManager ( const PixelDetectorManager & right)
private

Member Function Documentation

◆ addAlignableTransform() [1/3]

void InDetDD::PixelDetectorManager::addAlignableTransform ( int level,
const Identifier & id,
GeoAlignableTransform * xf,
const GeoVFullPhysVol * child )
virtual

Add alignable transforms.

No access to these, they will be changed by manager:

Definition at line 269 of file PixelDetectorManager.cxx.

273 {
274 GeoNodePtr<GeoAlignableTransform> tmp_transform(transform);
275 if (m_idHelper) {
276 if (level == 0) {
277 IdentifierHash idHash = m_idHelper->wafer_hash(id);
278 if (idHash.is_valid()) {
279 m_alignableTransforms[idHash]= std::make_unique<ExtendedAlignableTransform>(transform, child);
280 }
281 } else {
282 // Higher levels are saved in a map. NB the index is level-1 as level=0 is treated above.
284 if (index >= static_cast<int>(m_higherAlignableTransforms.size())) m_higherAlignableTransforms.resize(index+1);
285 m_higherAlignableTransforms[index][id] = std::make_unique<ExtendedAlignableTransform>(transform, child);
286 }
287 }
288 }
GeoIntrusivePtr< T > GeoNodePtr
Definition GeoNodePtr.h:12
constexpr bool is_valid() const
std::vector< AlignableTransformMap > m_higherAlignableTransforms
str index
Definition DeMoScan.py:362
const int FIRST_HIGHER_LEVEL

◆ addAlignableTransform() [2/3]

void InDetDD::PixelDetectorManager::addAlignableTransform ( int level,
const Identifier & id,
GeoAlignableTransform * xf,
const GeoVPhysVol * child )
virtual

As above but does a dynamic_cast to GeoVFullPhysVol.

Definition at line 252 of file PixelDetectorManager.cxx.

256 {
257 GeoNodePtr<GeoAlignableTransform> tmp_transform(transform);
258 if (m_idHelper) {
259
260 const GeoVFullPhysVol * childFPV = dynamic_cast<const GeoVFullPhysVol *>(child);
261 if (!childFPV) {
262 ATH_MSG_ERROR("Child of alignable transform is not a full physical volume");
263 } else {
264 addAlignableTransform (level, id, transform, childFPV);
265 }
266 }
267 }
virtual void addAlignableTransform(int level, const Identifier &id, GeoAlignableTransform *xf, const GeoVFullPhysVol *child)
Add alignable transforms.

◆ addAlignableTransform() [3/3]

virtual void InDetDD::PixelDetectorManager::addAlignableTransform ( int level,
const Identifier & id,
GeoAlignableTransform * xf )
inlineoverridevirtual

Add alignable transforms.

No access to these, they will be changed by manager:

Implements InDetDD::SiDetectorManager.

Definition at line 101 of file PixelDetectorManager.h.

103 {}; // For backward compatibility

◆ addAlignFolderType()

void InDetDD::InDetDetectorManager::addAlignFolderType ( const AlignFolderType alignfolder)
inherited

Definition at line 81 of file InDetDetectorManager.cxx.

82 {
83 m_alignfoldertype = alignfolder;
84 }

◆ addChannel()

void InDetDD::InDetDetectorManager::addChannel ( const std::string & key,
int level,
FrameType frame )
inherited

Alignment access.

Definition at line 56 of file InDetDetectorManager.cxx.

57 {
58 std::string frameStr = "other";
59 if (frame == InDetDD::global) frameStr = "global";
60 if (frame == InDetDD::local) frameStr = "local";
61 ATH_MSG_INFO("Registering alignment channel with key " << key << ", level " << level
62 << ", with frame " << frameStr << ".");
63 m_keys[key] = LevelInfo(level, frame);
64 }
#define ATH_MSG_INFO(x,...)
std::map< std::string, LevelInfo > m_keys

◆ addDesign()

const SiDetectorDesign * InDetDD::SiDetectorManager::addDesign ( std::unique_ptr< const SiDetectorDesign > && design)
inherited

Access to module design; returns an observer pointer.

Definition at line 134 of file SiDetectorManager.cxx.

135 {
136 m_designs.push_back(std::move(design));
137 return m_designs.back().get();
138 }
std::vector< std::unique_ptr< const SiDetectorDesign > > m_designs

◆ addDetectorElement()

void InDetDD::PixelDetectorManager::addDetectorElement ( SiDetectorElement * element)
overridevirtual

Add elememts.

Implements InDetDD::SiDetectorManager.

Definition at line 123 of file PixelDetectorManager.cxx.

124 {
125 IdentifierHash idHash = element->identifyHash();
126 if (idHash >= m_elementCollection.size())
127 throw std::runtime_error("PixelDetectorManager: Error adding detector element.");
128 m_elementCollection[idHash] = element;
129 }
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)

◆ addFolder()

void InDetDD::InDetDetectorManager::addFolder ( const std::string & key)
inherited

Definition at line 66 of file InDetDetectorManager.cxx.

67 {
68 m_folders.insert(key);
69 }
std::set< std::string > m_folders

◆ addGlobalFolder()

void InDetDD::InDetDetectorManager::addGlobalFolder ( const std::string & key)
inherited

Definition at line 76 of file InDetDetectorManager.cxx.

77 {
78 m_globalFolders.insert(key);
79 }
std::set< std::string > m_globalFolders

◆ addSpecialFolder()

void InDetDD::InDetDetectorManager::addSpecialFolder ( const std::string & key)
inherited

Definition at line 71 of file InDetDetectorManager.cxx.

72 {
73 m_specialFolders.insert(key);
74 }
std::set< std::string > m_specialFolders

◆ addTreeTop()

void InDetDD::PixelDetectorManager::addTreeTop ( const PVConstLink & vol)

Add a Tree top:

Definition at line 71 of file PixelDetectorManager.cxx.

71 {
72 m_volume.push_back(vol);
73 }
std::vector< PVConstLink > m_volume

◆ align() [1/2]

StatusCode InDetDD::InDetDetectorManager::align ( )
inherited

Definition at line 95 of file InDetDetectorManager.cxx.

96 {
97 ATH_MSG_DEBUG("align() called ");
98
99 if (!getIdHelper()) return StatusCode::SUCCESS;
100
101 bool alignmentChange = false;
102 const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
103
104 // New global aligment folders should be processed first
105 for (const auto & globalFolder : m_globalFolders) {
106
107 try {
108 bool status = processGlobalAlignmentContainer(globalFolder);
109 alignmentChange = (alignmentChange || status);
110 } catch(std::runtime_error& err) {
111 // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
112 ATH_MSG_FATAL(err.what());
113 return StatusCode::FAILURE;
114 }
115 }
116
117 // Regular alignments. Loop through folder keys. Normally only one.
118 for (const auto & folder : m_folders) {
119
120 try {
121 bool status = processAlignmentContainer(folder);
122 alignmentChange = (alignmentChange || status);
123 }
124 catch(std::runtime_error& err) {
125 // alignments should always exist so we return fatal if we could not process the alignment for this key
126 ATH_MSG_FATAL(err.what());
127 return StatusCode::FAILURE;
128 }
129 }
130 // Detector specific aligments
131 for (const auto & specialFolder : m_specialFolders) {
132 try {
133 bool status = processSpecialAlignment(specialFolder, aligninfo.AlignFolder());
134 alignmentChange = (alignmentChange || status);
135 } catch(std::runtime_error& err) {
136 // keys are empty when running simualtion. It is normal for detector specific aligments not to exist.
137 ATH_MSG_INFO(err.what());
138 // We continue as detector specific aligments don't always exist.
139 }
140 }
141
142 // We invalidate all the elements if at least one alignment changed.
143 if (alignmentChange) {
144 //this is non-const as it invalidate the elements we hold
146 }
147
148 return StatusCode::SUCCESS;
149 }
#define ATH_MSG_DEBUG(x,...)
#define ATH_MSG_FATAL(x,...)
virtual bool processSpecialAlignment(const std::string &key, InDetDD::AlignFolderType alignfolder)=0
bool processGlobalAlignmentContainer(const std::string &key, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const
virtual const AtlasDetectorID * getIdHelper() const =0
virtual void invalidateAll()=0
Invalidate cache for all detector elements.
bool processAlignmentContainer(const std::string &key) const
return align folder string to use
status
Definition merge.py:16

◆ align() [2/2]

StatusCode InDetDD::InDetDetectorManager::align ( const RawAlignmentObjects & alignObjects,
GeoVAlignmentStore * alignStore ) const
inherited

Definition at line 151 of file InDetDetectorManager.cxx.

152 {
153
154 ATH_MSG_DEBUG("align() called from an alignment CondAlg");
155 if (!getIdHelper()) return StatusCode::SUCCESS; // To Do: is it really a success?
156
157 bool alignmentChange = false;
158 // const AlignInfo &aligninfo = AlignInfo(m_alignfoldertype);
159
160 for(const auto& alignObj : alignObjects) {
161 const std::string& key = alignObj.first;
162
163 ATH_MSG_DEBUG(" Processing folder " << key);
164
165 if(m_globalFolders.find(key)!=m_globalFolders.end()) {
166 try {
167 // New global alignemnts
168 const CondAttrListCollection* obj = static_cast<const CondAttrListCollection*>(alignObj.second);
169 bool status = processGlobalAlignmentContainer(key,obj,alignStore);
170 alignmentChange = (alignmentChange || status);
171 } catch(std::runtime_error& err) {
172 // alignments should always exist so we return fatal if we could not process the alignment for this key
173 ATH_MSG_FATAL(err.what());
174 return StatusCode::FAILURE;
175 }
176 }
177 else if(m_folders.find(key)!=m_folders.end()) {
178 try {
179 // Regular alignemnts
180 const AlignableTransformContainer* container = static_cast<const AlignableTransformContainer*>(alignObj.second);
181 bool status = processAlignmentContainer(container,alignStore);
182 alignmentChange = (alignmentChange || status);
183 } catch(std::runtime_error& err) {
184 // alignments should always exist so we return fatal if we could not process the alignment for this key
185 ATH_MSG_FATAL(err.what());
186 return StatusCode::FAILURE;
187 }
188 }
189 else if(m_specialFolders.find(key)!=m_specialFolders.end()) {
190 try {
191 // Detector specific alignments
192 const CondAttrListCollection *obj =
193 static_cast<const CondAttrListCollection*>(alignObj.second);
194 bool status = processSpecialAlignment(key, obj, alignStore);
195 alignmentChange = (alignmentChange || status);
196 }
197 catch(std::runtime_error& err) {
198 // Should always exist if the folder was requested so we return fatal if
199 // we could not process the alignment for this key
200 ATH_MSG_FATAL(err.what());
201 return StatusCode::FAILURE;
202 }
203 }
204 else {
205 // Should not be any other keys specified in raw alignment object.
206 ATH_MSG_ERROR("Unrecognized folder name "<<key<<". Expected names are:");
207 for (const std::string& out:m_globalFolders) ATH_MSG_ERROR("--"<<out);
208 for (const std::string& out:m_folders) ATH_MSG_ERROR("--"<<out);
209 for (const std::string& out:m_specialFolders) ATH_MSG_ERROR("--"<<out);
210
211 return StatusCode::RECOVERABLE;
212 }
213 }
214 return StatusCode::SUCCESS;
215 }
CondMultChanCollection< AlignableTransform > AlignableTransformContainer
const SG::AuxVectorData * container() const
Return the container holding this element.

◆ getBarrelLayers()

unsigned int InDetDD::PixelDetectorManager::getBarrelLayers ( ) const

Layers built.

Deprecated. Recommend to access via numerology (see SiDetectorManager) Warning: decodes in "human-readable", e.g. using 3 out of 3 pixel layers yiels 111, the laset two out of 3 in 110, etc.

Definition at line 167 of file PixelDetectorManager.cxx.

168 {
169 unsigned int barrelLayers = 0;
170 for (int i = numerology().numLayers() - 1; i >= 0; --i) {
171 barrelLayers *= 10;
172 barrelLayers += numerology().useLayer(i);
173 }
174 return barrelLayers;
175 }
const SiNumerology & numerology() const
Access Numerology.
bool useLayer(int layer) const
Check if layer exists.
constexpr unsigned int numLayers()
Definition HIEventDefs.h:23

◆ getDesign()

const SiDetectorDesign * InDetDD::SiDetectorManager::getDesign ( int i) const
inherited

Definition at line 146 of file SiDetectorManager.cxx.

147 {
148 return m_designs[i].get();
149 }

◆ getDetectorElement() [1/3]

const SiDetectorElement * InDetDD::PixelDetectorManager::getDetectorElement ( const Identifier & id) const
overridevirtual

access to individual elements : via Identifier

Implements InDetDD::SiDetectorManager.

Definition at line 75 of file PixelDetectorManager.cxx.

76 {
77 // NB the id helpers implementation for getting a hash is not optimal.
78 // Essentially does a binary search.
79 // Make sure it is a wafer Id
80 Identifier waferId = m_idHelper->wafer_id(id);
81 IdentifierHash idHash = m_idHelper->wafer_hash(waferId);
82 if (idHash.is_valid()) {
83 return m_elementCollection[idHash];
84 } else {
85 return nullptr;
86 }
87 }

◆ getDetectorElement() [2/3]

const SiDetectorElement * InDetDD::PixelDetectorManager::getDetectorElement ( const IdentifierHash & idHash) const
overridevirtual

access to individual elements : via IdentifierHash

Implements InDetDD::SiDetectorManager.

Definition at line 89 of file PixelDetectorManager.cxx.

90 {
91 return m_elementCollection[idHash];
92 }

◆ getDetectorElement() [3/3]

const SiDetectorElement * InDetDD::PixelDetectorManager::getDetectorElement ( int barrel_endcap,
int layer_wheel,
int phi_module,
int eta_module ) const

access to individual elements : via element identification

Definition at line 94 of file PixelDetectorManager.cxx.

95 {
96 return getDetectorElement(m_idHelper->wafer_id(barrel_endcap, layer_wheel, phi_module, eta_module));
97 }
virtual const SiDetectorElement * getDetectorElement(const Identifier &id) const override
access to individual elements : via Identifier

◆ getDetectorElementBegin() [1/2]

SiDetectorElementCollection::const_iterator InDetDD::PixelDetectorManager::getDetectorElementBegin ( ) const
overridevirtual

Implements InDetDD::SiDetectorManager.

Definition at line 104 of file PixelDetectorManager.cxx.

105 {
106 return m_elementCollection.begin();
107 }

◆ getDetectorElementBegin() [2/2]

SiDetectorElementCollection::iterator InDetDD::PixelDetectorManager::getDetectorElementBegin ( )
overridevirtual

Implements InDetDD::SiDetectorManager.

Definition at line 113 of file PixelDetectorManager.cxx.

114 {
115 return m_elementCollection.begin();
116 }

◆ getDetectorElementCollection()

const SiDetectorElementCollection * InDetDD::PixelDetectorManager::getDetectorElementCollection ( ) const
overridevirtual

access to whole collection via Iterators

Implements InDetDD::SiDetectorManager.

Definition at line 99 of file PixelDetectorManager.cxx.

100 {
101 return &m_elementCollection;
102 }

◆ getDetectorElementEnd() [1/2]

SiDetectorElementCollection::const_iterator InDetDD::PixelDetectorManager::getDetectorElementEnd ( ) const
overridevirtual

Implements InDetDD::SiDetectorManager.

Definition at line 109 of file PixelDetectorManager.cxx.

110 {
111 return m_elementCollection.end();
112 }

◆ getDetectorElementEnd() [2/2]

SiDetectorElementCollection::iterator InDetDD::PixelDetectorManager::getDetectorElementEnd ( )
overridevirtual

Implements InDetDD::SiDetectorManager.

Definition at line 118 of file PixelDetectorManager.cxx.

119 {
120 return m_elementCollection.end();
121 }

◆ getEndcapLayers()

unsigned int InDetDD::PixelDetectorManager::getEndcapLayers ( ) const

Layers built.

Deprecated. Recommend to access via numerology (see SiDetectorManager) Warning: decodes in "human-readable", e.g. using 3 out of 3 pixel layers yiels 111, the laset two out of 3 in 110, etc.

Definition at line 177 of file PixelDetectorManager.cxx.

178 {
179 unsigned int endcapLayers = 0;
180 for (int i = numerology().numDisks() - 1; i >= 0; --i) {
181 endcapLayers *= 10;
182 endcapLayers += numerology().useDisk(i);
183 }
184 return endcapLayers;
185 }
bool useDisk(int disk) const
Check if disk exists.

◆ getIdHelper()

const PixelID * InDetDD::PixelDetectorManager::getIdHelper ( ) const
overrideprivatevirtual

Implements InDetDD::InDetDetectorManager.

Definition at line 162 of file PixelDetectorManager.cxx.

163 {
164 return m_idHelper;
165 }

◆ getLayout()

const std::string & InDetDD::InDetDetectorManager::getLayout ( ) const
inherited

Definition at line 38 of file InDetDetectorManager.cxx.

39 {
40 return m_version.layout();
41 }

◆ getLevel()

const InDetDetectorManager::LevelInfo & InDetDD::InDetDetectorManager::getLevel ( const std::string & key) const
privateinherited

Retrieve level information.

Definition at line 87 of file InDetDetectorManager.cxx.

88 {
89 std::map<std::string, LevelInfo>::const_iterator iter;
90 iter = m_keys.find(key);
91 if (iter == m_keys.end()) return s_invalidLevel;
92 return iter->second;
93 }
static const LevelInfo s_invalidLevel

◆ getNumTreeTops()

unsigned int InDetDD::PixelDetectorManager::getNumTreeTops ( ) const
overridevirtual

Access to raw geometry:

Definition at line 61 of file PixelDetectorManager.cxx.

62 {
63 return m_volume.size();
64 }

◆ getPixelDesign()

const PixelModuleDesign * InDetDD::PixelDetectorManager::getPixelDesign ( int i) const
virtual

Access to module design, Casts to PixelModuleDesign.

Definition at line 297 of file PixelDetectorManager.cxx.

298 {
299 return dynamic_cast<const PixelModuleDesign *>(getDesign(i));
300 }
const SiDetectorDesign * getDesign(int i) const

◆ getTreeTop()

PVConstLink InDetDD::PixelDetectorManager::getTreeTop ( unsigned int i) const
overridevirtual

Definition at line 66 of file PixelDetectorManager.cxx.

67 {
68 return m_volume[i];
69 }

◆ getVersion()

const Version & InDetDD::InDetDetectorManager::getVersion ( ) const
inherited

Get version information.

Definition at line 33 of file InDetDetectorManager.cxx.

34 {
35 return m_version;
36 }

◆ identifierBelongs()

bool InDetDD::PixelDetectorManager::identifierBelongs ( const Identifier & id) const
overridevirtual

Check identifier is for this detector.

Implements InDetDD::InDetDetectorManager.

Definition at line 290 of file PixelDetectorManager.cxx.

291 {
292 return getIdHelper()->is_pixel(id);
293 }
bool is_pixel(Identifier id) const
virtual const PixelID * getIdHelper() const override

◆ initMessaging()

void AthMessaging::initMessaging ( ) const
privateinherited

Initialize our message level and MessageSvc.

This method should only be called once.

Definition at line 39 of file AthMessaging.cxx.

40{
42 // If user did not set an explicit level, set a default
43 if (m_lvl == MSG::NIL) {
44 m_lvl = m_imsg ?
45 static_cast<MSG::Level>( m_imsg.load()->outputLevel(m_nm) ) :
46 MSG::INFO;
47 }
48}
std::string m_nm
Message source name.
std::atomic< IMessageSvc * > m_imsg
MessageSvc pointer.
std::atomic< MSG::Level > m_lvl
Current logging level.
IMessageSvc * getMessageSvc(bool quiet=false)
int outputLevel(const IMessageSvc *ims, const std::string &source)

◆ initNeighbours()

void InDetDD::PixelDetectorManager::initNeighbours ( )
overridevirtual

Initialize the neighbours.

This can only be done when all elements are built.

Implements InDetDD::SiDetectorManager.

Definition at line 131 of file PixelDetectorManager.cxx.

132 {
134
135 // Loop over all elements and set the neighbours
136 for (iter = m_elementCollection.begin(); iter != m_elementCollection.end(); ++iter){
137
138 SiDetectorElement * element = *iter;
139 if (element) {
140
141 IdentifierHash idHash = element->identifyHash();
142 IdentifierHash idHashOther;
143
144 int result;
145 // If no neighbour, result != 0 in which case we leave neighbour as null
146 result = m_idHelper->get_next_in_eta(idHash, idHashOther);
147 if (result==0) element->setNextInEta(m_elementCollection[idHashOther]);
148
149 result = m_idHelper->get_prev_in_eta(idHash, idHashOther);
150 if (result==0) element->setPrevInEta(m_elementCollection[idHashOther]);
151
152 result = m_idHelper->get_next_in_phi(idHash, idHashOther);
153 if (result==0) element->setNextInPhi(m_elementCollection[idHashOther]);
154
155 result = m_idHelper->get_prev_in_phi(idHash, idHashOther);
156 if (result==0) element->setPrevInPhi(m_elementCollection[idHashOther]);
157 }
158 }
159 }
DataModel_detail::iterator< DataVector > iterator
Definition DataVector.h:842
void setPrevInEta(const SiDetectorElement *element)
void setPrevInPhi(const SiDetectorElement *element)
void setNextInEta(const SiDetectorElement *element)
void setNextInPhi(const SiDetectorElement *element)

◆ invalidateAll()

void InDetDD::SiDetectorManager::invalidateAll ( )
virtualinherited

Invalidate cache for all detector elements.

Implements InDetDD::InDetDetectorManager.

Definition at line 39 of file SiDetectorManager.cxx.

40 {
42 element_iter != getDetectorElementEnd();
43 ++element_iter) {
44
45 if (*element_iter) {
46 (*element_iter)->invalidate();
47 }
48 }
49 }
virtual SiDetectorElementCollection::const_iterator getDetectorElementEnd() const =0
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const =0

◆ isPixel()

virtual bool InDetDD::PixelDetectorManager::isPixel ( ) const
inlineoverridevirtual

Methods to query which manager we have.

Implements InDetDD::SiDetectorManager.

Definition at line 110 of file PixelDetectorManager.h.

110{return true;}

◆ isSCT()

bool InDetDD::SiDetectorManager::isSCT ( ) const
inlineinherited

Definition at line 100 of file SiDetectorManager.h.

100{return !isPixel();}
virtual bool isPixel() const =0
Methods to query which manager we have.

◆ msg() [1/2]

MsgStream & AthMessaging::msg ( ) const
inlineinherited

The standard message stream.

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

Definition at line 167 of file AthMessaging.h.

168{
169 MsgStream* ms = m_msg_tls.get();
170 if (!ms) {
171 if (!m_initialized.test_and_set()) initMessaging();
172 ms = new MsgStream(m_imsg,m_nm);
173 m_msg_tls.reset( ms );
174 }
175
176 ms->setLevel (m_lvl);
177 return *ms;
178}
boost::thread_specific_ptr< MsgStream > m_msg_tls
MsgStream instance (a std::cout like with print-out levels).
void initMessaging() const
Initialize our message level and MessageSvc.

◆ msg() [2/2]

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

The standard message stream.

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

Definition at line 182 of file AthMessaging.h.

183{ return msg() << lvl; }
MsgStream & msg() const
The standard message stream.

◆ msgLvl()

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

Test the output level.

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

Definition at line 151 of file AthMessaging.h.

152{
153 // If user did not set explicit message level we have to initialize
154 // the messaging and retrieve the default via the MessageSvc.
155 if (m_lvl==MSG::NIL && !m_initialized.test_and_set()) initMessaging();
156
157 if (m_lvl <= lvl) {
158 msg() << lvl;
159 return true;
160 } else {
161 return false;
162 }
163}

◆ numDesigns()

int InDetDD::SiDetectorManager::numDesigns ( ) const
inherited

Definition at line 140 of file SiDetectorManager.cxx.

141 {
142 return m_designs.size();
143 }

◆ numerology() [1/2]

SiNumerology & InDetDD::SiDetectorManager::numerology ( )
inlineinherited

Definition at line 129 of file SiDetectorManager.h.

129{return m_numerology;}

◆ numerology() [2/2]

const SiNumerology & InDetDD::SiDetectorManager::numerology ( ) const
inlineinherited

Access Numerology.

Definition at line 128 of file SiDetectorManager.h.

128{return m_numerology;}

◆ operator=()

const PixelDetectorManager & InDetDD::PixelDetectorManager::operator= ( const PixelDetectorManager & right)
private

prevent copy and assignment

◆ printTransform()

void InDetDD::PixelDetectorManager::printTransform ( MSG::Level level,
const Amg::Transform3D & tr ) const
private

Definition at line 658 of file PixelDetectorManager.cxx.

660 {
661 ATH_MSG_LVL_NOCHK(level, " - translation: " << tr.translation().x() << " " <<tr.translation().y() << " " <<tr.translation().z());
662 ATH_MSG_LVL_NOCHK(level, " - rotation:");
663 ATH_MSG_LVL_NOCHK(level, " " << tr(0,0) << " " << tr(0,1) << " " << tr(0,2));
664 ATH_MSG_LVL_NOCHK(level, " " << tr(1,0) << " " << tr(1,1) << " " << tr(1,2));
665 ATH_MSG_LVL_NOCHK(level, " " << tr(2,0) << " " << tr(2,1) << " " << tr(2,2));
666 }
#define ATH_MSG_LVL_NOCHK(lvl, x,...)

◆ processAlignmentContainer() [1/2]

bool InDetDD::InDetDetectorManager::processAlignmentContainer ( const AlignableTransformContainer * container,
GeoVAlignmentStore * alignStore ) const
privateinherited

Definition at line 245 of file InDetDetectorManager.cxx.

246 {
247 bool alignmentChange = false;
248
249 // Check if container is empty - this can occur if it is an invalid IOV.
250 if (container->empty()) {
251 ATH_MSG_ERROR("AlignableTransformContainer "
252 << " is empty. Probably due to out of range IOV"); // To Do: add key to this printout for making it more informative
253 // This should not occur in normal situations so we force job to abort.
254 throw std::runtime_error("Unable to apply Inner Detector alignments.");
255 }
256 // loop over all the AlignableTransform objects in the collection
257 // use only the last ones.
258 // /Indet/AlignL3/SCTEA9 appear repeatedly in tags of the /Indet/AlignL3 folder
259 std::map<const std::string, const AlignableTransform*> stringToTransform;
260 for (const auto *pat : *container) {
261 stringToTransform[pat->tag()] = pat;
262 }
263 for (const std::pair<const std::string, const AlignableTransform*>& value: stringToTransform) {
264 bool status = processKey(value.first, value.second, alignStore);
265 alignmentChange = (alignmentChange || status);
266 }
267 return alignmentChange;
268 }
bool processKey(const std::string &key, const AlignableTransform *transformCollection, GeoVAlignmentStore *alignStore=nullptr) const
Called by processAlignmentContainer, applies only one key on the transform Collections.

◆ processAlignmentContainer() [2/2]

bool InDetDD::InDetDetectorManager::processAlignmentContainer ( const std::string & key) const
privateinherited

return align folder string to use

Process the alignment container, calls processKey

Definition at line 217 of file InDetDetectorManager.cxx.

218 {
219 bool alignmentChange = false;
220
221 ATH_MSG_DEBUG("Dealing with key as container");
223 if (StatusCode::SUCCESS!=m_detStore->retrieve(container, key)) {
224 ATH_MSG_ERROR("Cannot find AlignableTransformContainer for key "
225 << key << " - no misalignment");
226 // This should not occur in normal situations so we force job to abort.
227 throw std::runtime_error("Unable to apply Inner Detector alignments");
228 }
229 // Check if container is empty - this can occur if it is an invalid IOV.
230 if (container->empty()) {
231 ATH_MSG_ERROR("AlignableTransformContainer for key "
232 << key << " is empty. Probably due to out of range IOV");
233 // This should not occur in normal situations so we force job to abort.
234 throw std::runtime_error("Unable to apply Inner Detector alignments.");
235 }
236 // loop over all the AlignableTransform objects in the collection
237 for (const auto *pat : *container) {
238
239 bool status = processKey(pat->tag(),pat);
240 alignmentChange = (alignmentChange || status);
241 }
242 return alignmentChange;
243 }

◆ processGlobalAlignment()

bool InDetDD::PixelDetectorManager::processGlobalAlignment ( const std::string & key,
int level,
FrameType frame,
const CondAttrListCollection * obj,
GeoVAlignmentStore * alignStore ) const
overridevirtual

Process new global DB folders for L1 and L2.

Reimplemented from InDetDD::InDetDetectorManager.

Definition at line 572 of file PixelDetectorManager.cxx.

573 {
574
575 bool alignmentChange = false;
576
577 ATH_MSG_INFO("Processing new global alignment containers with key " << key
578 << " in the " << frame << " frame at level " << level);
579
580 Identifier ident=Identifier();
581 const CondAttrListCollection* atrlistcol=obj;
582 //cppcheck-suppress nullPointerRedundantCheck
583 if (!atrlistcol) {
584 ATH_MSG_INFO("Read alignment from detector store with key " << key);
585 if (StatusCode::SUCCESS!=m_detStore->retrieve(atrlistcol,key)) {
586 ATH_MSG_WARNING("Cannot find new global align Container for key "
587 << key << " - no new global alignment");
588 return alignmentChange;
589 }
590 }
591 // Avoid cppcheck warning.
592 if (!atrlistcol) {
593 return alignmentChange;
594 }
595 {
596 // loop over objects in collection
597 //cppcheck-suppress nullPointerRedundantCheck
598 for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
599 const coral::AttributeList& atrlist=citr->second;
600 // We are in the Pixel manager, therefore ignore all that is not Pixel Identifier
601 if (atrlist["det"].data<int>()!=1) continue;
602
603 ident = getIdHelper()->wafer_id(atrlist["bec"].data<int>(),
604 atrlist["layer"].data<int>(),
605 atrlist["ring"].data<int>(),
606 atrlist["sector"].data<int>());
607
608 // Make sure we have valid HashID (This ONLY works here as the 0-modules exist)
609 // Precaution which does not work for e.g. SCT
610 if (!(getIdHelper()->wafer_hash(ident)).is_valid()){
611 ATH_MSG_WARNING("Invalid HashID for identifier " << getIdHelper()->show_to_string(ident));
612 ATH_MSG_WARNING("No global alignment corrections can be applied for invalid HashID's - exiting");
613 return false;
614 }
615
616 // construct new transform
617 // Order of rotations is defined as around z, then y, then x.
618 Amg::Translation3D newtranslation(atrlist["Tx"].data<float>(),atrlist["Ty"].data<float>(),atrlist["Tz"].data<float>());
619 Amg::Transform3D newtrans = newtranslation * Amg::RotationMatrix3D::Identity();
620 newtrans *= Amg::AngleAxis3D(atrlist["Rz"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,0.,1.));
621 newtrans *= Amg::AngleAxis3D(atrlist["Ry"].data<float>()*CLHEP::mrad, Amg::Vector3D(0.,1.,0.));
622 newtrans *= Amg::AngleAxis3D(atrlist["Rx"].data<float>()*CLHEP::mrad, Amg::Vector3D(1.,0.,0.));
623
624 ATH_MSG_DEBUG("New global DB -- channel: " << citr->first
625 << " ,det: " << atrlist["det"].data<int>()
626 << " ,bec: " << atrlist["bec"].data<int>()
627 << " ,layer: " << atrlist["layer"].data<int>()
628 << " ,ring: " << atrlist["ring"].data<int>()
629 << " ,sector: " << atrlist["sector"].data<int>()
630 << " ,Tx: " << atrlist["Tx"].data<float>()
631 << " ,Ty: " << atrlist["Ty"].data<float>()
632 << " ,Tz: " << atrlist["Tz"].data<float>()
633 << " ,Rx: " << atrlist["Rx"].data<float>()
634 << " ,Ry: " << atrlist["Ry"].data<float>()
635 << " ,Rz: " << atrlist["Rz"].data<float>());
636
637 // Set the new transform; Will replace existing one with updated transform
639 ident,
640 newtrans,
641 frame,
642 alignStore);
643
644 if (!status) {
645 ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
646 << getIdHelper()->show_to_string(ident)
647 << " at level " << level << " for new global DB");
648 }
649
650 alignmentChange = (alignmentChange || status);
651 }
652 }
653 return alignmentChange;
654 }
#define ATH_MSG_WARNING(x,...)
const_iterator end() const
const_iterator begin() const
Access to Chan/AttributeList pairs via iterators.
ChanAttrListMap::const_iterator const_iterator
virtual bool setAlignableTransformDelta(int level, const Identifier &id, const Amg::Transform3D &delta, FrameType frame, GeoVAlignmentStore *alignStore) const override
implements the main alignment update for delta transforms in different frames, it translates into the...
Identifier wafer_id(int barrel_ec, int layer_disk, int phi_module, int eta_module) const
For a single crystal.
Definition PixelID.h:355
Eigen::AngleAxisd AngleAxis3D
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D
Eigen::Translation< double, 3 > Translation3D
@ ident
Definition HitInfo.h:77

◆ processGlobalAlignmentContainer()

bool InDetDD::InDetDetectorManager::processGlobalAlignmentContainer ( const std::string & key,
const CondAttrListCollection * obj = nullptr,
GeoVAlignmentStore * alignStore = nullptr ) const
privateinherited

Definition at line 333 of file InDetDetectorManager.cxx.

336 {
337 bool alignmentChange = false;
338
339 ATH_MSG_DEBUG("processing GlobalAlignmentContainer with key: " << key);
340 // From the key determine what level in hierarchy we are dealing with.
341 // returns -1 if unrecognized.
342 const LevelInfo & levelInfo = getLevel(key);
343 if (levelInfo.isValid()) {
344 ATH_MSG_VERBOSE("Processing channel: " << key);
345 } else {
346 ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
347 }
348 // return silently if unrecognised - this can happen in container mode
349 // when a single container holds transforms for both pixel and SCT
350 if (!levelInfo.isValid() ) return false;
351
352 // Within detector specific code
353 bool status = processGlobalAlignment(key, levelInfo.level(), levelInfo.frame(), obj, alignStore);
354
355 alignmentChange = (alignmentChange || status);
356
357 return alignmentChange;
358
359 }
#define ATH_MSG_VERBOSE(x,...)
virtual bool processGlobalAlignment(const std::string &key, int level, FrameType frame, const CondAttrListCollection *obj=nullptr, GeoVAlignmentStore *alignStore=nullptr) const
const LevelInfo & getLevel(const std::string &key) const
Retrieve level information.

◆ processKey()

bool InDetDD::InDetDetectorManager::processKey ( const std::string & key,
const AlignableTransform * transformCollection,
GeoVAlignmentStore * alignStore = nullptr ) const
privateinherited

Called by processAlignmentContainer, applies only one key on the transform Collections.

Definition at line 270 of file InDetDetectorManager.cxx.

273 {
274 bool alignmentChange = false;
275
276 // From the key determine what level in hierarchy we are dealing with.
277 // returns -1 if unrecognized.
278 const LevelInfo & levelInfo = getLevel(key);
279 if (levelInfo.isValid()) {
280 ATH_MSG_VERBOSE("Processing channel: " << key);
281 } else {
282 ATH_MSG_DEBUG("Channel " << key << " not registered in this manager");
283 }
284 // return silently if unrecognised - this can happen in container mode
285 // when a single container holds transforms for both pixel and SCT
286 if (!levelInfo.isValid() ) return false;
287
288 //Loop over the effected nodes.
289 for (AlignableTransform::AlignTransMem_citr trans_iter = transformCollection->begin();
290 trans_iter != transformCollection->end();
291 ++trans_iter) {
292 ATH_MSG_DEBUG( "Get alignment for identifier "
293 << getIdHelper()->show_to_string(trans_iter->identify())
294 << " at level " << levelInfo.level());
295
296 // The delta in the conditions DB is not necessarily the same as what is needed in the
297 // alignable transform. At the moment we support global frame, local frame or an alternative frame
298 // The setAlignableTransformDelta method takes care of this correction - this is CLHEP <--> Amg interfaced
299 bool status = setAlignableTransformDelta(levelInfo.level(),
300 trans_iter->identify(),
301 Amg::CLHEPTransformToEigen(trans_iter->transform()),
302 levelInfo.frame(),
303 alignStore);
304
305 alignmentChange = (alignmentChange || status);
306
307 if (!status) {
308 if (!identifierBelongs(trans_iter->identify())) {
309 // Its probably OK. Eg /Indet/Align/ID contains alse pixel and sct ids.
310 ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
311 << " Probably OK if its /Indet/Align/ID folder. "
312 << getIdHelper()->show_to_string(trans_iter->identify())
313 << " at level " << levelInfo.level());
314 } else {
315 if (m_suppressWarnings) {
316 ATH_MSG_DEBUG("WARNING: Cannot set AlignableTransform for identifier "
317 << getIdHelper()->show_to_string(trans_iter->identify())
318 << " at level " << levelInfo.level());
319 } else {
320 ATH_MSG_WARNING("Cannot set AlignableTransform for identifier "
321 << getIdHelper()->show_to_string(trans_iter->identify())
322 << " at level " << levelInfo.level());
323 ATH_MSG_WARNING("Subsequent WARNINGS will be printed at DEBUG level.");
324 m_suppressWarnings = true;
325 }
326 }
327 }
328 }
329 return alignmentChange;
330 }
std::vector< AlignTransMember >::const_iterator AlignTransMem_citr
AlignTransMem_citr end() const
AlignTransMem_citr begin() const
virtual bool identifierBelongs(const Identifier &id) const =0
Check identifier is for this detector.
virtual bool setAlignableTransformDelta(int level, const Identifier &id, const Amg::Transform3D &delta, FrameType frame, GeoVAlignmentStore *alignStore=nullptr) const =0
Set method applying the delta transform (in global or local frame) onto the geoModel transform : CLHE...
Amg::Transform3D CLHEPTransformToEigen(const HepGeom::Transform3D &CLHEPtransf)
Converts a CLHEP-based HepGeom::Transform3D into an Eigen Amg::Transform3D.

◆ processSpecialAlignment() [1/2]

bool InDetDD::PixelDetectorManager::processSpecialAlignment ( const std::string & key,
InDetDD::AlignFolderType alignfolderType )
overridevirtual

Process new IBLDist DB folder.

Matthias D. (Oct. 2016): The idea of this first implementation is to get the AlignTransforms for IBL modules from their folder; Calculate from the new DB entries the Tx displacement for this module; Make a simple transfrom in local frame; Add the Tx to the aligntransform; Apply this new transform with the setAlignableTransformDelta() function; This is non-optimal as it simply overrides the previous Delta (these are included in total Delta); Possibly we could extend this in future to add tweak() functionality to GeoAlignableTransform?

Verbose level debug section for transforms

End of verbose level debug section

Implements InDetDD::InDetDetectorManager.

Definition at line 306 of file PixelDetectorManager.cxx.

307 {
308
309 bool alignmentChange = false;
310
311 std::string alignfolder;
312 if (alignfolderType == InDetDD::static_run1) alignfolder = "/Indet/Align";
313 if (alignfolderType == InDetDD::timedependent_run2) alignfolder = "/Indet/AlignL3";
314
315 ATH_MSG_INFO("Processing IBLDist alignment container with key (" << key << ")"
316 << "and alignment folder pointing to " << alignfolder);
317
318 int nstaves = 0;
319 if (numerology().numPhiModulesForLayer(0)<14) nstaves = 14;
320 else nstaves = numerology().numPhiModulesForLayer(0);
321
322 std::vector<float> ibldist;
323 std::vector<float> iblbaseline;
324 ibldist.resize(nstaves);
325 iblbaseline.resize(nstaves);
326
327 const CondAttrListCollection* atrlistcol=nullptr;
328 if (StatusCode::SUCCESS==m_detStore->retrieve(atrlistcol,key)) {
329 // loop over objects in collection
330 for (CondAttrListCollection::const_iterator citr=atrlistcol->begin(); citr!=atrlistcol->end();++citr) {
331 const coral::AttributeList& atrlist=citr->second;
332 ibldist[atrlist["stave"].data<int>()] = atrlist["mag"].data<float>();
333 iblbaseline[atrlist["stave"].data<int>()] = atrlist["base"].data<float>();
334
335 ATH_MSG_VERBOSE("IBLDist DB -- channel: " << citr->first
336 << " ,stave: " << atrlist["stave"].data<int>()
337 << " ,mag: " << atrlist["mag"].data<float>()
338 << " ,base: " << atrlist["base"].data<float>());
339 }
340 }
341 else {
342 ATH_MSG_WARNING("Cannot find IBLDist Container for key "
343 << key << " - no IBL bowing alignment");
344 return alignmentChange;
345 }
346
357
359 if (StatusCode::SUCCESS!=m_detStore->retrieve(container, alignfolder)) {
360 ATH_MSG_ERROR("Cannot find AlignableTransformContainer for key "
361 << key << " - no misalignment");
362 // This should not occur in normal situations so we force job to abort.
363 throw std::runtime_error("Unable to apply Inner Detector alignments");
364 }
365 // Check if container is empty - this can occur if it is an invalid IOV.
366 if (container->empty()) {
367 ATH_MSG_ERROR("AlignableTransformContainer for key "
368 << key << " is empty. Probably due to out of range IOV");
369 // This should not occur in normal situations so we force job to abort.
370 throw std::runtime_error("Unable to apply Inner Detector alignments.");
371 }
372 // loop over all the AlignableTransform objects in the collection
373 std::string IBLalignfolder = std::move(alignfolder);
374 IBLalignfolder.append("/PIXB1");// "/Indet/Align/PIXB1"
375 for (const auto *pat : *container)
376 {
377 if (!( pat->tag()==IBLalignfolder &&
378 numerology().numPhiModulesForLayer(0)==14 &&
379 numerology().numLayers()==4) ){ // hard-coded to IBL for now; no other geometry should really apply this!
380 ATH_MSG_DEBUG("IBLDist; ignoring collections " << pat->tag());
381 }
382 else{
383 const AlignableTransform* transformCollection = pat;
384 for (AlignableTransform::AlignTransMem_citr trans_iter = transformCollection->begin();
385 trans_iter != transformCollection->end();
386 ++trans_iter)
387 {
388 ATH_MSG_DEBUG("IBLDist alignment for identifier "
389 << getIdHelper()->show_to_string(trans_iter->identify()));
390
391 IdentifierHash idHash = getIdHelper()->wafer_hash(trans_iter->identify());
392 if (!idHash.is_valid()){
393 ATH_MSG_WARNING("Invalid HashID for identifier "
394 << getIdHelper()->show_to_string(trans_iter->identify()));
395 ATH_MSG_WARNING("No IBLDist corrections can be applied for invalid HashID's - exiting");
396 return false;
397 }
398 const SiDetectorElement * sielem = m_elementCollection[idHash];
399 //This should work as Bowing is in L3 frame, i.e. local module frame
400 Amg::Vector3D center = sielem->defTransform() * Amg::Vector3D{0, 0, 0};
401 double z = center[2];
402 const double y0y0 = 366.5*366.5;
403
404 double bowx = ibldist[getIdHelper()->phi_module(trans_iter->identify())] * ( z*z - y0y0 ) / y0y0;
405 double basex= iblbaseline[getIdHelper()->phi_module(trans_iter->identify())];
406 // This is in the module frame, as bowing corrections are directly L3
407
408 ATH_MSG_DEBUG("Total IBL-module Tx shift (baseline+bowing): " << basex+bowx);
409 if ( (basex+bowx)==0 ) continue; // make sure we ignore NULL corrections
410
411 Amg::Transform3D shift = Amg::Translation3D(basex+bowx,0,0) * Amg::RotationMatrix3D::Identity();
412
413 const AlignableTransform* cpat = pat;
414 AlignableTransform::AlignTransMem_citr this_trans=cpat->findIdent(trans_iter->identify());
415 HepGeom::Transform3D newtrans = Amg::EigenTransformToCLHEP(shift)*this_trans->transform();
416
418 if (msgLvl(MSG::VERBOSE)) {
419 ATH_MSG_LVL_NOCHK(MSG::VERBOSE, "Bowing Transformation only:");
420 printTransform(MSG::VERBOSE, shift);
421 ATH_MSG_LVL_NOCHK(MSG::VERBOSE, "Original alignable Transformation from StoreGate:");
422 printTransform(MSG::VERBOSE, Amg::CLHEPTransformToEigen(this_trans->transform()));
423 ATH_MSG_LVL_NOCHK(MSG::VERBOSE, "Final mModified Transformation:");
424 printTransform(MSG::VERBOSE, Amg::CLHEPTransformToEigen(newtrans));
425 }
427
428 // Set the new transform; Will replace existing one with updated transform
430 trans_iter->identify(),
433 nullptr);
434
435 if (!status) {
436 ATH_MSG_DEBUG("Cannot set AlignableTransform for identifier."
437 << getIdHelper()->show_to_string(trans_iter->identify())
438 << " at level 0 for IBLDist bowing deformation");
439 }
440 alignmentChange = (alignmentChange || status);
441 }
442 }
443 }
444
445 return alignmentChange;
446 }
#define z
AlignTransMem_citr findIdent(const Identifier &ident) const
bool msgLvl(const MSG::Level lvl) const
Test the output level.
void printTransform(MSG::Level level, const Amg::Transform3D &tr) const
int numPhiModulesForLayer(int layer) const
Number of sectors in phi for a layer.
IdentifierHash wafer_hash(Identifier wafer_id) const
wafer hash from id
Definition PixelID.h:378
int phi_module(const Identifier &id) const
Definition PixelID.h:620
HepGeom::Transform3D EigenTransformToCLHEP(const Amg::Transform3D &eigenTransf)
Converts an Eigen-based Amg::Transform3D into a CLHEP-based HepGeom::Transform3D.
@ timedependent_run2
virtual void shift(size_t pos, ptrdiff_t offs) override
Shift the elements of the container.

◆ processSpecialAlignment() [2/2]

bool InDetDD::PixelDetectorManager::processSpecialAlignment ( const std::string & key,
const CondAttrListCollection * obj = nullptr,
GeoVAlignmentStore * alignStore = nullptr ) const
overridevirtual

Paul Gessinger (Jun 2019): For MT, we won't retrieve the underlying actual alignable transform container, since that's hard to come by. We loop over all detector elements, check if they match the detector elements we have IBL dist info for, retrieve the actual transform from the provided GeoAlignmentStore, and re-set it to the corrected value including IBL bowing.

The calculation of the bowing is taken from the non-MT implementation above.

Implements InDetDD::InDetDetectorManager.

Definition at line 448 of file PixelDetectorManager.cxx.

450 {
451 bool alignmentChange = false;
452
453 ATH_MSG_INFO("Processing IBLDist alignment container with key " << key);
454 if(numerology().numLayers() != 4) {
455 // this doesn't appear to be Run 2, i.e. the IBL isn't there. Bailing
456 return alignmentChange;
457 }
458
459 int nstaves = 0;
460 if (numerology().numPhiModulesForLayer(0) < 14)
461 nstaves = 14;
462 else
463 nstaves = numerology().numPhiModulesForLayer(0);
464
465 std::vector<float> ibldist;
466 std::vector<float> iblbaseline;
467 ibldist.resize(nstaves);
468 iblbaseline.resize(nstaves);
469
470 // loop over objects in collection
471 for (CondAttrListCollection::const_iterator citr = obj->begin();
472 citr != obj->end(); ++citr) {
473
474 const coral::AttributeList &atrlist = citr->second;
475 ibldist[atrlist["stave"].data<int>()] = atrlist["mag"].data<float>();
476 iblbaseline[atrlist["stave"].data<int>()] = atrlist["base"].data<float>();
477
478 ATH_MSG_VERBOSE("IBLDist DB -- channel: " << citr->first
479 << ", stave: " << atrlist["stave"].data<int>()
480 << ", mag: " << atrlist["mag"].data<float>()
481 << ", base: " << atrlist["base"].data<float>());
482 }
483
494
495
496 for(const auto* detElem : *getDetectorElementCollection()) {
497 if(!detElem->isInnermostPixelLayer()) {
498 // skip non-IBL elements. This only works if the innermost pixel layer is in fact
499 // the IBL. That should be the case for Run2 until replacement of the ID.
500 continue;
501 }
502 std::string repr = getIdHelper()->show_to_string(detElem->identify());
503 ATH_MSG_DEBUG("IBLDist alignment for identifier " << repr);
504
505
506 IdentifierHash idHash = getIdHelper()->wafer_hash(detElem->identify());
507 if (!idHash.is_valid()) {
508 ATH_MSG_WARNING("Invalid HashID for identifier " << repr);
509 ATH_MSG_WARNING("No IBLDist corrections can be applied for "
510 "invalid HashID's - exiting ");
511 return false;
512 }
513
514 // extract the stave number
515 int stave = getIdHelper()->phi_module(detElem->identify());
516
517 Amg::Vector3D center = detElem->defTransform() * Amg::Vector3D{0, 0, 0};
518 double z = center[2];
519 const double y0y0 = 366.5 * 366.5;
520
521 double bowx = ibldist[stave] * (z * z - y0y0) / y0y0;
522 double basex = iblbaseline[stave];
523 // This is in the module frame, as bowing corrections are directly L3
524
525 ATH_MSG_DEBUG("Total IBL-module Tx shift (baseline+bowing): " << basex + bowx);
526
527 if ((basex + bowx) == 0) {
528 continue; // make sure we ignore NULL corrections
529 }
530
531 Amg::Transform3D shift = Amg::Translation3D(basex + bowx, 0, 0) *
532 Amg::RotationMatrix3D::Identity();
533
534 // now we need to get the original alignment delta to apply this additional
535 // shift to
536 ExtendedAlignableTransform* eat = m_alignableTransforms[idHash].get();
537 const GeoTrf::Transform3D* currentDelta = alignStore->getDelta(eat->alignableTransform());
538 if (currentDelta == nullptr) {
539 ATH_MSG_ERROR("Have IBL Dist for element which does not have an alignment delta."
540 << " This indicates inconsistent alignment data");
541 return false;
542 }
543
544 HepGeom::Transform3D recoToHitTransform = detElem->recoToHitTransform();
545 Amg::Transform3D r2h = Amg::CLHEPTransformToEigen(recoToHitTransform);
546
547 ATH_MSG_VERBOSE("Previous delta for " << repr << ":\n" << currentDelta->matrix());
548 ATH_MSG_VERBOSE("Bowing-only delta for " << repr << ":\n" << shift.matrix());
549 Amg::Transform3D newDelta = shift * r2h.inverse() * (*currentDelta) * r2h;
550
551 // We can probably just write it back to the geo alignment store.
552 // The IBL bowing is always at the module level, and that's the delta that
553 // we retrieved from the geo alignment store.
554
556 detElem->identify(),
557 newDelta,
559 alignStore);
560
561
562 ATH_MSG_VERBOSE("New delta for " << repr << ":\n"
563 << alignStore->getDelta(eat->alignableTransform())->matrix());
564
565 alignmentChange |= status;
566 }
567
568 return alignmentChange;
569 }
std::string show_to_string(Identifier id, const IdContext *context=0, char sep='.') const
or provide the printout in string form
virtual const SiDetectorElementCollection * getDetectorElementCollection() const override
access to whole collection via Iterators
std::string repr(PyObject *o)
returns the string representation of a python object equivalent of calling repr(o) in python

◆ setAlignableTransformDelta()

bool InDetDD::PixelDetectorManager::setAlignableTransformDelta ( int level,
const Identifier & id,
const Amg::Transform3D & delta,
FrameType frame,
GeoVAlignmentStore * alignStore ) const
overrideprivatevirtual

implements the main alignment update for delta transforms in different frames, it translates into the LocalDelta or GlobalDelta function of SiDetectorManager

Implements InDetDD::SiDetectorManager.

Definition at line 188 of file PixelDetectorManager.cxx.

193 {
194
195 if (level == 0) { // At the element level - local shift
196
197 // We retrieve it via a hashId.
198 IdentifierHash idHash = m_idHelper->wafer_hash(id);
199 if (!idHash.is_valid()) return false;
200
201 if (frame == InDetDD::global) {
202
203 return setAlignableTransformGlobalDelta(m_alignableTransforms[idHash].get(), delta, alignStore);
204
205 } else if (frame == InDetDD::local) {
206
207 const SiDetectorElement * element = m_elementCollection[idHash];
208 if (!element) return false;
209
210 // Its a local transform
211 //See header file for definition of m_isLogical
212 if( m_isLogical ){
213 // Ensure cache is up to date and use the alignment corrected local to
214 // global transform
215 element->updateCache();
217 m_alignableTransforms[idHash].get(), element->transform(), delta,
218 alignStore);
219 } else
220 //Use default local to global transform
222 m_alignableTransforms[idHash].get(), element->defTransform(),
223 delta, alignStore);
224 } else {
225 // other not supported
226 ATH_MSG_WARNING("Frames other than global or local are not supported.");
227 return false;
228 }
229
230 } else { // higher level
231
232 if (frame != InDetDD::global) {
233 ATH_MSG_WARNING("Non global shift at higher levels is not possible.");
234 return false;
235 }
236
237 int index = level - FIRST_HIGHER_LEVEL; // level 0 is treated separately.
238 if (index >= static_cast<int>(m_higherAlignableTransforms.size())) return false;
239
240 // We retrieve it from a map.
241 AlignableTransformMap::const_iterator iter;
243 if (iter == m_higherAlignableTransforms[index].end()) return false;
244
245 // Its a global transform
246 return setAlignableTransformGlobalDelta((iter->second).get(), delta, alignStore);
247 }
248
249 }
static bool setAlignableTransformGlobalDelta(ExtendedAlignableTransform *extXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
Helper method to set delta transform from a global delta - Amg interface.
static bool setAlignableTransformLocalDelta(ExtendedAlignableTransform *extXF, const Amg::Transform3D &localToGlobalXF, const Amg::Transform3D &delta, GeoVAlignmentStore *alignStore=nullptr)
Helper method to set delta transform from a local delta - Amg interface.
virtual const Amg::Transform3D & transform() const override final
Return local to global transform.
virtual void updateCache() const
Recalculate cached values.
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition hcg.cxx:132

◆ setAlignableTransformGlobalDelta()

bool InDetDD::SiDetectorManager::setAlignableTransformGlobalDelta ( ExtendedAlignableTransform * extXF,
const Amg::Transform3D & delta,
GeoVAlignmentStore * alignStore = nullptr )
staticinherited

Helper method to set delta transform from a global delta - Amg interface.

Definition at line 101 of file SiDetectorManager.cxx.

103 {
104 // ATTENTION -------------------------------------------------------- (A.S.)
105 // CLHEP < -- > AMG interface method
106
107 // Sets the alignable transform delta when the supplied delta is in the global frame.
108
109 // If the default transform down to the alignable transform is
110 // T = A*B*C
111 // and the alignable transform is C with delta c and the delta in the global frame is g, then
112 // A*B*C*c = g*A*B*C
113 // T*c = g*T
114 // c = T.inverse() * g * T
115
116 // To get default transform up and including the alignable transform,
117 // we assume the next volume down is a fullphys volume and so its
118 // transform is the transform we want (ie T=A*B*C in the above example).
119
120
121 if (!extXF) return false;
122
123 const GeoVFullPhysVol * child = extXF->child();
124 if (child && extXF->alignableTransform()) {
125 // do the calculation in CLHEP
126 const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform(alignStore);
127 extXF->alignableTransform()->setDelta(transform.inverse() * delta * transform, alignStore);
128 return true;
129 } else {
130 return false;
131 }
132 }
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.

◆ setAlignableTransformLocalDelta()

bool InDetDD::SiDetectorManager::setAlignableTransformLocalDelta ( ExtendedAlignableTransform * extXF,
const Amg::Transform3D & localToGlobalXF,
const Amg::Transform3D & delta,
GeoVAlignmentStore * alignStore = nullptr )
staticinherited

Helper method to set delta transform from a local delta - Amg interface.

Definition at line 62 of file SiDetectorManager.cxx.

66 {
67 // ATTENTION -------------------------------------------------------- (A.S.)
68 // CLHEP < -- > AMG interface method
69
70 // Sets the alignable transform delta when the supplied delta is in the local
71 // reconstruction frame
72
73 // If the default transform to the local recostruction frame is
74 // T = A*B*C*D*E
75 // and the alignable transform is C with delta c and the delat in the local frame is l, then
76 // A*B*C*c*D*E = A*B*C*D*E*l
77 // c = (D*E) * l * (D*E).inverse()
78 // c = (A*B*C).inverse * T * l * T.inverse() * (A*B*C)
79
80 // To get default transform up and including the alignable transform,
81 // we assume the next volume down is a fullphys volume and so its
82 // transform is the transform we want (ie A*B*C in the above example).
83
84 if (!extXF) return false;
85
86 const GeoVFullPhysVol* child = extXF->child();
87 if (child && extXF->alignableTransform()) {
88 // the definitiv absolut transform is in CLHEP -> do the calculation in CLHEP
89 const GeoTrf::Transform3D& transform = child->getDefAbsoluteTransform(alignStore);
90 // calucluate the corrected delta according to the formula above
91 GeoTrf::Transform3D correctedDelta = transform.inverse()*localToGlobalXF // (A*B*C).inverse() * T
92 * delta // l
93 * localToGlobalXF.inverse() * transform; // T.inverse() * (A*B*C)
94 extXF->alignableTransform()->setDelta(correctedDelta, alignStore);
95 return true;
96 } else {
97 return false;
98 }
99 }

◆ setCommonItems()

void InDetDD::SiDetectorManager::setCommonItems ( std::unique_ptr< const SiCommonItems > && commonItems)
inherited

Set SiCommonItems.

Definition at line 151 of file SiDetectorManager.cxx.

152 {
153 m_commonItems = std::move(commonItems);
154 }
std::unique_ptr< const SiCommonItems > m_commonItems

◆ setLevel()

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

Change the current logging level.

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

Definition at line 28 of file AthMessaging.cxx.

29{
30 m_lvl = lvl;
31}

◆ setVersion()

void InDetDD::InDetDetectorManager::setVersion ( const Version & version)
inherited

Definition at line 43 of file InDetDetectorManager.cxx.

44 {
46
47 // Since default alignments are for final layout, Pixel Rome-Initial
48 // layout will result in several (harmless) WARNING message. We suppress these.
49 // Also the SR1 layout produce warnings due to missing parts. We suppress these also.
50 m_suppressWarnings = ( (getName() == "Pixel" &&
51 (version.tag() == "Pixel-01" || version.tag() == "Pixel-DC2-Initial-00"))
52 || version.layout() == "SR1" || version.layout() == "SR1-EndcapC");
53
54 }

◆ tag()

const std::string & InDetDD::SiDetectorManager::tag ( ) const
inherited

Get tag used in dictionary.

Definition at line 34 of file SiDetectorManager.cxx.

35 {
36 return m_tag;
37 }

◆ updateAll()

void InDetDD::SiDetectorManager::updateAll ( ) const
virtualinherited

Update all caches.

Implements InDetDD::InDetDetectorManager.

Definition at line 51 of file SiDetectorManager.cxx.

52 {
54 element_iter != getDetectorElementEnd();
55 ++element_iter) {
56 if (*element_iter) {
57 (*element_iter)->updateCache();
58 }
59 }
60 }
DataModel_detail::const_iterator< DataVector > const_iterator
Definition DataVector.h:838

Member Data Documentation

◆ ATLAS_THREAD_SAFE

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

Messaging initialized (initMessaging).

Definition at line 141 of file AthMessaging.h.

◆ m_alignableTransforms

std::vector< std::unique_ptr<ExtendedAlignableTransform> > InDetDD::PixelDetectorManager::m_alignableTransforms
private

Definition at line 166 of file PixelDetectorManager.h.

◆ m_alignfoldertype

AlignFolderType InDetDD::InDetDetectorManager::m_alignfoldertype
inherited

Definition at line 93 of file InDetDetectorManager.h.

◆ m_commonItems

std::unique_ptr<const SiCommonItems> InDetDD::SiDetectorManager::m_commonItems
privateinherited

Definition at line 151 of file SiDetectorManager.h.

◆ m_designs

std::vector<std::unique_ptr<const SiDetectorDesign> > InDetDD::SiDetectorManager::m_designs
privateinherited

Definition at line 150 of file SiDetectorManager.h.

◆ m_detStore

StoreGateSvc* InDetDD::InDetDetectorManager::m_detStore
protectedinherited

Definition at line 96 of file InDetDetectorManager.h.

◆ m_elementCollection

SiDetectorElementCollection InDetDD::PixelDetectorManager::m_elementCollection
private

Definition at line 163 of file PixelDetectorManager.h.

◆ m_folders

std::set<std::string> InDetDD::InDetDetectorManager::m_folders
privateinherited

Definition at line 179 of file InDetDetectorManager.h.

◆ m_globalFolders

std::set<std::string> InDetDD::InDetDetectorManager::m_globalFolders
privateinherited

Definition at line 181 of file InDetDetectorManager.h.

◆ m_higherAlignableTransforms

std::vector< AlignableTransformMap > InDetDD::PixelDetectorManager::m_higherAlignableTransforms
private

Definition at line 165 of file PixelDetectorManager.h.

◆ m_idHelper

const PixelID* InDetDD::PixelDetectorManager::m_idHelper
private

Definition at line 167 of file PixelDetectorManager.h.

◆ m_imsg

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

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ m_isLogical

bool InDetDD::PixelDetectorManager::m_isLogical
private

This variable switches the how the local alignment corrections are applied If true they will be calcualted on top of all of other corrections but in the default reference frame If false they will be calcualted on top of all of other corrections but in the globally aligned reference frame.

Definition at line 178 of file PixelDetectorManager.h.

◆ m_keys

std::map<std::string, LevelInfo> InDetDD::InDetDetectorManager::m_keys
privateinherited

Definition at line 178 of file InDetDetectorManager.h.

◆ m_lvl

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

Current logging level.

Definition at line 138 of file AthMessaging.h.

138{ MSG::NIL };

◆ m_msg_tls

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

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

Definition at line 132 of file AthMessaging.h.

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_numerology

SiNumerology InDetDD::SiDetectorManager::m_numerology
privateinherited

Definition at line 149 of file SiDetectorManager.h.

◆ m_specialFolders

std::set<std::string> InDetDD::InDetDetectorManager::m_specialFolders
privateinherited

Definition at line 180 of file InDetDetectorManager.h.

◆ m_suppressWarnings

std::atomic_bool InDetDD::InDetDetectorManager::m_suppressWarnings
mutableprotectedinherited

Definition at line 97 of file InDetDetectorManager.h.

◆ m_tag

std::string InDetDD::SiDetectorManager::m_tag
privateinherited

Definition at line 148 of file SiDetectorManager.h.

◆ m_version

Version InDetDD::InDetDetectorManager::m_version
privateinherited

Definition at line 177 of file InDetDetectorManager.h.

◆ m_volume

std::vector<PVConstLink> InDetDD::PixelDetectorManager::m_volume
private

Definition at line 162 of file PixelDetectorManager.h.

◆ s_invalidLevel

const InDetDetectorManager::LevelInfo InDetDD::InDetDetectorManager::s_invalidLevel
staticprivateinherited

Definition at line 183 of file InDetDetectorManager.h.


The documentation for this class was generated from the following files: