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
114 int sector;
115 if(asdin->isEndcap()) {
116 if(!asdin->isInner()){
117
119 } else {
120
122 }
123 } else {
124 if(!asdin->isInner()){
125
127 } else {
128
130 }
131 }
132
133
135 if(asdin->isEndcap()&&!asdin->isInner()){
136 chamber = 5-asdin->getChamber();
137 } else {
138 chamber = asdin->getChamber()-1;
139 }
140
142
143 if(asdin->isWire()){
144 const int MaxEntry = databaseP->getMaxEntry();
145 for(
int i=0;
i<MaxEntry;
i++){
146
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
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
168
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
177
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;
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