125 const double etaCaloLocal,
129 if (sample == CaloCell_ID::Unknown) {
147 if (sample == CaloCell_ID::TileBar0 || sample == CaloCell_ID::TileBar1 ||
148 sample == CaloCell_ID::TileBar2 || sample == CaloCell_ID::TileExt0 ||
149 sample == CaloCell_ID::TileExt1 || sample == CaloCell_ID::TileExt2 ||
150 sample == CaloCell_ID::TileGap1 || sample == CaloCell_ID::TileGap2 ||
151 sample == CaloCell_ID::TileGap3)
155 if (sample == CaloCell_ID::HEC3)
158 if (etaCaloLocal < 0)
170 if (sample == CaloCell_ID::PreSamplerE || sample == CaloCell_ID::EME1 ||
171 sample == CaloCell_ID::EME2 || sample == CaloCell_ID::EME3 ||
172 sample == CaloCell_ID::HEC0 || sample == CaloCell_ID::HEC1 ||
173 sample == CaloCell_ID::HEC2 || sample == CaloCell_ID::HEC3 ||
174 sample == CaloCell_ID::FCAL0 || sample == CaloCell_ID::FCAL1 ||
175 sample == CaloCell_ID::FCAL2 || sample == CaloCell_ID::TileGap3) {
184 if (sample == CaloCell_ID::TileBar2) {
188 sample, side, pos2, radius, hphi, hlen,
depth, calo_dd);
199 sample, side, pos, radius, hphi, hlen,
depth, calo_dd);
206 double betterrad = 0;
208 betterrad =
m_calodepth->radius(sample, etaCaloLocal, 0., calo_dd);
209 radius = offset + betterrad;
215 if (hphi < 0.9 *
M_PI) {
222 sample, side, pos,
z, rmin, rmax, hphi,
depth, calo_dd);
229 if (!tile && !HEC3) {
230 betterz =
m_calodepth->radius(sample, etaCaloLocal, 0., calo_dd);
231 z = offset + betterz - (pos)(2, 3);
237 if (hphi < 0.9 *
M_PI) {
250 const double etaCaloLocal,
257 if (sample == CaloCell_ID::TileBar0 || sample == CaloCell_ID::TileBar1 ||
258 sample == CaloCell_ID::TileBar2 || sample == CaloCell_ID::TileExt0 ||
259 sample == CaloCell_ID::TileExt1 || sample == CaloCell_ID::TileExt2 ||
260 sample == CaloCell_ID::TileGap1 || sample == CaloCell_ID::TileGap2 ||
261 sample == CaloCell_ID::TileGap3)
276 if (etaCaloLocal < 0)
279 if (sample == CaloCell_ID::TileBar2 || sample == CaloCell_ID::TileExt2 ||
280 sample == CaloCell_ID::TileGap2) {
285 if (sample == CaloCell_ID::TileBar2) {
289 sample, side, pos2, radius, hphi, hlen,
depth, calo_dd);
301 sample, side, pos, radius, hphi, hlen,
depth, calo_dd);
310 std::vector<TileDetDescriptor*>::const_iterator Tile_first =
315 if (sample == CaloCell_ID::TileBar2) {
316 radius = TileBar_descr->
rcenter(2) + .5 * TileBar_descr->
dr(2);
317 }
else if (sample == CaloCell_ID::TileExt2) {
318 radius = TileExt_descr->
rcenter(2) + .5 * TileExt_descr->
dr(2);
319 }
else if (sample == CaloCell_ID::TileGap2) {
320 radius = TileGap_descr->
rcenter(2) + .5 * TileGap_descr->
dr(2);
329 if (hphi < 0.9 *
M_PI) {
335 }
else if (sample == CaloCell_ID::TileGap3 || sample == CaloCell_ID::HEC3) {
338 sample, side, pos,
z, rmin, rmax, hphi,
depth, calo_dd);
343 if (sample == CaloCell_ID::TileGap3) {
344 std::vector<TileDetDescriptor*>::const_iterator Tile_first =
347 zend = TileGap_descr->
zcenter(2) + .5 * TileGap_descr->
dz(2);
350 if (sample == CaloCell_ID::HEC3) {
353 if (descr->getSampling(0) == CaloCell_ID::HEC3) {
354 zend = descr->calo_z_max();
361 z = offset + zend - (pos)(2, 3);
368 if (hphi < 0.9 *
M_PI) {
375 "This sample is not a 'LAST' surface... returning dummy surface");
409 if (sample == CaloCell_ID::PreSamplerE || sample == CaloCell_ID::EME1 ||
410 sample == CaloCell_ID::EME2 || sample == CaloCell_ID::EME3 ||
411 sample == CaloCell_ID::HEC0 || sample == CaloCell_ID::HEC1 ||
412 sample == CaloCell_ID::HEC2 || sample == CaloCell_ID::HEC3 ||
413 sample == CaloCell_ID::FCAL0 || sample == CaloCell_ID::FCAL1 ||
414 sample == CaloCell_ID::FCAL2 || sample == CaloCell_ID::Unknown ||
415 sample == CaloCell_ID::TileGap3) {
418 if (sample == CaloCell_ID::PreSamplerB || sample == CaloCell_ID::EMB1 ||
419 sample == CaloCell_ID::EMB2 || sample == CaloCell_ID::EMB3) {
423 if (reg->getSampling(0) == sample && reg->calo_sign() * side > 0) {
424 result = reg->get_cylinder_surface(htrans, radius, hphi, hl,
depth);
425 hlength = std::max(hl, hlength);
434 case CaloCell_ID::TileBar0:
435 case CaloCell_ID::TileBar1:
436 case CaloCell_ID::TileBar2:
437 case CaloCell_ID::TileExt0:
438 case CaloCell_ID::TileExt1:
439 case CaloCell_ID::TileExt2:
440 case CaloCell_ID::TileGap1:
441 case CaloCell_ID::TileGap2:
444 ATH_MSG_ERROR(
" get_cylinder_surface Not Cylindrical Tile found!!! ");
450 if (reg->getSampling(0) == sample && reg->calo_sign() * side > 0) {
451 result = reg->get_cylinder_surface(htrans, radius, hphi, hl,
depth);
454 hphi = .5 * reg->dphi() * reg->n_phi();
488 if (sample == CaloCell_ID::PreSamplerB || sample == CaloCell_ID::EMB1 ||
489 sample == CaloCell_ID::EMB2 || sample == CaloCell_ID::EMB3 ||
490 sample == CaloCell_ID::TileBar0 || sample == CaloCell_ID::TileBar1 ||
491 sample == CaloCell_ID::TileBar2 || sample == CaloCell_ID::TileGap1 ||
492 sample == CaloCell_ID::TileGap2 || sample == CaloCell_ID::TileExt0 ||
493 sample == CaloCell_ID::TileExt1 || sample == CaloCell_ID::TileExt2) {
502 if (reg->getSampling(0) == sample && reg->calo_sign() * side > 0) {
503 result = reg->get_disk_surface(htrans, zow, ri, ra, hphisec,
depth);
504 if (!reg->is_lar_em_endcap_inner())
506 rmin = std::min(ri, rmin);
507 rmax = std::max(rmax, ra);
512 if (sample == CaloCell_ID::TileGap3) {
515 if (reg->getSampling(0) == sample && reg->calo_sign() * side > 0) {
516 result = reg->get_disk_surface(htrans, zow, ri, ra, hphisec,
depth);
517 if (!reg->is_lar_em_endcap_inner())
519 rmin = std::min(ri, rmin);
520 rmax = std::max(rmax, ra);
531 htrans = (htrans) *
vec;
596 float etaRef = (sample < 4 || std::abs(sample - 13) < 2) ? 1. : 2.;
603 m_layerEntries.emplace_back(spos, sneg);
610 unsigned int neta = (etaMax - etaMin) / deta;
611 std::vector<float> offset(neta);
612 float rbase = m_layerEntries[CaloCell_ID::EMB2].second->bounds().r();
613 for (
unsigned int ie = 0; ie < neta; ie++) {
614 float eta = etaMin + (ie + 0.5) * deta;
617 offset[ie] = surf->bounds().r() - rbase;
621 m_layerEntries[CaloCell_ID::EMB2].second);
630 m_layerEntries[CaloCell_ID::EMB2].second = tmpSlidCyl;
636 neta = (etaMax - etaMin) / deta;
638 rbase = m_layerEntries[CaloCell_ID::EMB2].first->bounds().r();
639 for (
unsigned int ie = 0; ie < neta; ie++) {
640 float eta = etaMin + (ie + 0.5) * deta;
642 offset[ie] = surf->bounds().r() - rbase;
646 m_layerEntries[CaloCell_ID::EMB2].first);
655 m_layerEntries[CaloCell_ID::EMB2].first = tmpSlidCyl;
661 neta = (etaMax - etaMin) / deta;
663 rbase = m_layerEntries[CaloCell_ID::EMB3].second->bounds().r();
664 for (
unsigned int ie = 0; ie < neta; ie++) {
665 float eta = etaMin + (ie + 0.5) * deta;
667 offset[ie] = surf->bounds().r() - rbase;
671 m_layerEntries[CaloCell_ID::EMB3].second);
680 m_layerEntries[CaloCell_ID::EMB3].second = tmpSlidCyl;
687 neta = (etaMax - etaMin) / deta;
689 rbase = m_layerEntries[CaloCell_ID::EMB3].first->bounds().r();
690 for (
unsigned int ie = 0; ie < neta; ie++) {
691 float eta = etaMin + (ie + 0.5) * deta;
694 offset[ie] = surf->bounds().r() - rbase;
698 m_layerEntries[CaloCell_ID::EMB3].first);
707 m_layerEntries[CaloCell_ID::EMB3].first = tmpSlidCyl;
714 neta = (etaMax - etaMin) / deta;
716 float zbase = m_layerEntries[CaloCell_ID::EME2].second->center().z();
717 for (
unsigned int ie = 0; ie < neta; ie++) {
718 float eta = etaMin + (ie + 0.5) * deta;
721 offset[ie] = surf->center().z() - zbase;
725 m_layerEntries[CaloCell_ID::EME2].second);
734 m_layerEntries[CaloCell_ID::EME2].second = tmpSlidDisc;
741 neta = (etaMax - etaMin) / deta;
743 zbase = m_layerEntries[CaloCell_ID::EME2].first->center().z();
744 for (
unsigned int ie = 0; ie < neta; ie++) {
745 float eta = etaMin + (ie + 0.5) * deta;
747 offset[ie] = surf->center().z() - zbase;
751 m_layerEntries[CaloCell_ID::EME2].first);
760 m_layerEntries[CaloCell_ID::EME2].first = tmpSlidDisc;
767 neta = (etaMax - etaMin) / deta;
769 zbase = m_layerEntries[CaloCell_ID::EME3].second->center().z();
770 for (
unsigned int ie = 0; ie < neta; ie++) {
771 float eta = etaMin + (ie + 0.5) * deta;
774 offset[ie] = surf->center().z() - zbase;
778 m_layerEntries[CaloCell_ID::EME3].second);
787 m_layerEntries[CaloCell_ID::EME3].second = tmpSlidDisc;
794 neta = (etaMax - etaMin) / deta;
796 zbase = m_layerEntries[CaloCell_ID::EME3].first->center().z();
797 for (
unsigned int ie = 0; ie < neta; ie++) {
798 float eta = etaMin + (ie + 0.5) * deta;
800 offset[ie] = surf->center().z() - zbase;
804 m_layerEntries[CaloCell_ID::EME3].first);
813 m_layerEntries[CaloCell_ID::EME3].first = tmpSlidDisc;
818 sample + 1 <
static_cast<int>(m_layerEntries.size());
820 m_layerExits.push_back(m_layerEntries[sample + 1]);
834 m_layerExits[CaloCell_ID::TileBar2] =
835 std::pair<const Trk::Surface*, const Trk::Surface*>(lpos, lneg);
845 m_layerExits[CaloCell_ID::TileExt2] =
846 std::pair<const Trk::Surface*, const Trk::Surface*>(lpos, lneg);
856 m_layerExits[CaloCell_ID::TileGap2] =
857 std::pair<const Trk::Surface*, const Trk::Surface*>(lpos, lneg);
867 m_layerExits[CaloCell_ID::TileGap3] =
868 std::pair<const Trk::Surface*, const Trk::Surface*>(lpos, lneg);
878 m_layerExits[CaloCell_ID::HEC3] =
879 std::pair<const Trk::Surface*, const Trk::Surface*>(lpos, lneg);