00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "objspider_ini_by_cpl.h"
00018
00019
00020
00021
00022
00023 static void parse_section_frames(object_config *,cpl_frameset* sof, cpl_frameset**stk, int* status);
00024 static void parse_section_jittering(object_config *, cpl_parameterlist * cpl_cfg);
00025 static void parse_section_resampling(object_config *, cpl_parameterlist * cpl_cfg);
00026 static void parse_section_calibration(object_config *);
00027 static void parse_section_cubecreation(object_config *, cpl_parameterlist * cpl_cfg);
00028 static void parse_section_finetuning(object_config *, cpl_parameterlist * cpl_cfg);
00029 static void parse_section_skyextraction(object_config *, cpl_parameterlist * cpl_cfg);
00030
00031
00032
00043
00044
00045 object_config *
00046 parse_cpl_input_objspider(cpl_parameterlist * cpl_cfg,cpl_frameset* sof,
00047 cpl_frameset** stk)
00048 {
00049 const char* _id = "parse_cpl_input_objspider";
00050 object_config * cfg = object_cfg_create();
00051 int status=0;
00052
00053
00054
00055
00056
00057
00058 parse_section_resampling (cfg, cpl_cfg);
00059 parse_section_calibration (cfg);
00060 parse_section_cubecreation (cfg, cpl_cfg);
00061 parse_section_finetuning (cfg, cpl_cfg);
00062 parse_section_skyextraction(cfg, cpl_cfg);
00063 parse_section_jittering (cfg, cpl_cfg);
00064 parse_section_frames (cfg, sof,stk,&status);
00065 if (status > 0) {
00066 cpl_msg_error(_id,"parsing cpl input");
00067 object_cfg_destroy(cfg);
00068 cfg = NULL ;
00069 return NULL ;
00070 }
00071
00072 return cfg ;
00073 }
00074
00075 static void
00076 parse_section_frames(object_config * cfg,
00077 cpl_frameset* sof,
00078 cpl_frameset** stk,
00079 int* status)
00080 {
00081 const char* _id = "parse_section_frames";
00082 cxint nraw_good =0;
00083
00084
00085
00086 int nframes=0;
00087 int nraw=0;
00088 cpl_frame* frame = NULL;
00089 int nstk=0;
00090 int * labels ;
00091 int nlabels ;
00092 cpl_frameset * cur_set ;
00093 cpl_frame * cur_frame ;
00094 char * tag;
00095 int i=0;
00096 int wave_map=0;
00097 int pos_slit=0;
00098 int first_col=0;
00099 int halo_sp=0;
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
00105 nframes = cpl_frameset_get_size(sof);
00106
00107
00108
00109 if ((labels = cpl_frameset_labelise(sof, sinfoni_compare_tags,
00110 &nlabels )) == NULL) {
00111 cpl_msg_error(_id, "Cannot labelise the input frames") ;
00112 (*status)++;
00113 return ;
00114 }
00115 if (nlabels == 1) {
00116
00117
00118 cur_frame = cpl_frameset_get_frame(sof, 0) ;
00119 tag = (char*)cpl_frame_get_tag(cur_frame) ;
00120 if (sinfoni_is_stack(tag)) {
00121 *stk = cpl_frameset_duplicate(sof) ;
00122 nstk++;
00123 }
00124 } else {
00125
00126 for (i=0 ; i<nlabels ; i++) {
00127 cur_set = cpl_frameset_extract(sof, labels, i) ;
00128 cur_frame = cpl_frameset_get_frame(cur_set, 0) ;
00129 tag = (char*)cpl_frame_get_tag(cur_frame) ;
00130
00131
00132 if (sinfoni_is_stack(tag) == 1) {
00133
00134 *stk = cpl_frameset_duplicate(cur_set) ;
00135 nstk++;
00136 } else if (sinfoni_is_wavemap(tag)) {
00137
00138 strcpy(cfg -> wavemap,
00139 cpl_strdup(cpl_frame_get_filename(cur_frame)));
00140 wave_map=1;
00141 } else if (sinfoni_is_distlist(tag)) {
00142
00143 strcpy(cfg -> poslist,
00144 cpl_strdup(cpl_frame_get_filename(cur_frame)));
00145 pos_slit=1;
00146 } else if (sinfoni_is_firstcol(tag)) {
00147
00148 strcpy(cfg -> firstCol,
00149 cpl_strdup(cpl_frame_get_filename(cur_frame)));
00150 first_col=1;
00151 } else if (sinfoni_is_halosp(tag)) {
00152
00153 strcpy(cfg -> halospectrum,
00154 cpl_strdup(cpl_frame_get_filename(cur_frame)));
00155 halo_sp=1;
00156 }
00157 cpl_frameset_delete(cur_set) ;
00158 }
00159 }
00160 cpl_free(labels) ;
00161 if (nstk == 0) {
00162 cpl_msg_error(_id, "Cannot find good input frames") ;
00163 (*status)++;
00164 return ;
00165 }
00166
00167 if (wave_map == 0) {
00168 cpl_msg_error(_id, "Cannot find wave map") ;
00169 (*status)++;
00170 return ;
00171 }
00172 if (pos_slit == 0) {
00173 cpl_msg_error(_id, "Cannot find pos slit") ;
00174 (*status)++;
00175 return ;
00176 }
00177 if (first_col == 0) {
00178 cpl_msg_error(_id, "Cannot find first col") ;
00179 (*status)++;
00180 return ;
00181 }
00182
00183
00184
00185 nraw = cpl_frameset_get_size(*stk);
00186
00187 if (nraw < 1) {
00188 cpl_msg_error(_id, "Cannot find input stacked frames in the input list") ;
00189 (*status)++;
00190 return ;
00191 }
00192
00193 nraw = cpl_frameset_get_size(*stk);
00194 printf("nraw=%d\n",nraw);
00195 if (nraw < 1) {
00196 printf("Error: no raw frame in input, something wrong!");
00197 exit(-1);
00198 }
00199
00200
00201 cfg->framelist = cpl_malloc(nraw * sizeof(char*));
00202
00203
00204 for (i=0 ; i<nraw ; i++) {
00205 frame = cpl_frameset_get_frame(*stk,i);
00206 if(file_exists((char*) cpl_frame_get_filename(frame))==1)
00207 {
00208 cfg->framelist[i]=cpl_strdup(cpl_frame_get_filename(frame));
00209 nraw_good++;
00210 }
00211
00212 printf("raw frame=%s\n",cfg->framelist[i]);
00213 }
00214 printf("Nframes=%d\n",nraw);
00215 if (nraw_good < 1) {
00216 cpl_msg_error(_id,"no good raw frame in input!");
00217 (*status)++;
00218 return;
00219 }
00220
00221 cfg->nframes = nraw ;
00222
00223 strcpy(cfg -> outName, SKYSPIDER_OUT_FILENAME);
00224 strcpy(cfg -> maskname, SKYSPIDER_MASK_OUT_FILENAME);
00225
00226
00227 frame = cpl_frameset_get_frame(*stk,0);
00228
00229 sinfoni_get_spatial_res(frame,spat_res);
00230 switch(sinfoni_frame_is_on(frame))
00231 {
00232
00233 case 0:
00234 strcpy(lamp_status,"on");
00235 break;
00236 case 1:
00237 strcpy(lamp_status,"off");
00238 break;
00239 case -1:
00240 strcpy(lamp_status,"undefined");
00241 break;
00242 default:
00243 strcpy(lamp_status,"undefined");
00244 break;
00245 }
00246 sinfoni_get_band(frame,band);
00247 printf("stat_res: %s lamp_status: %s band: %s \n",
00248 spat_res, lamp_status, band);
00249
00250
00251 sinfoni_get_ins_set(band,&ins_set);
00252
00253
00254
00255 return;
00256 }
00257
00258
00259 static void
00260 parse_section_jittering(object_config * cfg,cpl_parameterlist * cpl_cfg)
00261 {
00262 cpl_parameter* p;
00263
00264 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.jitter_index");
00265 cfg -> jitterind = cpl_parameter_get_bool(p);
00266
00267 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.size_x");
00268 cfg -> size_x = cpl_parameter_get_int(p);
00269
00270 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.size_y");
00271 cfg -> size_y = cpl_parameter_get_int(p);
00272
00273 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.kernel_type");
00274 strcpy(cfg -> kernel_type, cpl_parameter_get_string(p));
00275
00276
00277
00278
00279
00280
00281
00282 }
00283
00284 static void
00285 parse_section_resampling(object_config * cfg,cpl_parameterlist* cpl_cfg)
00286 {
00287 cpl_parameter* p;
00288
00289 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.n_coeffs");
00290 cfg -> ncoeffs = cpl_parameter_get_int(p);
00291 cfg -> nrows=2560;
00292
00293
00294 return ;
00295 }
00296
00297 static void
00298 parse_section_calibration(object_config * cfg)
00299 {
00300
00301
00302
00303
00304
00305 cfg -> halocorrectInd=0;
00306
00307
00308
00309
00310
00311
00312
00313 }
00314
00315 static void
00316 parse_section_cubecreation(object_config * cfg,cpl_parameterlist* cpl_cfg)
00317 {
00318 cpl_parameter* p;
00319 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.nord_south_index");
00320 cfg -> northsouthInd = cpl_parameter_get_bool(p);
00321
00322
00323
00324
00325
00326
00327
00328 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.nslits");
00329 cfg -> nslits = cpl_parameter_get_int(p);
00330
00331
00332
00333
00334
00335
00336
00337 return ;
00338 }
00339
00340 static void
00341 parse_section_finetuning(object_config * cfg,cpl_parameterlist* cpl_cfg)
00342 {
00343 cpl_parameter* p;
00344
00345 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.fine_tuning_method");
00346 strcpy(cfg -> method, cpl_parameter_get_string(p));
00347
00348 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.order");
00349 cfg -> order = cpl_parameter_get_int(p);
00350
00351 }
00352
00353 static void
00354 parse_section_skyextraction(object_config * cfg,cpl_parameterlist* cpl_cfg)
00355 {
00356
00357 cpl_parameter* p;
00358 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.lower_rejection");
00359 cfg -> loReject = (float) cpl_parameter_get_double(p);
00360
00361 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.higher_rejection");
00362 cfg -> hiReject = (float) cpl_parameter_get_double(p);
00363
00364 p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.tolerance");
00365 cfg -> tolerance = cpl_parameter_get_int(p);
00366
00367 }
00368
00369
00370 void
00371 objspider_free(object_config * cfg) {
00372 cpl_free(cfg->framelist);
00373 object_cfg_destroy (cfg);
00374 return;
00375 }