00001 #ifndef BDSMAGNETOUTERFACTORY_H
00002 #define BDSMAGNETOUTERFACTORY_H
00003
00004 #include "BDSGeometryComponent.hh"
00005
00006 #include "BDSBeamPipe.hh"
00007 #include "BDSMagnetOuterFactoryBase.hh"
00008 #include "BDSMagnetGeometryType.hh"
00009
00010 #include "globals.hh"
00011 #include "G4Material.hh"
00012
00013 class BDSMagnetOuterFactory
00014 {
00015 public:
00016 static BDSMagnetOuterFactory* Instance();
00017
00018 ~BDSMagnetOuterFactory();
00019
00021 virtual BDSGeometryComponent* CreateSectorBend(BDSMagnetGeometryType magnetType,
00022 G4String name,
00023 G4double length,
00024 BDSBeamPipe* beamPipe,
00025 G4double boxSize,
00026 G4double angle,
00027 G4Material* outerMaterial = NULL
00028 );
00029
00031 virtual BDSGeometryComponent* CreateRectangularBend(BDSMagnetGeometryType magnetType,
00032 G4String name,
00033 G4double length,
00034 BDSBeamPipe* beamPipe,
00035 G4double boxSize,
00036 G4double angle,
00037 G4Material* outerMaterial = NULL
00038 );
00039
00041 virtual BDSGeometryComponent* CreateQuadrupole(BDSMagnetGeometryType magnetType,
00042 G4String name,
00043 G4double length,
00044 BDSBeamPipe* beamPipe,
00045 G4double boxSize,
00046 G4Material* outerMaterial = NULL
00047 );
00048
00049
00051 virtual BDSGeometryComponent* CreateSextupole(BDSMagnetGeometryType magnetType,
00052 G4String name,
00053 G4double length,
00054 BDSBeamPipe* beamPipe,
00055 G4double boxSize,
00056 G4Material* outerMaterial = NULL
00057 );
00058
00060 virtual BDSGeometryComponent* CreateOctupole(BDSMagnetGeometryType magnetType,
00061 G4String name,
00062 G4double length,
00063 BDSBeamPipe* beamPipe,
00064 G4double boxSize,
00065 G4Material* outerMaterial = NULL
00066 );
00067
00069 virtual BDSGeometryComponent* CreateDecapole(BDSMagnetGeometryType magnetType,
00070 G4String name,
00071 G4double length,
00072 BDSBeamPipe* beamPipe,
00073 G4double boxSize,
00074 G4Material* outerMaterial = NULL
00075 );
00076
00078 virtual BDSGeometryComponent* CreateSolenoid(BDSMagnetGeometryType magnetType,
00079 G4String name,
00080 G4double length,
00081 BDSBeamPipe* beamPipe,
00082 G4double boxSize,
00083 G4Material* outerMaterial = NULL
00084 );
00085
00087 virtual BDSGeometryComponent* CreateMultipole(BDSMagnetGeometryType magnetType,
00088 G4String name,
00089 G4double length,
00090 BDSBeamPipe* beamPipe,
00091 G4double boxSize,
00092 G4Material* outerMaterial = NULL
00093 );
00094
00096 virtual BDSGeometryComponent* CreateRfCavity(BDSMagnetGeometryType magnetType,
00097 G4String name,
00098 G4double length,
00099 BDSBeamPipe* beamPipe,
00100 G4double boxSize,
00101 G4Material* outerMaterial = NULL
00102 );
00103
00105 virtual BDSGeometryComponent* CreateMuSpoiler(BDSMagnetGeometryType magnetType,
00106 G4String name,
00107 G4double length,
00108 BDSBeamPipe* beamPipe,
00109 G4double boxSize,
00110 G4Material* outerMaterial = NULL
00111 );
00112
00114 virtual BDSGeometryComponent* CreateKicker(BDSMagnetGeometryType magnetType,
00115 G4String name,
00116 G4double length,
00117 BDSBeamPipe* beamPipe,
00118 G4double boxSize,
00119 G4bool vertical = true,
00120 G4Material* outerMaterial = NULL
00121 );
00122
00123 private:
00124 BDSMagnetOuterFactory();
00125 static BDSMagnetOuterFactory* _instance;
00126 BDSMagnetOuterFactoryBase* GetAppropriateFactory(BDSMagnetGeometryType magnetTypeIn);
00127
00128 };
00129
00130
00131
00132 #endif