badsky_ini_by_cpl.c

00001 
00002 /*----------------------------------------------------------------------------
00003    
00004    File name    :   badsky_ini_by_cpl.c
00005    Author       :   Andrea Modigliani
00006    Created on   :   Jun 16, 2004
00007    Description  :   parse cpl input for the search of static bad pixels
00008 
00009  ---------------------------------------------------------------------------*/
00010 
00011 
00012 /*---------------------------------------------------------------------------
00013                                 Includes
00014  ---------------------------------------------------------------------------*/
00015 
00016 #include "badsky_ini_by_cpl.h"
00017 /*---------------------------------------------------------------------------
00018                     Functions private to this module
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 /* Removed generatebadnorm_ini_file */
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    /* Removed: get "general:infile" read it, check input matrix */
00098    /* Allocate structures to go into the blackboard */
00099    cfg->framelist     = cpl_malloc(nraw * sizeof(char*));
00100 
00101    /* read input frames */
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              /* Store file name into framelist */
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    /* Copy relevant information into the blackboard */
00128    cfg->nframes         = nraw_good ;
00129 
00130    /* Output */
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 }

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