ATLAS Offline Software
Loading...
Searching...
No Matches
MuonGM::Station Class Reference

#include <Station.h>

Inheritance diagram for MuonGM::Station:
Collaboration diagram for MuonGM::Station:

Public Member Functions

 Station ()
 ~Station ()=default
 Station (const Station &s)=delete
Stationoperator= (const Station &s)=delete
 Station (MYSQL &mysql, std::string name)
void SetComponent (Component *c)
void SetCutout (Cutout *c)
ComponentGetComponent (int i) const
CutoutGetCutout (int i) const
int GetNrOfComponents () const
int GetNrOfCutouts () const
void SetPosition (Position p)
void SetAlignPos (const AlignPos &p)
PositionIterator begin () const
PositionIterator end () const
AlignPosIterator abegin () const
AlignPosIterator aend () const
PositionIterator FindPosition (int iz, int iphi) const
AlignPosIterator FindAlignPos (int iz, int iphi) const
int CountAlignPos (int iz, int iphi) const
AlignPosIterator getFirstAlignPosInRange (int iz, int iphi, AlignPosIterator &lastAlignPosInRange) const
int Npositions () const
GeoTrf::Transform3D native_to_tsz_frame (const MYSQL &mysql, const Position &p) const
GeoTrf::Transform3D tsz_to_native_frame (const MYSQL &mysql, const Position &p) const
GeoTrf::Transform3D tsz_to_global_frame (const MYSQL &mysql, const Position &p) const
GeoTrf::Transform3D global_to_tsz_frame (const MYSQL &mysql, const Position &p) const
GeoTrf::Transform3D getNominalTransform (const MYSQL &mysql, const Position &p) const
GeoTrf::Transform3D getDeltaTransform_tszFrame (const MYSQL &mysql, const AlignPos &ap) const
GeoTrf::Transform3D getDeltaTransform (const MYSQL &mysql, const AlignPos &ap, const Position &p) const
GeoTrf::Transform3D getAlignedTransform (const MYSQL &mysql, const AlignPos &ap, const Position &p) const
const std::string & GetName () const
double GetThickness (const MYSQL &mysql) const
double GetExtraBottomThickness () const
double GetExtraTopThickness () const
double GetLength () const
double GetWidth1 () const
double GetWidth2 () const
double getAmdbOrigine_along_length () const
double getAmdbOrigine_along_thickness (const MYSQL &mysql) const
bool hasMdts () const
void setHasMdts (bool x)
double mdtHalfPitch (const MYSQL &mysql) 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.

Private Member Functions

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

Private Attributes

std::atomic< double > m_amdbOrigine_along_length
std::atomic< double > m_amdbOrigine_along_thickness
std::string m_name {}
bool m_hasMdts {false}
std::vector< std::unique_ptr< Component > > m_components {}
std::vector< std::unique_ptr< Cutout > > m_cutouts {}
PositionMap m_positions {}
AlignPosMap m_alignpositions {}
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)

Friends

std::ostream & operator<< (std::ostream &os, const Station &s)

Detailed Description

Definition at line 40 of file Station.h.

Constructor & Destructor Documentation

◆ Station() [1/3]

MuonGM::Station::Station ( )

Definition at line 33 of file Station.cxx.

33 :
34 AthMessaging("MuonGeoModel.Station"),
37 m_name("unknown"),
38 m_hasMdts (false)
39 { }
AthMessaging()
Default constructor:
std::string m_name
Definition Station.h:97
std::atomic< double > m_amdbOrigine_along_length
Definition Station.h:95
std::atomic< double > m_amdbOrigine_along_thickness
Definition Station.h:96

◆ ~Station()

MuonGM::Station::~Station ( )
default

◆ Station() [2/3]

MuonGM::Station::Station ( const Station & s)
delete

◆ Station() [3/3]

MuonGM::Station::Station ( MYSQL & mysql,
std::string name )

Definition at line 23 of file Station.cxx.

23 :
24 AthMessaging("MuonGeoModel.Station"),
27 m_name(std::move(s)),
28 m_hasMdts (false)
29 {
30 mysql.StoreStation(this);
31 }
void StoreStation(Station *s)
Definition MYSQL.cxx:136

Member Function Documentation

◆ abegin()

AlignPosIterator MuonGM::Station::abegin ( ) const

Definition at line 76 of file Station.cxx.

76{ return m_alignpositions.begin(); }
AlignPosMap m_alignpositions
Definition Station.h:102

◆ aend()

AlignPosIterator MuonGM::Station::aend ( ) const

Definition at line 77 of file Station.cxx.

77{ return m_alignpositions.end(); }

◆ begin()

PositionIterator MuonGM::Station::begin ( ) const

Definition at line 106 of file Station.cxx.

