ATLAS Offline Software
Loading...
Searching...
No Matches
MuonTGC_Cabling::TGCCableInASD Class Reference

#include <TGCCableInASD.h>

Inheritance diagram for MuonTGC_Cabling::TGCCableInASD:
Collaboration diagram for MuonTGC_Cabling::TGCCableInASD:

Public Types

enum  CableType {
  NoCableType = -1 , InASD , ASDToPP , InPP ,
  PPToSLB , InSLB , SLBToHPB , HPBToSL ,
  SLBToSSW , SSWToROD , MaxCableType
}

Public Member Functions

 TGCCableInASD (const std::string &filename)
virtual ~TGCCableInASD ()
std::unique_ptr< TGCChannelIdgetChannel (const TGCChannelId &channelId, bool orChannel=false) const
CableType getCableType () const

Private Member Functions

std::unique_ptr< TGCChannelIdgetChannelIn (const TGCChannelId &asdout, bool orChannel=false) const
std::unique_ptr< TGCChannelIdgetChannelOut (const TGCChannelId &asdin, bool orChannel=false) const

Private Attributes

std::array< std::array< std::unique_ptr< TGCDatabase >,+TGCId::ModuleType::MaxModuleType >,+TGCId::RegionType::MaxRegionTypem_database
CableType m_type {CableType::NoCableType}

Detailed Description

Definition at line 18 of file TGCCableInASD.h.

Member Enumeration Documentation

◆ CableType

Enumerator
NoCableType 
InASD 
ASDToPP 
InPP 
PPToSLB 
InSLB 
SLBToHPB 
HPBToSL 
SLBToSSW 
SSWToROD 
MaxCableType 

Definition at line 16 of file TGCCable.h.

Constructor & Destructor Documentation

◆ TGCCableInASD()

MuonTGC_Cabling::TGCCableInASD::TGCCableInASD ( const std::string & filename)

Definition at line 14 of file TGCCableInASD.cxx.

15 : TGCCable(TGCCable::InASD), m_database{{{nullptr}}} {
17 std::make_unique<TGCDatabaseASDToPP>(filename, "EWD");
19 std::make_unique<TGCDatabaseASDToPP>(filename, "EWT");
21 std::make_unique<TGCDatabaseASDToPP>(filename, "ESD");
23 std::make_unique<TGCDatabaseASDToPP>(filename, "EST");
25 std::make_unique<TGCDatabaseASDToPP>(filename, "EWI");
27 std::make_unique<TGCDatabaseASDToPP>(filename, "ESI");
29 std::make_unique<TGCDatabaseASDToPP>(filename, "FWD");
31 std::make_unique<TGCDatabaseASDToPP>(filename, "FWT");
33 std::make_unique<TGCDatabaseASDToPP>(filename, "FSD");
35 std::make_unique<TGCDatabaseASDToPP>(filename, "FST");
37 std::make_unique<TGCDatabaseASDToPP>(filename, "FWI");
39 std::make_unique<TGCDatabaseASDToPP>(filename, "FSI");
40}
std::array< std::array< std::unique_ptr< TGCDatabase >,+TGCId::ModuleType::MaxModuleType >,+TGCId::RegionType::MaxRegionType > m_database
TGCCable(CableType type=NoCableType)
Definition TGCCable.h:31

◆ ~TGCCableInASD()

MuonTGC_Cabling::TGCCableInASD::~TGCCableInASD ( )
virtualdefault

Member Function Documentation

◆ getCableType()

CableType MuonTGC_Cabling::TGCCable::getCableType ( ) const
inlineinherited

Definition at line 34 of file TGCCable.h.

34{ return m_type; }

◆ getChannel()

std::unique_ptr< TGCChannelId > MuonTGC_Cabling::TGCCableInASD::getChannel ( const TGCChannelId & channelId,
bool orChannel = false ) const

Definition at line 44 of file TGCCableInASD.cxx.

