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