51 for (
int iType = 0; iType < parameters->fwdNumCylinderServiceTypes(); iType++) {
52 if (parameters->fwdCylinderServiceName(iType) ==
"CoolingPipe") {
57 if (parameters->fwdCylinderServiceName(iType) ==
"LMT") {
58 m_lmtDeltaR = parameters->fwdCylinderServiceDeltaR(iType);
59 m_lmtRPhi = parameters->fwdCylinderServiceRPhi(iType);
62 if (parameters->fwdCylinderServiceName(iType) ==
"LMTCooling") {
67 if (parameters->fwdCylinderServiceName(iType) ==
"Fibres") {
69 m_fibreRPhi = parameters->fwdCylinderServiceRPhi(iType);
72 if (parameters->fwdCylinderServiceName(iType) ==
"NPipe") {
74 m_nPipeRPhi = parameters->fwdCylinderServiceRPhi(iType);
77 if (parameters->fwdCylinderServiceName(iType) ==
"Rail") {
78 m_railDeltaR = parameters->fwdCylinderServiceDeltaR(iType);
79 m_railRPhi = parameters->fwdCylinderServiceRPhi(iType);
85 for (
int iLoc = 0; iLoc < parameters->fwdNumCylinderServiceLocs(); iLoc++) {
86 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"CoolingPipe") {
89 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"LMT") {
90 m_lmtLocAngle.push_back(parameters->fwdCylinderServiceLocAngle(iLoc));
92 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"LMTCooling") {
95 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"Fibres") {
96 m_fibreLocAngle.push_back(parameters->fwdCylinderServiceLocAngle(iLoc));
98 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"NPipe") {
99 m_nPipeLocAngle.push_back(parameters->fwdCylinderServiceLocAngle(iLoc));
101 if (parameters->fwdCylinderServiceLocName(iLoc) ==
"Rail") {
102 m_railLocAngle.push_back(parameters->fwdCylinderServiceLocAngle(iLoc));
107 double lmtCoolingZStart = 0.5 * (parameters->fwdWheelZPosition(1) + parameters->fwdWheelZPosition(2));
118 const GeoLogVol * cylinderLog =
new GeoLogVol(
getName(), cylinderShape,
m_materials->gasMaterial());
119 GeoPhysVol * cylinder =
new GeoPhysVol(cylinderLog);
135 const GeoCons* coolingShape =
new GeoCons(coolingRmin, coolingRmin, coolingRmax1, coolingRmax2,
137 -0.5 * coolingDPhi * Gaudi::Units::radian, coolingDPhi * Gaudi::Units::radian);
138 const GeoLogVol * coolingLog =
new GeoLogVol(
"CoolingPipe", coolingShape,
m_materials->getMaterialForVolume(
m_coolingMaterialName, coolingShape->volume()));
139 GeoPhysVol * coolingPipe =
new GeoPhysVol(coolingLog);
146 const GeoCons* lmtShape =
new GeoCons(lmtRmin, lmtRmin, lmtRmax1, lmtRmax2, 0.5 *
m_length,
147 -0.5 * lmtDPhi * Gaudi::Units::radian, lmtDPhi * Gaudi::Units::radian);
149 GeoPhysVol * lmt =
new GeoPhysVol(lmtLog);
152 double lmtCoolingRmin = lmtRmax2;
156 const GeoTubs* lmtCoolingShape =
new GeoTubs(lmtCoolingRmin, lmtCoolingRmax, 0.5 * lmtLength,
157 -0.5 * lmtCoolingDPhi * Gaudi::Units::radian, lmtCoolingDPhi * Gaudi::Units::radian);
159 GeoPhysVol * lmtCooling =
new GeoPhysVol(lmtCoolingLog);
166 const GeoCons* fibreShape =
new GeoCons(fibreRmin, fibreRmin, fibreRmax1, fibreRmax2, 0.5 *
m_length,
167 -0.5 * fibreDPhi * Gaudi::Units::radian, fibreDPhi * Gaudi::Units::radian);
169 GeoPhysVol * fibres =
new GeoPhysVol(fibreLog);
175 const GeoTubs* nPipeShape =
new GeoTubs(nPipeRmin, nPipeRmax, 0.5 *
m_length,
176 -0.5 * nPipeDPhi * Gaudi::Units::radian, nPipeDPhi * Gaudi::Units::radian);
178 GeoPhysVol * nPipe =
new GeoPhysVol(nPipeLog);
181 double railRmin = std::max(coolingRmax2, nPipeRmax);
184 const GeoTubs* railShape =
new GeoTubs(railRmin, railRmax,
185 0.5 *
m_length, -0.5 * railDPhi * Gaudi::Units::radian, railDPhi * Gaudi::Units::radian);
187 GeoPhysVol * rail =
new GeoPhysVol(railLog);
190 for (
int iquad = 0; iquad < 4; iquad++) {
195 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(coolingAngle)));
196 cylinder->add(coolingPipe);
200 for (
unsigned int iLoc = 0; iLoc <
m_lmtLocAngle.size(); iLoc++) {
201 double lmtAngle =
m_lmtLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
202 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)));
204 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(lmtAngle)*GeoTrf::TranslateZ3D(
m_lmtCoolingZOffset)));
205 cylinder->add(lmtCooling);
210 double fibreAngle =
m_fibreLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
211 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(fibreAngle)));
212 cylinder->add(fibres);
217 double nPipeAngle =
m_nPipeLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
218 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(nPipeAngle)));
219 cylinder->add(nPipe);
223 for (
unsigned int iLoc = 0; iLoc <
m_railLocAngle.size(); iLoc++) {
224 double railAngle =
m_railLocAngle[iLoc] + iquad * 90*Gaudi::Units::degree;
225 cylinder->add(
new GeoTransform(GeoTrf::RotateZ3D(railAngle)));