00001
00002
00003
00004
00005
00006 #include "gmad.h"
00007 #include "sym_table.h"
00008
00009 #include <cmath>
00010
00011 using namespace std;
00012
00013 extern struct Parameters params;
00014 extern struct symtab *symtab;
00015 extern int yyparse();
00016
00017 extern FILE *yyin;
00018 extern char* yyfilename;
00019
00020 extern int add_func(char *name, double (*func)(double));
00021 extern int add_var(char *name, double val,int is_rserved = 0);
00022
00023
00024 extern list<struct Element> element_list;
00025 extern list<struct Element> tmp_list;
00026
00027 void init()
00028 {
00029
00030 symtab = new struct symtab[NSYMS];
00031
00032
00033 add_func("sqrt",sqrt);
00034 add_func("cos",cos);
00035 add_func("sin",sin);
00036 add_func("exp",exp);
00037 add_func("log",log);
00038 add_func("tan",tan);
00039 add_func("asin",asin);
00040 add_func("acos",acos);
00041 add_func("abs",fabs);
00042
00043
00044 add_var("pi",3.14159265358979,_RESERVED);
00045
00046 add_var("TeV",1e+3,_RESERVED);
00047 add_var("GeV",1.0 ,_RESERVED);
00048 add_var("MeV",1e-3,_RESERVED);
00049 add_var("KeV",1e-6,_RESERVED);
00050 add_var("eV" ,1e-9,_RESERVED);
00051
00052 add_var("MV",1.0,_RESERVED);
00053
00054 add_var("Tesla",1.0,_RESERVED);
00055
00056 add_var("m" ,1.0 ,_RESERVED);
00057 add_var("cm" ,1e-2,_RESERVED);
00058 add_var("mm" ,1e-3,_RESERVED);
00059 add_var("mum",1e-6,_RESERVED);
00060 add_var("nm" ,1e-9,_RESERVED);
00061
00062 add_var("s" ,1.0 ,_RESERVED);
00063 add_var("ms" ,1.e-3,_RESERVED);
00064 add_var("mus",1.e-6,_RESERVED);
00065 add_var("ns" ,1.e-9,_RESERVED);
00066
00067 add_var("rad" ,1.0 ,_RESERVED);
00068 add_var("mrad",1.e-3,_RESERVED);
00069
00070
00071 add_var("clight",2.99792458e+8,_RESERVED);
00072
00073 params.flush();
00074
00075
00076
00077 options.synchPhotonMultiplicity = 1;
00078 options.synchMeanFreeFactor = 1;
00079
00080
00081 }
00082
00083 int gmad_parser(FILE *f)
00084 {
00085
00086 init();
00087
00088 yyin=f;
00089 while(!feof(yyin))
00090 {
00091 yyparse();
00092 }
00093
00094
00095
00096 cout<<"clearing..."<<endl;
00097 element_list.clear();
00098 tmp_list.clear();
00099
00100
00101 return 0;
00102 };
00103
00104 int gmad_parser(string name)
00105 {
00106 FILE *f = fopen(name.c_str(),"r");
00107
00108 if(f==NULL) return -1;
00109
00110 init();
00111
00112 yyin=f;
00113 yyfilename = new char[32];
00114 strncpy(yyfilename,name.c_str(),32);
00115
00116 while(!feof(yyin))
00117 {
00118 yyparse();
00119 }
00120
00121
00122
00123 element_list.clear();
00124 tmp_list.clear();
00125 return 0;
00126 };
00127