00001 #ifndef BDSMAGNETOUTERFACTORYPOLESSQUARE_H
00002 #define BDSMAGNETOUTERFACTORYPOLESSQUARE_H
00003
00004 #include "BDSGeometryComponent.hh"
00005 #include "BDSMagnetOuterFactoryPolesBase.hh"
00006 #include "BDSBeamPipe.hh"
00007
00008 #include "globals.hh"
00009
00010
00011 #include "G4VSolid.hh"
00012 #include <vector>
00013
00025 class BDSMagnetOuterFactoryPolesSquare: public BDSMagnetOuterFactoryPolesBase
00026 {
00027 public:
00028 static BDSMagnetOuterFactoryPolesSquare* Instance();
00029
00030 ~BDSMagnetOuterFactoryPolesSquare();
00031
00032 private:
00034 BDSMagnetOuterFactoryPolesSquare();
00035 static BDSMagnetOuterFactoryPolesSquare* _instance;
00036
00037 virtual void CleanUp();
00038
00039 virtual void CreatePoleSolid(G4String name,
00040 G4double length,
00041 G4int order);
00042
00044 virtual void CreateYokeAndContainerSolid(G4String name,
00045 G4double length,
00046 G4int order);
00047
00049 virtual void CreateLogicalVolumes(G4String name,
00050 G4double length,
00051 G4int order,
00052 G4Material* outerMaterial);
00053
00055 virtual void PlaceComponents(G4String name,
00056 G4int order);
00057
00061 virtual BDSGeometryComponent* CommonConstructor(G4String name,
00062 G4double length,
00063 BDSBeamPipe* beamPipe,
00064 G4int order,
00065 G4double outerDiameter,
00066 G4Material* outerMaterial);
00067
00070 std::vector<G4RotationMatrix*> poleRotations;
00071 std::vector<G4VSolid*> poleSolids;
00072 std::vector<G4LogicalVolume*> poleLVs;
00073
00074 };
00075
00076 #endif