43 G4double tunnelThickness,
44 G4double tunnelSoilThickness,
45 G4Material* tunnelMaterial,
46 G4Material* tunnelSoilMaterial,
48 G4double tunnelFloorOffset,
58 tunnelSoilMaterial, tunnelFloorOffset, tunnel1);
61 tunnelSolid =
new G4Tubs(name +
"_tunnel_solid",
63 tunnel1 + tunnelThickness,
68 G4double soilInnerR = tunnel1 + tunnelThickness +
lengthSafety;
69 G4double soilOuterR = soilInnerR + tunnelSoilThickness;
70 soilSolid =
new G4Tubs(name +
"_soil_solid",
82 G4double floorBoxRadius = 1.5*tunnel1;
84 G4double floorBoxDisplacement = tunnelFloorOffset + floorBoxRadius +
lengthSafety;
86 G4VSolid* floorCylinder =
new G4Tubs(name +
"_floor_cylinder_solid",
93 G4VSolid* floorBox =
new G4Box(name +
"_floor_box_solid",
99 floorSolid =
new G4IntersectionSolid(name +
"_floor_solid",
103 G4ThreeVector(0,-floorBoxDisplacement,0));
111 G4VSolid* floorContainerCylinder =
new G4Tubs(name +
"_floor_cont_cyl_solid",
118 G4VSolid* floorContainerBox =
new G4Box(name +
"_floor_cont_box_solid",
126 G4double floorBoxContDisp = floorBoxDisplacement -
lengthSafety;
127 G4VSolid* floorContainerSolid =
new G4IntersectionSolid(name +
"_floor_cont_solid",
128 floorContainerCylinder,
131 G4ThreeVector(0,-floorBoxContDisp,0));
133 G4VSolid* tunnelContainerSolid =
new G4Tubs(name +
"_tunnel_solid",
140 containerSolid =
new G4UnionSolid(name +
"_container_solid",
141 tunnelContainerSolid,
142 floorContainerSolid);
146 containerSolid =
new G4Tubs(name +
"_tunnel_container_solid",
154 CommonConstruction(name, tunnelMaterial, tunnelSoilMaterial, length, containerRadius, containerRadius, visible);
156 return tunnelSection;
162 G4ThreeVector inputFace,
163 G4ThreeVector outputFace,
164 G4double tunnelThickness,
165 G4double tunnelSoilThickness,
166 G4Material* tunnelMaterial,
167 G4Material* tunnelSoilMaterial,
169 G4double tunnelFloorOffset,
179 tunnelSoilMaterial, tunnelFloorOffset, tunnel1);
182 tunnelSolid =
new G4CutTubs(name +
"_tunnel_solid",
184 tunnel1 + tunnelThickness,
191 G4double soilInnerR = tunnel1 + tunnelThickness +
lengthSafety;
192 G4double soilOuterR = soilInnerR + tunnelSoilThickness;
193 soilSolid =
new G4CutTubs(name +
"_soil_solid",
208 G4double floorBoxRadius = 1.5*tunnel1;
210 G4double floorBoxDisplacement = tunnelFloorOffset + floorBoxRadius +
lengthSafety;
212 G4VSolid* floorCylinder =
new G4CutTubs(name +
"_floor_cylinder_solid",
221 G4VSolid* floorBox =
new G4Box(name +
"_floor_box_solid",
228 allSolids.insert(floorCylinder);
229 allSolids.insert(floorBox);
231 floorSolid =
new G4IntersectionSolid(name +
"_floor_solid",
235 G4ThreeVector(0,-floorBoxDisplacement,0));
238 G4VSolid* floorContainerCylinder =
new G4CutTubs(name +
"_floor_cont_cyl_solid",
247 G4VSolid* floorContainerBox =
new G4Box(name +
"_floor_cont_box_solid",
254 allSolids.insert(floorContainerCylinder);
255 allSolids.insert(floorContainerBox);
259 G4double floorBoxContDisp = floorBoxDisplacement -
lengthSafety;
260 G4VSolid* floorContainerSolid =
new G4IntersectionSolid(name +
"_floor_cont_solid",
261 floorContainerCylinder,
264 G4ThreeVector(0,-floorBoxContDisp,0));
266 G4VSolid* tunnelContainerSolid =
new G4CutTubs(name +
"_tunnel_solid",
276 allSolids.insert(floorContainerSolid);
277 allSolids.insert(tunnelContainerSolid);
279 containerSolid =
new G4UnionSolid(name +
"_container_solid",
280 tunnelContainerSolid,
281 floorContainerSolid);
283 G4VSolid* intersectionSolidCylinder =
new G4CutTubs(name +
"_int_cyl_solid",
291 allSolids.insert(intersectionSolidCylinder);
293 intersectionSolid =
new G4SubtractionSolid(name +
"_intersection_solid",
294 intersectionSolidCylinder,
301 containerSolid =
new G4CutTubs(name +
"_tunnel_container_solid",
310 intersectionSolid =
new G4CutTubs(name +
"_tunnel_intersection_solid",
320 CommonConstruction(name, tunnelMaterial, tunnelSoilMaterial, length, containerRadius,
321 containerRadius, visible);
323 return tunnelSection;
328 G4double& tunnelThickness,
329 G4double& tunnelSoilThickness,
330 G4Material*& tunnelMaterial,
331 G4Material*& tunnelSoilMaterial,
332 G4double& tunnelFloorOffset,
337 if (tunnelFloorOffset < 1e-10)
338 {tunnelFloorOffset = defaultModel->floorOffset;}
341 {tunnel1 = defaultModel->
aper1;}
virtual BDSTunnelSection * CreateTunnelSection(G4String name, G4double length, G4double tunnelThickness, G4double tunnelSoilThickness, G4Material *tunnelMaterial, G4Material *tunnelSoilMaterial, G4bool tunnelFloor, G4double tunnelFloorOffset, G4double tunnel1, G4double tunnel2, G4bool visible)
Create a tunnel section with flat input and output faces.
virtual BDSTunnelSection * CreateTunnelSectionAngled(G4String name, G4double length, G4ThreeVector inputFace, G4ThreeVector outputFace, G4double tunnelThickness, G4double tunnelSoilThickness, G4Material *tunnelMaterial, G4Material *tunnelSoilMaterial, G4bool tunnelFloor, G4double tunnelFloorOffset, G4double tunnel1, G4double tunnel2, G4bool visible)
Create a tunnel section with an angled input and output face.
void TestInputParameters(G4double &length, G4double &tunnelThickness, G4double &tunnelSoilThickness, G4Material *&tunnelMaterial, G4Material *&tunnelSoildMaterial, G4double &tunnelFloorOffset, G4double &tunnel1)
functions below here are private to this particular factory