42 G4double tunnelThickness,
43 G4double tunnelSoilThickness,
44 G4Material* tunnelMaterial,
45 G4Material* tunnelSoilMaterial,
47 G4double tunnelFloorOffset,
57 tunnelSoilMaterial, tunnelFloorOffset, tunnel1, tunnel2);
60 G4VSolid* tunnelOuterSolid =
new G4Box(name +
"_tunnel_outer_solid",
61 tunnel1 + tunnelThickness,
62 tunnel2 + tunnelThickness,
65 G4VSolid* tunnelInnerSolid =
new G4Box(name +
"_tunnel_outer_solid",
71 allSolids.insert(tunnelOuterSolid);
72 allSolids.insert(tunnelInnerSolid);
74 tunnelSolid =
new G4SubtractionSolid(name +
"_tunnel_solid",
79 G4double soilInnerX = tunnel1 + tunnelThickness +
lengthSafety;
80 G4double soilInnerY = tunnel2 + tunnelThickness +
lengthSafety;
82 G4double soilOuterX = soilInnerX + tunnelSoilThickness;
83 G4double soilOuterY = soilInnerY + tunnelSoilThickness;
88 G4VSolid* soilOuterSolid =
new G4Box(name +
"_soild_outer_solid",
93 G4VSolid* soilInnerSolid =
new G4Box(name +
"_soil_outer_solid",
99 allSolids.insert(soilOuterSolid);
100 allSolids.insert(soilInnerSolid);
102 soilSolid =
new G4SubtractionSolid(name +
"_soil_solid",
107 G4VSolid* containerSolidOuter =
new G4Box(name +
"_container_outer_solid",
111 G4ThreeVector contInsideDisplacement;
112 G4VSolid* containerSolidInner =
nullptr;
117 G4double floorThickness = tunnel2 - tunnelFloorOffset -
lengthSafety;
120 floorDisplacement = G4ThreeVector(0, -(tunnelFloorOffset + floorThickness*0.5), 0);
121 floorSolid =
new G4Box(name +
"_floor_solid",
126 G4double tunnelContInnerYRadius = tunnel2 - 0.5*floorThickness -
lengthSafety;
128 containerSolidInner =
new G4Box(name +
"_tunnel_cont_solid_inner",
130 tunnelContInnerYRadius,
134 contInsideDisplacement = G4ThreeVector(0, floorThickness*0.5, 0);
138 containerSolidInner =
new G4Box(name +
"_tunnel_cont_solid_inner",
142 contInsideDisplacement = G4ThreeVector(0,0,0);
145 containerSolid =
new G4SubtractionSolid(name +
"_tunnel_cont_solid",
149 contInsideDisplacement);
151 CommonConstruction(name, tunnelMaterial, tunnelSoilMaterial, length, containerX, containerY, visible);
153 return tunnelSection;
159 G4ThreeVector inputFace,
160 G4ThreeVector outputFace,
161 G4double tunnelThickness,
162 G4double tunnelSoilThickness,
163 G4Material* tunnelMaterial,
164 G4Material* tunnelSoilMaterial,
166 G4double tunnelFloorOffset,
176 tunnelSoilMaterial, tunnelFloorOffset, tunnel1, tunnel2);
181 G4double intersectionRadius = ( std::max(tunnel1,tunnel2) + tunnelThickness + tunnelSoilThickness ) * 3;
182 G4VSolid* faceSolid =
new G4CutTubs(name +
"_face_intersection_solid",
193 G4VSolid* tunnelOuterSolid =
new G4Box(name +
"_tunnel_outer_solid",
194 tunnel1 + tunnelThickness,
195 tunnel2 + tunnelThickness,
198 G4VSolid* tunnelInnerSolid =
new G4Box(name +
"_tunnel_outer_solid",
203 G4VSolid* tunnelSolidUnAngled =
new G4SubtractionSolid(name +
"_tunnel_square_solid",
208 allSolids.insert(faceSolid);
209 allSolids.insert(tunnelOuterSolid);
210 allSolids.insert(tunnelInnerSolid);
211 allSolids.insert(tunnelSolidUnAngled);
214 tunnelSolid =
new G4IntersectionSolid(name +
"_tunnel_solid",
219 G4double soilInnerX = tunnel1 + tunnelThickness +
lengthSafety;
220 G4double soilInnerY = tunnel2 + tunnelThickness +
lengthSafety;
222 G4double soilOuterX = soilInnerX + tunnelSoilThickness;
223 G4double soilOuterY = soilInnerY + tunnelSoilThickness;
228 G4VSolid* soilOuterSolid =
new G4Box(name +
"_soil_outer_solid",
233 G4VSolid* soilInnerSolid =
new G4Box(name +
"_soil_inner_solid",
239 G4VSolid* soilSolidUnAngled =
new G4SubtractionSolid(name +
"_soil_square_solid",
244 allSolids.insert(soilOuterSolid);
245 allSolids.insert(soilInnerSolid);
246 allSolids.insert(soilSolidUnAngled);
249 soilSolid =
new G4IntersectionSolid(name +
"_soil_soild",
255 G4VSolid* containerSolidOuter =
new G4Box(name +
"_container_outer_solid",
259 G4ThreeVector contInsideDisplacement;
260 G4VSolid* containerSolidInner =
nullptr;
261 G4VSolid* containerSolidSquare =
nullptr;
263 allSolids.insert(containerSolidOuter);
268 G4double floorThickness = tunnel2 - tunnelFloorOffset -
lengthSafety;
271 floorDisplacement = G4ThreeVector(0, -(tunnelFloorOffset + floorThickness*0.5), 0);
273 G4VSolid* floorSolidSquare =
new G4Box(name +
"_floor_box_solid",
278 floorSolid =
new G4IntersectionSolid(name +
"_floor_solid",
282 allSolids.insert(floorSolidSquare);
285 G4double tunnelContInnerYRadius = ( tunnelFloorOffset + tunnel2 ) * 0.5;
286 containerSolidInner =
new G4Box(name +
"_tunnel_cont_solid_inner",
288 tunnelContInnerYRadius,
292 contInsideDisplacement = G4ThreeVector(0, -(tunnelContInnerYRadius - tunnel2), 0);
296 containerSolidInner =
new G4Box(name +
"_tunnel_cont_solid_inner",
300 contInsideDisplacement = G4ThreeVector(0,0,0);
303 containerSolidSquare =
new G4SubtractionSolid(name +
"_container_square_solid",
307 contInsideDisplacement);
309 containerSolid =
new G4IntersectionSolid(name +
"_container_solid",
310 containerSolidSquare,
313 CommonConstruction(name, tunnelMaterial, tunnelSoilMaterial, length, containerX,
314 containerY, visible);
316 return tunnelSection;
321 G4double& tunnelThickness,
322 G4double& tunnelSoilThickness,
323 G4Material*& tunnelMaterial,
324 G4Material*& tunnelSoilMaterial,
325 G4double& tunnelFloorOffset,
331 if (tunnelFloorOffset < 1e-10)
332 {tunnelFloorOffset = defaultModel->floorOffset;}
335 {tunnel1 = defaultModel->
aper1;}
338 {tunnel2 = defaultModel->
aper2;}
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.