106{ return m_positions.begin(); }
PositionMap m_positions
Definition Station.h:101

◆ CountAlignPos()

int MuonGM::Station::CountAlignPos ( int iz,
int iphi ) const

Definition at line 69 of file Station.cxx.

69 {
70 // imt - probably needs to be different key for align pos
71 int key = iz * 100 + iphi;
72 // std::cout<<" looking for align pos. with key "<<key<<std::endl;
73 return m_alignpositions.count(key);
74 }

◆ end()

PositionIterator MuonGM::Station::end ( ) const

Definition at line 108 of file Station.cxx.

108{ return m_positions.end(); }

◆ FindAlignPos()

AlignPosIterator MuonGM::Station::FindAlignPos ( int iz,
int iphi ) const

Definition at line 62 of file Station.cxx.

62 {
63 // imt - probably needs to be different key for align pos
64 int key = iz * 100 + iphi;
65 // std::cout<<" looking for align pos. with key "<<key<<std::endl;
66 return m_alignpositions.find(key);
67 }

◆ FindPosition()

PositionIterator MuonGM::Station::FindPosition ( int iz,
int iphi ) const

Definition at line 99 of file Station.cxx.

99 {
100 int key = iz * 100 + iphi;
101 return m_positions.find(key);
102 }

◆ getAlignedTransform()

GeoTrf::Transform3D MuonGM::Station::getAlignedTransform ( const MYSQL & mysql,
const AlignPos & ap,
const Position & p ) const

Definition at line 514 of file Station.cxx.

515 {
516 return tsz_to_global_frame(mysql, p) * getDeltaTransform_tszFrame(mysql, ap) * native_to_tsz_frame(mysql, p);
517 }
GeoTrf::Transform3D native_to_tsz_frame(const MYSQL &mysql, const Position &p) const
Definition Station.cxx:371
GeoTrf::Transform3D getDeltaTransform_tszFrame(const MYSQL &mysql, const AlignPos &ap) const
Definition Station.cxx:519
GeoTrf::Transform3D tsz_to_global_frame(const MYSQL &mysql, const Position &p) const
Definition Station.cxx:430

◆ getAmdbOrigine_along_length()

double MuonGM::Station::getAmdbOrigine_along_length ( ) const

Definition at line 553 of file Station.cxx.

553 {
554 GetLength();
556 }
double GetLength() const
Definition Station.cxx:160

◆ getAmdbOrigine_along_thickness()

double MuonGM::Station::getAmdbOrigine_along_thickness ( const MYSQL & mysql) const

Definition at line 558 of file Station.cxx.

558 {
559 GetThickness(mysql);
561 }
double GetThickness(const MYSQL &mysql) const
Definition Station.cxx:112

◆ GetComponent()

Component * MuonGM::Station::GetComponent ( int i) const

Definition at line 83 of file Station.cxx.

83{ return m_components[i].get(); }
std::vector< std::unique_ptr< Component > > m_components
Definition Station.h:99

◆ GetCutout()

Cutout * MuonGM::Station::GetCutout ( int i) const

Definition at line 85 of file Station.cxx.

85{ return m_cutouts[i].get(); }
std::vector< std::unique_ptr< Cutout > > m_cutouts
Definition Station.h:100

◆ getDeltaTransform()

GeoTrf::Transform3D MuonGM::Station::getDeltaTransform ( const MYSQL & mysql,
const AlignPos & ap,
const Position & p ) const

Definition at line 546 of file Station.cxx.

547 {
548 // GM applies Delta transform like transform*delta
549 GeoTrf::Transform3D deltaGM = tsz_to_native_frame(mysql, p) * getDeltaTransform_tszFrame(mysql, ap) * native_to_tsz_frame(mysql, p);
550 return deltaGM;
551 }
GeoTrf::Transform3D tsz_to_native_frame(const MYSQL &mysql, const Position &p) const
Definition Station.cxx:426

◆ getDeltaTransform_tszFrame()

GeoTrf::Transform3D MuonGM::Station::getDeltaTransform_tszFrame ( const MYSQL & mysql,
const AlignPos & ap ) const

Definition at line 519 of file Station.cxx.

