ATLAS Offline Software
Loading...
Searching...
No Matches
SCT_ForwardParameters.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
6
8#include "SCT_DataBase.h"
11
12#include "SCT_FSIHelper.h"
13#include "GaudiKernel/SystemOfUnits.h"
14
15#include <cmath>
16#include <iostream>
17#include <memory>
18
19
21{
22 m_rdb = rdb;
23 m_fsiHelper = std::make_unique<FSIHelper>(m_rdb);
24}
25
29
30//
31// Forward Ring
32//
33int
35{
36 return m_rdb->fwdRing(iRing)->getInt("NUMMODULES");
37}
38
39double
41{
42 return m_rdb->fwdRing(iRing)->getDouble("MODULESTAGGER") * Gaudi::Units::mm;
43}
44
45double
47{
48 return m_rdb->fwdRing(iRing)->getDouble("PHIOFREFMODULE") * Gaudi::Units::deg;
49}
50
51
52int
54{
55 return m_rdb->fwdRing(iRing)->getInt("USUALRINGSIDE");
56}
57
58double
60{
61 return m_rdb->fwdRing(iRing)->getDouble("RINGTODISCCENTER") * Gaudi::Units::mm;
62}
63
64
65
66//
67// Forward Wheel
68//
69double
71{
72 return m_rdb->fwdWheel(iWheel)->getDouble("ZPOSITION") * Gaudi::Units::mm;
73}
74
75// Returns +/-1
76int
78{
79 return m_rdb->fwdWheel(iWheel)->getInt("STEREOTYPE");
80}
81
82int
84{
85 return m_rdb->fwdWheel(iWheel)->getInt("NUMRINGS");
86}
87
88
89int
90SCT_ForwardParameters::fwdWheelRingMapIndex(int iWheel, int iRing, int ec) const
91{
92 // In SCT_GeoModel the wheel number is generally 0-8.
93 // In the table "SctFwdWheelRingMap" the wheel number is 1 to 9.
94
95 // The postive and negative endcap are not identical. If the negative
96 // endcap is different from the positive endcap there will be in an entry
97 // with the wheel number negative. For the negative endcap we first look for
98 // an entry with -ve wheel number. If no entry wee try the positive endcap.
99
100 int iWheelDB = iWheel + 1;
101
102 // If it is in the -ve endcap we first look for an entry with -ve wheel number
103 int index = -1;
104 if (ec < 0) {
105 index = fwdWheelRingMapIndexDB(-iWheelDB, iRing);
106 if (index >= 0) return index;
107 }
108 // Look for it in the positive endcap
109 index = fwdWheelRingMapIndexDB(iWheelDB, iRing);
110 if (index < 0) {
111 std::cout << "Wheel (numbering from 1)" << iWheelDB << ", Ring " << iRing
112 << " not in table SctFwdWheelRingMap" << std::endl;
113 }
114 return index;
115}
116
117// Get index in SctFwdWheelRing table for wheel/ring combination
118// It just loops through the table until it finds a match.
119// This is not particularly efficient but its fine for the purpose.
120// Returns -1 if not found.
121
122int
124{
125
126 for (int i=0; i < m_rdb->fwdWheelRingMapSize(); i++) {
127 if ((m_rdb->fwdWheelRingMap(i)->getInt("WHEELNUM") == iWheelDB) &&
128 (m_rdb->fwdWheelRingMap(i)->getInt("RINGNUM") == iRing))
129 {
130 return i;
131 break;
132 }
133 }
134 return -1;
135}
136
137int
138SCT_ForwardParameters::fwdRingStaggerOfRefModule(int iWheel, int iRing, int ec) const
139{
140 int index = fwdWheelRingMapIndex(iWheel, iRing, ec);
141 if (index < 0) return 0;
142 return m_rdb->fwdWheelRingMap(index)->getInt("STAGGEROFREFMODULE");
143}
144
145
146int
147SCT_ForwardParameters::fwdWheelRingSide(int iWheel, int iRing, int ec) const
148{
149 int index = fwdWheelRingMapIndex(iWheel, iRing, ec);
150 if (index < 0) return 0;
151 return m_rdb->fwdWheelRingMap(index)->getInt("SIDE");
152}
153
154
155int
156SCT_ForwardParameters::fwdWheelModuleType(int iWheel, int iRing, int ec) const
157{
158 int index = fwdWheelRingMapIndex(iWheel, iRing, ec);
159 if (index < 0) return 0;
160 return m_rdb->fwdWheelRingMap(index)->getInt("MODULETYPE");
161}
162
163
164//
165// Forward DiscSupport
166//
167
168double
170{
171 return m_rdb->fwdDiscSupport()->getDouble("INNERRADIUS") * Gaudi::Units::mm;
172}
173
174double
176{
177 return m_rdb->fwdDiscSupport()->getDouble("OUTERRADIUS") * Gaudi::Units::mm;
178}
179
180double
182{
183 return m_rdb->fwdDiscSupport()->getDouble("THICKNESS") * Gaudi::Units::mm;
184}
185
186std::string
188{
189 return m_rdb->fwdDiscSupport()->getString("MATERIAL");
190}
191
192//
193// Forward PatchPanel
194//
195int
197{
198 return m_rdb->fwdPatchPanelLocSize();
199}
200
201int
203{
204 return m_rdb->fwdPatchPanelLoc(iLoc)->getInt("TYPENUM");
205}
206
207double
209{
210 return m_rdb->fwdPatchPanelLoc(iLoc)->getDouble("LOCANGLE") * Gaudi::Units::degree;
211}
212
213bool
215{
216 return m_rdb->fwdPatchPanelLoc(iLoc)->getInt("REPEATQUADRANT");
217}
218
219int
221{
222 return m_rdb->fwdPatchPanelSize();
223}
224
225double
227{
228 return m_rdb->fwdPatchPanel(iType)->getDouble("THICKNESS") * Gaudi::Units::mm;
229}
230
231double
233{
234 return m_rdb->fwdPatchPanel(iType)->getDouble("MIDRADIUS") * Gaudi::Units::mm;
235}
236
237
238double
240{
241 return m_rdb->fwdPatchPanel(iType)->getDouble("DELTAR") * Gaudi::Units::mm;
242}
243
244double
246{
247 return m_rdb->fwdPatchPanel(iType)->getDouble("RPHI") * Gaudi::Units::mm;
248}
249
250std::string
252{
253 return m_rdb->fwdPatchPanel(iType)->getString("MATERIAL");
254}
255
256//
257// Forward PatchPanel Connector
258//
259bool
261{
262 return m_rdb->fwdPPCoolingSize() > 0;
263}
264
265double
267{
268 return m_rdb->fwdPPConnector()->getDouble("THICKNESS") * Gaudi::Units::mm;
269}
270
271double
273{
274 return m_rdb->fwdPPConnector()->getDouble("DELTAR") * Gaudi::Units::mm;
275}
276
277double
279{
280 return m_rdb->fwdPPConnector()->getDouble("RPHI") * Gaudi::Units::mm;
281}
282
283std::string
285{
286 return m_rdb->fwdPPConnector()->getString("MATERIAL");
287}
288
289//
290// Forward PatchPanel Cooling
291//
292bool
294{
295 return m_rdb->fwdPPCoolingSize() > 0;
296}
297
298double
300{
301 return m_rdb->fwdPPCooling()->getDouble("THICKNESS") * Gaudi::Units::mm;
302}
303
304double
306{
307 return m_rdb->fwdPPCooling()->getDouble("DELTAR") * Gaudi::Units::mm;
308}
309
310double
312{
313 return m_rdb->fwdPPCooling()->getDouble("RPHI") * Gaudi::Units::mm;
314}
315
316std::string
318{
319 return m_rdb->fwdPPCooling()->getString("MATERIAL");
320}
321
322//
323// Cooling Block
324//
325int
327{
328 return m_rdb->fwdCoolingBlock(iType)->getInt("HILO");
329}
330
331int
333{
334 // true is main, false is secondary
335 return m_rdb->fwdCoolingBlock(iType)->getInt("MAINSECONDARY");
336}
337
338double
340{
341 return m_rdb->fwdCoolingBlock(iType)->getDouble("DELTAR") * Gaudi::Units::mm;
342}
343
344double
346{
347 return m_rdb->fwdCoolingBlock(iType)->getDouble("RPHI") * Gaudi::Units::mm;
348}
349
350double
352{
353 return m_rdb->fwdCoolingBlock(iType)->getDouble("THICKNESS") * Gaudi::Units::mm;
354}
355
356double
358{
359 return m_rdb->fwdCoolingBlock(iType)->getDouble("OFFSETFROMDISC") * Gaudi::Units::mm;
360}
361
362std::string
364{
365 return m_rdb->fwdCoolingBlock(iType)->getString("MATERIAL");
366}
367
368
369//
370// Forward DiscPowerTape
371//
372double
374{
375 return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEINNERRADIUS") * Gaudi::Units::mm;
376}
377
378double
380{
381 return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPEOUTERRADIUS") * Gaudi::Units::mm;
382}
383
384double
386{
387 return m_rdb->fwdRingServices(iRing)->getDouble("POWERTAPETHICKNESS") * Gaudi::Units::mm;
388}
389
390std::string
392{
393 return m_rdb->fwdRingServices(iRing)->getString("POWERTAPEMATERIAL");
394}
395
396
397
398//
399// Forward RingCooling
400//
401double
403{
404 return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGINNERRADIUS") * Gaudi::Units::mm;
405}
406
407double
409{
410 return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGOUTERRADIUS") * Gaudi::Units::mm;
411}
412
413double
415{
416 return m_rdb->fwdRingServices(iRing)->getDouble("COOLINGTHICKNESS") * Gaudi::Units::mm;
417}
418
419std::string
421{
422 return m_rdb->fwdRingServices(iRing)->getString("COOLINGMATERIAL");
423}
424
425//
426// Forward Disc Fixation
427//
428bool
430{
431 return m_rdb->fwdDiscFixationTable()->size() > 0;
432}
433
434double
436{
437 return m_rdb->fwdDiscFixation()->getDouble("THICKNESS") * Gaudi::Units::mm;
438}
439
440double
442{
443 return m_rdb->fwdDiscFixation()->getDouble("RADIUS") * Gaudi::Units::mm;
444}
445
446std::string
448{
449 return m_rdb->fwdDiscFixation()->getString("MATERIAL");
450}
451
452//
453// Forward SupportFrame
454//
455double
457{
458 return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEDELTAR") * Gaudi::Units::mm;
459}
460
461double
463{
464 return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEINNERRAD") * Gaudi::Units::mm;
465}
466
467double
469{
470 return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMIN") * Gaudi::Units::mm;
471}
472
473double
475{
476 return m_rdb->fwdServices()->getDouble("SUPPORTFRAMEZMAX") * Gaudi::Units::mm;
477}
478
479std::string
481{
482 return m_rdb->fwdServices()->getString("SUPPORTFRAMEMATERIAL");
483}
484
485//
486// Forward CoolingPipe
487//
488double
490{
491 return m_rdb->fwdServices()->getDouble("COOLINGPIPERADIUS") * Gaudi::Units::mm;
492}
493
494std::string
496{
497 return m_rdb->fwdServices()->getString("COOLINGPIPEMATERIAL");
498}
499
500//
501// Forward PowerTape
502//
503double
505{
506 return m_rdb->fwdServices()->getDouble("POWERTAPECROSSSECT") * Gaudi::Units::mm2;
507}
508
509
510std::string
512{
513 return m_rdb->fwdServices()->getString("POWERTAPEMATERIAL");
514}
515
516//
517// FSI
518//
519int
521{
522 return m_rdb->fwdFSITypeSize();
523}
524
525double
527{
528 return m_rdb->fwdFSIType(iType)->getDouble("DELTAR") * Gaudi::Units::mm;
529}
530
531double
533{
534 return m_rdb->fwdFSIType(iType)->getDouble("RPHI") * Gaudi::Units::mm;
535}
536
537double
539{
540 // Fix for SCT-DC3-03. May be removed when ATLAS-DC3-07 is obsolete.
541 if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return 26*Gaudi::Units::mm;
542 return m_rdb->fwdFSIType(iType)->getDouble("THICKNESS") * Gaudi::Units::mm;
543}
544
545std::string
547{
548 return m_rdb->fwdFSIType(iType)->getString("MATERIAL");
549}
550
551double
553{
554 // Fix for SCT-DC3-03. May be removed when ATLAS-DC3-07 is obsolete.
555 if (iType == 0 && m_rdb->versionTag() == "SCT-DC3-03") return 22*Gaudi::Units::mm;
556 return m_rdb->fwdFSIType(iType)->getDouble("ZOFFSET") * Gaudi::Units::mm;
557}
558
559
560const FSIHelper &
562{
563 return *m_fsiHelper;
564}
565
566
567const std::vector<const FSIDetails *> &
569{
570 return fsiHelper().fsiVector(iWheel);
571}
572
573
574//
575// Forward Cylinder Services
576//
577bool
579{
580 return m_rdb->fwdCylServSize() > 0;
581}
582
583int
585{
586
587 return m_rdb->fwdCylServLocSize();
588}
589
590std::string
592{
593 return m_rdb->fwdCylServLoc(iLoc)->getString("NAME");
594}
595
596double
598{
599 return m_rdb->fwdCylServLoc(iLoc)->getDouble("LOCANGLE") * Gaudi::Units::degree;
600}
601
602int
604{
605 return m_rdb->fwdCylServSize();
606}
607
608std::string
610{
611 return m_rdb->fwdCylServ(iType)->getString("NAME");
612}
613
614std::string
616{
617 return m_rdb->fwdCylServ(iType)->getString("MATERIAL");
618}
619
620double
622{
623 return m_rdb->fwdCylServ(iType)->getDouble("DELTAR") * Gaudi::Units::mm;
624}
625
626double
628{
629 return m_rdb->fwdCylServ(iType)->getDouble("RPHI") * Gaudi::Units::mm;
630}
631
632//
633// Forward ThermalShieldElement
634//
635int
637{
638 return m_rdb->fwdThermalShieldSize();
639}
640
641std::string
643{
644 return m_rdb->fwdThermalShield(iElement)->getString("MATERIAL");
645}
646
647double
649{
650 return m_rdb->fwdThermalShield(iElement)->getDouble("INNERRADIUS") * Gaudi::Units::mm;
651}
652
653double
655{
656 return m_rdb->fwdThermalShield(iElement)->getDouble("OUTERRADIUS") * Gaudi::Units::mm;
657}
658
659double
661{
662 return m_rdb->fwdThermalShield(iElement)->getDouble("ZMIN") * Gaudi::Units::mm;
663}
664
665double
667{
668 return m_rdb->fwdThermalShield(iElement)->getDouble("ZMAX") * Gaudi::Units::mm;
669}
670
671
672//
673// Forward General
674//
675int
677{
678 return m_rdb->fwdGeneral()->getInt("NUMWHEELS");
679}
680
681double
683{
684 return m_rdb->fwdGeneral()->getDouble("INNERRADIUS") * Gaudi::Units::mm;
685}
686
687double
689{
690 return m_rdb->fwdGeneral()->getDouble("OUTERRADIUS") * Gaudi::Units::mm;
691}
692
693double
695{
696 return m_rdb->fwdGeneral()->getDouble("ZMIN") * Gaudi::Units::mm;
697}
698
699double
701{
702 return m_rdb->fwdGeneral()->getDouble("ZMAX") * Gaudi::Units::mm;
703}
704
705double
707{
708 return m_rdb->fwdGeneral()->getDouble("TRTGAPPOS") * Gaudi::Units::mm;
709}
710
711//
712// OptoHarness
713//
714bool
716{
717 return m_rdb->fwdOptoHarnessTable()->size() > 0;
718}
719
720int
722{
723 return m_rdb->fwdOptoHarness(index)->getInt("DISCTYPE");
724}
725
726double
728{
729 return m_rdb->fwdOptoHarness(index)->getDouble("INNERRADIUS") * Gaudi::Units::mm;
730}
731
732double
734{
735 return m_rdb->fwdOptoHarness(index)->getDouble("OUTERRADIUS") * Gaudi::Units::mm;
736}
737
738double
740{
741 return m_rdb->fwdOptoHarness(index)->getDouble("THICKNESS") * Gaudi::Units::mm;
742}
743
744std::string
746{
747 return m_rdb->fwdOptoHarness(index)->getString("MATERIAL");
748}
749
752 if (this != &right) {
753 m_rdb = right.m_rdb;
754 m_fsiHelper = std::make_unique<FSIHelper>(m_rdb);
755 }
756 return *this;
757}
758
760 m_rdb = right.m_rdb;
761 m_fsiHelper = std::make_unique<FSIHelper>(m_rdb);
762}
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
const std::vector< const FSIDetails * > & fsiVector(int wheel) const
std::string fwdDiscPowerTapeMaterial(int iRing) const
int fwdWheelNumRings(int iWheel) const
std::string fwdOptoHarnessMaterial(int itype) const
double fwdOptoHarnessInnerRadius(int itype) const
int fwdWheelRingMapIndex(int iWheel, int iRing, int ec) const
double fwdPatchPanelThickness(int iType) const
int fwdWheelRingSide(int iWheel, int iRing, int ec) const
int fwdRingStaggerOfRefModule(int iRing) const
std::string fwdCylinderServiceMaterial(int iType) const
double fwdRingPhiOfRefModule(int iRing) const
double fwdThermalShieldOuterRadius(int iElement) const
int fwdOptoHarnessDiscType(int itype) const
std::string fwdCoolingBlockMaterial(int iType) const
double fwdCoolingBlockDeltaR(int iType) const
double fwdCylinderServiceDeltaR(int iType) const
int fwdPatchPanelType(int iLoc) const
bool fwdPatchPanelRepeatQuadrant(int iLoc) const
double fwdRingCoolingThickness(int iRing) const
double fwdFSIGeomDeltaR(int iType) const
double fwdPatchPanelDeltaR(int iType) const
double fwdRingCoolingOuterRadius(int iRing) const
int fwdWheelStereoType(int iWheel) const
std::string fwdCoolingPipeMaterial() const
double fwdDiscPowerTapeOuterRadius(int iRing) const
int fwdCoolingBlockMainOrSecondary(int iType) const
double fwdWheelZPosition(int iWheel) const
std::string fwdDiscFixationMaterial() const
double fwdSupportFrameInnerRadius() const
SCT_ForwardParameters(SCT_DataBase *rdb)
int fwdRingNumModules(int iRing) const
double fwdOptoHarnessThickness(int itype) const
double fwdDiscPowerTapeInnerRadius(int iRing) const
std::string fwdDiscSupportMaterial() const
double fwdRingModuleStagger(int iRing) const
std::string fwdRingCoolingMaterial(int iRing) const
std::string fwdSupportFrameMaterial() const
double fwdFSIGeomZOffset(int iType) const
double fwdCylinderServiceLocAngle(int iLoc) const
double fwdDiscPowerTapeThickness(int iRing) const
SCT_ForwardParameters & operator=(const SCT_ForwardParameters &right)
double fwdCylinderServiceRPhi(int iType) const
int fwdRingUsualRingSide(int iRing) const
double fwdPatchPanelRPhi(int iType) const
std::string fwdPatchPanelMaterial(int iType) const
const std::vector< const FSIDetails * > & fsiVector(int iWheel) const
std::string fwdPPCoolingMaterial() const
std::string fwdPPConnectorMaterial() const
double fwdThermalShieldInnerRadius(int iElement) const
double fwdCoolingBlockOffsetFromDisc(int iType) const
double fwdCoolingBlockThickness(int iType) const
std::string fwdCylinderServiceLocName(int iLoc) const
const FSIHelper & fsiHelper() const
int fwdWheelModuleType(int iWheel, int iRing, int ec) const
int fwdCoolingBlockHiLo(int iType) const
double fwdRingDistToDiscCenter(int iRin) const
double fwdPatchPanelLocAngle(int iLoc) const
double fwdPatchPanelMidRadius(int iType) const
std::string fwdCylinderServiceName(int iType) const
double fwdFSIGeomThickness(int iType) const
std::string fwdFSIGeomMaterial(int iType) const
double fwdOptoHarnessOuterRadius(int itype) const
double fwdRingCoolingInnerRadius(int iRing) const
std::string fwdPowerTapeMaterial() const
double fwdCoolingBlockRPhi(int iType) const
double fwdSupportFrameRadialThickness() const
std::string fwdThermalShieldMaterial(int iElement) const
std::unique_ptr< FSIHelper > m_fsiHelper
double fwdThermalShieldZMax(int iElement) const
double fwdThermalShieldZMin(int iElement) const
int fwdWheelRingMapIndexDB(int iWheelDB, int iRing) const
double fwdFSIGeomRPhi(int iType) const
Definition index.py:1