19#include "BDSBeamPipeFactoryBase.hh"
20#include "BDSBeamPipeFactoryLHC.hh"
21#include "BDSBeamPipe.hh"
22#include "BDSExtent.hh"
26#include "G4CutTubs.hh"
27#include "G4IntersectionSolid.hh"
28#include "G4LogicalVolume.hh"
29#include "G4SubtractionSolid.hh"
30#include "G4ThreeVector.hh"
38BDSBeamPipeFactoryLHC::BDSBeamPipeFactoryLHC()
47 G4Material* vacuumMaterialIn,
48 G4double beamPipeThicknessIn,
49 G4Material* beamPipeMaterialIn,
58 G4VSolid* vacCylSolid =
new G4Tubs(nameIn +
"_vacuum_cylinder",
65 G4VSolid* vacRectSolid =
new G4Box(nameIn +
"_vacuum_box",
69 allSolids.insert(vacCylSolid);
70 allSolids.insert(vacRectSolid);
72 vacuumSolid =
new G4IntersectionSolid(nameIn +
"_vacuum_solid",
78 G4VSolid* bpInnerCylSolid =
new G4Tubs(nameIn +
"_pipe_inner_cylinder",
85 G4VSolid* bpInnerRectSolid =
new G4Box(nameIn +
"_pipe_inner_box",
90 G4VSolid* bpInnerSolid =
new G4IntersectionSolid(nameIn +
"_pipe_inner_solid",
96 G4VSolid* bpOuterCylSolid =
new G4Tubs(nameIn +
"_pipe_inner_cylinder",
103 G4VSolid* bpOuterRectSolid =
new G4Box(nameIn +
"_pipe_inner_box",
104 aper1In + extraWidth,
105 aper2In + extraWidth,
107 G4VSolid* bpOuterSolid =
new G4IntersectionSolid(nameIn +
"_pipe_inner_solid",
110 allSolids.insert(bpInnerCylSolid);
111 allSolids.insert(bpInnerRectSolid);
112 allSolids.insert(bpInnerSolid);
113 allSolids.insert(bpOuterCylSolid);
114 allSolids.insert(bpOuterRectSolid);
115 allSolids.insert(bpOuterSolid);
117 beamPipeSolid =
new G4SubtractionSolid(nameIn +
"_pipe_solid",
122 G4VSolid* contCylSolid =
new G4Tubs(nameIn +
"_vacuum_cylinder",
129 G4VSolid* contRectSolid =
new G4Box(nameIn +
"_vacuum_box",
134 allSolids.insert(contCylSolid);
135 allSolids.insert(contRectSolid);
137 containerSolid =
new G4IntersectionSolid(nameIn +
"_vacuum_solid",
151 const G4ThreeVector& inputFaceNormalIn,
152 const G4ThreeVector& outputFaceNormalIn,
157 G4Material* vacuumMaterialIn,
158 G4double beamPipeThicknessIn,
159 G4Material* beamPipeMaterialIn,
175 aper1In, aper2In, aper3In);
178 lengthIn, width, height);
182 G4Material* vacuumMaterialIn,
183 G4Material* beamPipeMaterialIn,
185 G4double containerWidthIn,
186 G4double containerHeightIn)
189 beamPipeMaterialIn, lengthIn);
206 G4double beamPipeThicknessIn,
207 const G4ThreeVector& inputfaceIn,
208 const G4ThreeVector& outputfaceIn)
212 G4VSolid* vacCylSolid =
new G4CutTubs(nameIn +
"_vacuum_cylinder",
221 G4VSolid* vacRectSolid =
new G4Box(nameIn +
"_vacuum_box",
225 allSolids.insert(vacCylSolid);
226 allSolids.insert(vacRectSolid);
228 vacuumSolid =
new G4IntersectionSolid(nameIn +
"_vacuum_solid",
234 G4VSolid* bpInnerCylSolid =
new G4CutTubs(nameIn +
"_pipe_inner_cylinder",
244 G4VSolid* bpInnerRectSolid =
new G4Box(nameIn +
"_pipe_inner_box",
249 G4VSolid* bpInnerSolid =
new G4IntersectionSolid(nameIn +
"_pipe_inner_solid",
255 G4VSolid* bpOuterCylSolid =
new G4CutTubs(nameIn +
"_pipe_inner_cylinder",
257 aper3In + extraWidth,
265 G4VSolid* bpOuterRectSolid =
new G4Box(nameIn +
"_pipe_inner_box",
266 aper1In + beamPipeThicknessIn,
267 aper2In + beamPipeThicknessIn,
269 G4VSolid* bpOuterSolid =
new G4IntersectionSolid(nameIn +
"_pipe_inner_solid",
273 allSolids.insert(bpInnerCylSolid);
274 allSolids.insert(bpInnerRectSolid);
275 allSolids.insert(bpInnerSolid);
276 allSolids.insert(bpOuterCylSolid);
277 allSolids.insert(bpOuterRectSolid);
278 allSolids.insert(bpOuterSolid);
280 beamPipeSolid =
new G4SubtractionSolid(nameIn +
"_pipe_solid",
285 G4VSolid* contCylSolid =
new G4CutTubs(nameIn +
"_vacuum_cylinder",
295 G4VSolid* contRectSolid =
new G4Box(nameIn +
"_vacuum_box",
300 allSolids.insert(contCylSolid);
301 allSolids.insert(contRectSolid);
303 containerSolid =
new G4IntersectionSolid(nameIn +
"_vacuum_solid",
310 G4double& beamPipeThicknessIn,
316 G4VSolid* contSubCylSolid =
new G4Tubs(nameIn +
"_subtraction_cylinder",
323 G4VSolid* contSubRectSolid =
new G4Box(nameIn +
"_subtraction_box",
327 allSolids.insert(contSubCylSolid);
328 allSolids.insert(contSubRectSolid);
G4ThreeVector outputFaceNormal
For recording the face normals in the finished pipe component.
G4ThreeVector inputFaceNormal
For recording the face normals in the finished pipe component.
void CommonConstruction(const G4String &nameIn, G4Material *vacuumMaterialIn, G4Material *beamPipeMaterialIn, G4double length)
finalise beampipe construction
BDSBeamPipe * BuildBeamPipeAndRegisterVolumes(BDSExtent extent, G4double containerRadius, G4bool containerIsCircular=false)
build beampipe and register logical volumes
G4VSolid * containerSubtractionSolid
Longer (in length) version of container solid for unambiguous subtraction.
virtual BDSBeamPipe * CreateBeamPipe(const G4String &nameIn, G4double lengthIn, G4double aper1=0, G4double aper2=0, G4double aper3=0, G4double aper4=0, G4Material *vacuumMaterialIn=nullptr, G4double beamPipeThicknessIn=0, G4Material *beamPipeMaterialIn=nullptr, const G4String &pointsFileIn="", const G4String &pointsUnitIn="")
create a flat ended beampipe
BDSBeamPipe * CommonFinalConstruction(const G4String &nameIn, G4Material *vacuumMaterialIn, G4Material *beamPipeMaterialIn, G4double lengthIn, G4double widthIn, G4double heightIn)
void CreateContainerSubtractionSolid(const G4String &nameIn, G4double &lengthIn, G4double &beamPipeThicknessIn, G4double &aper1In, G4double &aper2In, G4double &aper3In)
function to create the container subtraction solid and avoid passing aper1,2,3 around further
void CreateGeneralAngledSolids(const G4String &nameIn, G4double lengthIn, G4double aper1In, G4double aper2In, G4double aper3In, G4double beamPipeThicknessIn, const G4ThreeVector &inputfaceIn, const G4ThreeVector &outputfaceIn)
A holder class for a piece of beam pipe geometry.
Holder for +- extents in 3 dimensions.
G4double lengthSafety
Cache of global constants variable.
G4double lengthSafetyLarge
Cache of global constants variable.