45 {
46 if (channelId.getChannelIdType() == TGCChannelId::ChannelIdType::ASDIn) {
47 return getChannelOut(channelId, orChannel);
48 }
49 if (channelId.getChannelIdType() == TGCChannelId::ChannelIdType::ASDOut) {
50 return getChannelIn(channelId, orChannel);
51 }
52
53 return nullptr;
54}
std::unique_ptr< TGCChannelId > getChannelOut(const TGCChannelId &asdin, bool orChannel=false) const
std::unique_ptr< TGCChannelId > getChannelIn(const TGCChannelId &asdout, bool orChannel=false) const

◆ getChannelIn()

std::unique_ptr< TGCChannelId > MuonTGC_Cabling::TGCCableInASD::getChannelIn ( const TGCChannelId & asdout,
bool orChannel = false ) const
private

Definition at line 56 of file TGCCableInASD.cxx.

57 {
58 if (orChannel || !asdout.isValid()) {
59 return nullptr;
60 }
61
62 TGCDatabase* databaseP = m_database.at(+asdout.getRegionType()).at(+asdout.getModuleType()).get();
63
64 // sector ASDIn [1..48, 1..24], ASDOut [0..47, 0..23]
65 int sector;
66 if (asdout.isEndcap() && !asdout.isInner()) {
67 sector = asdout.getSector() - 1;
68 if (sector <= 0) {
70 }
71 } else {
72 sector = asdout.getSector();
73 if (sector <= 0) {
75 }
76 }
77
78 // chamber ASDIn [1(F),1,2,3,4,5(E)], ASDOut [0(F),4,3,2,1,0(E)]
79 int chamber;
80 if (asdout.isEndcap() && !asdout.isInner()) {
81 chamber = 5 - asdout.getChamber();
82 } else {
83 chamber = asdout.getChamber() + 1;
84 }
85
86 int channel = -1;
87 // channel ASDIn [1..32(S),1..n(W chamber)], ASDOut [0..31(S),n..0(W
88 // sector)]
89 if (asdout.isWire()) {
90 // Endcap Triplet chamberId start from 1 in ASDOut
91 int dbChamber = asdout.getChamber();
92 if (asdout.isEndcap() && asdout.isTriplet()) {
93 dbChamber = dbChamber - 1;
94 }
95 int indexIn[TGCDatabaseASDToPP::NIndexIn] = {
96 asdout.getLayer(), dbChamber, asdout.getChannel()};
97 int i = databaseP->getIndexDBIn(indexIn);
98 if (i < 0) {
99 return nullptr;
100 }
101 channel = databaseP->getEntry(i, 7) + 1;
102 } else {
103 if ((asdout.isBackward() && asdout.isAside()) ||
104 (!asdout.isBackward() && asdout.isCside())) {
105 channel = 32 - asdout.getChannel();
106 } else {
107 channel = asdout.getChannel() + 1;
108 }
109 }
110 if (channel == -1) {
111 return nullptr;
112 }
113
114 return std::make_unique<TGCChannelASDIn>(
115 asdout.getSideType(), asdout.getSignalType(), asdout.getRegionType(),
116 sector, asdout.getLayer(), chamber, channel);
117}
static constexpr int NUM_ENDCAP_SECTOR
Definition TGCId.h:43
static constexpr int NUM_FORWARD_SECTOR
Definition TGCId.h:44

◆ getChannelOut()

std::unique_ptr< TGCChannelId > MuonTGC_Cabling::TGCCableInASD::getChannelOut ( const TGCChannelId & asdin,
bool orChannel = false ) const
private

Definition at line 119 of file TGCCableInASD.cxx.