520 {
521 if (ap.tras != 0 || ap.trat != 0 || ap.traz != 0 || ap.rots != 0 || ap.rott != 0 || ap.rotz != 0) {
522 ATH_MSG_VERBOSE("Setting corrections. For station " << m_name << " corrections sent are "
523 << ap.tras << " " << ap.traz << " " << ap.trat << " " << ap.rots << " "
524 << ap.rotz << " " << ap.rott << " isBarrel=" << ap.isBarrel
525 << " length=" << GetLength() << " m_thickness=" << GetThickness(mysql));
526 }
527
528 GeoTrf::RotateX3D rott(ap.rott);
529 GeoTrf::RotateZ3D rotz(ap.rotz);
530 GeoTrf::RotateY3D rots(ap.rots);
531 GeoTrf::Transform3D trans = GeoTrf::TranslateY3D(ap.tras) * GeoTrf::TranslateZ3D(ap.traz) * GeoTrf::TranslateX3D(ap.trat);
532
533 GeoTrf::Transform3D delta = trans * rots * rotz * rott;
534
535 if (msgLvl(MSG::VERBOSE)) {
536 msg() << MSG::VERBOSE << " delta transform in the tsz frame --------------" << endmsg
537 << delta(0, 0) << " " << delta(0, 1) << " " << delta(0, 2) << " " << delta(0, 3) << " " << endmsg
538 << delta(1, 0) << " " << delta(1, 1) << " " << delta(1, 2) << " " << delta(1, 3) << " " << endmsg
539 << delta(2, 0) << " " << delta(2, 1) << " " << delta(2, 2) << " " << delta(2, 3) << " " << endmsg;
540 }
541
542 // our delta transform must be applied in the tsz frame:
543 return delta;
544 }
#define endmsg
#define ATH_MSG_VERBOSE(x)
MsgStream & msg() const
The standard message stream.
bool msgLvl(const MSG::Level lvl) const
Test the output level.

◆ GetExtraBottomThickness()

double MuonGM::Station::GetExtraBottomThickness ( ) const

Definition at line 155 of file Station.cxx.

155 {
156 return 0.;
157
158 }

◆ GetExtraTopThickness()

double MuonGM::Station::GetExtraTopThickness ( ) const

Definition at line 151 of file Station.cxx.

151 {
152 return 0.;
153 }

◆ getFirstAlignPosInRange()

AlignPosIterator MuonGM::Station::getFirstAlignPosInRange ( int iz,
int iphi,
AlignPosIterator & lastAlignPosInRange ) const

Definition at line 55 of file Station.cxx.

55 {
56 int key = iz * 100 + iphi;
57 std::pair<AlignPosIterator, AlignPosIterator> ppp = m_alignpositions.equal_range(key);
58 lastAlignPosInRange = ppp.second;
59 return ppp.first;
60 }

◆ GetLength()

double MuonGM::Station::GetLength ( ) const

Definition at line 160 of file Station.cxx.

160 {
161 double len = 0;
162 if (m_name[0] == 'T') {
163 double innerrad = std::numeric_limits<double>::max();
164 double outerrad = 0.;
165
166 for (unsigned int i = 0; i < m_components.size(); i++) {
167 TgcComponent *tg = dynamic_cast<TgcComponent*>(m_components[i].get());
168
169 if (tg->posy < innerrad) {
170 innerrad = tg->posy;
171 }
172
173 if (tg->posy + tg->dy > outerrad) {
174 outerrad = tg->posy + tg->dy;
175 }
176 }
177
178 len = outerrad - innerrad;
179 } else {
180 double ystart = 999999.;
181
182 for (unsigned int i = 0; i < m_components.size(); i++) {
183 StandardComponent* sc = dynamic_cast<StandardComponent*>(m_components[i].get());
184 if (not sc){
185 ATH_MSG_ERROR("Dynamic cast to StandardComponent failed at line "<<__LINE__);
186 continue;
187 }
188 ATH_MSG_VERBOSE("Station " << m_name << " *** comp " << i << " named " <<
189 sc->name << " posy " << sc->posy << " dy " << sc->dy << " len " << len <<
190 " ystart " << ystart);
191 if ((sc->dy + sc->posy) > len)
192 len = sc->dy + sc->posy;
193 if (i == 0 || sc->posy < ystart)
194 ystart = sc->posy;
195 ATH_MSG_VERBOSE(" now len = " << len << " ystart = " << ystart);
196 }
197
198 if (std::abs(ystart) > 0.001) {
199 len = len - ystart;
201
202 ATH_MSG_VERBOSE("Station " << m_name << " redefining len = " << len << " because ystart = " << ystart);
203 }
204 }
205
206 return len;
207 }
#define ATH_MSG_ERROR(x)
static Double_t sc

◆ GetName()

const std::string & MuonGM::Station::GetName ( ) const

Definition at line 110 of file Station.cxx.

110{ return m_name; }

◆ getNominalTransform()

GeoTrf::Transform3D MuonGM::Station::getNominalTransform ( const MYSQL & mysql,
const Position & p ) const

Definition at line 511 of file Station.cxx.

512 { return tsz_to_global_frame(mysql, p) * native_to_tsz_frame(mysql, p); }

◆ GetNrOfComponents()

int MuonGM::Station::GetNrOfComponents ( ) const

Definition at line 322 of file Station.cxx.

322{ return m_components.size(); }

