dark_ini_by_cpl.c

00001 
00002 /*----------------------------------------------------------------------------
00003    
00004    File name    :   dark_ini_by_cpl.c
00005    Author       :   Andrea Modigliani
00006    Created on   :   May 18, 2004
00007    Description  :   dark cpl input file handling for SPIFFI
00008 
00009  ---------------------------------------------------------------------------*/
00010 
00011 
00012 
00013 /*---------------------------------------------------------------------------
00014                                 Includes
00015  ---------------------------------------------------------------------------*/
00016 
00017 #include "dark_ini_by_cpl.h"
00018 
00019 
00020 /*---------------------------------------------------------------------------
00021                     Functions private to this module
00022  ---------------------------------------------------------------------------*/
00023 
00024 static void     parse_section_frames(dark_config *, 
00025  cpl_frameset* sof, cpl_frameset** raw, int* status);
00026 static void     parse_section_cleanmean(dark_config *, cpl_parameterlist* cpl_cfg);
00027 static void     parse_section_qclog(dark_config * cfg, cpl_parameterlist * cpl_cfg);
00028 
00029 void detnoise_free(dark_config * cfg);
00030 
00031 /*-------------------------------------------------------------------------*/
00043 /*--------------------------------------------------------------------------*/
00044 
00045 dark_config * parse_cpl_input_dark(cpl_parameterlist * cpl_cfg, 
00046 cpl_frameset* sof, cpl_frameset** raw)
00047 {
00048  const cxchar * _id = "parse_cpl_input_dark";
00049  int status=0;
00050 
00051         dark_config   *       cfg ;
00052 
00053         /* Removed check on ini_file */
00054         /* Removed load of ini file */
00055 
00056         cfg = dark_cfg_create();
00057 
00058         /*
00059          * Perform sanity checks, fill up the structure with what was
00060          * found in the ini file
00061          */
00062         parse_section_cleanmean    (cfg, cpl_cfg);
00063         parse_section_qclog    (cfg, cpl_cfg); 
00064         parse_section_frames       (cfg, sof, raw, &status);
00065         if (status > 0) {
00066                 cpl_msg_error(_id,"parsing cpl input");
00067                 dark_cfg_destroy(cfg);
00068                 cfg = NULL ;
00069                 return NULL ;
00070         }
00071 
00072         return cfg ;
00073 }
00074 
00075 static void     
00076 parse_section_frames(dark_config * cfg,
00077              cpl_frameset * sof,
00078                      cpl_frameset** raw,
00079                      int* status)
00080 {
00081 
00082  const cxchar * _id = "parse_section_frames";
00083    int                     i;
00084    cxint                   nraw=0;
00085    cxint                   nraw_good=0;
00086    cpl_frame* frame=NULL;
00087 
00088    char spat_res[FILE_NAME_SZ];
00089    char lamp_status[FILE_NAME_SZ];
00090    char band[FILE_NAME_SZ];
00091    int ins_set=0;
00092    sinfoni_extract_raw_frames_type(sof,raw,RAW_DARK);
00093 
00094    nraw=cpl_frameset_get_size(*raw);
00095    if (nraw < 1) {
00096       cpl_msg_error(_id,"Too few (%d) raw frames (%s) present in"
00097             "frameset!Aborting...",nraw,RAW_DARK);
00098           (*status)++;
00099           return;
00100    }
00101 
00102 
00103 
00104    /* Removed: get "general:infile" read it, check input matrix */
00105    /* Allocate structures to go into the blackboard */
00106    cfg->inFrameList     = cpl_malloc(nraw * sizeof(char*));
00107 
00108 
00109    /* read input frames */
00110    for (i=0 ; i<nraw ; i++) {
00111       frame = cpl_frameset_get_frame(*raw,i);
00112       /* Store file name into framelist */
00113       /* printf("frame=%s\n",cpl_frame_get_filename(frame)); */
00114       cfg->inFrameList[i]=cpl_strdup(cpl_frame_get_filename(frame));
00115       nraw_good++;
00116    }
00117 
00118    if(nraw_good<1) {
00119      cpl_msg_error(_id,"no good raw frame in input, something wrong!");
00120      (*status)++;
00121      return;
00122    }
00123    /* Copy relevant information into the blackboard */
00124    cfg->nframes         = nraw ;
00125 
00126    strcpy(cfg -> outName, DARK_OUT_FILENAME);
00127   
00128 
00129    frame = cpl_frameset_get_frame(*raw,0);
00130    sinfoni_get_spatial_res(frame,spat_res);
00131  
00132    switch(sinfoni_frame_is_on(frame)) 
00133      {
00134    case 0: 
00135       strcpy(lamp_status,"on");
00136       break;
00137     case 1: 
00138       strcpy(lamp_status,"off");
00139       break;
00140     case -1:
00141       strcpy(lamp_status,"undefined");
00142       break;
00143     default: 
00144       strcpy(lamp_status,"undefined");
00145       break;
00146 
00147 
00148      }
00149 
00150    sinfoni_get_band(frame,band);
00151    cpl_msg_info(_id,"spatial resolution: %s lamp status: %s band: %s \n",
00152                      spat_res,    lamp_status,    band);
00153 
00154 
00155    sinfoni_get_ins_set(band,&ins_set);
00156    return ;
00157 }
00158 
00159 static void     
00160 parse_section_cleanmean(dark_config * cfg, cpl_parameterlist *   cpl_cfg)
00161 {
00162    cpl_parameter *p;  
00163    
00164    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.low_rejection");
00165    cfg -> lo_reject = cpl_parameter_get_double(p);
00166 
00167    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.high_rejection");
00168    cfg -> hi_reject = cpl_parameter_get_double(p);
00169 
00170 }
00171 
00172 static void     
00173 parse_section_qclog(dark_config * cfg, cpl_parameterlist *   cpl_cfg)
00174 {
00175    cpl_parameter *p;  
00176    
00177    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_xmin");
00178    cfg -> qc_ron_xmin = cpl_parameter_get_int(p);
00179    
00180    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_xmax");
00181    cfg -> qc_ron_xmax = cpl_parameter_get_int(p);
00182 
00183    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_ymin");
00184    cfg -> qc_ron_ymin = cpl_parameter_get_int(p);
00185 
00186    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_ymax");
00187    cfg -> qc_ron_ymax = cpl_parameter_get_int(p);
00188 
00189    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_hsize");
00190    cfg -> qc_ron_hsize = cpl_parameter_get_int(p);
00191    
00192    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_ron_nsamp");
00193    cfg -> qc_ron_nsamp = cpl_parameter_get_int(p);
00194 
00195 
00196 
00197    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_xmin");
00198    cfg -> qc_fpn_xmin = cpl_parameter_get_int(p);
00199    
00200    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_xmax");
00201    cfg -> qc_fpn_xmax = cpl_parameter_get_int(p);
00202 
00203    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_ymin");
00204    cfg -> qc_fpn_ymin = cpl_parameter_get_int(p);
00205 
00206    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_ymax");
00207    cfg -> qc_fpn_ymax = cpl_parameter_get_int(p);
00208 
00209    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_hsize");
00210    cfg -> qc_fpn_hsize = cpl_parameter_get_int(p);
00211    
00212    p = cpl_parameterlist_find(cpl_cfg, "sinfoni.dark.qc_fpn_nsamp");
00213    cfg -> qc_fpn_nsamp = cpl_parameter_get_int(p);
00214 
00215    
00216 }
00217 
00218 void
00219 dark_free(dark_config * cfg)
00220 {  
00221   int i=0;
00222   for(i=0;i<cfg->nframes;i++) {
00223 
00224     cpl_free(cfg->inFrameList[i]);
00225   }
00226   cpl_free(cfg->inFrameList);
00227   dark_cfg_destroy(cfg);
00228   return;
00229 
00230 }

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