00001 #ifndef BDSCOMPONENTFACTORY_H 00002 #define BDSCOMPONENTFACTORY_H 00003 00004 #include <list> 00005 #include "globals.hh" 00006 #include "parser/element.h" 00007 #include "BDSAcceleratorComponent.hh" 00008 #include "BDSBeamPipe.hh" 00009 #include "BDSBeamPipeInfo.hh" 00010 #include "BDSMagnetOuterInfo.hh" 00011 #include "BDSTunnelInfo.hh" 00012 00013 class ElementList; 00014 00015 class BDSComponentFactory{ 00016 public: 00017 BDSComponentFactory(); 00018 ~BDSComponentFactory(); 00019 00020 BDSAcceleratorComponent* createComponent(std::list<struct Element>::iterator elementIter, ElementList& beamline_list); 00021 BDSAcceleratorComponent* createComponent(Element& aElement, Element& previousElement, Element& nextElement); 00022 BDSAcceleratorComponent* createComponent(); 00023 00024 // for each of them - special cases need only for ring logic 00025 BDSAcceleratorComponent* createTerminator(); 00026 BDSAcceleratorComponent* createTeleporter(); 00027 00028 private: 00029 G4bool verbose; 00030 00031 G4double lengthSafety; 00032 00033 G4double _charge, _momentum, _brho; 00034 00035 std::list<struct Element>::iterator _elementIter, _previousElementIter, _nextElementIter; 00037 std::list<BDSAcceleratorComponent*> itsBeamline; 00039 Element _element, _previousElement, _nextElement; 00040 00041 BDSAcceleratorComponent* createSampler(); 00042 BDSAcceleratorComponent* createCSampler(); 00043 BDSAcceleratorComponent* createDump(); 00044 BDSAcceleratorComponent* createDrift(); 00045 BDSAcceleratorComponent* createRF(); 00046 BDSAcceleratorComponent* createSBend(); 00047 BDSAcceleratorComponent* createRBend(); 00048 BDSAcceleratorComponent* createHKick(); 00049 BDSAcceleratorComponent* createVKick(); 00050 BDSAcceleratorComponent* createQuad(); 00051 BDSAcceleratorComponent* createSextupole(); 00052 BDSAcceleratorComponent* createOctupole(); 00053 BDSAcceleratorComponent* createMultipole(); 00054 BDSAcceleratorComponent* createElement(); 00055 BDSAcceleratorComponent* createSolenoid(); 00056 BDSAcceleratorComponent* createRectangularCollimator(); 00057 BDSAcceleratorComponent* createEllipticalCollimator(); 00058 BDSAcceleratorComponent* createMuSpoiler(); 00059 BDSAcceleratorComponent* createLaser(); 00060 BDSAcceleratorComponent* createScreen(); 00061 BDSAcceleratorComponent* createAwakeScreen(); 00062 BDSAcceleratorComponent* createTransform3D(); 00063 00065 G4bool HasSufficientMinimumLength(Element& element); 00066 00068 G4Material* PrepareBeamPipeMaterial(Element& element); 00069 G4Material* PrepareVacuumMaterial(Element& element); 00070 BDSMagnetOuterInfo PrepareMagnetOuterInfo(Element& element); 00071 G4double PrepareOuterDiameter(Element& element); 00072 BDSBeamPipeInfo* PrepareBeamPipeInfo(Element& element); 00074 00075 }; 00076 #endif