◆ GetNrOfCutouts()

int MuonGM::Station::GetNrOfCutouts ( ) const

Definition at line 324 of file Station.cxx.

324{ return m_cutouts.size(); }

◆ GetThickness()

double MuonGM::Station::GetThickness ( const MYSQL & mysql) const

Definition at line 112 of file Station.cxx.

112 {
113 double thick = 0;
114 if (m_name[0] == 'T') {
115 for (unsigned int i = 0; i < m_components.size(); i++) {
116 TgcComponent *t = dynamic_cast<TgcComponent*>(m_components[i].get());
117 if (not t){
118 ATH_MSG_ERROR("Dynamic cast to TgcComponent failed");
119 continue;
120 }
121 thick = thick > t->GetThickness(mysql) + t->posz ? thick : t->GetThickness(mysql) + t->posz;
122 }
123 } else {
124 double zstart = std::numeric_limits<double>::max();
125
126 for (unsigned int i = 0; i < m_components.size(); i++) {
127 StandardComponent* s = dynamic_cast<StandardComponent*>(m_components[i].get());
128 if (not s){
129 ATH_MSG_ERROR("Dynamic cast to StandardComponent failed");
130 continue;
131 }
132 thick = thick > s->GetThickness(mysql) + s->posz ? thick : s->GetThickness(mysql) + s->posz;
133 if (i == 0 || s->posz < zstart)
134 zstart = s->posz;
135
136 ATH_MSG_VERBOSE("Station " << m_name << " calculating Thinkness = " << thick << " and zstart = " << zstart);
137 }
138
139 if (std::abs(zstart) > 0.001) {
140 thick = thick - zstart;
142 ATH_MSG_VERBOSE("Station " << m_name << " redefining Thinkness = " << thick <<
143 " because zstart = " << zstart <<
144 "; then amdbOrigine_along_thickness = " << m_amdbOrigine_along_thickness);
145 }
146 }
147
148 return thick;
149 }

◆ GetWidth1()

double MuonGM::Station::GetWidth1 ( ) const

Definition at line 227 of file Station.cxx.

227 {
228 double maxdxmin = std::numeric_limits<double>::lowest();
229 double ymin = getYMin();
230 double w = 0;
231 for (unsigned int i = 0; i < m_components.size(); i++) {
232 std::string_view n = std::string_view(m_components[i]->name).substr(0, 3);
233 if (n == "TGC") {
234 double dw = 20.;
235 std::string_view typetgc = std::string_view(m_components[i]->name).substr(3, 2);
236 // in case of station containing one module
237 if (typetgc == "01" || typetgc == "06" || typetgc == "12" || typetgc == "18" || typetgc == "19" || typetgc == "20" || typetgc == "21") {
238 dw = 0.;
239 }
240
241 if (w == 0) {
242 w = m_components[i]->dx1 + dw;
243 } else {
244 if (w > m_components[i]->dx1 + dw) {
245 w = m_components[i]->dx1 + dw;
246 }
247 }
248 } else {
249 double dxmin = 0.;
250 if (std::abs(m_components[i]->dy) < 1.e-10) {
251 dxmin = m_components[i]->dx1;
252 } else {
253 double num = (m_components[i]->dx2 - m_components[i]->dx1) / 2.;
254 double tantheta = num != 0 ? num / m_components[i]->dy : 0;
255 auto *sc = dynamic_cast<StandardComponent*>(m_components[i].get());
256 if (not sc){
257 ATH_MSG_ERROR("Dynamic cast to StandardComponent failed at line "<<__LINE__);
258 continue;
259 }
260 double y = sc->posy;
261 dxmin = m_components[i]->dx1 + 2. * tantheta * (ymin - y);
262 }
263
264 if (maxdxmin < dxmin && (n.substr(0, 2) != "LB" || m_name[0] == 'B'))
265 maxdxmin = dxmin;
266 }
267 }
268
269 if (m_name.substr(0, 1) == "T")
270 return w;
271 else
272 return maxdxmin;
273 }
#define y
double getYMin() const
Definition Station.cxx:209
double ymin
Definition listroot.cxx:63

◆ GetWidth2()

double MuonGM::Station::GetWidth2 ( ) const

Definition at line 275 of file Station.cxx.

