00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "badsky_ini_by_cpl.h"
00017
00018
00019
00020
00021 static void parse_section_frames(badsky_config * cfg, cpl_parameterlist* cpl_cfg,
00022 cpl_frameset* sof, cpl_frameset** raw, int* status);
00023 static void parse_section_badpix(badsky_config * cfg, cpl_parameterlist* cpl_cfg);
00024 static void parse_section_thresh(badsky_config * cfg, cpl_parameterlist* cpl_cfg);
00025
00026
00027
00028
00029
00030
00041
00042
00043 badsky_config * parse_cpl_input_badsky(cpl_parameterlist * cpl_cfg,
00044 cpl_frameset* sof,
00045 cpl_frameset** raw)
00046 {
00047 const char* _id = "parse_cpl_input_badnorm";
00048 badsky_config * cfg ;
00049 int status = 0;
00050
00051 cfg = badsky_cfg_create();
00052 parse_section_badpix (cfg, cpl_cfg);
00053 parse_section_thresh (cfg, cpl_cfg);
00054 parse_section_frames (cfg, cpl_cfg, sof, raw,&status);
00055 if(status>0) {
00056 cpl_msg_error(_id,"parsing cpl input");
00057 badsky_cfg_destroy(cfg);
00058 cfg = NULL ;
00059 return NULL ;
00060 }
00061 return cfg ;
00062
00063 }
00064
00065 static void
00066 parse_section_frames(badsky_config * cfg,
00067 cpl_parameterlist * cpl_cfg,
00068 cpl_frameset * sof,
00069 cpl_frameset ** raw,
00070 int* status)
00071 {
00072 const char * _id = "badnorm_ini_by_cpl";
00073 int i=0;
00074 int nraw = 0;
00075 char * tag=NULL;
00076
00077 int nraw_good = 0;
00078 cpl_frame* frame=NULL;
00079 cpl_parameter *p;
00080 char spat_res[FILE_NAME_SZ];
00081 char lamp_status[FILE_NAME_SZ];
00082 char band[FILE_NAME_SZ];
00083 int ins_set=0;
00084
00085 *raw=cpl_frameset_new();
00086
00087
00088 sinfoni_contains_frames_type(sof,raw,RAW_SKY);
00089 nraw=cpl_frameset_get_size(*raw);
00090 if (nraw < 1) {
00091 cpl_msg_error(_id, "Too few (%d) raw frames %s present in"
00092 "frameset!Aborting...",nraw,RAW_SKY);
00093 (*status)++;
00094 return;
00095 }
00096
00097
00098
00099 cfg->framelist = cpl_malloc(nraw * sizeof(char*));
00100
00101
00102 for (i=0 ; i<nraw ; i++) {
00103 frame = cpl_frameset_get_frame(*raw,i);
00104 tag = (char*)cpl_frame_get_tag(frame) ;
00105 if(file_exists((char*) cpl_frame_get_filename(frame))==1)
00106 {
00107
00108 cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
00109 nraw_good++;
00110 }
00111 }
00112
00113 if(nraw_good<1) {
00114 cpl_msg_error(_id,"Error: no good raw frame in input, something wrong!");
00115 (*status)++;
00116 return;
00117 }
00118
00119
00120 if(NULL != cpl_frameset_find(sof,PRO_MASTER_DARK)) {
00121 frame = cpl_frameset_find(sof,PRO_MASTER_DARK);
00122 strcpy(cfg -> dark, cpl_strdup(cpl_frame_get_filename(frame)));
00123 } else {
00124 cpl_msg_warning(_id,"Frame %s not found!", PRO_MASTER_DARK);
00125 }
00126
00127
00128 cfg->nframes = nraw_good ;
00129
00130
00131 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.out_filename");
00132 strcpy(cfg -> outName, cpl_parameter_get_string(p));
00133
00134 frame = cpl_frameset_get_frame(*raw,0);
00135 sinfoni_get_spatial_res(frame,spat_res);
00136
00137
00138 switch(sinfoni_frame_is_on(frame))
00139 {
00140 case 0:
00141 strcpy(lamp_status,"on");
00142 break;
00143 case 1:
00144 strcpy(lamp_status,"off");
00145 break;
00146 case -1:
00147 strcpy(lamp_status,"undefined");
00148 break;
00149 default:
00150 strcpy(lamp_status,"undefined");
00151 break;
00152 }
00153
00154 sinfoni_get_band(frame,band);
00155 cpl_msg_info(_id,"spatial resolution: %s lamp status: %s band: %s \n",
00156 spat_res, lamp_status, band);
00157
00158
00159 sinfoni_get_ins_set(band,&ins_set);
00160 return;
00161
00162 }
00163
00164 static void
00165 parse_section_badpix(badsky_config * cfg, cpl_parameterlist * cpl_cfg)
00166 {
00167 cpl_parameter *p;
00168
00169 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.sigma_factor");
00170 cfg -> sigmaFactor = cpl_parameter_get_double(p);
00171
00172 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.method_index");
00173 cfg -> methodInd = cpl_parameter_get_int(p);
00174
00175 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.factor");
00176 cfg -> factor = cpl_parameter_get_double(p);
00177
00178 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.iterations");
00179 cfg -> iterations = cpl_parameter_get_int(p);
00180
00181 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.low_rejection");
00182 cfg -> loReject = cpl_parameter_get_double(p);
00183
00184 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.high_rejection");
00185 cfg -> hiReject = cpl_parameter_get_double(p);
00186
00187 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.llx");
00188 cfg -> llx = cpl_parameter_get_int(p);
00189
00190 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.lly");
00191 cfg -> lly = cpl_parameter_get_int(p);
00192
00193 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.urx");
00194 cfg -> urx = cpl_parameter_get_int(p);
00195
00196 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.ury");
00197 cfg -> ury = cpl_parameter_get_int(p);
00198
00199 }
00200
00201 static void
00202 parse_section_thresh(badsky_config * cfg, cpl_parameterlist * cpl_cfg)
00203 {
00204 cpl_parameter *p;
00205
00206 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.threshold_index");
00207 cfg -> threshInd = cpl_parameter_get_bool(p);
00208
00209 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.mean_factor");
00210 cfg -> meanfactor = cpl_parameter_get_double(p);
00211
00212
00213 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.min_cut");
00214 cfg -> mincut = cpl_parameter_get_double(p);
00215
00216 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.bp_sky.max_cut");
00217 cfg -> maxcut = cpl_parameter_get_double(p);
00218
00219 }
00220
00221 void
00222 badsky_free(badsky_config * cfg)
00223 {
00224 cpl_free(cfg->framelist);
00225 badsky_cfg_destroy(cfg);
00226
00227 return;
00228
00229 }