ns_ini_by_cpl.c

00001 
00002 /*----------------------------------------------------------------------------
00003    
00004    File name    :   ns_ini_by_cpl.c
00005    Author       :   Andrea Modigliani
00006    Created on   :   May 19, 2003
00007    Description  :   cpl input handling for the north-south test
00008 
00009  ---------------------------------------------------------------------------*/
00010 
00011 
00012 
00013 /*---------------------------------------------------------------------------
00014                                 Includes
00015  ---------------------------------------------------------------------------*/
00016 
00017 #include "ns_ini_by_cpl.h"
00018 
00019 /*---------------------------------------------------------------------------
00020                     Functions private to this module
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 /* removed generateNS_ini_file */
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          * Perform sanity checks, fill up the structure with what was
00051          * found in the ini file
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    printf("cfg -> loReject =%g\n", cfg -> loReject);
00061    printf("cfg -> hiReject =%g\n", cfg -> hiReject);
00062    printf("cfg -> maskInd =%g\n",  cfg -> maskInd);
00063    printf("cfg -> gaussInd =%g\n", cfg -> gaussInd);
00064    printf("cfg -> hw =%g\n",       cfg -> hw);
00065    printf("cfg -> nslits =%g\n",   cfg -> nslits);
00066    printf("cfg -> halfWidth =%g\n", cfg -> halfWidth);
00067    printf("cfg -> fwhm =%g\n", cfg -> fwhm);
00068    printf("cfg -> minDiff =%g\n", cfg -> minDiff);
00069    printf("cfg -> estimated_dist =%g\n", cfg -> estimated_dist);
00070    printf("cfg -> devtol =%g\n", cfg -> devtol);
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    /* Allocate structures to go into the blackboard */
00118    cfg->framelist     = cpl_malloc(nraw * sizeof(char*));
00119    cfg->frametype     = cpl_malloc(nraw * sizeof(int));
00120 
00121 
00122     
00123    /* Browse through the charmatrix to get names and file types */
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       /* to go on the file must exist */
00133       tag=(char*) cpl_frame_get_tag(frame);
00134       /* printf("frame tag =%s \n",tag); */
00135       if(cpl_frame_get_tag(frame) != NULL) {
00136         /* If the frame has a tag we process it. Else it is an object */ 
00137             if((sinfoni_frame_is_on(frame)  == 0)) 
00138           {
00139             /* printf("Frame is off\n"); */
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             /* printf("Frame is off\n"); */
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             /* printf("Frame is on\n"); */
00154             cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00155             cfg->frametype[i] = FRAME_ON ;
00156             nobj++;
00157           }
00158             else  
00159               {
00160           /* without label the frame is assumed on */
00161           /* printf("default: Frame is on\n"); */
00162           cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00163           cfg->frametype[i] = FRAME_ON ;
00164           nobj++;
00165         }
00166       }
00167         else 
00168       {
00169         /* without label the frame is assumed on */
00170         /* printf("default: Frame is on\n"); */
00171           cfg->framelist[i]=(char*) cpl_frame_get_filename(frame);
00172           cfg->frametype[i] = FRAME_ON ;
00173           nobj++;
00174       }
00175       /* Store file name into framelist */
00176           /* printf("frame=%s\n",cfg->framelist[i]); */
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    /* printf("Noff= %d Nobj= %d\n",noff,nobj); */
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    /* Copy relevant information into the blackboard */
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 }

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