275 {
276 // double ymin= -getAmdbOrigine_along_length();
277 double ymax = getYMin() + GetLength();
278 double maxdxmax = std::numeric_limits<double>::lowest();
279 double w = 0;
280
281 for (unsigned int i = 0; i < m_components.size(); i++) {
282 if (w < m_components[i]->dx2) {
283 w = m_components[i]->dx2;
284 }
285
286 std::string_view n = std::string_view(m_components[i]->name).substr(0, 3);
287 if (n == "TGC") {
288 double dw = 20.;
289 std::string_view typetgc = std::string_view(m_components[i]->name).substr(3, 2);
290 // in case of one station containing one module
291 if (typetgc == "01" || typetgc == "06" || typetgc == "12" || typetgc == "18" || typetgc == "19" || typetgc == "20" || typetgc == "21") {
292 dw = 0.;
293 }
294 w += dw;
295 } else {
296 double dxmax = 0.;
297 if (std::abs(m_components[i]->dy) < 1.e-10)
298 dxmax = m_components[i]->dx2;
299 else {
300 double num = (m_components[i]->dx2 - m_components[i]->dx1) / 2.;
301 double tantheta = num != 0 ? num / m_components[i]->dy : 0;
302 auto *sc = dynamic_cast<StandardComponent*>(m_components[i].get());
303 if (not sc){
304 ATH_MSG_ERROR("Dynamic cast to StandardComponent failed at line "<<__LINE__);
305 continue;
306 }
307 double y = sc->posy;
308 dxmax = m_components[i]->dx1 + 2. * tantheta * (ymax - y);
309 }
310
311 if (maxdxmax < dxmax)
312 maxdxmax = dxmax;
313 }
314 }
315
316 if (m_name.compare(0, 1, "T") == 0)
317 return w;
318 else
319 return maxdxmax;
320 }
double ymax
Definition listroot.cxx:64

◆ getYMin()

double MuonGM::Station::getYMin ( ) const
private

Definition at line 209 of file Station.cxx.

209 {
210 if (m_name[0] != 'T') {
211 double ystart = std::numeric_limits<double>::max();
212
213 for (unsigned int i = 0; i < m_components.size(); i++) {
214 StandardComponent* sc = dynamic_cast<StandardComponent*>(m_components[i].get());
215 if (not sc){
216 ATH_MSG_ERROR("Dynamic cast to StandardComponent failed at line "<<__LINE__);
217 continue;
218 }
219 if (i == 0 || sc->posy < ystart)
220 ystart = sc->posy;
221 }
222 return ystart;
223 }
224 return 0.;
225 }

◆ global_to_tsz_frame()

GeoTrf::Transform3D MuonGM::Station::global_to_tsz_frame ( const MYSQL & mysql,
const Position & p ) const

Definition at line 508 of file Station.cxx.

509 { return (tsz_to_global_frame(mysql, p)).inverse(); }

◆ hasMdts()

bool MuonGM::Station::hasMdts ( ) const
inline

Definition at line 88 of file Station.h.

88{ return m_hasMdts; }

◆ 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)

◆ mdtHalfPitch()

double MuonGM::Station::mdtHalfPitch ( const MYSQL & mysql) const

Definition at line 343 of file Station.cxx.

343 {
344 const MDT *mdtobj = dynamic_cast<const MDT*>(mysql.GetATechnology("MDT0"));
345 if (not mdtobj){
346 ATH_MSG_ERROR("Dynamic cast to MDT failed at line "<<__LINE__);
347 return 0.;
348 }
349 double mdthalfpitch = 0.5 * (mdtobj->pitch);
350
351 if (hasMdts()) {
352
353 for (int icomp = 0; icomp < GetNrOfComponents(); ++icomp) {
354 const Component *c = GetComponent(icomp);
355 if (c->name.compare(0, 3, "MDT") != 0)
356 continue;
357 const MDT *mdtobj = dynamic_cast<const MDT*>(mysql.GetATechnology(c->name));
358 if (!mdtobj) {
359 ATH_MSG_ERROR("Cannot find MDT definition for component " << c->name);
360 continue;
361 }
362 mdthalfpitch = 0.5 * (mdtobj->pitch);
363 ATH_MSG_DEBUG("Setting halfpitch " << mdthalfpitch << " for station " << m_name);
364 break;
365 }
366 }
367 return mdthalfpitch;
368 }
#define ATH_MSG_DEBUG(x)
@ MDT
Definition RegSelEnums.h:31
const Technology * GetATechnology(const std::string &name) const
Definition MYSQL.cxx:162
int GetNrOfComponents() const
Definition Station.cxx:322
bool hasMdts() const
Definition Station.h:88
Component * GetComponent(int i) const
Definition Station.cxx:83

◆ 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 163 of file AthMessaging.h.

164{
165 MsgStream* ms = m_msg_tls.get();
166 if (!ms) {
167 if (!m_initialized.test_and_set()) initMessaging();
168 ms = new MsgStream(m_imsg,m_nm);
169 m_msg_tls.reset( ms );
170 }
171
172 ms->setLevel (m_lvl);
173 return *ms;
174}
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 178 of file AthMessaging.h.

179{ return msg() << lvl; }

◆ msgLvl()

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

Test the output level.

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

Definition at line 151 of file AthMessaging.h.

