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

◆ ~TGCCableInASD()

virtual MuonTGC_Cabling::TGCCableInASD::~TGCCableInASD ( )
virtualdefault

◆ TGCCableInASD() [2/2]

MuonTGC_Cabling::TGCCableInASD::TGCCableInASD ( void )
inlineprivate

Definition at line 27 of file TGCCableInASD.h.

27{}

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 30 of file TGCCableInASD.cxx.

31 {
32 if(channelId){
33 if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDIn)
34 return getChannelOut(channelId,orChannel);
35 if(channelId->getChannelIdType()==TGCChannelId::ChannelIdType::ASDOut)
36 return getChannelIn(channelId,orChannel);
37 }
38 return nullptr;
39}
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 41 of file TGCCableInASD.cxx.

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

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

Definition at line 32 of file TGCCableInASD.h.

32{{{nullptr}}};

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