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,                     
00029                                       G4double    lengthIn,                   
00030                                       G4double    aper1 = 0,                  
00031                                       G4double    aper2 = 0,                  
00032                                       G4double    aper3 = 0,                  
00033                                       G4double    aper4 = 0,                  
00034                                       G4Material* vacuumMaterialIn = NULL,    
00035                                       G4double    beamPipeThicknessIn = 0,    
00036                                       G4Material* beamPipeMaterialIn = NULL   
00037                                       );
00038   
00039   virtual BDSBeamPipe* CreateBeamPipeAngledInOut(G4String    nameIn,
00040                                                  G4double    lengthIn,
00041                                                  G4double    angleInIn,  
00042                                                  G4double    angleOutIn, 
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   
00064   
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   
00102   G4double coldBoreThickness;
00103   G4double coolingPipeThickness;
00104   G4double coolingPipeRadius;
00105   G4double copperSkinThickness;
00106 
00107   
00108   
00109   G4double vacRadius, vacBoxX, vacBoxY;
00110   
00111   
00112   G4double cuInnerRadius, cuInnerBoxX, cuInnerBoxY;
00113   G4double cuOuterRadius, cuOuterBoxX, cuOuterBoxY;
00114 
00115   
00116   G4double bsInnerRadius, bsInnerBoxX, bsInnerBoxY;
00117   G4double bsOuterRadius, bsOuterBoxX, bsOuterBoxY;
00118   
00119   
00120   G4double cbInnerRadius, cbOuterRadius;
00121 
00122   
00123   G4double containerRadius;
00124   
00125   
00126   G4double vacHalfLength;
00127   G4double halfLength;
00128 
00129   
00130   G4double coolingPipeYOffset;
00131 
00132 };
00133   
00134 #endif