152{
153 if (m_lvl <= lvl) {
154 msg() << lvl;
155 return true;
156 } else {
157 return false;
158 }
159}

◆ native_to_tsz_frame()

GeoTrf::Transform3D MuonGM::Station::native_to_tsz_frame ( const MYSQL & mysql,
const Position & p ) const

Definition at line 371 of file Station.cxx.

371 {
372 int amdbVersion = mysql.getNovaReadVersion();
373
374 if (amdbVersion > 0 && amdbVersion < 7 && m_name[0] != 'B') {
375 ATH_MSG_DEBUG("For AMDB version " << amdbVersion << " a left-handed chamber coordinate system was used "
376 << " for endcap side A so be very careful.");
377 }
378
379 // first apply here the mirror symmetry: (we, in fact, apply a rotation)
380 GeoTrf::Transform3D mirrsym = GeoTrf::Transform3D::Identity();
381 if (p.isMirrored) {
382 if (m_name[0] == 'B') {
383 mirrsym = GeoTrf::RotateX3D(180. * Gaudi::Units::deg);
384 }
385 }
386
387 // define the translation to position the chamber in the tzs frame
388 GeoTrf::Translate3D AMDBorgTranslation(0, 0, 0);
389 if ((m_name[0] == 'B' || p.isBarrelLike) && p.zindex < 0 && (!p.isMirrored) && hasMdts()) {
390 double halfpitch = mdtHalfPitch(mysql);
391 AMDBorgTranslation = GeoTrf::Translate3D(GetThickness(mysql) / 2. - getAmdbOrigine_along_thickness(mysql), 0., GetLength() / 2. - (getAmdbOrigine_along_length() + halfpitch));
392
393 ATH_MSG_VERBOSE(" GetThickness / getAmdbO_thick / GetLength() / getAmdbO_length " <<
394 GetThickness(mysql) << " " << getAmdbOrigine_along_thickness(mysql) << " " <<
395 GetLength() << " " << getAmdbOrigine_along_length() + halfpitch);
396 } else {
397 if (m_name[0] == 'T') {
398 AMDBorgTranslation = GeoTrf::Translate3D(GetThickness(mysql) / 2. - getAmdbOrigine_along_thickness(mysql), 0.,
399 GetLength() / 2. - getAmdbOrigine_along_length() + static_cast<TgcComponent *>(GetComponent(0))->posy);
400 } else {
401 AMDBorgTranslation = GeoTrf::Translate3D(GetThickness(mysql) / 2. - getAmdbOrigine_along_thickness(mysql), 0., GetLength() / 2. - getAmdbOrigine_along_length());
402 }
403
404 ATH_MSG_VERBOSE(" GetThickness / getAmdbO_thick / GetLength() / getAmdbO_length " <<
405 GetThickness(mysql) << " " << getAmdbOrigine_along_thickness(mysql) << " " <<
407 }
408
409 // // define the rotations by alpha, beta, gamma
410 // GeoTrf::Rotate3D ralpha = GeoTrf::RotateX3D(p.alpha*Gaudi::Units::deg);
411 // GeoTrf::Rotate3D rbeta = GeoTrf::RotateZ3D(p.beta*Gaudi::Units::deg);
412 // GeoTrf::Rotate3D rgamma;
413 // rgamma = GeoTrf::RotateY3D(p.gamma*Gaudi::Units::deg);
414 // log<<MSG::VERBOSE<<" gamma is not changing sign - original "<<p.gamma<<" new one "<<p.gamma<<endmsg;
415 // log<<MSG::VERBOSE<<" alpha / beta "<<p.alpha<<" "<<p.beta<<endmsg;
416
417 // // apply all transform in sequence
418 // // GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym; // works for barrel and barrel-like
419 // // imt: tested for CTB2004, seems to work for all amdb versions...
420 // GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;
421 GeoTrf::Transform3D to_tsz = AMDBorgTranslation * mirrsym;
422
423 return to_tsz;
424 }
int getNovaReadVersion() const
Definition MYSQL.cxx:260
double getAmdbOrigine_along_length() const
Definition Station.cxx:553
double getAmdbOrigine_along_thickness(const MYSQL &mysql) const
Definition Station.cxx:558
double mdtHalfPitch(const MYSQL &mysql) const
Definition Station.cxx:343

◆ Npositions()

int MuonGM::Station::Npositions ( ) const

Definition at line 104 of file Station.cxx.

104{ return m_positions.size(); }

◆ operator=()

Station & MuonGM::Station::operator= ( const Station & s)
delete

◆ SetAlignPos()

void MuonGM::Station::SetAlignPos ( const AlignPos & p)

Definition at line 42 of file Station.cxx.

42 {
43 if (FindAlignPos(p.zindex, p.phiindex) != m_alignpositions.end() && p.jobindex == 0) {
44 ATH_MSG_WARNING(" this alignposition already exists !!!");
45 ATH_MSG_WARNING(" for station named " << m_name << " setting alignposition at z,phi, key " <<
46 p.zindex << " " << p.phiindex << " " << p.zindex * 100 + p.phiindex <<
47 " and jobIndex = 0");
48 assert(0);
49 }
50
51 int key = p.zindex * 100 + p.phiindex;
52 m_alignpositions.insert(std::pair<int, AlignPos>(key, p));
53 }
#define ATH_MSG_WARNING(x)
AlignPosIterator FindAlignPos(int iz, int iphi) const
Definition Station.cxx:62

◆ SetComponent()

void MuonGM::Station::SetComponent ( Component * c)

Definition at line 79 of file Station.cxx.

79{ m_components.emplace_back(c); }

◆ SetCutout()

void MuonGM::Station::SetCutout ( Cutout * c)

Definition at line 81 of file Station.cxx.

81{ m_cutouts.emplace_back(c); }

◆ setHasMdts()

void MuonGM::Station::setHasMdts ( bool x)
inline

Definition at line 89 of file Station.h.

89{ m_hasMdts = x; }
#define x

◆ 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}

