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

00001 #include "BDSDebug.hh"
00002 #include "BDSMagnetOuterFactory.hh"
00003 #include "BDSMagnetOuterFactoryBase.hh"
00004 #include "BDSMagnetOuterFactoryCylindrical.hh"
00005 #include "BDSMagnetOuterFactoryPolesCircular.hh"
00006 #include "BDSMagnetOuterFactoryPolesFacet.hh"
00007 #include "BDSMagnetOuterFactoryPolesFacetCrop.hh"
00008 #include "BDSMagnetOuterFactoryPolesSquare.hh"
00009 #include "BDSMagnetOuterFactoryLHCLeft.hh"
00010 #include "BDSMagnetOuterFactoryLHCRight.hh"
00011 #include "BDSMagnetOuterFactoryNone.hh"
00012 #include "BDSMagnetGeometryType.hh"
00013 
00014 #include "globals.hh"                        // geant4 globals / types
00015 
00016 BDSMagnetOuterFactory* BDSMagnetOuterFactory::_instance = 0;
00017 
00018 BDSMagnetOuterFactory* BDSMagnetOuterFactory::Instance()
00019 {
00020   if (_instance == 0)
00021     {_instance = new BDSMagnetOuterFactory();}
00022   return _instance;
00023 }
00024 
00025 BDSMagnetOuterFactory::BDSMagnetOuterFactory()
00026 {;}
00027 
00028 BDSMagnetOuterFactoryBase* BDSMagnetOuterFactory::GetAppropriateFactory(BDSMagnetGeometryType magnetTypeIn)
00029 {
00030   switch(magnetTypeIn.underlying()){
00031     
00032   case BDSMagnetGeometryType::none:
00033 #ifdef BDSDEBUG
00034     G4cout << __METHOD_NAME__ << "'none' magnet factory (no outer geometry)" << G4endl;
00035 #endif
00036     return BDSMagnetOuterFactoryNone::Instance();
00037     break;
00038   case BDSMagnetGeometryType::cylindrical:
00039 #ifdef BDSDEBUG
00040     G4cout << __METHOD_NAME__ << "cylindrical magnet factory" << G4endl;
00041 #endif
00042     return BDSMagnetOuterFactoryCylindrical::Instance();
00043     break;
00044   case BDSMagnetGeometryType::polescircular:
00045 #ifdef BDSDEBUG
00046     G4cout << __METHOD_NAME__ << "poles with circular yoke factory" << G4endl;
00047 #endif
00048     return BDSMagnetOuterFactoryPolesCircular::Instance();
00049     break;
00050   case BDSMagnetGeometryType::polessquare:
00051 #ifdef BDSDEBUG
00052     G4cout << __METHOD_NAME__ << "poles with square yoke factory" << G4endl;
00053 #endif
00054     return BDSMagnetOuterFactoryPolesSquare::Instance();
00055     break;
00056   case BDSMagnetGeometryType::polesfacet:
00057 #ifdef BDSDEBUG
00058     G4cout << __METHOD_NAME__ << "poles with faceted yoke factory" << G4endl;
00059 #endif
00060     return BDSMagnetOuterFactoryPolesFacet::Instance();
00061     break;
00062   case BDSMagnetGeometryType::polesfacetcrop:
00063 #ifdef BDSDEBUG
00064     G4cout << __METHOD_NAME__ << "poles with faceted and cropped yoke factory" << G4endl;
00065 #endif
00066     return BDSMagnetOuterFactoryPolesFacetCrop::Instance();
00067     break;
00068   case BDSMagnetGeometryType::lhcleft:
00069 #ifdef BDSDEBUG
00070     G4cout << __METHOD_NAME__ << "LHC magnet factory - with left offset" << G4endl;
00071 #endif
00072     return BDSMagnetOuterFactoryLHCLeft::Instance();
00073     break;
00074   case BDSMagnetGeometryType::lhcright:
00075 #ifdef BDSDEBUG
00076     G4cout << __METHOD_NAME__ << "LHC magnet factory - with right offset" << G4endl;
00077 #endif
00078     return BDSMagnetOuterFactoryLHCRight::Instance();
00079     break;
00080   default:
00081     G4cerr << __METHOD_NAME__ << "unknown type \"" << magnetTypeIn << G4endl;
00082     exit(1);
00083     break;
00084   }
00085 }
00086 
00087 BDSGeometryComponent* BDSMagnetOuterFactory::CreateSectorBend(BDSMagnetGeometryType magnetType,
00088                                                               G4String      name,
00089                                                               G4double      length,
00090                                                               BDSBeamPipe*  beamPipe,
00091                                                               G4double      boxSize,
00092                                                               G4double      angle,
00093                                                               G4Material*   outerMaterial)
00094 {
00095 #ifdef BDSDEBUG
00096   G4cout << __METHOD_NAME__ << G4endl;
00097 #endif
00098   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00099   return factory->CreateSectorBend(name, length, beamPipe, boxSize, angle, outerMaterial);
00100 }
00101 
00102 BDSGeometryComponent* BDSMagnetOuterFactory::CreateRectangularBend(BDSMagnetGeometryType magnetType,
00103                                                                    G4String      name,
00104                                                                    G4double      length,
00105                                                                    BDSBeamPipe*  beamPipe,
00106                                                                    G4double      boxSize,
00107                                                                    G4double      angle,
00108                                                                    G4Material*   outerMaterial)
00109 {
00110 #ifdef BDSDEBUG
00111   G4cout << __METHOD_NAME__ << G4endl;
00112 #endif
00113   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00114   return factory->CreateRectangularBend(name, length, beamPipe, boxSize, angle, outerMaterial);
00115 }
00116   
00117 
00118 BDSGeometryComponent* BDSMagnetOuterFactory::CreateQuadrupole(BDSMagnetGeometryType magnetType,
00119                                                               G4String      name,
00120                                                               G4double      length,
00121                                                               BDSBeamPipe*  beamPipe,
00122                                                               G4double      boxSize,
00123                                                               G4Material*   outerMaterial)
00124 {
00125 #ifdef BDSDEBUG
00126   G4cout << __METHOD_NAME__ << G4endl;
00127 #endif
00128   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00129   return factory->CreateQuadrupole(name, length, beamPipe, boxSize, outerMaterial);
00130 }
00131 
00132 BDSGeometryComponent* BDSMagnetOuterFactory::CreateSextupole(BDSMagnetGeometryType magnetType,
00133                                                              G4String      name,
00134                                                              G4double      length,
00135                                                              BDSBeamPipe*  beamPipe,
00136                                                              G4double      boxSize,
00137                                                              G4Material*   outerMaterial)
00138 {
00139 #ifdef BDSDEBUG
00140   G4cout << __METHOD_NAME__ << G4endl;
00141 #endif
00142   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00143   return factory->CreateSextupole(name, length, beamPipe, boxSize, outerMaterial);
00144 }
00145 
00146 BDSGeometryComponent* BDSMagnetOuterFactory::CreateOctupole(BDSMagnetGeometryType magnetType,
00147                                                             G4String      name,
00148                                                             G4double      length,
00149                                                             BDSBeamPipe*  beamPipe,
00150                                                             G4double      boxSize,
00151                                                             G4Material*   outerMaterial)
00152 {
00153 #ifdef BDSDEBUG
00154   G4cout << __METHOD_NAME__ << G4endl;
00155 #endif
00156   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00157   return factory->CreateOctupole(name, length, beamPipe, boxSize, outerMaterial);
00158 }
00159 
00160 BDSGeometryComponent* BDSMagnetOuterFactory::CreateDecapole(BDSMagnetGeometryType magnetType,
00161                                                             G4String      name,
00162                                                             G4double      length,
00163                                                             BDSBeamPipe*  beamPipe,
00164                                                             G4double      boxSize,
00165                                                             G4Material*   outerMaterial)
00166 {
00167 #ifdef BDSDEBUG
00168   G4cout << __METHOD_NAME__ << G4endl;
00169 #endif
00170   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00171   return factory->CreateDecapole(name, length, beamPipe, boxSize, outerMaterial);
00172 }
00173 
00174 BDSGeometryComponent* BDSMagnetOuterFactory::CreateSolenoid(BDSMagnetGeometryType magnetType,
00175                                                             G4String      name,
00176                                                             G4double      length,
00177                                                             BDSBeamPipe*  beamPipe,
00178                                                             G4double      boxSize,
00179                                                             G4Material*   outerMaterial)
00180 {
00181 #ifdef BDSDEBUG
00182   G4cout << __METHOD_NAME__ << G4endl;
00183 #endif
00184   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00185   return factory->CreateSolenoid(name, length, beamPipe, boxSize, outerMaterial);
00186 }
00187 
00188 BDSGeometryComponent* BDSMagnetOuterFactory::CreateMultipole(BDSMagnetGeometryType magnetType,
00189                                                              G4String      name,
00190                                                              G4double      length,
00191                                                              BDSBeamPipe*  beamPipe,
00192                                                              G4double      boxSize,
00193                                                              G4Material*   outerMaterial)
00194 {
00195 #ifdef BDSDEBUG
00196   G4cout << __METHOD_NAME__ << G4endl;
00197 #endif
00198   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00199   return factory->CreateMultipole(name, length, beamPipe, boxSize, outerMaterial);
00200 }
00201 
00202 BDSGeometryComponent* BDSMagnetOuterFactory::CreateRfCavity(BDSMagnetGeometryType magnetType,
00203                                                             G4String      name,
00204                                                             G4double      length,
00205                                                             BDSBeamPipe*  beamPipe,
00206                                                             G4double      boxSize,
00207                                                             G4Material*   outerMaterial)
00208 {
00209 #ifdef BDSDEBUG
00210   G4cout << __METHOD_NAME__ << G4endl;
00211 #endif
00212   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00213   return factory->CreateRfCavity(name, length, beamPipe, boxSize, outerMaterial);
00214 }
00215 
00216 BDSGeometryComponent* BDSMagnetOuterFactory::CreateMuSpoiler(BDSMagnetGeometryType magnetType,
00217                                                 G4String      name,
00218                                                 G4double      length,
00219                                                 BDSBeamPipe*  beamPipe,
00220                                                 G4double      boxSize,
00221                                                              G4Material*   outerMaterial)
00222 {
00223 #ifdef BDSDEBUG
00224   G4cout << __METHOD_NAME__ << G4endl;
00225 #endif
00226   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00227   return factory->CreateMuSpoiler(name, length, beamPipe, boxSize, outerMaterial);
00228 }
00229 
00230 BDSGeometryComponent* BDSMagnetOuterFactory::CreateKicker(BDSMagnetGeometryType magnetType,
00231                                                           G4String      name,
00232                                                           G4double      length,
00233                                                           BDSBeamPipe*  beamPipe,
00234                                                           G4double      boxSize,
00235                                                           G4bool        vertical,
00236                                                           G4Material*   outerMaterial)
00237 {
00238 #ifdef BDSDEBUG
00239   G4cout << __METHOD_NAME__ << G4endl;
00240 #endif
00241   BDSMagnetOuterFactoryBase* factory = GetAppropriateFactory(magnetType);
00242   return factory->CreateKicker(name, length, beamPipe, boxSize, vertical, outerMaterial);
00243 }

Generated on 28 Jun 2015 for BDSIM by  doxygen 1.4.7