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);
140 G4VSolid* vacuumSolid;
141 G4VSolid* beamPipeSolid;
142 G4VSolid* containerSolid;
145 G4LogicalVolume* vacuumLV;
146 G4LogicalVolume* beamPipeLV;
147 G4LogicalVolume* containerLV;
148 G4PVPlacement* vacuumPV;
149 G4PVPlacement* beamPipePV;
Abstract base class for beampipe factory classes.
virtual void SetVisAttributes(G4Material *beamPipeMaterialIn)
Set visual attributes.
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 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.