00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "ns_ini_by_cpl.h"
00018
00019
00020
00021
00022 void ns_free_alloc(ns_config * cfg);
00023 static void parse_section_frames (ns_config *,cpl_parameterlist* cpl_cfg,cpl_frameset* sof, cpl_frameset** raw, int* status);
00024 static void parse_section_cleanmean (ns_config *,cpl_parameterlist* cpl_cfg);
00025 static void parse_section_gaussconvolution (ns_config *,cpl_parameterlist* cpl_cfg);
00026 static void parse_section_northsouthtest(ns_config *,cpl_parameterlist* cpl_cfg);
00027
00028
00029
00030
00041
00042
00043 ns_config * parse_cpl_input_ns(cpl_parameterlist * cpl_cfg, cpl_frameset* sof,
00044 cpl_frameset** raw)
00045 {
00046 ns_config * cfg = ns_cfg_create();
00047 const cxchar * _id = "parse_cpl_input_ns";
00048 int status=0;
00049
00050
00051
00052
00053
00054 parse_section_cleanmean (cfg,cpl_cfg);
00055 parse_section_gaussconvolution (cfg,cpl_cfg);
00056 parse_section_northsouthtest (cfg,cpl_cfg);
00057 parse_section_frames (cfg,cpl_cfg,sof,raw,&status);
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 if (status > 0) {
00074 cpl_msg_error(_id,"parsing cpl input");
00075 ns_cfg_destroy(cfg);
00076 cfg = NULL ;
00077 return NULL ;
00078 }
00079 return cfg ;
00080 }
00081
00082
00083
00084
00085 static void
00086 parse_section_frames(ns_config * cfg,
00087 cpl_parameterlist * cpl_cfg,
00088 cpl_frameset * sof,
00089 cpl_frameset ** raw,
00090 int* status)
00091 {
00092 int i;
00093 int nobj ;
00094 int noff ;
00095 const char * _id = "parse_section_frames";
00096 int nraw=0;
00097 char* tag;
00098 cpl_frame* frame = NULL;
00099 cpl_parameter *p;
00100 char spat_res[FILE_NAME_SZ];
00101 char lamp_status[FILE_NAME_SZ];
00102 char band[FILE_NAME_SZ];
00103 int ins_set=0;
00104 nstpar* nstp=nstpar_new();
00105
00106 sinfoni_extract_raw_frames_type(sof,raw,PRO_FIBRE_NS_STACKED_DIST);
00107
00108 nraw = cpl_frameset_get_size(*raw);
00109
00110 if(nraw == 0) {
00111 cpl_msg_error(_id,"No input raw frames");
00112 nstpar_delete(nstp);
00113 (*status)++;
00114 return;
00115 }
00116
00117
00118 cfg->framelist = cpl_malloc(nraw * sizeof(char*));
00119 cfg->frametype = cpl_malloc(nraw * sizeof(int));
00120
00121
00122
00123
00124 i=0 ;
00125 nobj = 0 ;
00126 noff = 0 ;
00127
00128 for (i=0 ; i<nraw ; i++) {
00129 frame = cpl_frameset_get_frame(*raw,i);
00130 if(file_exists((char*) cpl_frame_get_filename(frame))==1)
00131 {
00132
00133 tag=(char*) cpl_frame_get_tag(frame);
00134
00135 if(cpl_frame_get_tag(frame) != NULL) {
00136
00137 if((sinfoni_frame_is_on(frame) == 0))
00138 {
00139
00140 cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00141 cfg->frametype[i] = FRAME_OFF ;
00142 noff++;
00143 }
00144 else if(sinfoni_is_sky_flat(tag))
00145 {
00146
00147 cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00148 cfg->frametype[i] = FRAME_OFF ;
00149 noff++;
00150 }
00151 else if((sinfoni_frame_is_on(frame) == 1))
00152 {
00153
00154 cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00155 cfg->frametype[i] = FRAME_ON ;
00156 nobj++;
00157 }
00158 else
00159 {
00160
00161
00162 cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00163 cfg->frametype[i] = FRAME_ON ;
00164 nobj++;
00165 }
00166 }
00167 else
00168 {
00169
00170
00171 cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00172 cfg->frametype[i] = FRAME_ON ;
00173 nobj++;
00174 }
00175
00176
00177 }
00178 else {
00179 cpl_msg_warning(_id,"file %s does not exist",
00180 cpl_frame_get_filename(frame));
00181 }
00182
00183 }
00184
00185
00186
00187 if((noff == 0) && (nobj == 0)) {
00188 cpl_msg_error(_id,"Wrong input frames");
00189 nstpar_delete(nstp);
00190 ns_free_alloc(cfg);
00191 (*status)++;
00192 return;
00193 }
00194
00195 cfg->nframes = nraw ;
00196 cfg->nobj = nobj ;
00197 cfg->noff = noff ;
00198
00199 strcpy(cfg -> outName, NS_TEST_DISTANCES_OUT_FILENAME);
00200
00201
00202 frame = cpl_frameset_get_frame(*raw,0);
00203 sinfoni_get_spatial_res(frame,spat_res);
00204
00205 switch(sinfoni_frame_is_on(frame))
00206 {
00207 case 0:
00208 strcpy(lamp_status,"on");
00209 break;
00210 case 1:
00211 strcpy(lamp_status,"off");
00212 break;
00213 case -1:
00214 strcpy(lamp_status,"undefined");
00215 break;
00216 default:
00217 strcpy(lamp_status,"undefined");
00218 break;
00219
00220
00221 }
00222
00223 sinfoni_get_band(frame,band);
00224 cpl_msg_info(_id,"stat_res: %s lamp_status: %s band: %s \n",
00225 spat_res, lamp_status, band);
00226
00227
00228 sinfoni_get_ins_set(band,&ins_set);
00229
00230
00231 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.fwhm");
00232 if(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {
00233 cfg -> fwhm = cpl_parameter_get_double(p);
00234 } else {
00235 cfg -> fwhm = nstp->fwhm[ins_set];
00236 }
00237
00238 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.min_diff");
00239 if(cpl_parameter_get_double(p) != cpl_parameter_get_default_double(p)) {
00240 cfg -> minDiff = cpl_parameter_get_double(p);
00241 } else {
00242 cfg -> minDiff = nstp->min_dif[ins_set];
00243 }
00244 nstpar_delete(nstp);
00245
00246
00247 if(cfg -> maskInd) {
00248 if(NULL != cpl_frameset_find(sof,PRO_BP_MAP_DI)) {
00249 frame = cpl_frameset_find(sof,PRO_BP_MAP_DI);
00250 strcpy(cfg -> mask,cpl_frame_get_filename(frame));
00251 } else {
00252 cpl_msg_error(_id,"Frame %s not found! Exit!", PRO_BP_MAP_DI);
00253 ns_free_alloc(cfg);
00254 (*status)++;
00255 return;
00256 }
00257 }
00258
00259
00260 return ;
00261 }
00262
00263 static void
00264 parse_section_cleanmean(ns_config * cfg,cpl_parameterlist * cpl_cfg)
00265 {
00266
00267 cpl_parameter *p;
00268 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.low_rejection");
00269 cfg -> loReject = cpl_parameter_get_double(p);
00270
00271 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.high_rejection");
00272 cfg -> hiReject = cpl_parameter_get_double(p);
00273
00274 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.mask_ind");
00275 cfg -> maskInd = cpl_parameter_get_bool(p);
00276
00277 return ;
00278 }
00279
00280 static void
00281 parse_section_gaussconvolution(ns_config * cfg,cpl_parameterlist * cpl_cfg)
00282 {
00283 cpl_parameter *p;
00284 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.gauss_ind");
00285 cfg -> gaussInd = cpl_parameter_get_bool(p);
00286
00287 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.kernel_half_width");
00288 cfg -> hw = cpl_parameter_get_int(p);
00289
00290 }
00291
00292 static void
00293 parse_section_northsouthtest(ns_config * cfg,cpl_parameterlist * cpl_cfg)
00294 {
00295
00296 cpl_parameter *p;
00297 strcat(cfg -> fitsname, NS_TEST_OUT_FILENAME);
00298 cfg -> nslits = NSLITLETS;
00299
00300 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.half_width");
00301 cfg -> halfWidth = cpl_parameter_get_int(p);
00302
00303 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.fwhm");
00304 cfg -> fwhm = cpl_parameter_get_double(p);
00305
00306 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.min_diff");
00307 cfg -> minDiff = cpl_parameter_get_double(p);
00308
00309 cfg -> estimated_dist = ESTIMATED_SLITLETS_DISTANCE;
00310
00311 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.north_south_test.dev_tol");
00312 cfg -> devtol = cpl_parameter_get_double(p);
00313
00314 return ;
00315 }
00316
00317 void
00318 ns_free(ns_config * cfg)
00319 {
00320 ns_free_alloc(cfg);
00321 ns_cfg_destroy(cfg);
00322
00323 return;
00324
00325 }
00326 void
00327 ns_free_alloc(ns_config * cfg)
00328 {
00329
00330 cpl_free(cfg->framelist);
00331 cpl_free(cfg->frametype);
00332 return;
00333
00334 }