ATLAS Offline Software
TGCCableInSLB.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 
10 
11 namespace MuonTGC_Cabling {
12 
14  bool orChannel) const {
15  if(channelId){
16  if(channelId->getChannelIdType()==TGCIdBase::SLBIn)
17  return getChannelOut(channelId,orChannel);
18  if(channelId->getChannelIdType()==TGCIdBase::SLBOut)
19  return getChannelIn(channelId,orChannel);
20  }
21  return nullptr;
22 }
23 
25  bool orChannel) const {
26  if(slbout->isValid()==false) return nullptr;
27 
28  int channel = slbout->getChannel();
29  int block = slbout->getBlock();
30  TGCIdBase::ModuleType moduleType = slbout->getModuleType();
31 
32  int channelInBlock = TGCChannelSLBOut::getChannelInBlock(moduleType);
33  int numberOfLayer = TGCChannelSLBOut::getNumberOfLayer(moduleType);
34 
35  int adjacentOfSLB = -1;
36  int channelInSLB = -1;
38  switch(moduleType){
39  case TGCIdBase::WD:
40  // channel SLBIn
41  // 2*n CellB n+block*16
42  // 2*n+1 CellA n+block*16
43  if(orChannel==false){
44  if(channel%numberOfLayer==1){
45  cellType = TGCChannelSLBIn::CellA;
46  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
47  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
48  +adjacentOfSLB;
49  }
50  if(channel%numberOfLayer==0){
51  cellType = TGCChannelSLBIn::CellB;
52  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
53  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
54  +adjacentOfSLB;
55  }
56  }
57  if(orChannel==true){
58  if(channel%numberOfLayer==1){
59  cellType = TGCChannelSLBIn::CellC;
60  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
61  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
62  +adjacentOfSLB;
63  }
64  if(channel%numberOfLayer==0){
65  cellType = TGCChannelSLBIn::CellD;
66  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
67  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
68  +adjacentOfSLB;
69  }
70  }
71  break;
72  case TGCIdBase::SD:
73  // channel SLBIn
74  // 2*n CellB n+block*16
75  // 2*n+1 CellA n+block*16
76  if(orChannel==false){
77  if(channel%numberOfLayer==1){
78  cellType = TGCChannelSLBIn::CellA;
79  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
80  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
81  +adjacentOfSLB;
82  }
83  if(channel%numberOfLayer==0){
84  cellType = TGCChannelSLBIn::CellB;
85  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
86  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
87  +adjacentOfSLB;
88  }
89  }
90  if(orChannel==true){
91  if(channel%numberOfLayer==1){
92  cellType = TGCChannelSLBIn::CellC;
93  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
94  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
95  +adjacentOfSLB;
96  }
97  if(channel%numberOfLayer==0){
98  cellType = TGCChannelSLBIn::CellD;
99  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
100  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
101  +adjacentOfSLB;
102  }
103  }
104  break;
105  case TGCIdBase::WT:
106  // channel SLBIn
107  // 3*n CellC n+block*16
108  // 3*n+1 CellB n+block*16
109  // 3*n+2 CellA n+block*16
110  if((channel+block*channelInBlock)%numberOfLayer==2){
111  cellType = TGCChannelSLBIn::CellA;
112  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
113  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
114  +adjacentOfSLB;
115  }
116  if((channel+block*channelInBlock)%numberOfLayer==1){
117  cellType = TGCChannelSLBIn::CellB;
118  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
119  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
120  +adjacentOfSLB;
121  }
122  if((channel+block*channelInBlock)%numberOfLayer==0){
123  cellType = TGCChannelSLBIn::CellC;
124  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
125  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
126  +adjacentOfSLB;
127  }
128  break;
129  case TGCIdBase::ST:
130  case TGCIdBase::WI:
131  case TGCIdBase::SI:
132  // channel SLBIn
133  // 2*n CellB n+block*16
134  // 2*n+1 CellA n+block*16
135  if(orChannel==false){
136  if(channel%numberOfLayer==1){
137  cellType = TGCChannelSLBIn::CellA;
138  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
139  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
140  +adjacentOfSLB;
141  }
142  if(channel%numberOfLayer==0){
143  cellType = TGCChannelSLBIn::CellB;
144  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
145  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
146  +adjacentOfSLB;
147  }
148  }
149  if(orChannel==true){
150  if(channel%numberOfLayer==1){
151  cellType = TGCChannelSLBIn::CellC;
152  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
153  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
154  +adjacentOfSLB;
155  }
156  if(channel%numberOfLayer==0){
157  cellType = TGCChannelSLBIn::CellD;
158  adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
159  channelInSLB = (channel+block*channelInBlock)/numberOfLayer
160  +adjacentOfSLB;
161  }
162  }
163  break;
164 
165  default:
166  break;
167  }
168 
169  TGCChannelSLBIn* slbin = nullptr;
170  if(channelInSLB!=-1){
171  int channelOfSLB = TGCChannelSLBIn::convertChannel(slbout->getModuleType(),
172  cellType,channelInSLB);
173  slbin = new TGCChannelSLBIn(slbout->getSideType(),
174  slbout->getModuleType(),
175  slbout->getRegionType(),
176  slbout->getSector(),
177  slbout->getId(),
178  channelOfSLB);
179 
180  }
181  return slbin;
182 }
183 
185  bool orChannel) const {
186  if(slbin->isValid()==false) return nullptr;
187 
188  TGCChannelSLBIn::CellType cellType =
190  if(cellType==TGCChannelSLBIn::NoCellType) return nullptr;
191 
192  TGCIdBase::ModuleType moduleType = slbin->getModuleType();
193  int channelInCell =
195  int channelInSLB =
196  TGCChannelSLBIn::convertChannelInSLB(moduleType,cellType,channelInCell);
197 
198  int channelInBlock = TGCChannelSLBOut::getChannelInBlock(moduleType);
199  int numberOfLayer = TGCChannelSLBOut::getNumberOfLayer(moduleType);
200  int adjacentOfSLB = TGCChannelSLBIn::getAdjacentOfSLB(moduleType,cellType);
201 
202  int channel = -1;
203  int block = -1;
204  switch(moduleType){
205  case TGCIdBase::WD:
206  if(orChannel==false){
207  if(cellType==TGCChannelSLBIn::CellA)
208  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
209  if(cellType==TGCChannelSLBIn::CellB)
210  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
211  block = channel/channelInBlock;
212  channel = channel%channelInBlock;
213  }
214  if(orChannel==true){
215  if(cellType==TGCChannelSLBIn::CellC)
216  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
217  if(cellType==TGCChannelSLBIn::CellD)
218  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
219  block = channel/channelInBlock;
220  channel = channel%channelInBlock;
221  }
222  break;
223  case TGCIdBase::SD:
224  if(orChannel==false){
225  if(cellType==TGCChannelSLBIn::CellA)
226  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
227  if(cellType==TGCChannelSLBIn::CellB)
228  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
229  block = channel/channelInBlock;
230  channel = channel%channelInBlock;
231  }
232  if(orChannel==true){
233  if(cellType==TGCChannelSLBIn::CellC)
234  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
235  if(cellType==TGCChannelSLBIn::CellD)
236  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
237  block = channel/channelInBlock;
238  channel = channel%channelInBlock;
239  }
240  break;
241  case TGCIdBase::WT:
242  if(cellType==TGCChannelSLBIn::CellA)
243  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+2;
244  if(cellType==TGCChannelSLBIn::CellB)
245  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
246  if(cellType==TGCChannelSLBIn::CellC)
247  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
248  block = channel/channelInBlock;
249  channel = channel%channelInBlock;
250  break;
251  case TGCIdBase::ST:
252  case TGCIdBase::WI:
253  case TGCIdBase::SI:
254  if(cellType== TGCChannelSLBIn::CellA||cellType== TGCChannelSLBIn::CellB){
255  if(cellType==TGCChannelSLBIn::CellA)
256  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
257  if(cellType==TGCChannelSLBIn::CellB)
258  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
259  block = channel/channelInBlock;
260  channel = channel%channelInBlock;
261  }
262  if(cellType== TGCChannelSLBIn::CellC||cellType== TGCChannelSLBIn::CellD){
263  if(cellType==TGCChannelSLBIn::CellC)
264  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer+1;
265  if(cellType==TGCChannelSLBIn::CellD)
266  channel = (channelInSLB-adjacentOfSLB)*numberOfLayer;
267  block = channel/channelInBlock;
268  channel = channel%channelInBlock;
269  }
270  break;
271  default:
272  break;
273  }
274 
275  TGCChannelSLBOut* slbout = nullptr;
276  if(block!=-1&&channel!=-1)
277  slbout = new TGCChannelSLBOut(slbin->getSideType(),
278  slbin->getModuleType(),
279  slbin->getRegionType(),
280  slbin->getSector(),
281  slbin->getId(),
282  block,
283  channel);
284 
285  return slbout;
286 }
287 
288 } //end of namespace
TGCIdBase::getRegionType
RegionType getRegionType(void) const
Definition: TGCIdBase.cxx:41
TGCIdBase::getChannel
virtual int getChannel(void) const
Definition: TGCIdBase.cxx:50
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
MuonTGC_Cabling::TGCChannelSLBIn::CellB
@ CellB
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCChannelSLBIn::CellC
@ CellC
Definition: TGCChannelSLBIn.h:33
TGCIdBase::WT
@ WT
Definition: TGCIdBase.h:33
TGCIdBase::getBlock
int getBlock(void) const
Definition: TGCIdBase.cxx:49
TGCIdBase::SD
@ SD
Definition: TGCIdBase.h:33
MuonTGC_Cabling::TGCChannelSLBOut
Definition: TGCChannelSLBOut.h:14
TGCIdBase::SLBIn
@ SLBIn
Definition: TGCIdBase.h:43
TGCCableInSLB.h
MuonTGC_Cabling::TGCChannelSLBIn::getAdjacentOfSLB
static int getAdjacentOfSLB(TGCIdBase::ModuleType moduleType, CellType cellType)
Definition: TGCChannelSLBIn.cxx:104
TGCIdBase.h
MuonTGC_Cabling::TGCChannelSLBIn::convertChannelInSLB
static int convertChannelInSLB(TGCIdBase::ModuleType moduleType, CellType cellType, int channel)
Definition: TGCChannelSLBIn.cxx:174
TGCIdBase::getModuleType
ModuleType getModuleType(void) const
Definition: TGCIdBase.cxx:38
TGCIdBase::getSector
virtual int getSector(void) const
Definition: TGCIdBase.cxx:45
MuonTGC_Cabling::TGCChannelSLBOut::getNumberOfLayer
static int getNumberOfLayer(TGCIdBase::ModuleType moduleType)
Definition: TGCChannelSLBOut.cxx:88
TGCIdBase::WI
@ WI
Definition: TGCIdBase.h:33
MuonTGC_Cabling::TGCChannelSLBOut::getChannelInBlock
static int getChannelInBlock(TGCIdBase::ModuleType moduleType)
Definition: TGCChannelSLBOut.cxx:104
MuonTGC_Cabling::TGCCableInSLB::getChannelOut
virtual TGCChannelId * getChannelOut(const TGCChannelId *slbin, bool orChannel=false) const
Definition: TGCCableInSLB.cxx:184
MuonTGC_Cabling::TGCChannelSLBIn::convertChannelInCell
static int convertChannelInCell(int channel)
Definition: TGCChannelSLBIn.cxx:126
TGCIdBase::ModuleType
ModuleType
Definition: TGCIdBase.h:33
MuonTGC_Cabling
Definition: TGCCable.h:13
TGCIdBase::getSideType
SideType getSideType(void) const
Definition: TGCIdBase.cxx:37
MuonTGC_Cabling::TGCChannelSLBIn::NoCellType
@ NoCellType
Definition: TGCChannelSLBIn.h:32
CaloCondBlobAlgs_fillNoiseFromASCII.channelId
channelId
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:122
MuonTGC_Cabling::TGCChannelId::isValid
virtual bool isValid(void) const
Definition: TGCChannelId.h:29
MuonTGC_Cabling::TGCChannelSLBIn::CellA
@ CellA
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCCableInSLB::getChannelIn
virtual TGCChannelId * getChannelIn(const TGCChannelId *slbout, bool orChannel=false) const
Definition: TGCCableInSLB.cxx:24
MuonTGC_Cabling::TGCChannelSLBIn::convertCellType
static CellType convertCellType(int channel)
Definition: TGCChannelSLBIn.cxx:150
TGCIdBase::ST
@ ST
Definition: TGCIdBase.h:33
TGCIdBase::SLBOut
@ SLBOut
Definition: TGCIdBase.h:43
MuonTGC_Cabling::TGCChannelSLBIn
Definition: TGCChannelSLBIn.h:14
TGCChannelSLBOut.h
MuonTGC_Cabling::TGCChannelId
Definition: TGCChannelId.h:15
TGCChannelSLBIn.h
MuonTGC_Cabling::TGCChannelSLBIn::CellType
CellType
Definition: TGCChannelSLBIn.h:32
MuonTGC_Cabling::TGCChannelSLBIn::CellD
@ CellD
Definition: TGCChannelSLBIn.h:33
MuonTGC_Cabling::TGCChannelSLBIn::convertChannel
static int convertChannel(TGCIdBase::ModuleType moduleType, CellType cellType, int channelInSLB)
Definition: TGCChannelSLBIn.cxx:181
MuonTGC_Cabling::TGCCableInSLB::getChannel
virtual TGCChannelId * getChannel(const TGCChannelId *channelId, bool orChannel=false) const
Definition: TGCCableInSLB.cxx:13
TGCIdBase::getId
int getId(void) const
Definition: TGCIdBase.cxx:48
TGCIdBase::SI
@ SI
Definition: TGCIdBase.h:33
TGCIdBase::WD
@ WD
Definition: TGCIdBase.h:33