00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef ENDF_file_DEF
00039 #define ENDF_file_DEF
00040
00041 #include <stdio.h>
00042 #include <fstream>
00043 #include <string>
00044 #include <vector>
00045
00046 #include "endl_formats.hpp"
00047 #include "global_params.hpp"
00048 #include "messaging.hpp"
00049
00050 extern ENDLClass ENDL;
00051 extern GlobalParameterClass Global;
00052
00053 using namespace std;
00054
00055
00056
00057 class ENDF_file : public ifstream
00058 {
00059 protected:
00060
00061 void mfx_line1(int *ZA, double *AWR, int *I1, int *I2,
00062 int *I3, int *I4);
00063
00064
00065 void mfx_line2(double *D1, double *D2, int *I1, int *I2,
00066 int *I3, int *I4);
00067
00068 public:
00069 inline ENDF_file()
00070 {
00071 }
00072 inline ~ENDF_file()
00073 {
00074 }
00075
00076 inline void open( int F, int T, bool verbose=true )
00077 {
00078 if (verbose) Info("ENDF_file::open","Opening file "+endf_file_name(F, T)+"...");
00079 ifstream::open(endf_file_name(F, T).c_str());
00080 }
00081
00082
00083 void get_regions(int NR, vector<int>& NBT, vector<int>& INT);
00084
00085
00086 void skip(int N);
00087 };
00088
00089
00090
00091 class mf1_file : public ENDF_file
00092 {
00093 public:
00094
00095 void read_line1(int *ZA, double *AWR, int *LNU);
00096
00097
00098 void delay_head(int *NC);
00099
00100
00101 void mult_head(int *NR, int *NP);
00102 };
00103
00104
00105
00106 class mf3_file : public ENDF_file
00107 {
00108 public:
00109
00110 void read_line1(int *ZA, double *AWR);
00111
00112
00113 void read_line2(double *QM, double *QI, int *LR, int *NR, int *NP);
00114 };
00115
00116
00117
00118 class mf4_file : public ENDF_file
00119 {
00120 public:
00121
00122 void read_line1(int *ZA, double *AWR, int *LVT, int *LTT);
00123
00124
00125 void read_line2(int *LI, int *LCT, int *NK, int *NM);
00126
00127
00128 void read_line3(int *NR, int *NE);
00129 };
00130
00131
00132
00133 class mf5_file : public ENDF_file
00134 {
00135 public:
00136
00137 void read_line1(int *ZA, double *AWR, int *NK);
00138
00139
00140 void read_line2(double *U, int *LF, int *NR, int *NP);
00141
00142
00143 void read_Madland(double *EFL, double *EFH, int *NR, int *NE);
00144 };
00145
00146
00147
00148 class mf6_file : public ENDF_file
00149 {
00150 public:
00151
00152 void read_line1(int *ZA, double *AWR, int *LCT, int *NK);
00153
00154
00155 void particle_line1(int *ZAP, double *AWP, int *LIP,
00156 int *LAW, int *NR, int *NP);
00157
00158
00159 void get_model( int *LANG, int *LEP, int *NR, int *NE );
00160
00161
00162 void gamma_ein( double *e_in, int *ND, int *NEP );
00163
00164
00165 void phase_space( double *APSX, int *NPSX );
00166
00167
00168 void mf4_line1( int *NR, int *NE );
00169
00170
00171 void mf4_line2( double *e_in, int *LANG, int *NW, int *NL );
00172
00173
00174 void ENDL( int *NR, int *NE );
00175
00176
00177 void ENDL_head( double *e_in, int *NR, int *NE );
00178
00179
00180 void Legendre_E_in( double *e_in, int *ND, int *order, int *NE );
00181
00182
00183 void read_spin( double *spin, int *NR, int *NE );
00184
00185
00186 void read_model( double *e_in, int *LTP, int *NL );
00187 };
00188
00189
00190
00191 class mf12_file : public ENDF_file
00192 {
00193 public:
00194
00195 void read_line1(int *ZA, double *AWR, int *LO, int *LG,
00196 int *NK);
00197
00198
00199 void read_line2(int *NR, int *NP);
00200
00201
00202 void gamma_line1(double *EG, double *ES, int *LP, int *LF,
00203 int *NR, int *NP);
00204 };
00205
00206
00207
00208 class mf13_file : public ENDF_file
00209 {
00210 public:
00211
00212 void read_line1(int *ZA, double *AWR, int *NK);
00213
00214
00215 void read_line2(int *NR, int *NP);
00216
00217
00218 void gamma_line1(double *EG, double *ES, int *LP, int *LF,
00219 int *NR, int *NP);
00220 };
00221
00222
00223
00224 class mf14_file : public mf4_file
00225 {
00226 public:
00227
00228 void first_line(int *ZA, double *AWR, int *LI, int *LTT,
00229 int *NK, int *NI);
00230
00231
00232 void read_EG( double *EG, int *NR, int *NE );
00233
00234
00235 void discrete( double *EG );
00236
00237
00238 void Leg_head( double *e_in, int *NL );
00239
00240
00241 int get_order( int NK, int NI );
00242
00243
00244 void skip_iso( int NI );
00245 };
00246
00247
00248
00249 class mf15_file : public ENDF_file
00250 {
00251 public:
00252
00253 void read_line1(int *ZA, double *AWR, int *NC);
00254
00255
00256 void weight_line(int *LF, int *NR, int *NP);
00257
00258
00259 void E_in_interp(int *NR, int *NP);
00260
00261
00262 void get_E_in(double *E_in, int *NR, int *NP);
00263 };
00264
00265
00266
00267 class mt458_file : public ENDF_file
00268 {
00269 public:
00270
00271 void read_line1(int *ZA, double *AWR);
00272
00273
00274 void read_line2(int *num_E, int *num_data);
00275
00276
00277 void read_data( double *E_1, double *dE_1, double *E_2,
00278 double *dE_2, double *E_3, double *dE_3 );
00279
00280
00281 double reduce_Q( double Q );
00282
00283 };
00284
00285 #endif