◆ SetPosition()

void MuonGM::Station::SetPosition ( Position p)

Definition at line 87 of file Station.cxx.

87 {
88 if (FindPosition(p.zindex, p.phiindex) != end()) {
89 ATH_MSG_WARNING(" this position already exists !!!");
90 ATH_MSG_WARNING(" for station named " << m_name << " setting position at z,phi, key " <<
91 p.zindex << " " << p.phiindex << " " << p.zindex * 100 + p.phiindex);
92 assert(0);
93 } else {
94 p.isAssigned = true;
95 m_positions[p.zindex * 100 + p.phiindex] = p;
96 }
97 }
PositionIterator FindPosition(int iz, int iphi) const
Definition Station.cxx:99
PositionIterator end() const
Definition Station.cxx:108

◆ tsz_to_global_frame()

GeoTrf::Transform3D MuonGM::Station::tsz_to_global_frame ( const MYSQL & mysql,
const Position & p ) const

Definition at line 430 of file Station.cxx.

431 {
432 GeoTrf::Transform3D nominalTransf = GeoTrf::Transform3D::Identity();
433
434 GeoTrf::Vector3D vec;
435 double RAD;
436
437 if (m_name[0] == 'T') {
438 RAD = p.radius;
439 } else {
440 RAD = p.radius;
441 }
442
443 vec.x() = RAD * cos(p.phi * Gaudi::Units::deg);
444 vec.x() = vec.x() - p.shift * sin((p.phi) * Gaudi::Units::deg);
445 vec.y() = RAD * sin(p.phi * Gaudi::Units::deg);
446 vec.y() = vec.y() + p.shift * cos((p.phi) * Gaudi::Units::deg);
447
448 if (p.isMirrored) {
449 if ((p.isBarrelLike) || (m_name[0] == 'B')) {
450 // correct the z location (=-p.z-m_length) for possible m_amdbOrigine_along_length
452 } else {
453 vec.z() = p.z + GetThickness(mysql); // re-establish the amdb z location (with a - sign)
454 }
455 } else {
456 if ((p.isBarrelLike) || (m_name[0] == 'B' && p.zindex < 0 && hasMdts())) {
457 double halfpitch = mdtHalfPitch(mysql);
458 vec.z() = p.z + halfpitch;
459 } else {
460 vec.z() = p.z;
461 }
462 }
463
464 ATH_MSG_VERBOSE(" translation according to " << vec.x() << " " << vec.y() << " " << vec.z());
465
466 // // define the rotations by alpha, beta, gamma
467 GeoTrf::RotateX3D ralpha(p.alpha * Gaudi::Units::deg);
468 GeoTrf::RotateZ3D rbeta(p.beta * Gaudi::Units::deg);
469 GeoTrf::RotateY3D rgamma(p.gamma * Gaudi::Units::deg);
470
471 ATH_MSG_VERBOSE(" gamma is not changing sign - original " << p.gamma << " new one " << p.gamma <<
472 " alpha / beta " << p.alpha << " " << p.beta);
473
474 // // apply all transform in sequence
475 // // GeoTrf::Transform3D to_tsz = rgamma*rbeta*ralpha*AMDBorgTranslation*mirrsym;
476 // works for barrel and barrel-like
477 // // imt: tested for CTB2004, seems to work for all amdb versions...
478 GeoTrf::Transform3D abgRot = rgamma * rbeta * ralpha;
479
480 if (m_name[0] == 'B' || p.isBarrelLike) {
481 // here all Barrel chambers
482 nominalTransf = GeoTrf::RotateZ3D(p.phi * Gaudi::Units::deg);
483 } else {
484 // replace this with the folowing lines 8/06/2006 SS because, EC not mirrored chambers have anyway to be rotated
485 // by 180deg around z to mov ecoherently their local reference frame and the tube-layer numbering
486 // if ( p.z>=0 || ( p.z<0 && !(p.isMirrored) ) ){
487 // nominalTransf = GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*Gaudi::Units::deg)*
488 // GeoTrf::RotateX3D(p.phi*Gaudi::Units::deg-180*Gaudi::Units::deg));
489 // }
490 // else if (p.z<0 && p.isMirrored){
491 // nominalTransf = GeoTrf::Transform3D(GeoTrf::RotateY3D(-90*Gaudi::Units::deg)*
492 // GeoTrf::RotateX3D(p.phi*Gaudi::Units::deg-180*Gaudi::Units::deg)*
493 // GeoTrf::RotateZ3D(180*Gaudi::Units::deg));
494 // }
495 if (p.z >= 0) {
496 nominalTransf = GeoTrf::Transform3D(GeoTrf::RotateY3D(-90 * Gaudi::Units::deg) * GeoTrf::RotateX3D(p.phi * Gaudi::Units::deg - 180 * Gaudi::Units::deg));
497 } else if (p.z < 0) {
498 nominalTransf = GeoTrf::Transform3D(GeoTrf::RotateY3D(-90 * Gaudi::Units::deg) * GeoTrf::RotateX3D(p.phi * Gaudi::Units::deg - 180 * Gaudi::Units::deg) *
499 GeoTrf::RotateZ3D(180 * Gaudi::Units::deg));
500 } else {
501 ATH_MSG_WARNING("Problem here p.z, mirrored " << p.z << " " << p.isMirrored);
502 }
503 }
504
505 return GeoTrf::Translate3D(vec.x(), vec.y(), vec.z()) * nominalTransf * abgRot;
506 }
std::vector< size_t > vec

