/scratch0/jsnuveri/BDSIM/BDSIMgit/bdsim/src/BDSBeamPipeFactory.cc

00001 #include "BDSDebug.hh"
00002 
00003 #include "BDSBeamPipeFactory.hh"
00004 #include "BDSBeamPipeFactoryBase.hh"
00005 #include "BDSBeamPipeFactoryCircular.hh"
00006 #include "BDSBeamPipeFactoryElliptical.hh"
00007 #include "BDSBeamPipeFactoryRectangular.hh"
00008 #include "BDSBeamPipeFactoryLHC.hh"
00009 #include "BDSBeamPipeFactoryLHCDetailed.hh"
00010 #include "BDSBeamPipeFactoryRectEllipse.hh"
00011 #include "BDSBeamPipeInfo.hh"
00012 #include "BDSBeamPipeType.hh"
00013 #include "globals.hh"                        // geant4 globals / types
00014 
00015 BDSBeamPipeFactory* BDSBeamPipeFactory::_instance = 0;
00016 
00017 BDSBeamPipeFactory* BDSBeamPipeFactory::Instance()
00018 {
00019   if (_instance == 0)
00020     {_instance = new BDSBeamPipeFactory();}
00021   return _instance;
00022 }
00023 
00024 BDSBeamPipeFactory::BDSBeamPipeFactory()
00025 {;}
00026 
00027 BDSBeamPipeFactoryBase* BDSBeamPipeFactory::GetAppropriateFactory(BDSBeamPipeType type)
00028 {
00029   switch(type.underlying()){
00030 
00031   case BDSBeamPipeType::circular:
00032 #ifdef BDSDEBUG
00033     G4cout << __METHOD_NAME__ << "circular beampipe factory" << G4endl;
00034 #endif
00035     return BDSBeamPipeFactoryCircular::Instance();
00036     break;
00037   case BDSBeamPipeType::elliptical:
00038 #ifdef BDSDEBUG
00039     G4cout << __METHOD_NAME__ << "elliptical beampipe factory" << G4endl;
00040 #endif
00041     return BDSBeamPipeFactoryElliptical::Instance();
00042     break;
00043   case BDSBeamPipeType::rectangular:
00044 #ifdef BDSDEBUG
00045     G4cout << __METHOD_NAME__ << "rectangular beampipe factory" << G4endl;
00046 #endif
00047     return BDSBeamPipeFactoryRectangular::Instance();
00048     break;
00049   case BDSBeamPipeType::lhc:
00050 #ifdef BDSDEBUG
00051     G4cout << __METHOD_NAME__ << "lhc beampipe factory" << G4endl;
00052 #endif
00053     return BDSBeamPipeFactoryLHC::Instance();
00054     break;
00055   case BDSBeamPipeType::lhcdetailed:
00056 #ifdef BDSDEBUG
00057     G4cout << __METHOD_NAME__ << "lhc detailed beampipe factory" << G4endl;
00058 #endif
00059     return BDSBeamPipeFactoryLHCDetailed::Instance();
00060     break;
00061   case BDSBeamPipeType::rectellipse:
00062 #ifdef BDSDEBUG
00063     G4cout << __METHOD_NAME__ << "rectangular ellipse beampipe factory" << G4endl;
00064 #endif
00065     return BDSBeamPipeFactoryRectEllipse::Instance();
00066     break;
00067   default:
00068 #ifdef BDSDEBUG
00069     G4cout << __METHOD_NAME__ << "unknown type \"" << type << "\" - circular beampipe factory by default" << G4endl;
00070 #endif
00071     return BDSBeamPipeFactoryCircular::Instance();
00072     break;
00073   }
00074 }
00075 
00076 BDSBeamPipe* BDSBeamPipeFactory::CreateBeamPipe(G4String         name,
00077                                                 G4double         length,
00078                                                 BDSBeamPipeInfo* bpi)
00079 {
00080 #ifdef BDSDEBUG
00081   G4cout << __METHOD_NAME__ << G4endl;
00082 #endif
00083   return CreateBeamPipe(bpi->beamPipeType,
00084                         name,
00085                         length,
00086                         bpi->aper1,
00087                         bpi->aper2,
00088                         bpi->aper3,
00089                         bpi->aper4,
00090                         bpi->vacuumMaterial,
00091                         bpi->beamPipeThickness,
00092                         bpi->beamPipeMaterial);
00093 }
00094   
00095 BDSBeamPipe* BDSBeamPipeFactory::CreateBeamPipe(BDSBeamPipeType beamPipeType,
00096                                                 G4String        name,
00097                                                 G4double        length,
00098                                                 G4double        aper1,
00099                                                 G4double        aper2,
00100                                                 G4double        aper3,
00101                                                 G4double        aper4,
00102                                                 G4Material*     vacuumMaterial,
00103                                                 G4double        beamPipeThickness,
00104                                                 G4Material*     beamPipeMaterial)
00105 {
00106 #ifdef BDSDEBUG
00107   G4cout << __METHOD_NAME__ << G4endl;
00108 #endif
00109   BDSBeamPipeFactoryBase* factory = GetAppropriateFactory(beamPipeType);
00110   return factory->CreateBeamPipe(name,length,aper1,aper2,aper3,aper4,
00111                                  vacuumMaterial,beamPipeThickness,beamPipeMaterial);
00112 }
00113 
00114 BDSBeamPipe* BDSBeamPipeFactory::CreateBeamPipeAngledIn(BDSBeamPipeType beamPipeType,
00115                                                         G4String        name,
00116                                                         G4double        length,
00117                                                         G4double        angleIn,
00118                                                         G4double        aper1,
00119                                                         G4double        aper2,
00120                                                         G4double        aper3,
00121                                                         G4double        aper4,
00122                                                         G4Material*     vacuumMaterial,
00123                                                         G4double        beamPipeThickness,
00124                                                         G4Material*     beamPipeMaterial
00125                                                         )
00126 {
00127   BDSBeamPipeFactoryBase* factory = GetAppropriateFactory(beamPipeType);
00128   return factory->CreateBeamPipeAngledIn(name,length,angleIn,aper1,aper2,aper3,aper4,
00129                                          vacuumMaterial,beamPipeThickness,beamPipeMaterial);
00130 }
00131 
00132 BDSBeamPipe* BDSBeamPipeFactory::CreateBeamPipeAngledOut(BDSBeamPipeType beamPipeType,
00133                                                          G4String        name,
00134                                                          G4double        length,
00135                                                          G4double        angleOut,
00136                                                          G4double        aper1,
00137                                                          G4double        aper2,
00138                                                          G4double        aper3,
00139                                                          G4double        aper4,
00140                                                          G4Material*     vacuumMaterial,
00141                                                          G4double        beamPipeThickness,
00142                                                          G4Material*     beamPipeMaterial
00143                                                          )
00144 {
00145   BDSBeamPipeFactoryBase* factory = GetAppropriateFactory(beamPipeType);
00146   return factory->CreateBeamPipeAngledOut(name,length,angleOut,aper1,aper2,aper3,aper4,
00147                                           vacuumMaterial,beamPipeThickness,beamPipeMaterial);
00148 }
00149 
00150 BDSBeamPipe* BDSBeamPipeFactory::CreateBeamPipeAngledInOut(BDSBeamPipeType beamPipeType,
00151                                                            G4String        name,
00152                                                            G4double        length,
00153                                                            G4double        angleIn,
00154                                                            G4double        angleOut,
00155                                                            G4double        aper1,
00156                                                            G4double        aper2,
00157                                                            G4double        aper3,
00158                                                            G4double        aper4,
00159                                                            G4Material*     vacuumMaterial,
00160                                                            G4double        beamPipeThickness,
00161                                                            G4Material*     beamPipeMaterial
00162                                                            )
00163 {
00164   BDSBeamPipeFactoryBase* factory = GetAppropriateFactory(beamPipeType);
00165   return factory->CreateBeamPipeAngledInOut(name,length,angleIn,angleOut,aper1,aper2,aper3,aper4,
00166                                             vacuumMaterial,beamPipeThickness,beamPipeMaterial);
00167 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7