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
118 int sector;
119 if(asdin->isEndcap()) {
120 if(!asdin->isInner()){
121
123 } else {
124
126 }
127 } else {
128 if(!asdin->isInner()){
129
131 } else {
132
134 }
135 }
136
137
139 if(asdin->isEndcap()&&!asdin->isInner()){
140 chamber = 5-asdin->getChamber();
141 } else {
142 chamber = asdin->getChamber()-1;
143 }
144
146
147 if(asdin->isWire()){
148 const int MaxEntry = databaseP->getMaxEntry();
149 for(
int i=0;
i<MaxEntry;
i++){
150
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
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
172
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
181
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;
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