00001 #ifndef __BDSCOMPONENTFACTORY_
00002 #define __BDSCOMPONENTFACTORY_
00003
00004 #include <list>
00005 #include "globals.hh"
00006 #include "parser/gmad.h"
00007 #include "BDSAcceleratorComponent.hh"
00008
00009 class BDSComponentFactory{
00010 public:
00011 BDSComponentFactory();
00012 ~BDSComponentFactory();
00013 BDSAcceleratorComponent* createComponent(std::list<struct Element>::iterator elementIter, std::list<struct Element>& beamline_list);
00014 BDSAcceleratorComponent* createComponent(Element aElement, Element previousElement, Element nextElement);
00015 BDSAcceleratorComponent* createComponent();
00016
00017 private:
00018 G4bool verbose;
00019
00020 G4double _charge, _momentum, _brho;
00021 G4double _bpRad, _FeRad;
00022
00023 G4double _bField;
00024 G4double _bPrime;
00025 G4double _bDoublePrime;
00026 G4double _bTriplePrime;
00027
00028
00029 G4double _synch_factor ;
00030
00031 G4double _driftLength;
00032 G4String _driftName ;
00033 G4double _driftStartAper, _driftEndAper;
00034 std::list<struct Element>::iterator _elementIter, _previousElementIter, _nextElementIter;
00035
00036
00037 std::list<BDSAcceleratorComponent*> itsBeamline;
00038 Element _element, _previousElement, _nextElement;
00039 BDSAcceleratorComponent* createSampler();
00040 BDSAcceleratorComponent* createCSampler();
00041 BDSAcceleratorComponent* createDump();
00042 BDSAcceleratorComponent* createDrift();
00043 BDSAcceleratorComponent* createPCLDrift();
00044 BDSAcceleratorComponent* createRF();
00045 BDSAcceleratorComponent* createSBend();
00046 BDSAcceleratorComponent* createRBend();
00047 BDSAcceleratorComponent* createHKick();
00048 BDSAcceleratorComponent* createVKick();
00049 BDSAcceleratorComponent* createQuad();
00050 BDSAcceleratorComponent* createSextupole();
00051 BDSAcceleratorComponent* createOctupole();
00052 BDSAcceleratorComponent* createMultipole();
00053 BDSAcceleratorComponent* createElement();
00054 BDSAcceleratorComponent* createSolenoid();
00055 BDSAcceleratorComponent* createECol();
00056 BDSAcceleratorComponent* createRCol();
00057 BDSAcceleratorComponent* createMuSpoiler();
00058 BDSAcceleratorComponent* createLaser();
00059 BDSAcceleratorComponent* createTransform3D();
00060 };
00061 #endif