sinfoni_wcal_functions.c

00001 /* $Id: sinfoni_wcal_functions.c,v 1.10 2005/09/05 14:24:29 amodigli Exp $
00002  *
00003  * This file is part of the SINFONI Pipeline
00004  * Copyright (C) 2002,2003 European Southern Observatory
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2 of the License, or
00009  * (at your option) any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019  */
00020 
00021 /*
00022  * $Author: amodigli $
00023  * $Date: 2005/09/05 14:24:29 $
00024  * $Revision: 1.10 $
00025  * $Name:  $
00026  */
00027 
00028 
00029 /*-----------------------------------------------------------------------------
00030                                 Includes
00031  ----------------------------------------------------------------------------*/
00032 
00033 #include "sinfoni_wcal_functions.h"
00034 #include <qfits.h>
00035 
00036 /* struct qc_wcal qc_wcal_par; */
00037 
00038 
00039 
00040 
00041 int dumpTblToFitParams ( FitParams ** params, char * filename )
00042 {
00043     const char* _id="readAsciiFromTblParams";
00044     cpl_table * fp =NULL;
00045     char* col=NULL;
00046     int i =0;
00047     int j =0;
00048     int status=0;
00049 
00050 
00051     if ( NULL == params )
00052     {
00053         cpl_msg_error (_id,"no fit parameters available!") ;
00054         return -1;
00055     }
00056 
00057     if ( NULL == filename )
00058     {
00059         cpl_msg_error (_id,"no filename available!") ;
00060         return -1;
00061     }
00062    
00063     if (is_fits_file(filename) != 1) {
00064       cpl_msg_error(_id,"cannot read filename %s", filename);
00065       return -1;
00066     }
00067     fp=cpl_table_load(filename,1,0);
00068     if(cpl_error_get_code() != CPL_ERROR_NONE) {
00069       cpl_msg_info(_id,"cannot load table %s",filename);
00070       cpl_msg_error(_id,(char* ) cpl_error_get_message());
00071       return -1;
00072     }
00073 
00074     col = (char*) calloc(MAX_NAME_SIZE,sizeof(char*));
00075     for ( i = 0 ; i < params[0]->n_params ; i++ )
00076     {
00077        params[i]->n_params=cpl_table_get_int(fp,"n_params",i,&status);
00078        params[i]->column  =cpl_table_get_int(fp,"column",i,&status);
00079        params[i]->line    =cpl_table_get_int(fp,"line",i,&status);
00080        for (j=0 ; j < 4; j++) {
00081      sprintf(col,"%s%d","fpar",j);
00082          params[i]->fit_par[j]=cpl_table_get_double(fp,col,i,&status);
00083      sprintf(col,"%s%d","dpar",j);
00084          params[i]->derv_par[j]=cpl_table_get_double(fp,col,i,&status);
00085        }
00086     }
00087     free(col);
00088     cpl_table_delete(fp) ;
00089     return 0;
00090 }
00091 
00092 
00093 
00094 
00095 int det_ncounts(cpl_frameset* raw, int thresh_max, struct qc_wcal* qc)
00096 {
00097  int i=0;
00098  int j=0;
00099 
00100  long nraw=0;
00101  int non=0;
00102  int noff=0;
00103  int nsat=0;
00104 
00105  double mean=0;
00106  double max=0;
00107 
00108  double mjd_on=0;
00109  double mjd_of=0;
00110  double mjd_of_frm=0;
00111 
00112  const char* _id = "wave_cal_det_ncounts";
00113  char name[FILE_NAME_SZ];
00114  char filename[FILE_NAME_SZ];
00115 
00116 
00117  cpl_vector* avg_on=NULL;
00118  cpl_vector* avg_of=NULL;
00119  cpl_vector* avg_di=NULL;
00120 
00121 
00122  cpl_vector* max_on=NULL;
00123  cpl_vector* max_of=NULL;
00124  cpl_vector* max_di=NULL;
00125 
00126  cpl_vector* vec_nsat=NULL;
00127 
00128  cpl_frame* frm=NULL;
00129  cpl_frame* frm_dup=NULL;
00130  cpl_frame* on_frm=NULL;
00131  cpl_frame* of_frm=NULL;
00132  cpl_frame* tmp_of_frm=NULL;
00133 
00134  cpl_image* dif_ima=NULL;
00135  cpl_image* on_ima=NULL;
00136  cpl_image* of_ima=NULL;
00137  cpl_image* tmp_ima=NULL;
00138 
00139  cpl_frameset* on_set=NULL;
00140  cpl_frameset* of_set=NULL;
00141  
00142  on_set=cpl_frameset_new();
00143  of_set=cpl_frameset_new();
00144  nraw = cpl_frameset_get_size(raw);
00145 
00146 
00147  for (i=0; i< nraw; i++) {
00148    frm = cpl_frameset_get_frame(raw,i);
00149    frm_dup = cpl_frame_duplicate(frm);
00150    if(sinfoni_frame_is_on(frm) == 1) {
00151      cpl_frameset_insert(on_set,frm_dup);
00152      non++;
00153    } else {
00154      cpl_frameset_insert(of_set,frm_dup);
00155      noff++;
00156    }
00157  }
00158 
00159 
00160  if (non == noff) {   
00161      cpl_msg_info(_id,"Non==Noff");
00162 
00163 
00164     avg_on = cpl_vector_new(non);
00165     avg_of = cpl_vector_new(non);
00166     avg_di = cpl_vector_new(non);
00167 
00168     max_on = cpl_vector_new(non);
00169     max_of = cpl_vector_new(non);
00170     max_di = cpl_vector_new(non);
00171 
00172 
00173 
00174     vec_nsat = cpl_vector_new(non);
00175     for (i=0; i< non; i++) {
00176       on_frm = cpl_frameset_get_frame(on_set,i);
00177       strcpy(name,cpl_frame_get_filename(on_frm));
00178       on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00179 
00180       mean= cpl_image_get_mean(on_ima);
00181       cpl_vector_set(avg_on,i,mean);
00182       max= cpl_image_get_max(on_ima);
00183       cpl_vector_set(max_on,i,max);
00184       tmp_ima = cpl_image_duplicate(on_ima);
00185       cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00186       nsat=cpl_image_get_flux(tmp_ima);
00187       cpl_vector_set(vec_nsat,i,nsat);
00188 
00189 
00190       of_frm = cpl_frameset_get_frame(of_set,i);
00191       strcpy(name,cpl_frame_get_filename(of_frm));
00192       of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00193       mean= cpl_image_get_mean(of_ima);
00194       cpl_vector_set(avg_of,i,mean);
00195       max= cpl_image_get_max(of_ima);
00196       cpl_vector_set(max_of,i,max);
00197      
00198       dif_ima = cpl_image_subtract_create(on_ima,of_ima);
00199       mean= cpl_image_get_mean(dif_ima);
00200       cpl_vector_set(avg_di,i,mean);
00201       max= cpl_image_get_max(dif_ima);
00202       cpl_vector_set(max_di,i,max);
00203 
00204       cpl_image_delete(on_ima);
00205       cpl_image_delete(of_ima);
00206       cpl_image_delete(dif_ima);
00207       cpl_image_delete(tmp_ima);
00208 
00209     }
00210 
00211     qc->avg_on=cpl_vector_get_mean(avg_on);
00212     qc->avg_of=cpl_vector_get_mean(avg_of);
00213     qc->avg_di=cpl_vector_get_mean(avg_di);
00214 
00215     qc->max_on=cpl_vector_get_max(max_on);
00216     qc->max_of=cpl_vector_get_max(max_of);
00217     qc->max_di=cpl_vector_get_max(max_di);
00218 
00219     qc->nsat=cpl_vector_get_mean(vec_nsat);
00220 
00221     if (non > 1) {
00222        qc->std_on=cpl_vector_get_stdev(avg_on);
00223        qc->std_of=cpl_vector_get_stdev(avg_of);
00224        qc->std_di=cpl_vector_get_stdev(avg_di);
00225     }
00226 
00227     cpl_vector_delete(avg_on);
00228     cpl_vector_delete(avg_of);
00229     cpl_vector_delete(avg_di);    
00230 
00231     cpl_vector_delete(max_on);
00232     cpl_vector_delete(max_of);
00233     cpl_vector_delete(max_di);
00234 
00235     cpl_vector_delete(vec_nsat);
00236 
00237 
00238  } else if ( ((non ==0) | (noff == 0)) && (nraw > 0 ) ) {
00239     cpl_msg_info(_id,"Nraw == 1");
00240     avg_di = cpl_vector_new(nraw);
00241     max_di = cpl_vector_new(nraw);
00242     vec_nsat = cpl_vector_new(nraw);
00243     for (i=0; i< nraw; i++) {
00244       frm = cpl_frameset_get_frame(raw,i);
00245       strcpy(name,cpl_frame_get_filename(frm));
00246       dif_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00247 
00248       mean= cpl_image_get_mean(dif_ima);
00249       tmp_ima=cpl_image_duplicate(dif_ima);
00250       sinfoni_clean_nan(&tmp_ima);
00251       mean= cpl_image_get_mean(tmp_ima);
00252       cpl_vector_set(avg_di,i,mean);
00253       max= cpl_image_get_max(tmp_ima);
00254       cpl_vector_set(max_di,i,max);
00255       cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00256       nsat=cpl_image_get_flux(tmp_ima);
00257       cpl_vector_set(vec_nsat,i,nsat);
00258       cpl_image_delete(tmp_ima);
00259       cpl_image_delete(dif_ima);
00260     }
00261     qc->avg_di=cpl_vector_get_mean(avg_di);
00262     if (nraw > 1) {
00263        qc->std_di=cpl_vector_get_stdev(avg_di);
00264     }
00265     qc->max_di=cpl_vector_get_max(max_di);
00266     qc->nsat=cpl_vector_get_mean(vec_nsat);
00267 
00268     cpl_vector_delete(avg_di);
00269     cpl_vector_delete(max_di);
00270     cpl_vector_delete(vec_nsat);
00271  } else {
00272    cpl_msg_info(_id,"else case");
00273 
00274     avg_on = cpl_vector_new(non);
00275     avg_of = cpl_vector_new(non);
00276     avg_di = cpl_vector_new(non);
00277 
00278     max_on = cpl_vector_new(non);
00279     max_of = cpl_vector_new(non);
00280     max_di = cpl_vector_new(non);
00281 
00282     vec_nsat = cpl_vector_new(non);
00283 
00284     for (i=0;i<non;i++) {
00285        on_frm=cpl_frameset_get_frame(on_set,i);
00286        mjd_on=sinfoni_get_mjd_obs(on_frm);
00287        of_frm=cpl_frameset_get_frame(of_set,0);
00288        mjd_of=sinfoni_get_mjd_obs(of_frm);
00289        strcpy(filename,cpl_frame_get_filename(of_frm));
00290 
00291        for (j=1;j<noff;j++) {
00292           tmp_of_frm = cpl_frameset_get_frame(of_set,j);
00293           mjd_of_frm = sinfoni_get_mjd_obs(tmp_of_frm);
00294 
00295           if(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <
00296              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {
00297          mjd_of=mjd_of_frm;
00298              of_frm=tmp_of_frm;
00299       }
00300        }
00301 
00302        strcpy(filename,cpl_frame_get_filename(of_frm));
00303        of_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0);
00304        mean= cpl_image_get_mean(of_ima);
00305        cpl_vector_set(avg_of,i,mean);
00306        max= cpl_image_get_max(of_ima);
00307        cpl_vector_set(max_of,i,max);
00308 
00309        strcpy(filename,cpl_frame_get_filename(on_frm));
00310        on_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0);
00311        mean= cpl_image_get_mean(on_ima); 
00312        cpl_vector_set(avg_on,i,mean);
00313        max= cpl_image_get_mean(on_ima); 
00314        cpl_vector_set(max_on,i,max);
00315 
00316        tmp_ima = cpl_image_duplicate(on_ima);     
00317        cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00318        nsat=cpl_image_get_flux(tmp_ima);
00319        cpl_vector_set(vec_nsat,i,nsat);
00320 
00321        dif_ima = cpl_image_subtract_create(on_ima,of_ima);
00322        mean= cpl_image_get_mean(dif_ima);
00323        cpl_vector_set(avg_di,i,mean);
00324        max= cpl_image_get_max(dif_ima);
00325        cpl_vector_set(max_di,i,max);
00326 
00327 
00328        cpl_image_delete(on_ima);
00329        cpl_image_delete(of_ima);
00330        cpl_image_delete(dif_ima);
00331        cpl_image_delete(tmp_ima);
00332    }
00333     cpl_vector_delete(avg_on);
00334     cpl_vector_delete(avg_of);
00335     cpl_vector_delete(avg_di);
00336 
00337     cpl_vector_delete(max_on);
00338     cpl_vector_delete(max_of);
00339     cpl_vector_delete(max_di);
00340 
00341     cpl_vector_delete(vec_nsat);
00342 
00343  }
00344  /*
00345  cpl_msg_info(_id,"avg_on=%g std_on=%g ",qc->avg_on,qc_wcal.std_on);
00346  cpl_msg_info(_id,"avg_of=%g std_of=%g ",qc->avg_of,qc_wcal.std_of);
00347  cpl_msg_info(_id,"avg_di=%g std_di=%g ",qc->avg_di,qc_wcal.std_di);
00348  cpl_msg_info(_id,"max_fl=%g nsat_on=%g ",qc->max_di,qc_wcal.nsat);
00349  */
00350  cpl_frameset_delete(on_set);
00351  cpl_frameset_delete(of_set);
00352  
00353  return 0;
00354 
00355 }
00356 
00357 

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