32 #include <rl_raysuplib/rl_DielectricPOD_rdb.h> 33 #include <rl_raylib/rl_DielectricPODArray.h> 41 #include <tracefctxx/TraceFct.h> 42 #include <tracefct/exiterrvals.h> 43 #include <mst_rdb/mst_rdb.h> 44 #include <suplib/str.h> 48 #define NUM_DATA_ITEMS 3 60 {
"alpha_gamma", Ealpha_gamma },
62 TokList dieldata_types = GenTokList( dieldata_type );
73 : rl_DielectricPODArray()
74 {
if ( strlen(rdb_file) != 0 ) {
init( rdb_file ); } }
77 init(
char const rdb_filename_in[] )
79 TraceFct tf(
"rl_DielectricPOD_rdb::init" );
80 typedef struct rfl_record
87 RDBFieldStInfo fields[] =
89 RDBentry(energy, RDB_Num, rfl_record),
90 RDBentry(alpha, RDB_Num, rfl_record),
91 RDBentry(gamma, RDB_Num, rfl_record)
93 #define NFIELDS (sizeof(fields) / sizeof(RDBFieldStInfo) ) 101 str_interp( rdb_filename_in, 1, NULL, NULL, &error );
104 tf.die(
"error interpolating filename: %s", rdb_filename_in );
106 FILE* in = fopen(rdb_filename,
"r");
108 tf.exit(ExitERR_fopen,
"unable to open input `%s'", rdb_filename);
110 rdbHeader* hdr = rdb_rd_hdr(in);
112 tf.die(
"rdb file `%s' contains no rdb headers!", rdb_filename );
114 DataColumnMap_st* map = rdb_map_cols_stst(hdr, NFIELDS, fields);
119 nelts_ = rdb_count(in, hdr);
122 "reflectance rdb file '%s' is not rewindable", rdb_filename);
124 else if ( nelts_ < 2 )
126 "reflectance rdb file '%s' must have at least two rows", rdb_filename);
132 double* energy =
new double[nelts_];
133 double* alpha =
new double[nelts_];
134 double* gamma =
new double[nelts_];
136 data_ =
new rl_Traits::rl_DielectricPOD[ nelts_ ];
138 tf.exit(ExitERR_alloc,
"unable to malloc rl_DielectricPOD array");
145 for ( n = 0 ; n < nelts_ ; ++n )
147 rdb_col_read_st(in, hdr, map, &record);
148 energy[n] = record.energy;
149 alpha[n] = record.alpha;
150 gamma[n] = record.gamma;
153 rl_DielectricPODArray::init( nelts_, energy, alpha, gamma );
162 free( rdb_filename );
~rl_DielectricPOD_rdb()
Destructor.
void init(char const rdb_file[])
Initializer.
rl_DielectricPOD_rdb(char const rdb_file[]="")
Constructor.