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 ()
virtual TGCChannelIdgetChannel (const TGCChannelId *channelId, bool orChannel=false) const
CableType getCableType (void) const

Protected Member Functions

virtual TGCModuleMapgetModuleIn (const TGCModuleId *) const
virtual TGCModuleMapgetModuleOut (const TGCModuleId *) const

Private Member Functions

 TGCCableInASD ()=delete
virtual TGCChannelIdgetChannelIn (const TGCChannelId *asdout, bool orChannel=false) const
virtual TGCChannelIdgetChannelOut (const TGCChannelId *asdin, bool orChannel=false) const

Private Attributes

std::array< std::array< std::unique_ptr< TGCDatabase >, TGCId::MaxModuleType >, TGCId::MaxRegionTypem_database
CableType m_type

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 18 of file TGCCable.h.

Constructor & Destructor Documentation

◆ TGCCableInASD() [1/2]

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

Definition at line 14 of file TGCCableInASD.cxx.

16 m_database{{{nullptr}}}
17{
18 m_database[TGCId::Endcap][TGCId::WD] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWD");
19 m_database[TGCId::Endcap][TGCId::WT] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWT");
20 m_database[TGCId::Endcap][TGCId::SD] = std::make_unique<TGCDatabaseASDToPP>(filename,"ESD");
21 m_database[TGCId::Endcap][TGCId::ST] = std::make_unique<TGCDatabaseASDToPP>(filename,"EST");
22 m_database[TGCId::Endcap][TGCId::WI] = std::make_unique<TGCDatabaseASDToPP>(filename,"EWI");
23 m_database[TGCId::Endcap][TGCId::SI] = std::make_unique<TGCDatabaseASDToPP>(filename,"ESI");
24 m_database[TGCId::Forward][TGCId::WD] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWD");
25 m_database[TGCId::Forward][TGCId::WT] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWT");
26 m_database[TGCId::Forward][TGCId::SD] = std::make_unique<TGCDatabaseASDToPP>(filename,"FSD");
27 m_database[TGCId::Forward][TGCId::ST] = std::make_unique<TGCDatabaseASDToPP>(filename,"FST");
28 m_database[TGCId::Forward][TGCId::WI] = std::make_unique<TGCDatabaseASDToPP>(filename,"FWI");
29 m_database[TGCId::Forward][TGCId::SI] = std::make_unique<TGCDatabaseASDToPP>(filename,"FSI");
30}
std::array< std::array< std::unique_ptr< TGCDatabase >, TGCId::MaxModuleType >, TGCId::MaxRegionType > m_database
TGCCable(CableType type=NoCableType)
Definition TGCCable.h:24

◆ ~TGCCableInASD()

MuonTGC_Cabling::TGCCableInASD::~TGCCableInASD ( )
virtualdefault

◆ TGCCableInASD() [2/2]

MuonTGC_Cabling::TGCCableInASD::TGCCableInASD ( )
privatedelete

Member Function Documentation

◆ getCableType()

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

Definition at line 30 of file TGCCable.h.

30{ return m_type; }

◆ getChannel()

TGCChannelId * MuonTGC_Cabling::TGCCableInASD::getChannel ( const TGCChannelId * channelId,
bool orChannel = false ) const
virtual

Definition at line 34 of file TGCCableInASD.cxx.

35 {
36 if(channelId){
37 if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDIn)
38 return getChannelOut(channelId,orChannel);
39 if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDOut)
40 return getChannelIn(channelId,orChannel);
41 }
42 return nullptr;
43}
virtual TGCChannelId * getChannelOut(const TGCChannelId *asdin, bool orChannel=false) const
virtual TGCChannelId * getChannelIn(const TGCChannelId *asdout, bool orChannel=false) const

◆ getChannelIn()

TGCChannelId * MuonTGC_Cabling::TGCCableInASD::getChannelIn ( const TGCChannelId * asdout,
bool orChannel = false ) const
privatevirtual

Reimplemented from MuonTGC_Cabling::TGCCable.

Definition at line 45 of file TGCCableInASD.cxx.

46 {
47 if(orChannel) return nullptr;
48 if(asdout->isValid()==false) return nullptr;
49
50 TGCDatabase* databaseP = m_database[asdout->getRegionType()][asdout->getModuleType()].get();
51
52 TGCChannelASDIn* asdin = nullptr;
53
54 // sector ASDIn [1..48, 1..24], ASDOut [0..47, 0..23]
55 int sector;
56 if(asdout->isEndcap() && !asdout->isInner()){
57 sector = asdout->getSector()-1;
58 if(sector<=0) sector += TGCId::NUM_ENDCAP_SECTOR;
59 } else {
60 sector = asdout->getSector();
61 if(sector<=0) sector += TGCId::NUM_FORWARD_SECTOR;
62 }
63
64 // chamber ASDIn [1(F),1,2,3,4,5(E)], ASDOut [0(F),4,3,2,1,0(E)]
65 int chamber;
66 if(asdout->isEndcap() && !asdout->isInner()){
67 chamber = 5-asdout->getChamber();
68 } else {
69 chamber = asdout->getChamber()+1;
70 }
71
72 int channel=-1;
73 // channel ASDIn [1..32(S),1..n(W chamber)], ASDOut [0..31(S),n..0(W sector)]
74 if(asdout->isWire()){
75 // Endcap Triplet chamberId start from 1 in ASDOut
76 int dbChamber = asdout->getChamber();
77 if(asdout->isEndcap() && asdout->isTriplet()) dbChamber = dbChamber-1;
78 int indexIn[TGCDatabaseASDToPP::NIndexIn] =
79 {asdout->getLayer(), dbChamber, asdout->getChannel()};
80 int i = databaseP->getIndexDBIn(indexIn);
81 if(i<0) return nullptr;
82 channel = databaseP->getEntry(i,7)+1;
83 } else {
84 if(( asdout->isBackward() && asdout->isAside()) ||
85 (!asdout->isBackward() && asdout->isCside()))
86 channel = 32-asdout->getChannel();
87 else
88 channel = asdout->getChannel()+1;
89 }
90 if(channel==-1) return nullptr;
91
92 asdin = new TGCChannelASDIn(asdout->getSideType(),
93 asdout->getSignalType(),
94 asdout->getRegionType(),
95 sector,
96 asdout->getLayer(),
97 chamber,
98 channel);
99
100 return asdin;
101}
static constexpr int NUM_ENDCAP_SECTOR
Definition TGCId.h:40
static constexpr int NUM_FORWARD_SECTOR
Definition TGCId.h:41

◆ getChannelOut()

TGCChannelId * MuonTGC_Cabling::TGCCableInASD::getChannelOut ( const TGCChannelId * asdin,
bool orChannel = false ) const
privatevirtual

Reimplemented from MuonTGC_Cabling::TGCCable.

Definition at line 103 of file TGCCableInASD.cxx.

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

◆ getModuleIn()

virtual TGCModuleMap * MuonTGC_Cabling::TGCCable::getModuleIn ( const TGCModuleId * ) const
inlineprotectedvirtualinherited

◆ getModuleOut()

virtual TGCModuleMap * MuonTGC_Cabling::TGCCable::getModuleOut ( const TGCModuleId * ) const
inlineprotectedvirtualinherited

Member Data Documentation

◆ m_database

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

Definition at line 32 of file TGCCableInASD.h.

◆ m_type

CableType MuonTGC_Cabling::TGCCable::m_type
privateinherited

Definition at line 43 of file TGCCable.h.


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