00001 #ifndef BDSMAGNETOUTERFACTORYCYLINDRICAL_H
00002 #define BDSMAGNETOUTERFACTORYCYLINDRICAL_H
00003
00004 #include "BDSGeometryComponent.hh"
00005 #include "BDSMagnetOuterFactoryBase.hh"
00006 #include "BDSBeamPipe.hh"
00007
00008 #include "globals.hh"
00009 #include "G4Colour.hh"
00010 #include "G4Material.hh"
00011 #include "G4VSolid.hh"
00012
00013 class BDSMagnetOuterFactoryCylindrical: public BDSMagnetOuterFactoryBase
00014 {
00015 public:
00016 static BDSMagnetOuterFactoryCylindrical* Instance();
00017
00018 ~BDSMagnetOuterFactoryCylindrical();
00019
00021 virtual BDSGeometryComponent* CreateSectorBend(G4String name,
00022 G4double length,
00023 BDSBeamPipe* beamPipe,
00024 G4double boxSize,
00025 G4double angle,
00026 G4Material* outerMaterial = NULL
00027 );
00028
00030 virtual BDSGeometryComponent* CreateRectangularBend(G4String name,
00031 G4double length,
00032 BDSBeamPipe* beamPipe,
00033 G4double boxSize,
00034 G4double angle,
00035 G4Material* outerMaterial = NULL
00036 );
00037
00039 virtual BDSGeometryComponent* CreateQuadrupole(G4String name,
00040 G4double length,
00041 BDSBeamPipe* beamPipe,
00042 G4double boxSize,
00043 G4Material* outerMaterial = NULL
00044 );
00045
00046
00048 virtual BDSGeometryComponent* CreateSextupole(G4String name,
00049 G4double length,
00050 BDSBeamPipe* beamPipe,
00051 G4double boxSize,
00052 G4Material* outerMaterial = NULL
00053 );
00054
00056 virtual BDSGeometryComponent* CreateOctupole(G4String name,
00057 G4double length,
00058 BDSBeamPipe* beamPipe,
00059 G4double boxSize,
00060 G4Material* outerMaterial = NULL
00061 );
00062
00064 virtual BDSGeometryComponent* CreateDecapole(G4String name,
00065 G4double length,
00066 BDSBeamPipe* beamPipe,
00067 G4double boxSize,
00068 G4Material* outerMaterial = NULL
00069 );
00070
00072 virtual BDSGeometryComponent* CreateSolenoid(G4String name,
00073 G4double length,
00074 BDSBeamPipe* beamPipe,
00075 G4double boxSize,
00076 G4Material* outerMaterial = NULL
00077 );
00078
00080 virtual BDSGeometryComponent* CreateMultipole(G4String name,
00081 G4double length,
00082 BDSBeamPipe* beamPipe,
00083 G4double boxSize,
00084 G4Material* outerMaterial = NULL
00085 );
00086
00088 virtual BDSGeometryComponent* CreateRfCavity(G4String name,
00089 G4double length,
00090 BDSBeamPipe* beamPipe,
00091 G4double boxSize,
00092 G4Material* outerMaterial = NULL
00093 );
00094
00096 virtual BDSGeometryComponent* CreateMuSpoiler(G4String name,
00097 G4double length,
00098 BDSBeamPipe* beamPipe,
00099 G4double boxSize,
00100 G4Material* outerMaterial = NULL
00101 );
00102
00104 virtual BDSGeometryComponent* CreateKicker(G4String name,
00105 G4double length,
00106 BDSBeamPipe* beamPipe,
00107 G4double boxSize,
00108 G4bool vertical = true,
00109 G4Material* outerMaterial = NULL
00110 );
00111
00112 private:
00113 BDSMagnetOuterFactoryCylindrical();
00114 static BDSMagnetOuterFactoryCylindrical* _instance;
00115
00116
00117
00118 void CreateCylindricalSolids(G4String name,
00119 G4double length,
00120 BDSBeamPipe* beamPipe,
00121 G4double boxSize);
00122
00124 BDSGeometryComponent* CommonFinalConstructor(G4String name,
00125 G4double length,
00126 G4double boxSize,
00127 G4Material* outerMaterial,
00128 G4Colour* colour);
00129
00131 void TestInputParameters(BDSBeamPipe* beamPipe,
00132 G4double& boxSizeIn,
00133 G4Material*& outerMaterialIn);
00134
00135 };
00136
00137 #endif