19#include "BDSBeamPipeFactoryCircular.hh"
20#include "BDSBeamPipe.hh"
21#include "BDSExtent.hh"
22#include "BDSUtilities.hh"
25#include "G4CutTubs.hh"
26#include "G4LogicalVolume.hh"
27#include "G4SubtractionSolid.hh"
28#include "G4ThreeVector.hh"
36BDSBeamPipeFactoryCircular::BDSBeamPipeFactoryCircular()
45 G4Material* vacuumMaterialIn,
46 G4double beamPipeThicknessIn,
47 G4Material* beamPipeMaterialIn,
55 vacuumSolid =
new G4Tubs(nameIn +
"_vacuum_solid",
62 beamPipeSolid =
new G4Tubs(nameIn +
"_pipe_solid",
70 containerSolid =
new G4Tubs(nameIn +
"_container_solid",
78 lengthIn, containerRadius);
83 const G4ThreeVector& inputFaceNormalIn,
84 const G4ThreeVector& outputFaceNormalIn,
89 G4Material* vacuumMaterialIn,
90 G4double beamPipeThicknessIn,
91 G4Material* beamPipeMaterialIn,
100 G4double containerRadius = 0;
105 lengthIn, containerRadius);
111 G4Material* vacuumMaterialIn,
112 G4Material* beamPipeMaterialIn,
114 G4double containerRadiusIn)
126 beamPipeMaterialIn, lengthIn);
140 G4double beamPipeThicknessIn,
141 const G4ThreeVector& inputfaceIn,
142 const G4ThreeVector& outputfaceIn,
143 G4double& containerRadius)
154 containerSolid =
new G4CutTubs(nameIn +
"_container_solid",
164 vacuumSolid =
new G4CutTubs(nameIn +
"_vacuum_solid",
176 G4VSolid* inner =
new G4CutTubs(nameIn +
"_pipe_inner_solid",
185 G4VSolid* outer =
new G4CutTubs(nameIn +
"_pipe_outer_solid",
187 aper1In + extraWidth,
193 allSolids.insert(inner);
194 allSolids.insert(outer);
196 beamPipeSolid =
new G4SubtractionSolid(nameIn +
"_pipe_solid",
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
static void CheckAngledVolumeCanBeBuilt(G4double length, const G4ThreeVector &inputfaceAngle, const G4ThreeVector &outputfaceAngle, G4double horizontalWidth, const G4String &name)
check if a beam pipe volume with angled faces can be constructed
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
void CreateGeneralAngledSolids(const G4String &nameIn, G4double lengthIn, G4double aper1In, G4double beamPipeThicknessIn, const G4ThreeVector &inputfaceIn, const G4ThreeVector &outputfaceIn, G4double &containerRadius)
Pass containerRadius by reference to update.
BDSBeamPipe * CommonFinalConstruction(const G4String &nameIn, G4Material *vacuumMaterialIn, G4Material *beamPipeMaterialIn, G4double lengthIn, G4double containerRadiusIn)
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.
G4double CalculateSafeAngledVolumeLength(G4double angleIn, G4double angleOut, G4double length, G4double containerWidth, G4double containerHeight=0)
Calculate safe length of an angled volume so it fills the length of its container.