00001 #ifndef BDSMAGNETOUTERFACTORYPOLESBASE_H
00002 #define BDSMAGNETOUTERFACTORYPOLESBASE_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
00028 class BDSMagnetOuterFactoryPolesBase: public BDSMagnetOuterFactoryBase
00029 {
00030 public:
00031
00032 BDSMagnetOuterFactoryPolesBase();
00033
00035 virtual BDSGeometryComponent* CreateSectorBend(G4String name,
00036 G4double length,
00037 BDSBeamPipe* beamPipe,
00038 G4double boxSize,
00039 G4double angle,
00040 G4Material* outerMaterial = NULL
00041 );
00042
00044 virtual BDSGeometryComponent* CreateRectangularBend(G4String name,
00045 G4double length,
00046 BDSBeamPipe* beamPipe,
00047 G4double boxSize,
00048 G4double angle,
00049 G4Material* outerMaterial = NULL
00050 );
00051
00053 virtual BDSGeometryComponent* CreateQuadrupole(G4String name,
00054 G4double length,
00055 BDSBeamPipe* beamPipe,
00056 G4double boxSize,
00057 G4Material* outerMaterial = NULL
00058 );
00059
00060
00062 virtual BDSGeometryComponent* CreateSextupole(G4String name,
00063 G4double length,
00064 BDSBeamPipe* beamPipe,
00065 G4double boxSize,
00066 G4Material* outerMaterial = NULL
00067 );
00068
00070 virtual BDSGeometryComponent* CreateOctupole(G4String name,
00071 G4double length,
00072 BDSBeamPipe* beamPipe,
00073 G4double boxSize,
00074 G4Material* outerMaterial = NULL
00075 );
00076
00078 virtual BDSGeometryComponent* CreateDecapole(G4String name,
00079 G4double length,
00080 BDSBeamPipe* beamPipe,
00081 G4double boxSize,
00082 G4Material* outerMaterial = NULL
00083 );
00084
00086 virtual BDSGeometryComponent* CreateSolenoid(G4String name,
00087 G4double length,
00088 BDSBeamPipe* beamPipe,
00089 G4double boxSize,
00090 G4Material* outerMaterial = NULL
00091 );
00092
00094 virtual BDSGeometryComponent* CreateMultipole(G4String name,
00095 G4double length,
00096 BDSBeamPipe* beamPipe,
00097 G4double boxSize,
00098 G4Material* outerMaterial = NULL
00099 );
00100
00102 virtual BDSGeometryComponent* CreateRfCavity(G4String name,
00103 G4double length,
00104 BDSBeamPipe* beamPipe,
00105 G4double boxSize,
00106 G4Material* outerMaterial = NULL
00107 );
00108
00110 virtual BDSGeometryComponent* CreateMuSpoiler(G4String name,
00111 G4double length,
00112 BDSBeamPipe* beamPipe,
00113 G4double boxSize,
00114 G4Material* outerMaterial = NULL
00115 );
00116
00118 virtual BDSGeometryComponent* CreateKicker(G4String name,
00119 G4double length,
00120 BDSBeamPipe* beamPipe,
00121 G4double boxSize,
00122 G4bool vertical = true,
00123 G4Material* outerMaterial = NULL
00124 );
00125
00126 protected:
00127
00130 G4double poleFraction;
00131
00133 G4double poleAngularFraction;
00134
00137 G4double poleTipFraction;
00138
00139
00140
00141
00142 G4double poleStartRadius;
00143 G4double poleFinishRadius;
00144 G4double yokeStartRadius;
00145 G4double yokeFinishRadius;
00146
00147
00148
00150 virtual void CleanUp();
00151
00153 virtual void CalculatePoleAndYoke(G4double outerDiameter,
00154 BDSBeamPipe* beamPipe,
00155 G4double order);
00156
00157
00158
00159
00160
00162 virtual void CreatePoleSolid(G4String name,
00163 G4double length,
00164 G4int order);
00165
00167 virtual void CreateYokeAndContainerSolid(G4String name,
00168 G4double length,
00169 G4int order);
00170
00172 virtual void CreateLogicalVolumes(G4String name,
00173 G4double length,
00174 G4int order,
00175 G4Material* outerMaterial);
00176
00178 virtual void PlaceComponents(G4String name,
00179 G4int order);
00180
00182 virtual BDSGeometryComponent* CommonConstructor(G4String name,
00183 G4double length,
00184 BDSBeamPipe* beamPipe,
00185 G4int order,
00186 G4double outerDiameter,
00187 G4Material* outerMaterial);
00188
00190 void TestInputParameters(BDSBeamPipe* beamPipe,
00191 G4double& boxSizeIn,
00192 G4Material*& outerMaterialIn);
00193
00196 virtual BDSGeometryComponent* KickerConstructor(G4String name,
00197 G4double length,
00198 G4double angle,
00199 BDSBeamPipe* beamPipe,
00200 G4double outerDiameter,
00201 G4Material* outerMaterial,
00202 G4bool isVertical);
00203
00204 };
00205
00206 #endif