objspider_ini_by_cpl.c

00001 
00002 /*----------------------------------------------------------------------------
00003    
00004    File name    :   objspider_ini_by_cpl.c
00005    Author       :   Andrea Modigliani
00006    Created on   :   May 22, 2004
00007    Description  :   object cube creation cpl input handling for SPIFFI
00008 
00009  ---------------------------------------------------------------------------*/
00010 
00011 
00012 
00013 /*---------------------------------------------------------------------------
00014                                 Includes
00015  ---------------------------------------------------------------------------*/
00016 
00017 #include "objspider_ini_by_cpl.h"
00018 
00019 /*---------------------------------------------------------------------------
00020                     Functions private to this module
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     * Perform sanity checks, fill up the structure with what was
00054     * found in the ini file
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     /* Get the raw and the calibration files */
00108     /* Labelise the input frames according to their tags */
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         /* Only one label - all images are objects observations */
00117         /* Verify that it is really an observation */
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         /* For each label */
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             /* printf("tag=%s frame=%s\n",tag,
00131            cpl_strdup(cpl_frame_get_filename(cur_frame))); */
00132             if (sinfoni_is_stack(tag) == 1) {
00133              /* Stacked frame */
00134               *stk = cpl_frameset_duplicate(cur_set) ;
00135               nstk++;
00136             } else if (sinfoni_is_wavemap(tag)) {
00137                 /* pos slit calibration file */
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                 /* pos slit calibration file */
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                /* first col calibration file */
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                /* first col calibration file */
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    /* TEMPORALLY COMMENTED OUT */
00185     nraw    = cpl_frameset_get_size(*stk);
00186     /* Test if the rawframes have been found */
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    /* Allocate structures to go into the blackboard */
00201    cfg->framelist     = cpl_malloc(nraw * sizeof(char*));
00202 
00203   /* read input frames */
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       /* Store file name into framelist */
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    /* Copy relevant information into the blackboard */
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    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.mask");
00278    strcpy(cfg -> maskname, cpl_parameter_get_string(p));
00279    printf("Mask name %s\n",cfg -> maskname);
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    cpl_parameter* p;
00302    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.halo_correct_index");
00303    cfg -> halocorrectInd = cpl_parameter_get_bool(p);
00304   */
00305   cfg -> halocorrectInd=0;
00306 
00307    /*
00308    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.halo_spectrum_filename");
00309    strcpy(cfg -> halospectrum, cpl_parameter_get_string(p));
00310    printf("Spectrum filename %s\n",cfg -> halospectrum);
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    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.slitlets_position_list");
00324    strcpy(cfg -> poslist, cpl_parameter_get_string(p));
00325    printf("Slitlets position Index %s\n",cfg -> poslist);
00326    */
00327 
00328    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.nslits");
00329    cfg -> nslits = cpl_parameter_get_int(p);
00330 
00331    /*
00332    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.objspider.first_column_filename");
00333    strcpy(cfg -> firstCol, cpl_parameter_get_string(p));
00334    printf("First Column Filename %s\n",cfg -> firstCol);
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 }

Generated on Wed Oct 26 13:08:54 2005 for SINFONI Pipeline Reference Manual by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001