120 {
121 if (orChannel || asdin.isValid() == false) {
122 return nullptr;
123 }
124
125 const bool asdinisEndcap = asdin.isEndcap();
126 const bool asdinisTriplet = asdin.isTriplet();
127 const int asdinLayer = asdin.getLayer();
128 const int asdinChannel = asdin.getChannel();
129
130 TGCDatabase* databaseP =
131 m_database.at(+asdin.getRegionType()).at(+asdin.getModuleType()).get();
132
133 if (!databaseP) {
134 return nullptr;
135 }
136 // sector ASDIn [1..48, 1..24], ASDOut [2..47.0.1, 1..23.0]
137 int sector{0};
138 if (asdin.isEndcap()) {
139 if (!asdin.isInner()) {
140 // Endcap
141 sector = (asdin.getSector() + 1) % TGCId::NUM_ENDCAP_SECTOR;
142 } else {
143 // EI
144 sector = (asdin.getSector()) % TGCId::NUM_INNER_SECTOR;
145 }
146 } else {
147 if (!asdin.isInner()) {
148 // Forward
149 sector = (asdin.getSector()) % TGCId::NUM_FORWARD_SECTOR;
150 } else {
151 // FI
152 sector = (asdin.getSector()) % TGCId::NUM_INNER_SECTOR;
153 }
154 }
155
156 // chamber ASDIn [1(F),1,2,3,4,5(E)], ASDOut [0(F),4,3,2,1,0(E)]
157 int chamber{0};
158 if (asdin.isEndcap() && !asdin.isInner()) {
159 chamber = 5 - asdin.getChamber();
160 } else {
161 chamber = asdin.getChamber() - 1;
162 }
163
164 int channel = -1;
165 // channel ASDIn [1..32(S),1..n(W chamber)], ASDOut [0..31(S),n..0(W
166 // sector)]
167 if (asdin.isWire()) {
168 const int MaxEntry = databaseP->getMaxEntry();
169 for (int i = 0; i < MaxEntry; i++) {
170 // Endcap Triplet chamberId start from 1 in ASDOut
171 int dbChamber = chamber;
172 if (asdinisEndcap && asdinisTriplet) {
173 dbChamber = dbChamber - 1;
174 }
175
176 int dbChannel = asdinChannel - 1;
177 if (databaseP->getEntry(i, 7) == dbChannel &&
178 databaseP->getEntry(i, 1) == dbChamber &&
179 databaseP->getEntry(i, 0) == asdinLayer) {
180 channel = databaseP->getEntry(i, 6);
181 break;
182 }
183 }
184 } else {
185 // asdin.isBackward() can not be used because this method rely on
186 // sector number for asdout
187 bool is_Backward = false;
188 if (asdin.isEndcap()) {
189 if (!asdin.isInner()) {
190 if (asdin.isAside()) {
191 is_Backward = (sector % 2 == 1);
192 } else {
193 is_Backward = (sector % 2 == 0);
194 }
195 } else {
196 // EI
197 // Special case of EI11
198 if (sector == 15) {
199 if (asdin.isAside()) {
200 is_Backward = false;
201 } else {
202 is_Backward = true;
203 }
204 } else if (sector == 16) {
205 if (asdin.isAside()) {
206 is_Backward = true;
207 } else {
208 is_Backward = false;
209 }
210 } else {
211 // A-side phi0 F: phi1 F: phi2 B
212 // C-side phi0 B: phi1 B: phi2 F
213 if (asdin.isAside()) {
214 is_Backward = (sector % 3 == 2);
215 } else {
216 is_Backward = (sector % 3 != 2);
217 }
218 }
219 }
220 } else {
221 if (asdin.isAside()) {
222 is_Backward = true; // All Backward for A-side
223 }
224 }
225 if ((is_Backward && asdin.isAside()) ||
226 (!is_Backward && asdin.isCside())) {
227 channel = 32 - asdin.getChannel();
228 } else {
229 channel = asdin.getChannel() - 1;
230 }
231 }
232 if (channel == -1) {
233 return nullptr;
234 }
235
236 return std::make_unique<TGCChannelASDOut>(
237 asdin.getSideType(), asdin.getSignalType(), asdin.getRegionType(),
238 sector, asdin.getLayer(), chamber, channel);
239}
static constexpr int NUM_INNER_SECTOR
Definition TGCId.h:45

Member Data Documentation

◆ m_database

std::array<std::array<std::unique_ptr<TGCDatabase>, +TGCId::ModuleType::MaxModuleType>, +TGCId::RegionType::MaxRegionType> MuonTGC_Cabling::TGCCableInASD::m_database
private

Definition at line 33 of file TGCCableInASD.h.

◆ m_type

CableType MuonTGC_Cabling::TGCCable::m_type {CableType::NoCableType}
privateinherited

Definition at line 37 of file TGCCable.h.


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