Loading [MathJax]/jax/input/TeX/config.js
 |
ATLAS Offline Software
|
Go to the documentation of this file.
8 #include "GaudiKernel/Bootstrap.h"
9 #include "GaudiKernel/IToolSvc.h"
10 #include "GaudiKernel/ISvcLocator.h"
11 #include "GaudiKernel/MsgStream.h"
13 #include "CaloDetDescr/CaloDetDescrElement.h"
19 #include "GeoModelKernel/GeoTrd.h"
43 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve InDetDD::PixelDetectorManager" <<
endmsg;
46 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve PixelIDHelper" <<
endmsg;
54 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve InDetDD::SCT_DetectorManager" <<
endmsg;
57 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve SCT_IDHelper" <<
endmsg;
65 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve InDetDD::TRT_DetectorManager" <<
endmsg;
70 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve TRT_IDHelper" <<
endmsg;
116 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve TileDetDescrManager" <<
endmsg;
123 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not retrieve LArDetectorManager for MBTS" <<
endmsg;
131 return StatusCode::SUCCESS;
136 out <<
"<?xml version=\"1.0\"?>" << std::endl
137 <<
"<!DOCTYPE AGeometry [" << std::endl
138 <<
"<!ELEMENT AGeometry (ADisc | ARectangle | ABarrelCalorimeter |" << std::endl
139 <<
" AEndcapCalorimeter | AGapCalorimeter | AEndcapCryostat |" << std::endl
140 <<
" ABarrelSiliconDetector | AEndcapSiliconDetector |" << std::endl
141 <<
" ABarrelTRTDetector | AEndcapTRTDetector)* >" << std::endl
142 <<
"<!ELEMENT ADisc EMPTY >" << std::endl
143 <<
"<!ATTLIST ADisc" << std::endl
144 <<
" p CDATA #REQUIRED" << std::endl
145 <<
" c CDATA #REQUIRED" << std::endl
146 <<
" n CDATA #REQUIRED" << std::endl
147 <<
" rIn CDATA #REQUIRED" << std::endl
148 <<
" rOut CDATA #REQUIRED" << std::endl
149 <<
" nIn CDATA \"256\"" << std::endl
150 <<
" nOut CDATA \"256\">" << std::endl
151 <<
"<!ELEMENT ARectangle EMPTY >" << std::endl
152 <<
"<!ATTLIST ARectangle" << std::endl
153 <<
" p CDATA #REQUIRED" << std::endl
154 <<
" c CDATA #REQUIRED" << std::endl
155 <<
" n CDATA #REQUIRED" << std::endl
156 <<
" xMin CDATA #REQUIRED" << std::endl
157 <<
" xMax CDATA #REQUIRED" << std::endl
158 <<
" yMin CDATA #REQUIRED" << std::endl
159 <<
" yMax CDATA #REQUIRED" << std::endl
160 <<
" xR (YES|NO) \"YES\"" << std::endl
161 <<
" yR (YES|NO) \"YES\">" << std::endl
162 <<
"<!ELEMENT ABarrelCalorimeter EMPTY >" << std::endl
163 <<
"<!ATTLIST ABarrelCalorimeter" << std::endl
164 <<
" c CDATA #REQUIRED" << std::endl
165 <<
" n CDATA #REQUIRED" << std::endl
166 <<
" sampling CDATA #REQUIRED" << std::endl
167 <<
" region CDATA #REQUIRED" << std::endl
168 <<
" rMin CDATA #REQUIRED" << std::endl
169 <<
" rMax CDATA #REQUIRED" << std::endl
170 <<
" zMin CDATA #REQUIRED" << std::endl
171 <<
" zMax CDATA #REQUIRED" << std::endl
172 <<
" eta0 CDATA #REQUIRED" << std::endl
173 <<
" deta CDATA #REQUIRED" << std::endl
174 <<
" neta CDATA #REQUIRED" << std::endl
175 <<
" meta CDATA #REQUIRED" << std::endl
176 <<
" phi0 CDATA #REQUIRED" << std::endl
177 <<
" nphi CDATA #REQUIRED>" << std::endl
178 <<
"<!ELEMENT AEndcapCalorimeter EMPTY >" << std::endl
179 <<
"<!ATTLIST AEndcapCalorimeter" << std::endl
180 <<
" c CDATA #REQUIRED" << std::endl
181 <<
" n CDATA #REQUIRED" << std::endl
182 <<
" sampling CDATA #REQUIRED" << std::endl
183 <<
" region CDATA #REQUIRED" << std::endl
184 <<
" rMin CDATA #REQUIRED" << std::endl
185 <<
" rMax CDATA #REQUIRED" << std::endl
186 <<
" zMin CDATA #REQUIRED" << std::endl
187 <<
" zMax CDATA #REQUIRED" << std::endl
188 <<
" eta0 CDATA #REQUIRED" << std::endl
189 <<
" deta CDATA #REQUIRED" << std::endl
190 <<
" neta CDATA #REQUIRED" << std::endl
191 <<
" meta CDATA #REQUIRED" << std::endl
192 <<
" phi0 CDATA #REQUIRED" << std::endl
193 <<
" nphi CDATA #REQUIRED>" << std::endl
194 <<
"<!ELEMENT AGapCalorimeter EMPTY >" << std::endl
195 <<
"<!ATTLIST AGapCalorimeter" << std::endl
196 <<
" c CDATA #REQUIRED" << std::endl
197 <<
" n CDATA #REQUIRED" << std::endl
198 <<
" sampling CDATA #REQUIRED" << std::endl
199 <<
" region CDATA #REQUIRED" << std::endl
200 <<
" rMin CDATA #REQUIRED" << std::endl
201 <<
" rMax CDATA #REQUIRED" << std::endl
202 <<
" zMin CDATA #REQUIRED" << std::endl
203 <<
" zMax CDATA #REQUIRED" << std::endl
204 <<
" eta CDATA #REQUIRED" << std::endl
205 <<
" phi0 CDATA #REQUIRED" << std::endl
206 <<
" nphi CDATA #REQUIRED>" << std::endl
207 <<
"<!ELEMENT AEndcapCryostat EMPTY >" << std::endl
208 <<
"<!ATTLIST AEndcapCryostat" << std::endl
209 <<
" c CDATA #REQUIRED" << std::endl
210 <<
" n CDATA #REQUIRED" << std::endl
211 <<
" sampling CDATA #REQUIRED" << std::endl
212 <<
" region CDATA #REQUIRED" << std::endl
213 <<
" rMin CDATA #REQUIRED" << std::endl
214 <<
" rMax CDATA #REQUIRED" << std::endl
215 <<
" zMin CDATA #REQUIRED" << std::endl
216 <<
" zMax CDATA #REQUIRED" << std::endl
217 <<
" neta CDATA #REQUIRED" << std::endl
218 <<
" nphi CDATA #REQUIRED>" << std::endl
219 <<
"<!ELEMENT ABarrelSiliconDetector EMPTY >" << std::endl
220 <<
"<!ATTLIST ABarrelSiliconDetector" << std::endl
221 <<
" c CDATA #REQUIRED" << std::endl
222 <<
" n CDATA #REQUIRED" << std::endl
223 <<
" layer CDATA #REQUIRED" << std::endl
224 <<
" length CDATA #REQUIRED" << std::endl
225 <<
" width CDATA #REQUIRED" << std::endl
226 <<
" thickness CDATA #REQUIRED" << std::endl
227 <<
" tilt CDATA #REQUIRED" << std::endl
228 <<
" nz CDATA #REQUIRED" << std::endl
229 <<
" nphi CDATA #REQUIRED" << std::endl
230 <<
" r0 CDATA #REQUIRED" << std::endl
231 <<
" phi0 CDATA #REQUIRED" << std::endl
232 <<
" zMin CDATA #REQUIRED" << std::endl
233 <<
" zMax CDATA #REQUIRED>" << std::endl
234 <<
"<!ELEMENT AEndcapSiliconDetector EMPTY >" << std::endl
235 <<
"<!ATTLIST AEndcapSiliconDetector" << std::endl
236 <<
" c CDATA #REQUIRED" << std::endl
237 <<
" n CDATA #REQUIRED" << std::endl
238 <<
" layer CDATA #REQUIRED" << std::endl
239 <<
" length CDATA #REQUIRED" << std::endl
240 <<
" width CDATA #REQUIRED" << std::endl
241 <<
" thickness CDATA #REQUIRED" << std::endl
242 <<
" nz CDATA #REQUIRED" << std::endl
243 <<
" nphi CDATA #REQUIRED" << std::endl
244 <<
" rMin CDATA #REQUIRED" << std::endl
245 <<
" rMax CDATA #REQUIRED" << std::endl
246 <<
" phi0 CDATA #REQUIRED" << std::endl
247 <<
" zMin CDATA #REQUIRED" << std::endl
248 <<
" zMax CDATA #REQUIRED>" << std::endl
249 <<
"<!ELEMENT ABarrelTRTDetector EMPTY >" << std::endl
250 <<
"<!ATTLIST ABarrelTRTDetector" << std::endl
251 <<
" c CDATA #REQUIRED" << std::endl
252 <<
" n CDATA #REQUIRED" << std::endl
253 <<
" layer CDATA #REQUIRED" << std::endl
254 <<
" nphi CDATA #REQUIRED" << std::endl
255 <<
" rMin CDATA #REQUIRED" << std::endl
256 <<
" rMax CDATA #REQUIRED" << std::endl
257 <<
" phiIn CDATA #REQUIRED" << std::endl
258 <<
" phiOut CDATA #REQUIRED" << std::endl
259 <<
" zMin CDATA #REQUIRED" << std::endl
260 <<
" zMax CDATA #REQUIRED>" << std::endl
261 <<
"<!ELEMENT AEndcapTRTDetector EMPTY >" << std::endl
262 <<
"<!ATTLIST AEndcapTRTDetector" << std::endl
263 <<
" c CDATA #REQUIRED" << std::endl
264 <<
" n CDATA #REQUIRED" << std::endl
265 <<
" layer CDATA #REQUIRED" << std::endl
266 <<
" nphi CDATA #REQUIRED" << std::endl
267 <<
" rMin CDATA #REQUIRED" << std::endl
268 <<
" rMax CDATA #REQUIRED" << std::endl
269 <<
" phi0 CDATA #REQUIRED" << std::endl
270 <<
" zMin CDATA #REQUIRED" << std::endl
271 <<
" zMax CDATA #REQUIRED>" << std::endl
273 <<
"<AGeometry>" << std::endl;
278 InDetDD::SiDetectorElementCollection::const_iterator
it;
285 if (!element)
continue;
290 double rMin = element->
rMin();
291 double rMax = element->
rMax();
292 double zMax = element->
zMax();
295 if (
next->rMin() < rMin) rMin =
next->rMin();
296 if (
next->rMax() > rMax) rMax =
next->rMax();
297 if (
next->zMax() > zMax) zMax =
next->zMax();
302 out <<
"<ABarrelSiliconDetector c=\"" <<
"PIX" <<
"\" n=\"" <<
"Pixel" <<
"\""
304 <<
" length=\"" << element->
length()/10. <<
"\""
305 <<
" width=\"" << element->
width()/10. <<
"\""
306 <<
" thickness=\"" << (rMax - rMin - element->
sinTilt()*element->
width())/40. <<
"\""
307 <<
" tilt=\"" << 180./
M_PI * asin(element->
sinTilt()) <<
"\""
311 <<
" r0=\"" << (rMin+rMax)/20. <<
"\""
312 <<
" phi0=\"" << 180./
M_PI * (element->
phiMin()+element->
phiMax())/2. <<
"\""
313 <<
" zMin=\"" << -zMax/10. <<
"\""
314 <<
" zMax=\"" << zMax/10. <<
"\""
315 <<
" />" << std::endl;
322 double rMin = element->
rMin();
323 double rMax = element->
rMax();
324 double zMin = element->
zMin();
325 double zMax = element->
zMax();
328 if (
next->zMin() < 0)
continue;
329 if (
next->rMin() < rMin) rMin =
next->rMin();
330 if (
next->rMax() > rMax) rMax =
next->rMax();
331 if (
next->zMin() < zMin) zMin =
next->zMin();
332 if (
next->zMax() > zMax) zMax =
next->zMax();
338 out <<
"<AEndcapSiliconDetector c=\"" <<
"PIX" <<
"\" n=\"" <<
"Pixel" <<
"\""
340 <<
" length=\"" << element->
length()/10. <<
"\""
341 <<
" width=\"" << element->
width()/10. <<
"\""
342 <<
" thickness=\"" << (rMax - rMin - element->
sinTilt()*element->
width())/40. <<
"\""
346 <<
" rMin=\"" << rMin/10. <<
"\""
347 <<
" rMax=\"" << rMax/10. <<
"\""
348 <<
" phi0=\"" << 180./
M_PI * (element->
phiMin()+element->
phiMax())/2. <<
"\""
349 <<
" zMin=\"" << zMin/10. <<
"\""
350 <<
" zMax=\"" << zMax/10. <<
"\""
351 <<
" />" << std::endl;
359 InDetDD::SiDetectorElementCollection::const_iterator
it;
366 if (!element)
continue;
372 double rMin = element->
rMin();
373 double rMax = element->
rMax();
374 double zMax = element->
zMax();
377 if (
next->rMin() < rMin) rMin =
next->rMin();
378 if (
next->rMax() > rMax) rMax =
next->rMax();
379 if (
next->zMax() > zMax) zMax =
next->zMax();
384 if (
next->rMin() < rMin) rMin =
next->rMin();
385 if (
next->rMax() > rMax) rMax =
next->rMax();
386 if (
next->zMax() > zMax) zMax =
next->zMax();
391 out <<
"<ABarrelSiliconDetector c=\"" <<
"SIL" <<
"\" n=\"" <<
"Silicon" <<
"\""
393 <<
" length=\"" << element->
length()/10. <<
"\""
394 <<
" width=\"" << element->
width()/10. <<
"\""
395 <<
" thickness=\"" << 2. * (rMax - rMin - element->
sinTilt()*element->
width())/10. <<
"\""
396 <<
" tilt=\"" << 180./
M_PI * asin(element->
sinTilt()) <<
"\""
400 <<
" r0=\"" << (rMin+rMax)/20. <<
"\""
401 <<
" phi0=\"" << 180./
M_PI * (element->
phiMin()+element->
phiMax())/2. <<
"\""
402 <<
" zMin=\"" << -zMax/10. <<
"\""
403 <<
" zMax=\"" << zMax/10. <<
"\""
404 <<
" />" << std::endl;
412 double rMin = element->
rMin();
413 double rMax = element->
rMax();
414 double zMin = element->
zMin();
415 double zMax = element->
zMax();
418 if (
next->zMin() < 0)
continue;
419 if (
next->rMin() < rMin) rMin =
next->rMin();
420 if (
next->rMax() > rMax) rMax =
next->rMax();
421 if (
next->zMin() < zMin) zMin =
next->zMin();
422 if (
next->zMax() > zMax) zMax =
next->zMax();
427 if (
next->zMin() < 0)
continue;
428 if (
next->rMin() < rMin) rMin =
next->rMin();
429 if (
next->rMax() > rMax) rMax =
next->rMax();
430 if (
next->zMin() < zMin) zMin =
next->zMin();
431 if (
next->zMax() > zMax) zMax =
next->zMax();
437 out <<
"<AEndcapSiliconDetector c=\"" <<
"SIL" <<
"\" n=\"" <<
"Silicon" <<
"\""
439 <<
" length=\"" << element->
length()/10. <<
"\""
440 <<
" width=\"" << element->
width()/10. <<
"\""
441 <<
" thickness=\"" << 2. * (rMax - rMin - element->
sinTilt()*element->
width())/10. <<
"\""
445 <<
" rMin=\"" << rMin/10. <<
"\""
446 <<
" rMax=\"" << rMax/10. <<
"\""
447 <<
" phi0=\"" << 180./
M_PI * (element->
phiMin()+element->
phiMax())/2. <<
"\""
448 <<
" zMin=\"" << zMin/10. <<
"\""
449 <<
" zMax=\"" << zMax/10. <<
"\""
450 <<
" />" << std::endl;
458 InDetDD::TRT_DetElementCollection::const_iterator
it;
464 if (!elementIn)
continue;
470 if (posIn.z() < 0)
continue;
481 if (!elementOut)
continue;
487 if (!element)
continue;
492 out <<
"<ABarrelTRTDetector c=\"TRT\" n=\"TRT\""
494 <<
" nphi=\"" << nphi <<
"\""
495 <<
" rMin=\"" << posIn.perp()/10. - .4 <<
"\""
496 <<
" rMax=\"" << posOut.perp()/10. + .4 <<
"\""
497 <<
" phiIn=\"" << 180./
M_PI * (posIn.phi() - dphiIn - 2
e-3) <<
"\""
498 <<
" phiOut=\"" << 180./
M_PI * (posOut.phi() - dphiOut - 2
e-3) <<
"\""
499 <<
" zMin=\"" << -(posIn.z() + elementIn->
strawLength()/2.)/10. <<
"\""
500 <<
" zMax=\"" << (posIn.z() + elementIn->
strawLength()/2.)/10. <<
"\""
501 <<
" />" << std::endl;
510 if (!elementOut)
continue;
516 int nphi = (
int) floor(2.*
M_PI / fabs(posOut.phi() - posIn.phi()));
518 out <<
"<AEndcapTRTDetector c=\"TRT\" n=\"TRT\""
520 <<
" nphi=\"" << nphi <<
"\""
521 <<
" rMin=\"" << (posIn.perp()-elementIn->
strawLength()/2.)/10. <<
"\""
522 <<
" rMax=\"" << (posIn.perp()+elementIn->
strawLength()/2.)/10. <<
"\""
523 <<
" phi0=\"" << 180./
M_PI * posIn.phi() <<
"\""
524 <<
" zMin=\"" << posIn.z()/10. <<
"\""
525 <<
" zMax=\"" << posOut.z()/10. <<
"\""
526 <<
" />" << std::endl;
540 out <<
"<ADisc p=\"YX\" c=\"Sol\" n=\"Solenoid\""
541 <<
" rIn=\"" << rIn <<
"\""
542 <<
" rOut=\"" << rOut <<
"\" />"
545 out <<
"<ARectangle p=\"RZ\" c=\"Sol\" n=\"Solenoid\""
546 <<
" xMin=\"" << zIn <<
"\""
547 <<
" xMax=\"" << zOut <<
"\""
548 <<
" yMin=\"" << rIn <<
"\""
549 <<
" yMax=\"" << rOut <<
"\""
561 if (!descriptor)
continue;
566 if (descriptor->
zcenter(
i) <= 0)
continue;
575 if (!
name.compare(0, 3,
"ITC")) {
577 out <<
"<AGapCalorimeter c=\"" <<
"HCAL" <<
"\" n=\"" <<
name <<
"\""
578 <<
" sampling=\"" << (
i < 3 ?
i : 3) <<
"\" region=\"" << 0 <<
"\""
579 <<
" rMin=\"" << (descriptor->
rcenter(
i)-descriptor->
dr(
i)/2.)/10. <<
"\""
580 <<
" rMax=\"" << (descriptor->
rcenter(
i)+descriptor->
dr(
i)/2.)/10. <<
"\""
581 <<
" zMin=\"" << (descriptor->
zcenter(
i)-descriptor->
dz(
i)/2.)/10. <<
"\""
582 <<
" zMax=\"" << (descriptor->
zcenter(
i)+descriptor->
dz(
i)/2.)/10. <<
"\""
583 <<
" eta=\"" << (
i < 3 ? tileIdHelper->
eta_min(descriptor->
identify())-
i+2 :
i) <<
"\""
584 <<
" phi0=\"" << descriptor->
phi_min() <<
"\""
585 <<
" nphi=\"" << descriptor->
n_phi() <<
"\""
586 <<
" />" << std::endl;
594 out <<
"<ABarrelCalorimeter c=\"" <<
"HCAL" <<
"\" n=\"" <<
name <<
"\""
595 <<
" sampling=\"" <<
i <<
"\" region=\"" << 0 <<
"\""
596 <<
" rMin=\"" << (descriptor->
rcenter(
i)-descriptor->
dr(
i)/2.)/10. <<
"\""
597 <<
" rMax=\"" << (descriptor->
rcenter(
i)+descriptor->
dr(
i)/2.)/10. <<
"\""
598 <<
" zMin=\"" << (descriptor->
zcenter(
i)-descriptor->
dz(
i)/2.)/10. <<
"\""
599 <<
" zMax=\"" << (descriptor->
zcenter(
i)+descriptor->
dz(
i)/2.)/10. <<
"\""
600 <<
" eta0=\"" << descriptor->
eta_min(
i) <<
"\""
601 <<
" deta=\"" << descriptor->
deta(
i) <<
"\""
602 <<
" neta=\"" << descriptor->
n_eta(
i) <<
"\""
603 <<
" meta=\"" << tileIdHelper->
eta_min(
id) <<
"\""
604 <<
" phi0=\"" << descriptor->
phi_min() <<
"\""
605 <<
" nphi=\"" << descriptor->
n_phi() <<
"\""
606 <<
" />" << std::endl;
621 for (
int region=0; region<8; region++) {
623 for (
int inner=0; inner<2; inner++) {
625 int minEtaIndex = 0, maxEtaIndex = 0;
633 std::string technology;
636 if (!element)
continue;
641 if (element->
is_tile())
continue;
648 if (idHelper->
eta(
id) != idHelper->
eta_min(
id) || idHelper->
side(
id) < 0)
continue;
650 if (idHelper->
region(
id) != region)
continue;
657 if (element->
z() < 0)
continue;
660 etaIndex = idHelper->
eta(
id);
664 if (!oneSuchElement) {
665 oneSuchElement = element;
666 minEtaIndex = maxEtaIndex = etaIndex;
667 minEta = element->
eta();
669 if (etaIndex < minEtaIndex) {
670 minEtaIndex = etaIndex;
671 minEta = element->
eta();
673 if (etaIndex > maxEtaIndex) {
674 maxEtaIndex = etaIndex;
679 if (oneSuchElement) {
691 name =
"LAr Presampler";
705 name =
"LAr_EC_Presampler";
712 name = inner ?
"LAr Inner Endcap" :
"LAr Outer Endcap";
742 double phi0 = 180./
M_PI * (oneSuchElement->
phi()-oneSuchElement->
dphi()/2.);
744 int numEta = maxEtaIndex - minEtaIndex + 1;
748 out <<
"<ABarrelCalorimeter c=\"" <<
color <<
"\" n=\"" <<
name <<
"\""
749 <<
" sampling=\"" << sampling <<
"\" region=\"" << region%8 <<
"\""
750 <<
" rMin=\"" << (oneSuchElement->
r()-oneSuchElement->
dr()/2.)/10. <<
"\""
751 <<
" rMax=\"" << (oneSuchElement->
r()+oneSuchElement->
dr()/2.)/10. <<
"\""
754 <<
" eta0=\"" << minEta-oneSuchElement->
deta()/2. <<
"\""
755 <<
" deta=\"" << oneSuchElement->
deta() <<
"\""
756 <<
" neta=\"" << numEta <<
"\""
757 <<
" meta=\"" << minEtaIndex <<
"\""
758 <<
" phi0=\"" <<
phi0 <<
"\""
759 <<
" nphi=\"" << numPhi <<
"\""
760 <<
" />" << std::endl;
763 out <<
"<AEndcapCalorimeter c=\"" <<
color <<
"\" n=\"" <<
name <<
"\""
764 <<
" sampling=\"" << sampling <<
"\" region=\"" << region%8 <<
"\""
767 <<
" zMin=\"" << (oneSuchElement->
z()-oneSuchElement->
dz()/2.)/10. <<
"\""
768 <<
" zMax=\"" << (oneSuchElement->
z()+oneSuchElement->
dz()/2.)/10. <<
"\""
769 <<
" eta0=\"" << minEta-oneSuchElement->
deta()/2. <<
"\""
770 <<
" deta=\"" << oneSuchElement->
deta() <<
"\""
771 <<
" neta=\"" << numEta <<
"\""
772 <<
" meta=\"" << minEtaIndex <<
"\""
773 <<
" phi0=\"" <<
phi0 <<
"\""
774 <<
" nphi=\"" << numPhi <<
"\""
775 <<
" />" << std::endl;
778 out <<
"<ADisc p=\"YX\" c=\"" <<
color <<
"\" n=\"" <<
name <<
"\""
779 <<
" rIn=\"" << descriptor->
calo_r_min()/10. <<
"\""
780 <<
" rOut=\"" << descriptor->
calo_r_max()/10. <<
"\""
781 <<
" />" << std::endl;
782 out <<
"<ARectangle p=\"RZ\" c=\"" <<
color <<
"\" n=\"" <<
name <<
"\""
783 <<
" xMin=\"" << descriptor->
calo_z_min()/10. <<
"\""
784 <<
" xMax=\"" << descriptor->
calo_z_max()/10. <<
"\""
785 <<
" yMin=\"" << descriptor->
calo_r_min()/10. <<
"\""
786 <<
" yMax=\"" << descriptor->
calo_r_max()/10. <<
"\""
787 <<
" />" << std::endl;
806 for (
unsigned int c=0;
c< myVol->getNChildVols();
c++)
808 PVConstLink child = myVol->getChildVol(
c);
809 if((child->getLogVol())->getName()==
"MBTS_mother")
811 int sampling=0,numPhi=0;
812 std::string stringOfNames=
"";
816 double zlocation = translate.z();
818 zlocation=-zlocation;
822 PVConstLink pvAirEnv = 0;
823 for (
unsigned int cc=0;
cc< child->getNChildVols();
cc++) {
824 if(((child->getChildVol(
cc))->getLogVol())->getName()==
"MBTSAirEnv") {
825 pvAirEnv = child->getChildVol(
cc);
826 transformToScin = child->getXToChildVol(
cc);
831 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not find MBTSAirEnv" <<
endmsg;
835 PVConstLink pvAluEnv = 0;
836 for (
unsigned int ichildAirEnv=0; ichildAirEnv<pvAirEnv->getNChildVols(); ichildAirEnv++) {
837 if(((pvAirEnv->getChildVol(ichildAirEnv))->getLogVol())->getName()==
"MBTSAluEnv") {
838 pvAluEnv = pvAirEnv->getChildVol(ichildAirEnv);
839 transformToScin = transformToScin * pvAirEnv->getXToChildVol(ichildAirEnv);
843 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not find MBTSAluEnv" <<
endmsg;
847 PVConstLink pvAirInAlu = 0;
848 for (
unsigned int ichildAluEnv=0; ichildAluEnv<pvAluEnv->getNChildVols(); ichildAluEnv++) {
849 if(((pvAluEnv->getChildVol(ichildAluEnv))->getLogVol())->getName()==
"MBTSAirInAlu") {
850 pvAirInAlu = pvAluEnv->getChildVol(ichildAluEnv);
851 transformToScin = transformToScin * pvAluEnv->getXToChildVol(ichildAluEnv);
855 if (
msgLvl(MSG::WARNING))
msg(MSG::WARNING) <<
"Could not find MBTSAirInAlu" <<
endmsg;
859 for (
unsigned int ichildAirInAlu=0; ichildAirInAlu<pvAirInAlu->getNChildVols(); ichildAirInAlu++) {
860 PVConstLink childschild = pvAirInAlu->getChildVol(ichildAirInAlu);
861 if((childschild->getLogVol())->getShape()->typeID() == GeoTrd::getClassTypeID() )
863 std::string currentName = (childschild->getLogVol())->
getName();
864 if(currentName!=
"MBTS1" && currentName!=
"MBTS2")
continue;
865 if(stringOfNames.find(currentName,0) == std::string::npos)
867 stringOfNames+=
" " + currentName;
868 GeoTrf::Vector3D translateToScin = (transformToScin * pvAirInAlu->getXToChildVol(ichildAirInAlu)).translation();
869 const GeoTrd* theTrd =
dynamic_cast<const GeoTrd*
> ((childschild->getLogVol())->getShape());
870 double rho=
pow(translateToScin.x(),2.0) +
pow(translateToScin.y(),2.0);
872 double RMin=
rho-theTrd->getZHalfLength();
873 double RMax=
rho+theTrd->getZHalfLength();
874 double zmovement=translateToScin.z();
875 double zthickness=theTrd->getXHalfLength1();
876 out <<
"<AEndcapCryostat c=\"HCAL\" n=\"Minimum Bias Trigger Scintillators\""
877 <<
" sampling=\"" << sampling <<
"\" region=\"" << 0 <<
"\""
878 <<
" rMin=\"" << RMin/10. <<
"\""
879 <<
" rMax=\"" << RMax/10. <<
"\""
880 <<
" zMin=\"" << (zlocation+zmovement-zthickness)/10. <<
"\""
881 <<
" zMax=\"" << (zlocation+zmovement+zthickness)/10. <<
"\""
882 <<
" neta=\"" <<
"1" <<
"\""
883 <<
" nphi=\"" << numPhi <<
"\""
884 <<
" />" << std::endl;
897 out <<
"</AGeometry>" << std::endl;
float deta() const
cell deta
def retrieve(aClass, aKey=None)
tile_descr_const_iterator tile_descriptors_begin() const
This is an Identifier helper class for the Pixel subdetector. This class is a factory for creating co...
int eta_min(const Identifier &id) const
max values (-999 == failure)
virtual StatusCode writeGeometry() override
Writes the inner detector and calorimeter geometry to an XML file.
virtual const double & strawLength() const =0
Active straw length.
This is an Identifier helper class for the SCT subdetector. This class is a factory for creating comp...
int region(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
int straw_max(const Identifier &id) const
void writeLArGeometry(std::ofstream &out)
Writes the geometry of the LAr calorimeters.
bool is_tile_gap(const Identifier &id) const
const PixelID * m_pixelIdHelper
const TRT_BarrelElement * getBarrelElement(unsigned int positive, unsigned int moduleIndex, unsigned int phiIndex, unsigned int strawLayerIndex) const
Access Barrel Elements:---------------—(Fast)-------------------------—.
virtual PVConstLink getTreeTop(unsigned int i) const override
Gets the ith tree top.
std::vector< double > m_larMax
This class groups all DetDescr information related to a CaloCell. Provides a generic interface for al...
float round(const float toRound, const unsigned int decimals)
int side(const Identifier &id) const
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const override
int eta_module_max(const Identifier &id) const
bool msgLvl(const MSG::Level lvl) const
bool is_tile_extbarrel(const Identifier &id) const
const InDetDD::SCT_DetectorManager * m_silicon_manager
Silicon detector manager and ID helper.
int tower(const Identifier &id) const
int phi_module(const Identifier &id) const
const InDetDD::TRT_DetectorManager * m_trt_manager
TRT detector manager and ID helper.
int phi_module_max(const Identifier &id) const
tile_descr_const_iterator tile_descriptors_end() const
const TileDetDescrManager * m_tile_manager
float dz(unsigned int samp) const
int eta_module_max(const Identifier &id) const
IMessageSvc * getMessageSvc(bool quiet=false)
const SCT_ID * m_sctIdHelper
double calo_z_max() const
'ideal' geometry: z maximal
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
int n_eta(unsigned int samp) const
float dr(unsigned int samp) const
Identifier identify(void) const
double sinTilt() const
Compute sin(tilt angle) at a given position: at center.
const TRT_BarrelElement * nextInPhi() const
Returns the next-in-phi detector element, or zero if none (forseeing gaps, in other words).
std::unique_ptr< CaloDetDescrManager > m_calo_manager
Calorimeter detector manager.
Definition of CaloDetDescriptor.
Identifier identify() const override final
cell identifier
float rcenter(unsigned int samp) const
void writeSCTGeometry(std::ofstream &out)
Writes the geometry of the silicon detector.
bool is_tile_gapscin(const Identifier &id) const
double calo_z_min() const
'ideal' geometry: z minimal
int module(const Identifier &id) const
float zcenter(unsigned int samp) const
Helper class for TileCal offline identifiers.
::StatusCode StatusCode
StatusCode definition for legacy code.
const TRT_ID * m_trtIdHelper
Eigen::Affine3d Transform3D
const LArDetectorManager * m_lar_manager
bool is_em_endcap_inner(const Identifier id) const
test if the id belongs to the EM Endcap inner wheel
double width() const
Methods from design (inline)
int eta(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
float eta_min(unsigned int samp) const
virtual SiDetectorElementCollection::const_iterator getDetectorElementBegin() const override
void writeTILEGeometry(std::ofstream &out)
Writes the geometry of the TILE calorimeters.
virtual Identifier identify() const override final
identifier of this detector element:
Helper class for offline cell identifiers.
int barrel_ec(const Identifier &id) const
Values of different levels (failure returns 0)
int straw_layer(const Identifier &id) const
bool is_lar_fcal() const
cell belongs to FCAL
void writeSolenoidGeometry(std::ofstream &out)
Writes the (hardcoded) geometry of the solenoid.
int layer_or_wheel(const Identifier &id) const
void writePixelGeometry(std::ofstream &out)
Writes the geometry of the pixel detector.
This header is shared inbetween the C-style server thread and the C++ Athena ServerSvc.
TRT_DetElementCollection::const_iterator getDetectorElementBegin() const
bool is_tile() const
cell belongs to Tile
int phi_module_max(const Identifier &id) const
int eta_module_min(const Identifier &id) const
const TRT_EndcapElement * getEndcapElement(unsigned int positive, unsigned int wheelIndex, unsigned int strawLayerIndex, unsigned int phiIndex) const
Access Endcap Elements:---------------—(Fast)--------------------------—.
int layer_disk(const Identifier &id) const
int eta_module(const Identifier &id) const
int straw_layer_max(const Identifier &id) const
Max values for each field (-999 == failure)
int eta_min(const Identifier regId) const
min value of eta index (-999 == failure)
float deta(unsigned int samp) const
const SiDetectorElement * otherSide() const
Useful for SCT only.
int layer_disk(const Identifier &id) const
std::vector< double > m_larMin
void writeTRTGeometry(std::ofstream &out)
Writes the geometry of the TRT detector.
int phi(const Identifier id) const
LAr field values (NOT_VALID == invalid request)
Eigen::Matrix< double, 3, 1 > Vector3D
int phi_module(const Identifier &id) const
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
float dphi() const
cell dphi
int eta_module_min(const Identifier &id) const
const SiDetectorElement * nextInEta() const
tile_descr_vec::const_iterator tile_descr_const_iterator
const Amg::Transform3D & strawTransform(unsigned int straw) const
Straw transform - fast access in array, in Tracking frame: Amg.
bool is_barrel(const Identifier &id) const
Test for barrel.
int side(const Identifier id) const
Tile field values (NOT_VALID == invalid request)
This is a base class for LAr and Tile Descriptors The primary goal is to speed up loops over all the ...
CaloCell_ID::CaloSample getSampling() const
cell sampling
int eta_module(const Identifier &id) const
virtual const Amg::Vector3D & center() const override final
Element Surface: center of a straw layer.
const CaloDetDescriptor * descriptor() const
cell descriptor
int side(const Identifier &id) const
float eta() const
cell eta
float phi() const
cell phi
int section(const Identifier &id) const
double length() const
Length in eta direction (z - barrel, r - endcap)
double calo_r_max() const
'ideal' geometry: r maximal
int phi_module(const Identifier &id) const
bool is_tile_barrel(const Identifier &id) const
Test of an Identifier to see if it belongs to a particular part of the calorimeter.
const InDetDD::PixelDetectorManager * m_pixel_manager
Pixel detector manager and ID helper.
Identifier cell_id(const Identifier &any_id) const
constexpr int pow(int base, int exp) noexcept
void writeHeader(std::ofstream &out)
Writes the header of the XML file.
std::unique_ptr< CaloDetDescrManager > buildCaloDetDescr(ISvcLocator *svcLocator, IMessageSvc *msgSvc, const GeoAlignmentStore *geoAlignStore, const CaloRec::CaloCellPositionShift *cellPosShift)
virtual Identifier identify() const override final
identifier of this detector element (inline)
double calo_r_min() const
'ideal' geometry: r minimal
Tranform iterator over pointers to iterator over const pointers.
void writeMBTSGeometry(std::ofstream &out)
Writes the geometry of the Minimum Bias Trigger Scintillators.
static const int m_numCaloTypes
The number of calorimeter sampling types.
void writeFooter(std::ofstream &out)
Writes the footer of the XML file.
const TileID * get_id() const