00001 #ifndef BDSBEAMPIPEFACTORYLHCDETAILED_H
00002 #define BDSBEAMPIPEFACTORYLHCDETAILED_H
00003
00004 #include "BDSBeamPipeFactoryBase.hh"
00005 #include "BDSBeamPipe.hh"
00006
00015 class BDSBeamPipeFactoryLHCDetailed: public BDSBeamPipeFactoryBase
00016 {
00017 public:
00018 static BDSBeamPipeFactoryLHCDetailed* Instance();
00019
00020 virtual ~BDSBeamPipeFactoryLHCDetailed();
00021
00023 G4double GetFullWidthOfCoolingPipe();
00024
00026 virtual void CleanUp();
00027
00028 virtual BDSBeamPipe* CreateBeamPipe(G4String nameIn,
00029 G4double lengthIn,
00030 G4double aper1 = 0,
00031 G4double aper2 = 0,
00032 G4double aper3 = 0,
00033 G4double aper4 = 0,
00034 G4Material* vacuumMaterialIn = NULL,
00035 G4double beamPipeThicknessIn = 0,
00036 G4Material* beamPipeMaterialIn = NULL
00037 );
00038
00039 virtual BDSBeamPipe* CreateBeamPipeAngledInOut(G4String nameIn,
00040 G4double lengthIn,
00041 G4double angleInIn,
00042 G4double angleOutIn,
00043 G4double aper1 = 0,
00044 G4double aper2 = 0,
00045 G4double aper3 = 0,
00046 G4double aper4 = 0,
00047 G4Material* vacuumMaterialIn = NULL,
00048 G4double beamPipeThicknessIn = 0,
00049 G4Material* beamPipeMaterialIn = NULL
00050 );
00051
00052 private:
00053 BDSBeamPipeFactoryLHCDetailed();
00054 static BDSBeamPipeFactoryLHCDetailed* _instance;
00055
00056 void TestInputParameters(G4Material*& vacuumMaterialIn,
00057 G4double& beamPipeThicknessIn,
00058 G4Material*& beamPipeMaterialIn,
00059 G4double& aper1In,
00060 G4double& aper2In,
00061 G4double& aper3In);
00062
00063
00064
00065
00066 BDSBeamPipe* CommonFinalConstruction(G4String name,
00067 G4Material* vacuumMaterial,
00068 G4Material* beamPipeMaterial,
00069 G4double length,
00070 G4double containerRadius);
00071 G4double CreateGeneralAngledSolids(G4String name,
00072 G4double length,
00073 G4ThreeVector inputface,
00074 G4ThreeVector outputface);
00075
00076 virtual void BuildLogicalVolumes(G4String nameIn,
00077 G4Material* vacuumMaterialIn,
00078 G4Material* beamPipeMaterialIn);
00079 virtual void SetVisAttributes();
00080 virtual G4UserLimits* SetUserLimits(G4double lengthIn);
00081 virtual void PlaceComponents(G4String nameIn);
00082
00084 void InitialiseGeometricalParameters();
00085
00088 void CalculateGeometricalParameters(G4double aper1,
00089 G4double aper2,
00090 G4double aper3,
00091 G4double beamPipeThickness,
00092 G4double length);
00093
00094 G4VSolid* copperSkinSolid;
00095 G4VSolid* screenSolid;
00096 G4VSolid* coolingPipeSolid;
00097 G4LogicalVolume* copperSkinLV;
00098 G4LogicalVolume* screenLV;
00099 G4LogicalVolume* coolingPipeLV;
00100
00101
00102 G4double coldBoreThickness;
00103 G4double coolingPipeThickness;
00104 G4double coolingPipeRadius;
00105 G4double copperSkinThickness;
00106
00107
00108
00109 G4double vacRadius, vacBoxX, vacBoxY;
00110
00111
00112 G4double cuInnerRadius, cuInnerBoxX, cuInnerBoxY;
00113 G4double cuOuterRadius, cuOuterBoxX, cuOuterBoxY;
00114
00115
00116 G4double bsInnerRadius, bsInnerBoxX, bsInnerBoxY;
00117 G4double bsOuterRadius, bsOuterBoxX, bsOuterBoxY;
00118
00119
00120 G4double cbInnerRadius, cbOuterRadius;
00121
00122
00123 G4double containerRadius;
00124
00125
00126 G4double vacHalfLength;
00127 G4double halfLength;
00128
00129
00130 G4double coolingPipeYOffset;
00131
00132 };
00133
00134 #endif