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

00001 #ifndef BDSBEAMPIPEFACTORYLHCDETAILED_H
00002 #define BDSBEAMPIPEFACTORYLHCDETAILED_H
00003 
00004 #include "BDSBeamPipeFactoryBase.hh"
00005 #include "BDSBeamPipe.hh"
00006 
00015 class BDSBeamPipeFactoryLHCDetailed: public BDSBeamPipeFactoryBase
00016 {
00017 public:
00018   static BDSBeamPipeFactoryLHCDetailed* Instance(); 
00019   
00020   virtual ~BDSBeamPipeFactoryLHCDetailed();
00021 
00023   G4double GetFullWidthOfCoolingPipe();
00024 
00026   virtual void CleanUp();
00027 
00028   virtual BDSBeamPipe* CreateBeamPipe(G4String    nameIn,                     // name
00029                                       G4double    lengthIn,                   // length [mm]
00030                                       G4double    aper1 = 0,                  // aperture parameter 1
00031                                       G4double    aper2 = 0,                  // aperture parameter 2
00032                                       G4double    aper3 = 0,                  // aperture parameter 3
00033                                       G4double    aper4 = 0,                  // aperture parameter 4
00034                                       G4Material* vacuumMaterialIn = NULL,    // vacuum material
00035                                       G4double    beamPipeThicknessIn = 0,    // beampipe thickness [mm]
00036                                       G4Material* beamPipeMaterialIn = NULL   // beampipe material
00037                                       );
00038   
00039   virtual BDSBeamPipe* CreateBeamPipeAngledInOut(G4String    nameIn,
00040                                                  G4double    lengthIn,
00041                                                  G4double    angleInIn,  // the normal angle of the input face
00042                                                  G4double    angleOutIn, // the normal angle of the output face
00043                                                  G4double    aper1 = 0,
00044                                                  G4double    aper2 = 0,
00045                                                  G4double    aper3 = 0,
00046                                                  G4double    aper4 = 0,
00047                                                  G4Material* vacuumMaterialIn = NULL,
00048                                                  G4double    beamPipeThicknessIn = 0,
00049                                                  G4Material* beamPipeMaterialIn = NULL
00050                                                  );
00051 
00052 private:
00053   BDSBeamPipeFactoryLHCDetailed(); 
00054   static BDSBeamPipeFactoryLHCDetailed* _instance;
00055 
00056   void TestInputParameters(G4Material*& vacuumMaterialIn,
00057                            G4double&    beamPipeThicknessIn,
00058                            G4Material*& beamPipeMaterialIn,
00059                            G4double&    aper1In,
00060                            G4double&    aper2In,
00061                            G4double&    aper3In);
00062 
00063   //abstract common build features to one function
00064   //use member variables unique to this factory to pass them around
00065 
00066   BDSBeamPipe* CommonFinalConstruction(G4String    name,
00067                                        G4Material* vacuumMaterial,
00068                                        G4Material* beamPipeMaterial,
00069                                        G4double    length,
00070                                        G4double    containerRadius);
00071   G4double CreateGeneralAngledSolids(G4String      name,
00072                                      G4double      length,
00073                                      G4ThreeVector inputface,
00074                                      G4ThreeVector outputface);
00075 
00076   virtual void          BuildLogicalVolumes(G4String    nameIn,
00077                                             G4Material* vacuumMaterialIn,
00078                                             G4Material* beamPipeMaterialIn);
00079   virtual void          SetVisAttributes();
00080   virtual G4UserLimits* SetUserLimits(G4double lengthIn);
00081   virtual void          PlaceComponents(G4String nameIn);
00082 
00084   void InitialiseGeometricalParameters();
00085 
00088   void CalculateGeometricalParameters(G4double aper1,
00089                                       G4double aper2,
00090                                       G4double aper3,
00091                                       G4double beamPipeThickness,
00092                                       G4double length);
00093 
00094   G4VSolid*        copperSkinSolid;
00095   G4VSolid*        screenSolid;
00096   G4VSolid*        coolingPipeSolid;
00097   G4LogicalVolume* copperSkinLV;
00098   G4LogicalVolume* screenLV;
00099   G4LogicalVolume* coolingPipeLV;
00100 
00101   // parameters that control the design
00102   G4double coldBoreThickness;
00103   G4double coolingPipeThickness;
00104   G4double coolingPipeRadius;
00105   G4double copperSkinThickness;
00106 
00107   // calculated parameters below here
00108   // vacuum volume
00109   G4double vacRadius, vacBoxX, vacBoxY;
00110   
00111   // copper skin geometrical parameters
00112   G4double cuInnerRadius, cuInnerBoxX, cuInnerBoxY;
00113   G4double cuOuterRadius, cuOuterBoxX, cuOuterBoxY;
00114 
00115   // beam screen geometrical parameters
00116   G4double bsInnerRadius, bsInnerBoxX, bsInnerBoxY;
00117   G4double bsOuterRadius, bsOuterBoxX, bsOuterBoxY;
00118   
00119   // cold bore geometrical parameters
00120   G4double cbInnerRadius, cbOuterRadius;
00121 
00122   // container geometrical parameters
00123   G4double containerRadius;
00124   
00125   // general length variable (to avoid mistakes)
00126   G4double vacHalfLength;
00127   G4double halfLength;
00128 
00129   // cooling pipe geometrical parameters
00130   G4double coolingPipeYOffset;
00131 
00132 };
00133   
00134 #endif

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7