/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/include/BDSMagnetOuterFactoryPolesBase.hh

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"           // geant4 globals / types
00009 #include "G4Colour.hh"
00010 #include "G4Material.hh"
00011 #include "G4VSolid.hh"
00012 
00028 class BDSMagnetOuterFactoryPolesBase: public BDSMagnetOuterFactoryBase
00029 {
00030 public:
00031   //static BDSMagnetOuterFactoryPoles* Instance(); /// singleton pattern
00032   BDSMagnetOuterFactoryPolesBase();
00033   
00035   virtual BDSGeometryComponent* CreateSectorBend(G4String      name,                // name
00036                                                  G4double      length,              // length [mm]
00037                                                  BDSBeamPipe*  beamPipe,            // beampipe
00038                                                  G4double      boxSize,             // full width
00039                                                  G4double      angle,               // full bend angle [rad]
00040                                                  G4Material*   outerMaterial = NULL // material for outer volume
00041                                                  );
00042 
00044   virtual BDSGeometryComponent* CreateRectangularBend(G4String      name,                // name
00045                                                       G4double      length,              // length [mm]
00046                                                       BDSBeamPipe*  beamPipe,            // beampipe
00047                                                       G4double      boxSize,             // full width
00048                                                       G4double      angle,               // full bend angle [rad]
00049                                                       G4Material*   outerMaterial = NULL // material for outer volume
00050                                                       );
00051   
00053   virtual BDSGeometryComponent* CreateQuadrupole(G4String      name,                 // name
00054                                                  G4double      length,               // length [mm]
00055                                                  BDSBeamPipe*  beamPipe,             // beampipe
00056                                                  G4double      boxSize,              // full width
00057                                                  G4Material*   outerMaterial = NULL  // material for outer volume
00058                                                  );
00059 
00060 
00062   virtual BDSGeometryComponent* CreateSextupole(G4String      name,                 // name
00063                                                 G4double      length,               // length [mm]
00064                                                 BDSBeamPipe*  beamPipe,             // beampipe
00065                                                 G4double      boxSize,              // full width
00066                                                 G4Material*   outerMaterial = NULL  // material for outer volume
00067                                                 );
00068 
00070   virtual BDSGeometryComponent* CreateOctupole(G4String      name,                  // name
00071                                                G4double      length,                // length [mm]
00072                                                BDSBeamPipe*  beamPipe,              // beampipe
00073                                                G4double      boxSize,               // full width
00074                                                G4Material*   outerMaterial = NULL   // material for outer volume
00075                                                );
00076 
00078   virtual BDSGeometryComponent* CreateDecapole(G4String      name,                  // name
00079                                                G4double      length,                // length [mm]
00080                                                BDSBeamPipe*  beamPipe,              // beampipe
00081                                                G4double      boxSize,               // full width
00082                                                G4Material*   outerMaterial = NULL   // material for outer volume
00083                                                );
00084 
00086   virtual BDSGeometryComponent* CreateSolenoid(G4String      name,                  // name
00087                                                G4double      length,                // length [mm]
00088                                                BDSBeamPipe*  beamPipe,              // beampipe
00089                                                G4double      boxSize,               // full width
00090                                                G4Material*   outerMaterial = NULL   // material for outer volume
00091                                                );
00092 
00094   virtual BDSGeometryComponent* CreateMultipole(G4String      name,                 // name
00095                                                 G4double      length,               // length [mm]
00096                                                 BDSBeamPipe*  beamPipe,             // beampipe
00097                                                 G4double      boxSize,              // full width
00098                                                 G4Material*   outerMaterial = NULL  // material for outer volume
00099                                                 );
00100 
00102   virtual BDSGeometryComponent* CreateRfCavity(G4String      name,                  // name
00103                                                G4double      length,                // length [mm]
00104                                                BDSBeamPipe*  beamPipe,              // beampipe
00105                                                G4double      boxSize,               // full width
00106                                                G4Material*   outerMaterial = NULL   // material for outer volume
00107                                                );
00108 
00110   virtual BDSGeometryComponent* CreateMuSpoiler(G4String      name,                 // name
00111                                                 G4double      length,               // length [mm]
00112                                                 BDSBeamPipe*  beamPipe,             // beampipe
00113                                                 G4double      boxSize,              // full width
00114                                                 G4Material*   outerMaterial = NULL  // material for outer volume
00115                                                 );
00116 
00118   virtual BDSGeometryComponent* CreateKicker(G4String      name,                  // name
00119                                              G4double      length,                // length [mm]
00120                                              BDSBeamPipe*  beamPipe,              // beampipe
00121                                              G4double      boxSize,               // full width
00122                                              G4bool        vertical = true,       // is it a vertical kicker?
00123                                              G4Material*   outerMaterial = NULL   // material for outer volume
00124                                              );
00125   
00126 protected:
00127   // geometry parameters
00130   G4double poleFraction;
00131 
00133   G4double poleAngularFraction;
00134 
00137   G4double poleTipFraction;
00138   
00139   //length will be calculated in each derived class
00140   //will be less than outer radius but long enough so poles can be
00141   //boolean added to return yoke - this is different for each type
00142   G4double poleStartRadius;
00143   G4double poleFinishRadius;
00144   G4double yokeStartRadius;
00145   G4double yokeFinishRadius;
00146 
00147   // functions
00148 
00150   virtual void CleanUp();
00151 
00153   virtual void CalculatePoleAndYoke(G4double     outerDiameter,
00154                                     BDSBeamPipe* beamPipe,
00155                                     G4double     order);
00156   
00157   //NOTE the poles are not joined (boolean union) to the outer yoke - there is a
00158   //gap of length safety. This won't affect physics results and speeds up tracking
00159   //as the solid is not a boolean of order Npoles + 1
00160   
00162   virtual void CreatePoleSolid(G4String      name,                 // name
00163                                G4double      length,               // length [mm]
00164                                G4int         order);               // Nx2 poles
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

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7