/home/cern/BDSIM_new/parser/gmad.cc

00001 /*
00002  * GMAD interface
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 // aux. parser lists - to clear
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   // embedded arithmetical functions
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   // Default Values for Options (the rest are set to 0)
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   // clear temporary stuff
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   // clear temporary stuff
00122 
00123   element_list.clear();
00124   tmp_list.clear();
00125   return 0;
00126 };
00127 

Generated on Wed Mar 5 17:25:22 2008 for BDSIM by  doxygen 1.5.3