25 {
26 if (slbout.isValid() == false) {
27 return nullptr;
28 }
29
30 int channel = slbout.getChannel();
31 int block = slbout.getBlock();
33
36
37 int adjacentOfSLB = -1;
38 int channelInSLB = -1;
40 switch (moduleType) {
42
43
44
45 if (orChannel == false) {
46 if (channel % numberOfLayer == 1) {
48 adjacentOfSLB =
50 channelInSLB =
51 (
channel + block * channelInBlock) / numberOfLayer +
52 adjacentOfSLB;
53 }
54 if (channel % numberOfLayer == 0) {
56 adjacentOfSLB =
58 channelInSLB =
59 (
channel + block * channelInBlock) / numberOfLayer +
60 adjacentOfSLB;
61 }
62 }
63 if (orChannel == true) {
64 if (channel % numberOfLayer == 1) {
66 adjacentOfSLB =
68 channelInSLB =
69 (
channel + block * channelInBlock) / numberOfLayer +
70 adjacentOfSLB;
71 }
72 if (channel % numberOfLayer == 0) {
74 adjacentOfSLB =
76 channelInSLB =
77 (
channel + block * channelInBlock) / numberOfLayer +
78 adjacentOfSLB;
79 }
80 }
81 break;
83
84
85
86 if (orChannel == false) {
87 if (channel % numberOfLayer == 1) {
89 adjacentOfSLB =
91 channelInSLB =
92 (
channel + block * channelInBlock) / numberOfLayer +
93 adjacentOfSLB;
94 }
95 if (channel % numberOfLayer == 0) {
97 adjacentOfSLB =
99 channelInSLB =
100 (
channel + block * channelInBlock) / numberOfLayer +
101 adjacentOfSLB;
102 }
103 }
104 if (orChannel == true) {
105 if (channel % numberOfLayer == 1) {
107 adjacentOfSLB =
109 channelInSLB =
110 (
channel + block * channelInBlock) / numberOfLayer +
111 adjacentOfSLB;
112 }
113 if (channel % numberOfLayer == 0) {
115 adjacentOfSLB =
117 channelInSLB =
118 (
channel + block * channelInBlock) / numberOfLayer +
119 adjacentOfSLB;
120 }
121 }
122 break;
124
125
126
127
128 if ((channel + block * channelInBlock) % numberOfLayer == 2) {
130 adjacentOfSLB =
132 channelInSLB =
133 (
channel + block * channelInBlock) / numberOfLayer +
134 adjacentOfSLB;
135 }
136 if ((channel + block * channelInBlock) % numberOfLayer == 1) {
138 adjacentOfSLB =
140 channelInSLB =
141 (
channel + block * channelInBlock) / numberOfLayer +
142 adjacentOfSLB;
143 }
144 if ((channel + block * channelInBlock) % numberOfLayer == 0) {
146 adjacentOfSLB =
148 channelInSLB =
149 (
channel + block * channelInBlock) / numberOfLayer +
150 adjacentOfSLB;
151 }
152 break;
156
157
158
159 if (orChannel == false) {
160 if (channel % numberOfLayer == 1) {
162 adjacentOfSLB =
164 channelInSLB =
165 (
channel + block * channelInBlock) / numberOfLayer +
166 adjacentOfSLB;
167 }
168 if (channel % numberOfLayer == 0) {
170 adjacentOfSLB =
172 channelInSLB =
173 (
channel + block * channelInBlock) / numberOfLayer +
174 adjacentOfSLB;
175 }
176 }
177 if (orChannel == true) {
178 if (channel % numberOfLayer == 1) {
180 adjacentOfSLB =
182 channelInSLB =
183 (
channel + block * channelInBlock) / numberOfLayer +
184 adjacentOfSLB;
185 }
186 if (channel % numberOfLayer == 0) {
188 adjacentOfSLB =
190 channelInSLB =
191 (
channel + block * channelInBlock) / numberOfLayer +
192 adjacentOfSLB;
193 }
194 }
195 break;
196
197 default:
198 break;
199 }
200
201 if (channelInSLB != -1) {
203 slbout.getModuleType(), cellType, channelInSLB);
204 return std::make_unique<TGCChannelSLBIn>(
205 slbout.getSideType(), slbout.getModuleType(),
206 slbout.getRegionType(), slbout.getSector(), slbout.getId(),
207 channelOfSLB);
208 }
209 return nullptr;
210}
static int getAdjacentOfSLB(TGCId::ModuleType moduleType, CellType cellType)
static int convertChannel(TGCId::ModuleType moduleType, CellType cellType, int channelInSLB)
static int getNumberOfLayer(TGCId::ModuleType moduleType)
static int getChannelInBlock(TGCId::ModuleType moduleType)