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

00001 #ifndef BDSBEAMPIPEFACTORYBASE_H
00002 #define BDSBEAMPIPEFACTORYBASE_H
00003 
00004 #include "BDSBeamPipe.hh"
00005 
00006 #include "globals.hh"         // geant4 globals / types
00007 #include "G4Material.hh"      // materials
00008 
00009 class G4UserLimits;
00010 
00029 class BDSBeamPipeFactoryBase
00030 {
00031 public:
00032   // NOTE each derived class is expected to be a singleton but this can't be specified here
00033   // as it'd refer to the abstract base class - must be implemented in each derived class
00034   // utilised in BDSBeamPipeFactory.cc
00035 
00036   // 'In' in argument variables is used to distinguish between that and possible
00037   // internal member variables with the same name - avoiding 'itsVariable'
00038   
00040   virtual BDSBeamPipe* CreateBeamPipe(G4String    nameIn,                    // name
00041                                       G4double    lengthIn,                  // length [mm]
00042                                       G4double    aper1 = 0,                 // aperture parameter 1
00043                                       G4double    aper2 = 0,                 // aperture parameter 2
00044                                       G4double    aper3 = 0,                 // aperture parameter 3
00045                                       G4double    aper4 = 0,                 // aperture parameter 4
00046                                       G4Material* vacuumMaterialIn = NULL,   // vacuum material
00047                                       G4double    beamPipeThicknessIn = 0,   // beampipe thickness [mm]
00048                                       G4Material* beamPipeMaterialIn = NULL  // beampipe material
00049                                       ) = 0;
00050 
00052   virtual BDSBeamPipe* CreateBeamPipeAngledIn(   G4String    nameIn,
00053                                                  G4double    lengthIn,
00054                                                  G4double    angleInIn, // the normal angle of the input face
00055                                                  G4double    aper1 = 0,
00056                                                  G4double    aper2 = 0,
00057                                                  G4double    aper3 = 0,
00058                                                  G4double    aper4 = 0,
00059                                                  G4Material* vacuumMaterialIn = NULL,
00060                                                  G4double    beamPipeThicknessIn = 0,
00061                                                  G4Material* beamPipeMaterialIn = NULL
00062                                                  );
00063 
00065   virtual BDSBeamPipe* CreateBeamPipeAngledOut(  G4String    nameIn,
00066                                                  G4double    lengthIn,
00067                                                  G4double    angleOutIn, // the normal angle of the output face
00068                                                  G4double    aper1 = 0,
00069                                                  G4double    aper2 = 0,
00070                                                  G4double    aper3 = 0,
00071                                                  G4double    aper4 = 0,
00072                                                  G4Material* vacuumMaterialIn = NULL,
00073                                                  G4double    beamPipeThicknessIn = 0,
00074                                                  G4Material* beamPipeMaterialIn = NULL
00075                                                  );
00076   
00078   virtual BDSBeamPipe* CreateBeamPipeAngledInOut(G4String    nameIn,
00079                                                  G4double    lengthIn,
00080                                                  G4double    angleInIn,  // the normal angle of the input face
00081                                                  G4double    angleOutIn, // the normal angle of the output face
00082                                                  G4double    aper1 = 0,
00083                                                  G4double    aper2 = 0,
00084                                                  G4double    aper3 = 0,
00085                                                  G4double    aper4 = 0,
00086                                                  G4Material* vacuumMaterialIn = NULL,
00087                                                  G4double    beamPipeThicknessIn = 0,
00088                                                  G4Material* beamPipeMaterialIn = NULL
00089                                                  ) = 0;
00090 
00091 protected:
00093   BDSBeamPipeFactoryBase();
00094 
00096   virtual void CleanUp();
00097   
00099   void CommonConstruction(G4String    nameIn,
00100                           G4Material* vacuumMaterialIn,
00101                           G4Material* beamPipeMaterialIn,
00102                           G4double    lengthIn);
00103 
00105   BDSBeamPipe* BuildBeamPipeAndRegisterVolumes(std::pair<double,double> extX,
00106                                                std::pair<double,double> extY,
00107                                                std::pair<double,double> extZ,
00108                                                G4double containerRadius);
00109 
00111   std::pair<G4ThreeVector,G4ThreeVector> CalculateFaces(G4double angleInIn,
00112                                                         G4double angleOutIn);
00113 
00114   void TestInputParameters(G4Material*& vacuumMaterialIn,
00115                            G4double&    beamPipeThicknessIn,
00116                            G4Material*& beamPipeMaterialIn);
00117   
00118   // methods called by CommonConstruction, can be implmented by derived classes
00119   
00121   virtual void BuildLogicalVolumes(G4String    nameIn,
00122                                    G4Material* vacuumMaterialIn,
00123                                    G4Material* beamPipeMaterialIn);
00125   virtual void          SetVisAttributes();
00126 
00128   virtual G4UserLimits* SetUserLimits(G4double lengthIn);
00129 
00131   virtual void          PlaceComponents(G4String nameIn);
00132 
00133 protected:
00134   G4double         lengthSafety;
00135   G4bool           checkOverlaps;
00136   G4double         maxStepFactor;
00137   G4double         nSegmentsPerCircle; // for visualisation improvement
00138   G4VSolid*        vacuumSolid;
00139   G4VSolid*        beamPipeSolid;
00140   G4VSolid*        containerSolid;
00142   G4VSolid*        containerSubtractionSolid; 
00143   G4LogicalVolume* vacuumLV;
00144   G4LogicalVolume* beamPipeLV;
00145   G4LogicalVolume* containerLV;
00146 
00147 };
00148 
00149 #endif

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7