19#ifndef BDSBEAMPIPEFACTORYBASE_H
20#define BDSBEAMPIPEFACTORYBASE_H
22#include "BDSBeamPipe.hh"
23#include "BDSFactoryBase.hh"
26#include "G4RotationMatrix.hh"
67 G4Material* vacuumMaterialIn =
nullptr,
68 G4double beamPipeThicknessIn = 0,
69 G4Material* beamPipeMaterialIn =
nullptr,
70 const G4String& pointsFileIn =
"",
71 const G4String& pointsUnitIn =
""
79 const G4ThreeVector& inputFaceNormalIn,
80 const G4ThreeVector& outputFaceNormalIn,
85 G4Material* vacuumMaterialIn =
nullptr,
86 G4double beamPipeThicknessIn = 0,
87 G4Material* beamPipeMaterialIn =
nullptr,
88 const G4String& pointsFileIn =
"",
89 const G4String& pointsUnitIn =
"") = 0;
102 virtual void CleanUp();
106 G4Material* vacuumMaterialIn,
107 G4Material* beamPipeMaterialIn,
112 G4double containerRadius,
113 G4bool containerIsCircular =
false);
117 const G4ThreeVector &inputfaceAngle,
118 const G4ThreeVector &outputfaceAngle,
119 G4double horizontalWidth,
120 const G4String& name);
126 G4Material* vacuumMaterialIn,
127 G4Material* beamPipeMaterialIn);
130 G4Material* vacuumMaterialIn);
141 G4VSolid* vacuumSolid;
142 G4VSolid* beamPipeSolid;
143 G4VSolid* containerSolid;
146 G4LogicalVolume* vacuumLV;
147 G4LogicalVolume* beamPipeLV;
148 G4LogicalVolume* containerLV;
149 G4PVPlacement* vacuumPV;
150 G4PVPlacement* beamPipePV;
Abstract base class for beampipe factory classes.
G4ThreeVector outputFaceNormal
For recording the face normals in the finished pipe component.
G4bool storeApertureImpacts
Whether to store aperture impacts.
BDSBeamPipeFactoryBase()
base constructor
virtual void BuildLogicalVolumes(const G4String &nameIn, G4Material *vacuumMaterialIn, G4Material *beamPipeMaterialIn)
build logical volumes
virtual void SetVisAttributes(G4Material *beamPipeMaterialIn, G4Material *vacuumMaterialIn)
Set visual attributes.
virtual BDSBeamPipe * CreateBeamPipe(const G4String &nameIn, G4double lengthIn, const G4ThreeVector &inputFaceNormalIn, const G4ThreeVector &outputFaceNormalIn, 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="")=0
G4ThreeVector inputFaceNormal
For recording the face normals in the finished pipe component.
virtual ~BDSBeamPipeFactoryBase()
Virtual base destructor.
void CommonConstruction(const G4String &nameIn, G4Material *vacuumMaterialIn, G4Material *beamPipeMaterialIn, G4double length)
finalise beampipe construction
G4bool sensitiveVacuum
Whether the vacuum will record any energy deposition.
BDSBeamPipe * BuildBeamPipeAndRegisterVolumes(BDSExtent extent, G4double containerRadius, G4bool containerIsCircular=false)
build beampipe and register logical volumes
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="")=0
create a flat ended beampipe
virtual void PlaceComponents(const G4String &nameIn)
Place volumes.
G4bool sensitiveBeamPipe
Whether the beam pipe will record energy deposition.
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 void SetUserLimits(G4double length)
Set user limits.
A holder class for a piece of beam pipe geometry.
Holder for +- extents in 3 dimensions.
Common temporary storage for all factories no matter what geometry.