◆ tsz_to_native_frame()

GeoTrf::Transform3D MuonGM::Station::tsz_to_native_frame ( const MYSQL & mysql,
const Position & p ) const

Definition at line 426 of file Station.cxx.

427 { return (native_to_tsz_frame(mysql, p)).inverse(); }

◆ operator<<

std::ostream & operator<< ( std::ostream & os,
const Station & s )
friend

Definition at line 326 of file Station.cxx.

326 {
327 os << "Station m_name: " << s.m_name << " " << s.m_components.size() << std::endl;
328 for (unsigned int i = 0; i < s.m_components.size(); i++)
329 os << "\t" << s.m_components[i].get() << std::endl;
330
332 for (k = s.begin(); k != s.end(); ++k)
333 os << "\t\t" << (*k).second << std::endl;
334
336 for (ak = s.abegin(); ak != s.aend(); ++ak)
337 os << "\t\t" << (*ak).second << std::endl;
338
339 os << "--------------------------------------------------" << std::endl;
340 return os;
341 }
std::multimap< int, AlignPos, std::less< int > >::const_iterator AlignPosIterator
Definition Station.h:38
std::map< int, Position, std::less< int > >::const_iterator PositionIterator
Definition Station.h:37

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_alignpositions

AlignPosMap MuonGM::Station::m_alignpositions {}
private

Definition at line 102 of file Station.h.

102{};

◆ m_amdbOrigine_along_length

std::atomic<double> MuonGM::Station::m_amdbOrigine_along_length
mutableprivate

Definition at line 95 of file Station.h.

◆ m_amdbOrigine_along_thickness

std::atomic<double> MuonGM::Station::m_amdbOrigine_along_thickness
mutableprivate

Definition at line 96 of file Station.h.

◆ m_components

std::vector<std::unique_ptr<Component> > MuonGM::Station::m_components {}
private

Definition at line 99 of file Station.h.

99{};

◆ m_cutouts

std::vector< std::unique_ptr<Cutout> > MuonGM::Station::m_cutouts {}
private

Definition at line 100 of file Station.h.

100{};

◆ m_hasMdts

bool MuonGM::Station::m_hasMdts {false}
private

Definition at line 98 of file Station.h.

98{false};

◆ m_imsg

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

MessageSvc pointer.

Definition at line 135 of file AthMessaging.h.

135{ nullptr };

◆ 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_name

std::string MuonGM::Station::m_name {}
private

Definition at line 97 of file Station.h.

97{};

◆ m_nm

std::string AthMessaging::m_nm
privateinherited

Message source name.

Definition at line 129 of file AthMessaging.h.

◆ m_positions

PositionMap MuonGM::Station::m_positions {}
private

Definition at line 101 of file Station.h.

101{};

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