|
ATLAS Offline Software
|
Class for construction of EMEC internal structure.
More...
#include <EMECAccordionConstruction.h>
|
void | setInnerWheelSlices () |
|
void | setOuterWheelSlices () |
|
void | getInnerAbsorberData (double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const |
|
void | getOuterAbsorberData (double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const |
|
void | getBladeCorners (double wmin, double wmax, double thickness, double rmin, double rmax, double zdel, GeoThreeVector corners[8]) const |
|
CutPlane | getBottomCutPlane (double zmin, double rmin, double zmax, double rmax) const |
|
CutPlane | getTopCutPlane (double zmin, double rmin, double zmax, double rmax, const GeoThreeVector corners[8]) const |
|
GeoThreeVector | IntersectionPoint (const GeoThreeVector &p1, const GeoThreeVector &p2, const CutPlane &plane) const |
|
GeoShape * | constructBlade (int icase, const GeoThreeVector corners[8], double xscale, double pz1, double pr1min, double pr1max, double pz2, double pr2min, double pr2max) const |
|
void | constructInnerSlices () |
|
void | constructOuterSlices () |
|
void | constructInnerLips (double innerLipLength1, double innerLipPosition1, double innerLipLength2, double innerLipPosition2) |
|
void | constructOuterLips (double outerLipLength1, double outerLipPosition1, double outerLipLength2, double outerLipPosition2) |
|
void | constructInnerBlades (const GeoThreeVector innerCorners[8], const GeoThreeVector innerElectrodeCorners[8]) |
|
void | constructOuterBlades (const GeoThreeVector outerCorners[8], const GeoThreeVector outerElectrodeCorners[8]) |
|
void | placeInnerGlueAndLead () |
|
void | placeOuterGlueAndLead () |
|
void | placeInnerSlices (bool makeSlices) |
|
void | placeOuterSlices (bool makeSlices) |
|
void | placeInnerAccordion (int innerNoSectors, bool makeSlices, bool makeSectors) |
|
void | placeOuterAccordion (int outerNoSectors, bool makeSlices, bool makeSectors) |
|
|
GeoFullPhysVol * | m_innerWheel = nullptr |
|
GeoFullPhysVol * | m_outerWheel = nullptr |
|
const GeoMaterial * | m_materialLiquidArgon = nullptr |
|
const GeoMaterial * | m_materialKapton = nullptr |
|
const GeoMaterial * | m_materialLead = nullptr |
|
const GeoMaterial * | m_materialSteel = nullptr |
|
const GeoMaterial * | m_materialGlue = nullptr |
|
int | m_innerNoElectrodes = 256 |
|
int | m_innerNoAbsorbes = 256 |
|
int | m_innerNoWaves = 6 |
|
int | m_outerNoElectrodes = 768 |
|
int | m_outerNoAbsorbes = 768 |
|
int | m_outerNoWaves = 9 |
|
std::string | m_nameInnerWheel = "" |
|
std::string | m_nameOuterWheel = "" |
|
std::string | m_nameSlice = "::Slice" |
|
std::string | m_nameAbsorber = "::Absorber" |
|
std::string | m_nameLead = "::Lead" |
|
std::string | m_nameGlue = "::Glue" |
|
std::string | m_nameElectrode = "::Electrode" |
|
std::string | m_nameSuffix [s_outerNoBlades] |
|
double | m_innerWheelWidth = 0 |
|
double | m_innerLipWidth = 0 |
|
double | m_innerWaveZoneWidth = 0 |
|
double | m_innerWaveWidth = 0 |
|
double | m_innerHalfWaveWidth = 0 |
|
double | m_innerQuaterWaveWidth = 0 |
|
double | m_outerWheelWidth = 0 |
|
double | m_outerLipWidth = 0 |
|
double | m_outerWaveZoneWidth = 0 |
|
double | m_outerWaveWidth = 0 |
|
double | m_outerHalfWaveWidth = 0 |
|
double | m_outerQuaterWaveWidth = 0 |
|
double | m_innerLeadThickness = 0 |
|
double | m_innerSteelThickness = 0 |
|
double | m_innerGlueThickness = 0 |
|
double | m_innerAbsorberThickness = 0 |
|
double | m_innerElectrodeThickness = 0 |
|
double | m_innerGlueRatio = 0 |
|
double | m_innerLeadRatio = 0 |
|
double | m_outerLeadThickness = 0 |
|
double | m_outerSteelThickness = 0 |
|
double | m_outerGlueThickness = 0 |
|
double | m_outerAbsorberThickness = 0 |
|
double | m_outerElectrodeThickness = 0 |
|
double | m_outerGlueRatio = 0 |
|
double | m_outerLeadRatio = 0 |
|
double | m_kContraction = 0 |
|
std::array< double, 2 > | m_zWheelInner = {} |
|
std::array< double, 2 > | m_rMinInner = {} |
|
std::array< double, 2 > | m_rMaxInner = {} |
|
std::array< double, 3 > | m_zWheelOuter = {} |
|
std::array< double, 3 > | m_rMinOuter = {} |
|
std::array< double, 3 > | m_rMaxOuter = {} |
|
std::array< double, s_innerNoBlades+1 > | m_innerWheelZ = {} |
|
std::array< double, s_innerNoBlades+1 > | m_innerWheelRmin = {} |
|
std::array< double, s_innerNoBlades+1 > | m_innerWheelRmax = {} |
|
double | m_innerWheelRminIncrement = 0 |
|
double | m_innerWheelRmaxIncrement = 0 |
|
double | m_innerWheelZmin = 0 |
|
double | m_innerWheelZmax = 0 |
|
std::array< double, s_outerNoBlades+1 > | m_outerWheelZ = {} |
|
std::array< double, s_outerNoBlades+1 > | m_outerWheelRmin = {} |
|
std::array< double, s_outerNoBlades+1 > | m_outerWheelRmax = {} |
|
std::array< double, 2 > | m_outerWheelRminIncrement = {} |
|
std::array< double, 2 > | m_outerWheelRmaxIncrement = {} |
|
double | m_outerWheelZmin = 0 |
|
double | m_outerWheelZmax = 0 |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerAbsorber {{nullptr}} |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerGlue {{nullptr}} |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerLead {{nullptr}} |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerElectrode {{nullptr}} |
|
std::array< GeoThreeVector, s_innerNoBlades > | m_innerAbsorberOffset = {} |
|
std::array< GeoThreeVector, s_innerNoBlades > | m_innerElectrodeOffset = {} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerAbsorber {{nullptr}} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerGlue {{nullptr}} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerLead {{nullptr}} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerElectrode {{nullptr}} |
|
std::array< GeoThreeVector, s_outerNoBlades > | m_outerAbsorberOffset = {} |
|
std::array< GeoThreeVector, s_outerNoBlades > | m_outerElectrodeOffset = {} |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerSlice {{nullptr}} |
|
std::array< GeoThreeVector, s_innerNoBlades > | m_innerSliceOffset = {} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerSlice {{nullptr}} |
|
std::array< GeoThreeVector, s_outerNoBlades > | m_outerSliceOffset = {} |
|
std::array< GeoPhysVol *, s_innerNoBlades > | m_innerSector {{nullptr}} |
|
std::array< GeoPhysVol *, s_outerNoBlades > | m_outerSector {{nullptr}} |
|
Class for construction of EMEC internal structure.
Definition at line 35 of file EMECAccordionConstruction.h.
◆ EMECAccordionConstruction()
LArGeo::EMECAccordionConstruction::EMECAccordionConstruction |
( |
| ) |
|
|
default |
◆ ~EMECAccordionConstruction()
LArGeo::EMECAccordionConstruction::~EMECAccordionConstruction |
( |
| ) |
|
|
default |
◆ constructBlade()
GeoShape * LArGeo::EMECAccordionConstruction::constructBlade |
( |
int |
icase, |
|
|
const GeoThreeVector |
corners[8], |
|
|
double |
xscale, |
|
|
double |
pz1, |
|
|
double |
pr1min, |
|
|
double |
pr1max, |
|
|
double |
pz2, |
|
|
double |
pr2min, |
|
|
double |
pr2max |
|
) |
| const |
|
private |
Definition at line 590 of file EMECAccordionConstruction.cxx.
595 double z1 = pz1, r1min = pr1min, r1max = pr1max;
596 double z2 = pz2, r2min = pr2min, r2max = pr2max;
600 r1min -= (r2min - r1min);
601 r1max -= (r2max - r1max);
606 r2min += (r2min - r1min);
607 r2max += (r2max - r1max);
611 std::vector<GeoThreeVector> v3(8);
612 double kx = (icase == 2) ? 1 : -1;
615 for (
int i = 0;
i < 8; ++
i)
645 v3[0] = (v3[0] + v3[4])/2.;
646 v3[1] = (v3[1] + v3[5])/2.;
647 v3[2] = (v3[2] + v3[6])/2.;
648 v3[3] = (v3[3] + v3[7])/2.;
653 v3[4] = (v3[0] + v3[4])/2.;
654 v3[5] = (v3[1] + v3[5])/2.;
655 v3[6] = (v3[2] + v3[6])/2.;
656 v3[7] = (v3[3] + v3[7])/2.;
668 std::vector<GeoTwoVector>
v2(8);
669 for (
int i = 0;
i < 8;
i += 2)
671 double xmid = (v3[
i + 1].x() + v3[
i].x())/2.;
672 double xdel = (v3[
i + 1].x() - v3[
i].x())*xscale/2.;
676 return new GeoGenericTrap((pz2 - pz1)/2.,
v2);
◆ constructInnerBlades()
Definition at line 872 of file EMECAccordionConstruction.cxx.
880 int icase = (iblade%2 == 0) ? 2 : 3;
881 if (iblade == 1) icase = 1;
893 solid =
constructBlade(icase, innerCorners, 1., z1, r1min, r1max, z2, r2min, r2max);
905 solid =
constructBlade(icase, innerElectrodeCorners, 1., z1, r1min, r1max, z2, r2min, r2max);
◆ constructInnerLips()
void LArGeo::EMECAccordionConstruction::constructInnerLips |
( |
double |
innerLipLength1, |
|
|
double |
innerLipPosition1, |
|
|
double |
innerLipLength2, |
|
|
double |
innerLipPosition2 |
|
) |
| |
|
private |
Definition at line 725 of file EMECAccordionConstruction.cxx.
730 double dx,
dy, dz, xoffset, yoffset, zoffset;
737 dy = 0.5*innerLipLength1;
740 solid =
new GeoBox(
dx,
dy, dz);
753 solid =
new GeoBox(
dx,
dy, dz);
766 dy = 0.5*innerLipLength2;
769 solid =
new GeoBox(
dx,
dy, dz);
782 solid =
new GeoBox(
dx,
dy, dz);
◆ constructInnerSlices()
void LArGeo::EMECAccordionConstruction::constructInnerSlices |
( |
| ) |
|
|
private |
◆ constructInnerWheelStructure()
void LArGeo::EMECAccordionConstruction::constructInnerWheelStructure |
( |
bool |
makeSlices = true | ) |
|
Definition at line 1184 of file EMECAccordionConstruction.cxx.
1186 bool makeSectors =
false;
1187 int innerNoSectors = 0;
1194 double innerUncutBladeWidthMin, innerUncutBladeWidthMax;
1195 double innerLipLength1, innerLipPosition1;
1196 double innerLipLength2, innerLipPosition2;
1198 innerLipLength1, innerLipPosition1,
1199 innerLipLength2, innerLipPosition2);
1209 double wmin, wmax, thickness, rmin, rmax, zdel;
1213 wmin = innerUncutBladeWidthMin;
1214 wmax = innerUncutBladeWidthMax;
1219 getBladeCorners(wmin, wmax, thickness, rmin, rmax, zdel, innerCorners);
1224 getBladeCorners(wmin, wmax, thickness, rmin, rmax, zdel, innerElectrodeCorners);
1234 constructInnerLips(innerLipLength1, innerLipPosition1, innerLipLength2, innerLipPosition2);
◆ constructOuterBlades()
Definition at line 920 of file EMECAccordionConstruction.cxx.
928 int icase = (iblade%2 == 0) ? 2 : 3;
929 if (iblade == 1) icase = 1;
941 solid =
constructBlade(icase, outerCorners, 1., z1, r1min, r1max, z2, r2min, r2max);
954 solid =
constructBlade(icase, outerElectrodeCorners, 1., z1, r1min, r1max, z2, r2min, r2max);
◆ constructOuterLips()
void LArGeo::EMECAccordionConstruction::constructOuterLips |
( |
double |
outerLipLength1, |
|
|
double |
outerLipPosition1, |
|
|
double |
outerLipLength2, |
|
|
double |
outerLipPosition2 |
|
) |
| |
|
private |
Definition at line 798 of file EMECAccordionConstruction.cxx.
803 double dx,
dy, dz, xoffset, yoffset, zoffset;
810 dy = 0.5*outerLipLength1;
813 solid =
new GeoBox(
dx,
dy, dz);
826 solid =
new GeoBox(
dx,
dy, dz);
839 dy = 0.5*outerLipLength2;
842 solid =
new GeoBox(
dx,
dy, dz);
855 solid =
new GeoBox(
dx,
dy, dz);
◆ constructOuterSlices()
void LArGeo::EMECAccordionConstruction::constructOuterSlices |
( |
| ) |
|
|
private |
◆ constructOuterWheelStructure()
void LArGeo::EMECAccordionConstruction::constructOuterWheelStructure |
( |
bool |
makeSlices = true | ) |
|
Definition at line 1258 of file EMECAccordionConstruction.cxx.
1260 bool makeSectors =
false;
1261 int outerNoSectors = 0;
1268 double outerUncutBladeWidthMin, outerUncutBladeWidthMax;
1269 double outerLipLength1, outerLipPosition1;
1270 double outerLipLength2, outerLipPosition2;
1272 outerLipLength1, outerLipPosition1,
1273 outerLipLength2, outerLipPosition2);
1283 double wmin, wmax, thickness, rmin, rmax, zdel;
1287 wmin = outerUncutBladeWidthMin;
1288 wmax = outerUncutBladeWidthMax;
1293 getBladeCorners(wmin, wmax, thickness, rmin, rmax, zdel, outerCorners);
1298 getBladeCorners(wmin, wmax, thickness, rmin, rmax, zdel, outerElectrodeCorners);
1308 constructOuterLips(outerLipLength1, outerLipPosition1, outerLipLength2, outerLipPosition2);
◆ getBladeCorners()
void LArGeo::EMECAccordionConstruction::getBladeCorners |
( |
double |
wmin, |
|
|
double |
wmax, |
|
|
double |
thickness, |
|
|
double |
rmin, |
|
|
double |
rmax, |
|
|
double |
zdel, |
|
|
GeoThreeVector |
corners[8] |
|
) |
| const |
|
private |
Definition at line 492 of file EMECAccordionConstruction.cxx.
498 double xmin = std::sqrt(wmin*wmin - zdel*zdel)/2.;
499 double dxmin = (thickness/2.)*(wmin/zdel);
502 double xmax = std::sqrt(wmax*wmax - zdel*zdel)/2.;
503 double dxmax = (thickness/2.)*(wmax/zdel);
504 double xtmp = (
xmax + dxmax);
505 double ymax = std::sqrt(rmax*rmax - xtmp*xtmp);
◆ getBottomCutPlane()
◆ getInnerAbsorberData()
void LArGeo::EMECAccordionConstruction::getInnerAbsorberData |
( |
double & |
wmin, |
|
|
double & |
wmax, |
|
|
double & |
llip1, |
|
|
double & |
ylip1, |
|
|
double & |
llip2, |
|
|
double & |
ylip2 |
|
) |
| const |
|
private |
Definition at line 332 of file EMECAccordionConstruction.cxx.
383 double cosa =
A[k1].dot(
A[k2])/(
A[k1].norm()*
A[k2].norm());
384 double ang = std::acos(cosa)/(k2 - k1);
387 double rmin =
B[1].norm();
388 double rmax =
A[14].norm();
393 llip1 = (
C[2] - D[2]).
norm();
394 ylip1 = (D[2] -
B[1]).
norm() + llip1/2.;
397 llip2 = (
C[3] - D[3]).
norm();
398 ylip2 = (D[3] -
B[14]).
norm() + llip2/2.;
◆ getOuterAbsorberData()
void LArGeo::EMECAccordionConstruction::getOuterAbsorberData |
( |
double & |
wmin, |
|
|
double & |
wmax, |
|
|
double & |
llip1, |
|
|
double & |
ylip1, |
|
|
double & |
llip2, |
|
|
double & |
ylip2 |
|
) |
| const |
|
private |
Definition at line 406 of file EMECAccordionConstruction.cxx.
469 double cosa =
A[k1].dot(
A[k2])/(
A[k1].norm()*
A[k2].norm());
470 double ang = std::acos(cosa)/(k2 - k1);
473 double rmin =
B[1].norm();
474 double rmax =
A[19].norm();
479 llip1 = (
C[2] - D[2]).
norm();
480 ylip1 = (D[2] -
B[1]).
norm() + llip1/2.;
483 llip2 = (
C[3] - D[3]).
norm();
484 ylip2 = (D[3] -
B[20]).
norm() + llip2/2.;
◆ getTopCutPlane()
Definition at line 541 of file EMECAccordionConstruction.cxx.
549 double d =
v.x()*pbot.y() -
v.y()*pbot.x();
550 double r = ptop.norm();
551 double l = std::sqrt(
r*
r -
d*
d);
552 double wmin = std::sqrt(rmin*rmin -
d*
d);
553 double wmax = std::sqrt(rmax*rmax -
d*
d);
554 double ymin = ptop.y() -
v.y()*(
l - wmin);
555 double ymax = ptop.y() -
v.y()*(
l - wmax);
559 v = (pmax - pmin).normalized();
563 plane.
m_d = -plane.
m_n.dot(pmin);
◆ IntersectionPoint()
◆ placeInnerAccordion()
void LArGeo::EMECAccordionConstruction::placeInnerAccordion |
( |
int |
innerNoSectors, |
|
|
bool |
makeSlices, |
|
|
bool |
makeSectors |
|
) |
| |
|
private |
Definition at line 1028 of file EMECAccordionConstruction.cxx.
1034 GeoPhysVol* mother =
nullptr;
1037 for (
int iphi = 0; iphi < nphi; ++iphi)
1040 int copyNo = iphi + 1;
1045 if (makeSlices || makeSectors)
1050 GeoTrf::Translate3D translation(
x,
y,
z);
1051 mother->add(
new GeoIdentifierTag(copyNo));
1052 mother->add(
new GeoTransform(
rotation*translation));
1060 GeoTrf::Translate3D translation(
x,
y,
z);
1069 for (
int iphi = 0; iphi < nphi; ++iphi)
1072 int copyNo = iphi + 1;
1077 if (makeSlices || makeSectors)
1082 GeoTrf::Translate3D translation(
x,
y,
z);
1083 mother->add(
new GeoIdentifierTag(copyNo));
1084 mother->add(
new GeoTransform(
rotation*translation));
1092 GeoTrf::Translate3D translation(
x,
y,
z);
◆ placeInnerGlueAndLead()
void LArGeo::EMECAccordionConstruction::placeInnerGlueAndLead |
( |
| ) |
|
|
private |
◆ placeInnerSlices()
void LArGeo::EMECAccordionConstruction::placeInnerSlices |
( |
bool |
makeSlices | ) |
|
|
private |
◆ placeOuterAccordion()
void LArGeo::EMECAccordionConstruction::placeOuterAccordion |
( |
int |
outerNoSectors, |
|
|
bool |
makeSlices, |
|
|
bool |
makeSectors |
|
) |
| |
|
private |
Definition at line 1106 of file EMECAccordionConstruction.cxx.
1112 GeoPhysVol* mother =
nullptr;
1115 for (
int iphi = 0; iphi < nphi; ++iphi)
1118 int copyNo = iphi + 1;
1123 if (makeSlices || makeSectors)
1128 GeoTrf::Translate3D translation(
x,
y,
z);
1129 mother->add(
new GeoIdentifierTag(copyNo));
1130 mother->add(
new GeoTransform(
rotation*translation));
1138 GeoTrf::Translate3D translation(
x,
y,
z);
1147 for (
int iphi = 0; iphi < nphi; ++iphi)
1150 int copyNo = iphi + 1;
1155 if (makeSlices || makeSectors)
1160 GeoTrf::Translate3D translation(
x,
y,
z);
1161 mother->add(
new GeoIdentifierTag(copyNo));
1162 mother->add(
new GeoTransform(
rotation*translation));
1170 GeoTrf::Translate3D translation(
x,
y,
z);
◆ placeOuterGlueAndLead()
void LArGeo::EMECAccordionConstruction::placeOuterGlueAndLead |
( |
| ) |
|
|
private |
◆ placeOuterSlices()
void LArGeo::EMECAccordionConstruction::placeOuterSlices |
( |
bool |
makeSlices | ) |
|
|
private |
◆ setInnerWheel()
void LArGeo::EMECAccordionConstruction::setInnerWheel |
( |
GeoFullPhysVol * |
innerWheel | ) |
|
Definition at line 192 of file EMECAccordionConstruction.cxx.
195 const GeoShape* shape = innerWheel->getLogVol()->getShape();
196 if (shape->type() !=
"Pcon") {
197 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setInnerWheel: unexpected shape type '"+ shape->type() +
"', expected 'Pcon'!");
199 const GeoPcon* pcon = (GeoPcon *)shape;
200 auto nplanes = pcon->getNPlanes();
202 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setInnerWheel: wrong number of Z planes '" +
std::to_string(nplanes) +
"', expected '2'!");
204 for (
unsigned int i = 0;
i < nplanes; ++
i)
◆ setInnerWheelSlices()
void LArGeo::EMECAccordionConstruction::setInnerWheelSlices |
( |
| ) |
|
|
private |
Definition at line 245 of file EMECAccordionConstruction.cxx.
249 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setInnerWheelSlices: Inner Wheel volume is not set!" );
◆ setMaterial()
void LArGeo::EMECAccordionConstruction::setMaterial |
( |
const std::string & |
name, |
|
|
const GeoMaterial * |
material |
|
) |
| |
Definition at line 313 of file EMECAccordionConstruction.cxx.
323 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setMaterial: unexpected material name '" +
name +
"'!");
◆ setOuterWheel()
void LArGeo::EMECAccordionConstruction::setOuterWheel |
( |
GeoFullPhysVol * |
outerWheel | ) |
|
Definition at line 218 of file EMECAccordionConstruction.cxx.
221 const GeoShape* shape = outerWheel->getLogVol()->getShape();
222 if (shape->type() !=
"Pcon") {
223 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setOuterWheel: unexpected shape type '"+ shape->type() +
"', expected 'Pcon'!");
226 const GeoPcon* pcon = (GeoPcon *)shape;
227 auto nplanes = pcon->getNPlanes();
229 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setOuterWheel: wrong number of Z planes" +
std::to_string(nplanes) +
"', expected '3'!" );
231 for (
unsigned int i = 0;
i < nplanes; ++
i)
◆ setOuterWheelSlices()
void LArGeo::EMECAccordionConstruction::setOuterWheelSlices |
( |
| ) |
|
|
private |
Definition at line 277 of file EMECAccordionConstruction.cxx.
281 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setOuterWheelSlices: Outer Wheel volume is not set!");
◆ setWheelParameters()
void LArGeo::EMECAccordionConstruction::setWheelParameters |
( |
| ) |
|
Definition at line 51 of file EMECAccordionConstruction.cxx.
53 ISvcLocator *svcLocator = Gaudi::svcLocator();
54 SmartIF<StoreGateSvc>
detStore{svcLocator->service(
"DetectorStore")};
56 throw std::runtime_error(
"Error in EndcapCryostatConstruction, cannot access DetectorStore");
61 SmartIF<IRDBAccessSvc> rdbAccess{svcLocator->service(
"RDBAccessSvc")};
62 if(!rdbAccess.isValid()){
63 throw std::runtime_error(
"EMECConstruction: cannot locate RDBAccessSvc!");
66 SmartIF<IGeoModelSvc> geoModelSvc{svcLocator->service(
"GeoModelSvc")};
67 if(!geoModelSvc.isValid()) {
68 throw std::runtime_error(
"EMECAccordionConstruction: cannot locate GeoModelSvc!");
72 IRDBRecordset_ptr DB_EmecGeometry = rdbAccess->getRecordsetPtr(
"EmecGeometry", larVersionKey.tag(), larVersionKey.node());
73 if(DB_EmecGeometry->size() == 0){
74 DB_EmecGeometry = rdbAccess->getRecordsetPtr(
"EmecGeometry",
"EmecGeometry-00");
77 IRDBRecordset_ptr emecWheelParameters = rdbAccess->getRecordsetPtr(
"EmecWheelParameters", larVersionKey.tag(), larVersionKey.node());
78 if(emecWheelParameters->size() == 0){
79 emecWheelParameters = rdbAccess->getRecordsetPtr(
"EmecWheelParameters",
"EmecWheelParameters-00");
83 IRDBRecordset_ptr emecMagicNumbers = rdbAccess->getRecordsetPtr(
"EmecMagicNumbers", larVersionKey.tag(), larVersionKey.node());
84 if(emecMagicNumbers->size() == 0){
85 emecMagicNumbers = rdbAccess->getRecordsetPtr(
"EmecMagicNumbers",
"EmecMagicNumbers-00");
88 IRDBRecordset_ptr coldContraction = rdbAccess->getRecordsetPtr(
"ColdContraction", larVersionKey.tag(), larVersionKey.node());
89 if(coldContraction->size() == 0){
90 coldContraction = rdbAccess->getRecordsetPtr(
"ColdContraction",
"ColdContraction-00");
93 IRDBRecordset_ptr emecFan = rdbAccess->getRecordsetPtr(
"EmecFan", larVersionKey.tag(), larVersionKey.node());
94 if(emecFan->size() == 0){
95 emecFan = rdbAccess->getRecordsetPtr(
"EmecFan",
"EmecFan-00");
113 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong number of absorbers. (NABS = " +
std::to_string(
m_innerNoAbsorbes) +
") for Inner Wheel, expected 256!");
116 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong number of waves. (NACC = " +
std::to_string(
m_innerNoAbsorbes ) +
") for Inner Wheel, expected 6!");
119 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong width of absorber lips. (STRAIGHTSTARTSECTION = " +
std::to_string(
m_innerNoAbsorbes/
SI::mm) +
"), expected 2 mm!" );
122 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong width of absorber active zone. (ACTIVELENGTH = " +
std::to_string(
m_innerWaveZoneWidth/
SI::mm) +
"), expected 510 mm!");
139 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong number of absorbers. (NABS = " +
std::to_string (
m_outerNoAbsorbes) +
") for Outer Wheel, expected 768!");
142 throw std::runtime_error(
"LArGeo::EMECAccordionConstruction::setWheelParameters: wrong number of waves. (NACC = " +
std::to_string(
m_outerNoAbsorbes) +
") for Outer Wheel, expected 9!" );
169 m_kContraction = (*coldContraction)[0]->getDouble(
"ABSORBERCONTRACTION");
183 double eleInvContraction = (*coldContraction)[0]->getDouble(
"ELECTRODEINVCONTRACTION");
◆ m_innerAbsorber
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerAbsorber {{nullptr}} |
|
private |
◆ m_innerAbsorberOffset
◆ m_innerAbsorberThickness
double LArGeo::EMECAccordionConstruction::m_innerAbsorberThickness = 0 |
|
private |
◆ m_innerElectrode
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerElectrode {{nullptr}} |
|
private |
◆ m_innerElectrodeOffset
◆ m_innerElectrodeThickness
double LArGeo::EMECAccordionConstruction::m_innerElectrodeThickness = 0 |
|
private |
◆ m_innerGlue
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerGlue {{nullptr}} |
|
private |
◆ m_innerGlueRatio
double LArGeo::EMECAccordionConstruction::m_innerGlueRatio = 0 |
|
private |
◆ m_innerGlueThickness
double LArGeo::EMECAccordionConstruction::m_innerGlueThickness = 0 |
|
private |
◆ m_innerHalfWaveWidth
double LArGeo::EMECAccordionConstruction::m_innerHalfWaveWidth = 0 |
|
private |
◆ m_innerLead
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerLead {{nullptr}} |
|
private |
◆ m_innerLeadRatio
double LArGeo::EMECAccordionConstruction::m_innerLeadRatio = 0 |
|
private |
◆ m_innerLeadThickness
double LArGeo::EMECAccordionConstruction::m_innerLeadThickness = 0 |
|
private |
◆ m_innerLipWidth
double LArGeo::EMECAccordionConstruction::m_innerLipWidth = 0 |
|
private |
◆ m_innerNoAbsorbes
int LArGeo::EMECAccordionConstruction::m_innerNoAbsorbes = 256 |
|
private |
◆ m_innerNoElectrodes
int LArGeo::EMECAccordionConstruction::m_innerNoElectrodes = 256 |
|
private |
◆ m_innerNoWaves
int LArGeo::EMECAccordionConstruction::m_innerNoWaves = 6 |
|
private |
◆ m_innerQuaterWaveWidth
double LArGeo::EMECAccordionConstruction::m_innerQuaterWaveWidth = 0 |
|
private |
◆ m_innerSector
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerSector {{nullptr}} |
|
private |
◆ m_innerSlice
std::array<GeoPhysVol*, s_innerNoBlades> LArGeo::EMECAccordionConstruction::m_innerSlice {{nullptr}} |
|
private |
◆ m_innerSliceOffset
◆ m_innerSteelThickness
double LArGeo::EMECAccordionConstruction::m_innerSteelThickness = 0 |
|
private |
◆ m_innerWaveWidth
double LArGeo::EMECAccordionConstruction::m_innerWaveWidth = 0 |
|
private |
◆ m_innerWaveZoneWidth
double LArGeo::EMECAccordionConstruction::m_innerWaveZoneWidth = 0 |
|
private |
◆ m_innerWheel
GeoFullPhysVol* LArGeo::EMECAccordionConstruction::m_innerWheel = nullptr |
|
private |
◆ m_innerWheelRmax
std::array<double, s_innerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_innerWheelRmax = {} |
|
private |
◆ m_innerWheelRmaxIncrement
double LArGeo::EMECAccordionConstruction::m_innerWheelRmaxIncrement = 0 |
|
private |
◆ m_innerWheelRmin
std::array<double, s_innerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_innerWheelRmin = {} |
|
private |
◆ m_innerWheelRminIncrement
double LArGeo::EMECAccordionConstruction::m_innerWheelRminIncrement = 0 |
|
private |
◆ m_innerWheelWidth
double LArGeo::EMECAccordionConstruction::m_innerWheelWidth = 0 |
|
private |
◆ m_innerWheelZ
std::array<double, s_innerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_innerWheelZ = {} |
|
private |
◆ m_innerWheelZmax
double LArGeo::EMECAccordionConstruction::m_innerWheelZmax = 0 |
|
private |
◆ m_innerWheelZmin
double LArGeo::EMECAccordionConstruction::m_innerWheelZmin = 0 |
|
private |
◆ m_kContraction
double LArGeo::EMECAccordionConstruction::m_kContraction = 0 |
|
private |
◆ m_materialGlue
const GeoMaterial* LArGeo::EMECAccordionConstruction::m_materialGlue = nullptr |
|
private |
◆ m_materialKapton
const GeoMaterial* LArGeo::EMECAccordionConstruction::m_materialKapton = nullptr |
|
private |
◆ m_materialLead
const GeoMaterial* LArGeo::EMECAccordionConstruction::m_materialLead = nullptr |
|
private |
◆ m_materialLiquidArgon
const GeoMaterial* LArGeo::EMECAccordionConstruction::m_materialLiquidArgon = nullptr |
|
private |
◆ m_materialSteel
const GeoMaterial* LArGeo::EMECAccordionConstruction::m_materialSteel = nullptr |
|
private |
◆ m_nameAbsorber
std::string LArGeo::EMECAccordionConstruction::m_nameAbsorber = "::Absorber" |
|
private |
◆ m_nameElectrode
std::string LArGeo::EMECAccordionConstruction::m_nameElectrode = "::Electrode" |
|
private |
◆ m_nameGlue
std::string LArGeo::EMECAccordionConstruction::m_nameGlue = "::Glue" |
|
private |
◆ m_nameInnerWheel
std::string LArGeo::EMECAccordionConstruction::m_nameInnerWheel = "" |
|
private |
◆ m_nameLead
std::string LArGeo::EMECAccordionConstruction::m_nameLead = "::Lead" |
|
private |
◆ m_nameOuterWheel
std::string LArGeo::EMECAccordionConstruction::m_nameOuterWheel = "" |
|
private |
◆ m_nameSlice
std::string LArGeo::EMECAccordionConstruction::m_nameSlice = "::Slice" |
|
private |
◆ m_nameSuffix
std::string LArGeo::EMECAccordionConstruction::m_nameSuffix[s_outerNoBlades] |
|
private |
Initial value:= {
"01","02","03","04","05","06","07","08","09","10",
"11","12","13","14","15","16","17","18","19","20","21"
}
Definition at line 128 of file EMECAccordionConstruction.h.
◆ m_outerAbsorber
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerAbsorber {{nullptr}} |
|
private |
◆ m_outerAbsorberOffset
◆ m_outerAbsorberThickness
double LArGeo::EMECAccordionConstruction::m_outerAbsorberThickness = 0 |
|
private |
◆ m_outerElectrode
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerElectrode {{nullptr}} |
|
private |
◆ m_outerElectrodeOffset
◆ m_outerElectrodeThickness
double LArGeo::EMECAccordionConstruction::m_outerElectrodeThickness = 0 |
|
private |
◆ m_outerGlue
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerGlue {{nullptr}} |
|
private |
◆ m_outerGlueRatio
double LArGeo::EMECAccordionConstruction::m_outerGlueRatio = 0 |
|
private |
◆ m_outerGlueThickness
double LArGeo::EMECAccordionConstruction::m_outerGlueThickness = 0 |
|
private |
◆ m_outerHalfWaveWidth
double LArGeo::EMECAccordionConstruction::m_outerHalfWaveWidth = 0 |
|
private |
◆ m_outerLead
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerLead {{nullptr}} |
|
private |
◆ m_outerLeadRatio
double LArGeo::EMECAccordionConstruction::m_outerLeadRatio = 0 |
|
private |
◆ m_outerLeadThickness
double LArGeo::EMECAccordionConstruction::m_outerLeadThickness = 0 |
|
private |
◆ m_outerLipWidth
double LArGeo::EMECAccordionConstruction::m_outerLipWidth = 0 |
|
private |
◆ m_outerNoAbsorbes
int LArGeo::EMECAccordionConstruction::m_outerNoAbsorbes = 768 |
|
private |
◆ m_outerNoElectrodes
int LArGeo::EMECAccordionConstruction::m_outerNoElectrodes = 768 |
|
private |
◆ m_outerNoWaves
int LArGeo::EMECAccordionConstruction::m_outerNoWaves = 9 |
|
private |
◆ m_outerQuaterWaveWidth
double LArGeo::EMECAccordionConstruction::m_outerQuaterWaveWidth = 0 |
|
private |
◆ m_outerSector
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerSector {{nullptr}} |
|
private |
◆ m_outerSlice
std::array<GeoPhysVol*, s_outerNoBlades> LArGeo::EMECAccordionConstruction::m_outerSlice {{nullptr}} |
|
private |
◆ m_outerSliceOffset
◆ m_outerSteelThickness
double LArGeo::EMECAccordionConstruction::m_outerSteelThickness = 0 |
|
private |
◆ m_outerWaveWidth
double LArGeo::EMECAccordionConstruction::m_outerWaveWidth = 0 |
|
private |
◆ m_outerWaveZoneWidth
double LArGeo::EMECAccordionConstruction::m_outerWaveZoneWidth = 0 |
|
private |
◆ m_outerWheel
GeoFullPhysVol* LArGeo::EMECAccordionConstruction::m_outerWheel = nullptr |
|
private |
◆ m_outerWheelRmax
std::array<double, s_outerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_outerWheelRmax = {} |
|
private |
◆ m_outerWheelRmaxIncrement
std::array<double, 2> LArGeo::EMECAccordionConstruction::m_outerWheelRmaxIncrement = {} |
|
private |
◆ m_outerWheelRmin
std::array<double, s_outerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_outerWheelRmin = {} |
|
private |
◆ m_outerWheelRminIncrement
std::array<double, 2> LArGeo::EMECAccordionConstruction::m_outerWheelRminIncrement = {} |
|
private |
◆ m_outerWheelWidth
double LArGeo::EMECAccordionConstruction::m_outerWheelWidth = 0 |
|
private |
◆ m_outerWheelZ
std::array<double, s_outerNoBlades + 1> LArGeo::EMECAccordionConstruction::m_outerWheelZ = {} |
|
private |
◆ m_outerWheelZmax
double LArGeo::EMECAccordionConstruction::m_outerWheelZmax = 0 |
|
private |
◆ m_outerWheelZmin
double LArGeo::EMECAccordionConstruction::m_outerWheelZmin = 0 |
|
private |
◆ m_rMaxInner
std::array<double, 2> LArGeo::EMECAccordionConstruction::m_rMaxInner = {} |
|
private |
◆ m_rMaxOuter
std::array<double, 3> LArGeo::EMECAccordionConstruction::m_rMaxOuter = {} |
|
private |
◆ m_rMinInner
std::array<double, 2> LArGeo::EMECAccordionConstruction::m_rMinInner = {} |
|
private |
◆ m_rMinOuter
std::array<double, 3> LArGeo::EMECAccordionConstruction::m_rMinOuter = {} |
|
private |
◆ m_zWheelInner
std::array<double, 2> LArGeo::EMECAccordionConstruction::m_zWheelInner = {} |
|
private |
◆ m_zWheelOuter
std::array<double, 3> LArGeo::EMECAccordionConstruction::m_zWheelOuter = {} |
|
private |
◆ s_innerNoBlades
constexpr int LArGeo::EMECAccordionConstruction::s_innerNoBlades = 15 |
|
staticconstexprprivate |
◆ s_outerNoBlades
constexpr int LArGeo::EMECAccordionConstruction::s_outerNoBlades = 21 |
|
staticconstexprprivate |
The documentation for this class was generated from the following files:
std::array< GeoPhysVol *, s_innerNoBlades > m_innerLead
std::string m_nameSuffix[s_outerNoBlades]
void getOuterAbsorberData(double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const
GeoShape * constructBlade(int icase, const GeoThreeVector corners[8], double xscale, double pz1, double pr1min, double pr1max, double pz2, double pr2min, double pr2max) const
std::array< double, s_outerNoBlades+1 > m_outerWheelRmax
std::array< double, 2 > m_outerWheelRminIncrement
double m_outerLeadThickness
std::array< GeoPhysVol *, s_outerNoBlades > m_outerLead
void getInnerAbsorberData(double &wmin, double &wmax, double &llip1, double &ylip1, double &llip2, double &ylip2) const
std::array< GeoThreeVector, s_outerNoBlades > m_outerAbsorberOffset
const GeoMaterial * m_materialGlue
double m_innerGlueThickness
void placeOuterAccordion(int outerNoSectors, bool makeSlices, bool makeSectors)
void constructInnerBlades(const GeoThreeVector innerCorners[8], const GeoThreeVector innerElectrodeCorners[8])
GeoThreeVector IntersectionPoint(const GeoThreeVector &p1, const GeoThreeVector &p2, const CutPlane &plane) const
std::array< GeoPhysVol *, s_innerNoBlades > m_innerElectrode
std::array< GeoPhysVol *, s_outerNoBlades > m_outerAbsorber
const GeoMaterial * m_materialLead
const GeoMaterial * m_materialLiquidArgon
GeoFullPhysVol * m_innerWheel
double m_outerHalfWaveWidth
void constructInnerLips(double innerLipLength1, double innerLipPosition1, double innerLipLength2, double innerLipPosition2)
CutPlane getBottomCutPlane(double zmin, double rmin, double zmax, double rmax) const
double m_outerSteelThickness
std::array< GeoPhysVol *, s_innerNoBlades > m_innerSlice
std::array< GeoPhysVol *, s_innerNoBlades > m_innerGlue
std::array< double, 2 > m_rMaxInner
std::array< double, 2 > m_outerWheelRmaxIncrement
double m_innerAbsorberThickness
double m_innerLeadThickness
void setOuterWheelSlices()
std::array< GeoThreeVector, s_outerNoBlades > m_outerSliceOffset
std::array< double, 3 > m_rMaxOuter
void getBladeCorners(double wmin, double wmax, double thickness, double rmin, double rmax, double zdel, GeoThreeVector corners[8]) const
double m_outerQuaterWaveWidth
std::string m_nameOuterWheel
std::string m_nameElectrode
std::array< double, s_innerNoBlades+1 > m_innerWheelRmin
double m_innerHalfWaveWidth
std::array< GeoPhysVol *, s_innerNoBlades > m_innerSector
void placeInnerGlueAndLead()
std::array< GeoThreeVector, s_outerNoBlades > m_outerElectrodeOffset
void constructOuterBlades(const GeoThreeVector outerCorners[8], const GeoThreeVector outerElectrodeCorners[8])
void constructInnerSlices()
double m_outerElectrodeThickness
void placeInnerSlices(bool makeSlices)
double m_innerWheelRmaxIncrement
GeoFullPhysVol * m_outerWheel
std::array< double, 2 > m_rMinInner
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
std::array< double, 2 > m_zWheelInner
std::array< GeoThreeVector, s_innerNoBlades > m_innerElectrodeOffset
static constexpr int s_outerNoBlades
void placeInnerAccordion(int innerNoSectors, bool makeSlices, bool makeSectors)
GeoTrf::Vector2D GeoTwoVector
std::array< GeoThreeVector, s_innerNoBlades > m_innerAbsorberOffset
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
std::string m_nameInnerWheel
double m_outerGlueThickness
std::string m_nameAbsorber
double m_outerAbsorberThickness
CutPlane getTopCutPlane(double zmin, double rmin, double zmax, double rmax, const GeoThreeVector corners[8]) const
std::string to_string(const DetectorType &type)
std::array< GeoPhysVol *, s_outerNoBlades > m_outerGlue
std::array< double, s_outerNoBlades+1 > m_outerWheelRmin
GeoTrf::Vector3D GeoThreeVector
double m_innerQuaterWaveWidth
void constructOuterLips(double outerLipLength1, double outerLipPosition1, double outerLipLength2, double outerLipPosition2)
std::array< double, 3 > m_rMinOuter
std::array< double, s_outerNoBlades+1 > m_outerWheelZ
std::array< GeoPhysVol *, s_innerNoBlades > m_innerAbsorber
static constexpr int s_innerNoBlades
std::array< GeoPhysVol *, s_outerNoBlades > m_outerSector
std::array< GeoThreeVector, s_innerNoBlades > m_innerSliceOffset
void placeOuterGlueAndLead()
const GeoMaterial * m_materialKapton
std::array< double, 3 > m_zWheelOuter
std::array< GeoPhysVol *, s_outerNoBlades > m_outerElectrode
std::array< GeoPhysVol *, s_outerNoBlades > m_outerSlice
std::array< double, s_innerNoBlades+1 > m_innerWheelRmax
double m_outerWaveZoneWidth
double m_innerWaveZoneWidth
void setInnerWheelSlices()
const GeoMaterial * m_materialSteel
double m_innerSteelThickness
double m_innerWheelRminIncrement
void constructOuterSlices()
void placeOuterSlices(bool makeSlices)
std::array< double, s_innerNoBlades+1 > m_innerWheelZ
double m_innerElectrodeThickness