[3c40083] | 1 | /*
|
---|
| 2 | ---- Hector the simulator ----
|
---|
| 3 | A fast simulator of particles through generic beamlines.
|
---|
| 4 | J. de Favereau, X. Rouby ~~~ hector_devel@cp3.phys.ucl.ac.be
|
---|
| 5 |
|
---|
| 6 | http://www.fynu.ucl.ac.be/hector.html
|
---|
| 7 |
|
---|
| 8 | Centre de Physique des Particules et de Phénoménologie (CP3)
|
---|
| 9 | Université Catholique de Louvain (UCL)
|
---|
| 10 | */
|
---|
[5b822e5] | 11 |
|
---|
| 12 | /// \file H_BeamLineParser.cc
|
---|
| 13 | /// \brief Reader for madx tables
|
---|
| 14 | ///
|
---|
[3c40083] | 15 | /// Notes : Vᅵifier que tous les SBEND sont toujours appelᅵ MB. Et seulement comme ᅵ !
|
---|
| 16 | /// Vï¿œifier qu'il n'y a pas de problï¿œe d'inversion H/V QUADRUPOLES
|
---|
[5b822e5] | 17 | /// no distinction between H and Vkickers ?
|
---|
| 18 | /// The identification of the element is based on the values of k1l, k2l, hkick, vkick and on their name.
|
---|
| 19 | /// x and y are put in m
|
---|
| 20 |
|
---|
| 21 | // c++ #includes
|
---|
| 22 | #include <iostream>
|
---|
| 23 | #include <fstream>
|
---|
| 24 | #include <sstream>
|
---|
| 25 |
|
---|
| 26 | //local #includes
|
---|
| 27 | #include "H_BeamLineParser.h"
|
---|
| 28 | #include "H_Parameters.h"
|
---|
| 29 | using namespace std;
|
---|
| 30 |
|
---|
| 31 |
|
---|
| 32 | /// Identifies the column content from its header
|
---|
[3c40083] | 33 | int column_identification(const string header) {
|
---|
[5b822e5] | 34 | // identifies the column type from its name
|
---|
| 35 |
|
---|
| 36 | if (header=="NAME") {return MADX_NAME; }
|
---|
| 37 | else if (header=="KEYWORD") {return MADX_KEYWORD; }
|
---|
| 38 | else if (header=="S") {return MADX_S; }
|
---|
| 39 | else if (header=="L") {return MADX_L; }
|
---|
| 40 | else if (header=="K0L") {return MADX_K0L; }
|
---|
| 41 | else if (header=="K1L") {return MADX_K1L;}
|
---|
| 42 | else if (header=="K2L") {return MADX_K2L;}
|
---|
| 43 | else if (header=="K3L") {return MADX_K3L;}
|
---|
| 44 | else if (header=="HKICK") {return MADX_HKICK;}
|
---|
| 45 | else if (header=="VKICK") {return MADX_VKICK;}
|
---|
| 46 | else if (header=="KICK") {return MADX_KICK;}
|
---|
| 47 | else if (header=="BETX") {return MADX_BETX;}
|
---|
| 48 | else if (header=="BETY") {return MADX_BETY;}
|
---|
| 49 | else if (header=="ALFX") {return MADX_ALFX;}
|
---|
| 50 | else if (header=="ALFY") {return MADX_ALFY;}
|
---|
| 51 | else if (header=="MUX") {return MADX_MUX;}
|
---|
| 52 | else if (header=="MUY") {return MADX_MUY;}
|
---|
| 53 | else if (header=="DX") {return MADX_DX;}
|
---|
| 54 | else if (header=="DY") {return MADX_DY;}
|
---|
| 55 | else if (header=="DPX") {return MADX_DPX;}
|
---|
| 56 | else if (header=="DPY") {return MADX_DPY;}
|
---|
| 57 | else if (header=="X") {return MADX_X;}
|
---|
| 58 | else if (header=="Y") {return MADX_Y;}
|
---|
| 59 | else if (header=="PX") {return MADX_PX;}
|
---|
| 60 | else if (header=="PY") {return MADX_PY;}
|
---|
| 61 | else if (header=="APERTYPE") {return MADX_APERTYPE;}
|
---|
| 62 | else if (header=="APER_1") {return MADX_APER_1;}
|
---|
| 63 | else if (header=="APER_2") {return MADX_APER_2;}
|
---|
| 64 | else if (header=="APER_3") {return MADX_APER_3;}
|
---|
| 65 | else if (header=="APER_4") {return MADX_APER_4;}
|
---|
| 66 | else if (header=="PARENT") {return MADX_PARENT;}
|
---|
| 67 | return MADX_UNKNOWN;
|
---|
| 68 | }
|
---|
| 69 |
|
---|
| 70 | void H_BeamLineParser::init() {
|
---|
| 71 | name="";
|
---|
| 72 | apertype="";
|
---|
| 73 | keyword="";
|
---|
| 74 | parent="";
|
---|
| 75 | s=0; l=0; k0l=0; k1l=0; k2l=0; k3l=0; hkick=0; vkick=0; betx=0;
|
---|
| 76 | alfx=0; mux=0; dx=0; dpx=0; x=0; px=0; bety=0; alfy=0; muy=0;
|
---|
| 77 | dy=0; dpy=0; y=0; py=0; aper_1=0; aper_2=0; aper_3=0; aper_4=0;
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | void H_BeamLineParser::setProperties(istream& input, const unsigned int col_type) {
|
---|
| 81 |
|
---|
| 82 | switch(col_type) {
|
---|
| 83 | case MADX_NAME: input >> name; break;
|
---|
| 84 | case MADX_KEYWORD: input >> keyword; break;
|
---|
| 85 | case MADX_S: input >> s; break;
|
---|
| 86 | case MADX_L: input >> l; break;
|
---|
| 87 | case MADX_K0L: input >> k0l; break;
|
---|
| 88 | case MADX_K1L : input >> k1l; break;
|
---|
| 89 | case MADX_K2L: input >> k2l; break;
|
---|
| 90 | case MADX_K3L: input >> k3l; break;
|
---|
| 91 | case MADX_HKICK: input >> hkick; break;
|
---|
| 92 | case MADX_VKICK: input >> vkick; break;
|
---|
| 93 | case MADX_BETX: input >> betx; break;
|
---|
| 94 | case MADX_ALFX: input >> alfx; break;
|
---|
| 95 | case MADX_MUX: input >> mux; break;
|
---|
| 96 | case MADX_DX: input >> dx; break;
|
---|
| 97 | case MADX_DPX: input >> dpx; break;
|
---|
| 98 | case MADX_X: input >> x; x *=URAD; break;
|
---|
| 99 | case MADX_PX: input >> px; break;
|
---|
| 100 | case MADX_BETY: input >> bety; break;
|
---|
| 101 | case MADX_ALFY: input >> alfy; break;
|
---|
| 102 | case MADX_MUY: input >> muy; break;
|
---|
| 103 | case MADX_DY: input >> dy; break;
|
---|
| 104 | case MADX_DPY: input >> dpy; break;
|
---|
| 105 | case MADX_Y: input >> y; y*=URAD; break;
|
---|
| 106 | case MADX_PY: input >> py; break;
|
---|
| 107 | case MADX_APERTYPE: input >> apertype; break;
|
---|
| 108 | case MADX_APER_1: input >> aper_1; break;
|
---|
| 109 | case MADX_APER_2: input >> aper_2; break;
|
---|
| 110 | case MADX_APER_3: input >> aper_3; break;
|
---|
| 111 | case MADX_APER_4: input >> aper_4; break;
|
---|
| 112 | case MADX_PARENT: input >> parent; break;
|
---|
| 113 | default:break;
|
---|
| 114 | } // switch
|
---|
| 115 | }
|
---|
| 116 |
|
---|
| 117 |
|
---|
| 118 | void H_BeamLineParser::printProperties() const {
|
---|
| 119 | //KEYWORD NAME PARENT L K0L K1L K2L K3L S BETX BETY DX DY XC YC ALFX ALFY MUX MUY DPX PXC PYC
|
---|
| 120 | cout << " keyword = " << keyword;
|
---|
| 121 | cout << " name = " << name;
|
---|
| 122 | cout << " l = " << l;
|
---|
| 123 | cout << " k0l = " << k0l;
|
---|
| 124 | cout << " k1l = " << k1l;
|
---|
| 125 | cout << " k2l = " << k2l;
|
---|
| 126 | cout << " k3l = " << k3l;
|
---|
| 127 | cout << " s = " << s << endl;
|
---|
| 128 | cout << endl;
|
---|
| 129 | }
|
---|