00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "dark_ini_by_cpl.h"
00018
00019
00020
00021
00022
00023
00024 static void parse_section_frames(dark_config *,
00025 cpl_frameset* sof, cpl_frameset** raw, int* status);
00026 static void parse_section_cleanmean(dark_config *, cpl_parameterlist* cpl_cfg);
00027 static void parse_section_qclog(dark_config * cfg, cpl_parameterlist * cpl_cfg);
00028
00029 void detnoise_free(dark_config * cfg);
00030
00031
00043
00044
00045 dark_config * parse_cpl_input_dark(cpl_parameterlist * cpl_cfg,
00046 cpl_frameset* sof, cpl_frameset** raw)
00047 {
00048 const cxchar * _id = "parse_cpl_input_dark";
00049 int status=0;
00050
00051 dark_config * cfg ;
00052
00053
00054
00055
00056 cfg = dark_cfg_create();
00057
00058
00059
00060
00061
00062 parse_section_cleanmean (cfg, cpl_cfg);
00063 parse_section_qclog (cfg, cpl_cfg);
00064 parse_section_frames (cfg, sof, raw, &status);
00065 if (status > 0) {
00066 cpl_msg_error(_id,"parsing cpl input");
00067 dark_cfg_destroy(cfg);
00068 cfg = NULL ;
00069 return NULL ;
00070 }
00071
00072 return cfg ;
00073 }
00074
00075 static void
00076 parse_section_frames(dark_config * cfg,
00077 cpl_frameset * sof,
00078 cpl_frameset** raw,
00079 int* status)
00080 {
00081
00082 const cxchar * _id = "parse_section_frames";
00083 int i;
00084 cxint nraw=0;
00085 cxint nraw_good=0;
00086 cpl_frame* frame=NULL;
00087
00088 char spat_res[FILE_NAME_SZ];
00089 char lamp_status[FILE_NAME_SZ];
00090 char band[FILE_NAME_SZ];
00091 int ins_set=0;
00092 sinfoni_extract_raw_frames_type(sof,raw,RAW_DARK);
00093
00094 nraw=cpl_frameset_get_size(*raw);
00095 if (nraw < 1) {
00096 cpl_msg_error(_id,"Too few (%d) raw frames (%s) present in"
00097 "frameset!Aborting...",nraw,RAW_DARK);
00098 (*status)++;
00099 return;
00100 }
00101
00102
00103
00104
00105
00106 cfg->inFrameList = cpl_malloc(nraw * sizeof(char*));
00107
00108
00109
00110 for (i=0 ; i<nraw ; i++) {
00111 frame = cpl_frameset_get_frame(*raw,i);
00112
00113
00114 cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));
00115 nraw_good++;
00116 }
00117
00118 if(nraw_good<1) {
00119 cpl_msg_error(_id,"no good raw frame in input, something wrong!");
00120 (*status)++;
00121 return;
00122 }
00123
00124 cfg->nframes = nraw ;
00125
00126 strcpy(cfg -> outName, DARK_OUT_FILENAME);
00127
00128
00129 frame = cpl_frameset_get_frame(*raw,0);
00130 sinfoni_get_spatial_res(frame,spat_res);
00131
00132 switch(sinfoni_frame_is_on(frame))
00133 {
00134 case 0:
00135 strcpy(lamp_status,"on");
00136 break;
00137 case 1:
00138 strcpy(lamp_status,"off");
00139 break;
00140 case -1:
00141 strcpy(lamp_status,"undefined");
00142 break;
00143 default:
00144 strcpy(lamp_status,"undefined");
00145 break;
00146
00147
00148 }
00149
00150 sinfoni_get_band(frame,band);
00151 cpl_msg_info(_id,"spatial resolution: %s lamp status: %s band: %s \n",
00152 spat_res, lamp_status, band);
00153
00154
00155 sinfoni_get_ins_set(band,&ins_set);
00156 return ;
00157 }
00158
00159 static void
00160 parse_section_cleanmean(dark_config * cfg, cpl_parameterlist * cpl_cfg)
00161 {
00162 cpl_parameter *p;
00163
00164 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.low_rejection");
00165 cfg -> lo_reject = cpl_parameter_get_double(p);
00166
00167 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.high_rejection");
00168 cfg -> hi_reject = cpl_parameter_get_double(p);
00169
00170 }
00171
00172 static void
00173 parse_section_qclog(dark_config * cfg, cpl_parameterlist * cpl_cfg)
00174 {
00175 cpl_parameter *p;
00176
00177 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_xmin");
00178 cfg -> qc_ron_xmin = cpl_parameter_get_int(p);
00179
00180 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_xmax");
00181 cfg -> qc_ron_xmax = cpl_parameter_get_int(p);
00182
00183 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_ymin");
00184 cfg -> qc_ron_ymin = cpl_parameter_get_int(p);
00185
00186 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_ymax");
00187 cfg -> qc_ron_ymax = cpl_parameter_get_int(p);
00188
00189 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_hsize");
00190 cfg -> qc_ron_hsize = cpl_parameter_get_int(p);
00191
00192 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_nsamp");
00193 cfg -> qc_ron_nsamp = cpl_parameter_get_int(p);
00194
00195
00196
00197 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_xmin");
00198 cfg -> qc_fpn_xmin = cpl_parameter_get_int(p);
00199
00200 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_xmax");
00201 cfg -> qc_fpn_xmax = cpl_parameter_get_int(p);
00202
00203 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_ymin");
00204 cfg -> qc_fpn_ymin = cpl_parameter_get_int(p);
00205
00206 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_ymax");
00207 cfg -> qc_fpn_ymax = cpl_parameter_get_int(p);
00208
00209 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_hsize");
00210 cfg -> qc_fpn_hsize = cpl_parameter_get_int(p);
00211
00212 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_nsamp");
00213 cfg -> qc_fpn_nsamp = cpl_parameter_get_int(p);
00214
00215
00216 }
00217
00218 void
00219 dark_free(dark_config * cfg)
00220 {
00221 int i=0;
00222 for(i=0;i<cfg->nframes;i++) {
00223
00224 cpl_free(cfg->inFrameList[i]);
00225 }
00226 cpl_free(cfg->inFrameList);
00227 dark_cfg_destroy(cfg);
00228 return;
00229
00230 }