sinfo_wcal_functions.c

00001 /* $Id: sinfo_wcal_functions.c,v 1.5 2006/12/06 08:46:17 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: 2006/12/06 08:46:17 $
00024  * $Revision: 1.5 $
00025  * $Name:  $
00026  */
00027 
00028 
00029 #ifdef HAVE_CONFIG_H
00030 #  include <config.h>
00031 #endif
00032 /*-----------------------------------------------------------------------------
00033                                 Includes
00034  ----------------------------------------------------------------------------*/
00035 
00036 #include "sinfo_wcal_functions.h"
00037 #include "sinfo_globals.h"
00038 
00039 /* struct qc_wcal qc_wcal_par; */
00047 qc_wcal* sinfo_qc_wcal_new(void)
00048 {  
00049 
00050   qc_wcal * qc;
00051   qc= cpl_malloc(sizeof(qc_wcal));
00052 
00053   qc->avg_on=0; 
00054   qc->std_on=0;
00055   qc->avg_of=0; 
00056   qc->std_of=0;
00057   qc->avg_di=0; 
00058   qc->std_di=0;
00059   qc->max_on=0;
00060   qc->max_of=0;
00061   qc->max_di=0;
00062   qc->nsat_on=0;
00063   qc->noise_on=0;
00064   qc->noise_of=0;
00065   qc->flux_on=0;
00066   qc->nsat=0;
00067   return qc;
00068 }
00069 
00070 void sinfo_qc_wcal_delete(qc_wcal** qc)
00071 {
00072   cpl_free(*qc);
00073   *qc = NULL;
00074 }
00075 
00076 int sinfo_dumpTblToFitParams ( FitParams ** params, char * filename )
00077 {
00078     cpl_table * fp =NULL;
00079     char* col=NULL;
00080     int i =0;
00081     int j =0;
00082     int status=0;
00083 
00084 
00085     if ( NULL == params )
00086     {
00087         sinfo_msg_error ("no fit parameters available!") ;
00088         return -1;
00089     }
00090 
00091     if ( NULL == filename )
00092     {
00093         sinfo_msg_error ("no filename available!") ;
00094         return -1;
00095     }
00096    
00097 
00098     fp=cpl_table_load(filename,1,0);
00099     if(cpl_error_get_code() != CPL_ERROR_NONE) {
00100       sinfo_msg("cannot load table %s",filename);
00101       sinfo_msg_error((char* ) cpl_error_get_message());
00102       return -1;
00103     }
00104 
00105     col = (char*) cpl_calloc(MAX_NAME_SIZE,sizeof(char*));
00106     for ( i = 0 ; i < params[0]->n_params ; i++ )
00107     {
00108        params[i]->n_params=cpl_table_get_int(fp,"n_params",i,&status);
00109        params[i]->column  =cpl_table_get_int(fp,"column",i,&status);
00110        params[i]->line    =cpl_table_get_int(fp,"line",i,&status);
00111        for (j=0 ; j < 4; j++) {
00112      snprintf(col,MAX_NAME_SIZE-1,"%s%d","fpar",j);
00113          params[i]->fit_par[j]=cpl_table_get_double(fp,col,i,&status);
00114      snprintf(col,MAX_NAME_SIZE-1,"%s%d","dpar",j);
00115          params[i]->derv_par[j]=cpl_table_get_double(fp,col,i,&status);
00116        }
00117     }
00118     cpl_free(col);
00119     cpl_table_delete(fp) ;
00120     return 0;
00121 }
00122 
00123 
00124 
00125 
00126 int sinfo_det_ncounts(cpl_frameset* raw, int thresh_max, qc_wcal* qc)
00127 {
00128  int i=0;
00129  int j=0;
00130 
00131  long nraw=0;
00132  int non=0;
00133  int noff=0;
00134  int nsat=0;
00135 
00136  double mean=0;
00137  double max=0;
00138 
00139  double mjd_on=0;
00140  double mjd_of=0;
00141  double mjd_of_frm=0;
00142 
00143  char name[FILE_NAME_SZ];
00144  char filename[FILE_NAME_SZ];
00145 
00146 
00147  cpl_vector* avg_on=NULL;
00148  cpl_vector* avg_of=NULL;
00149  cpl_vector* avg_di=NULL;
00150 
00151 
00152  cpl_vector* max_on=NULL;
00153  cpl_vector* max_of=NULL;
00154  cpl_vector* max_di=NULL;
00155 
00156  cpl_vector* vec_nsat=NULL;
00157 
00158  cpl_frame* frm=NULL;
00159  cpl_frame* frm_dup=NULL;
00160  cpl_frame* on_frm=NULL;
00161  cpl_frame* of_frm=NULL;
00162  cpl_frame* tmp_of_frm=NULL;
00163 
00164  cpl_image* dif_ima=NULL;
00165  cpl_image* on_ima=NULL;
00166  cpl_image* of_ima=NULL;
00167  cpl_image* tmp_ima=NULL;
00168 
00169  cpl_frameset* on_set=NULL;
00170  cpl_frameset* of_set=NULL;
00171  
00172  on_set=cpl_frameset_new();
00173  of_set=cpl_frameset_new();
00174  nraw = cpl_frameset_get_size(raw);
00175 
00176 
00177  for (i=0; i< nraw; i++) {
00178    frm = cpl_frameset_get_frame(raw,i);
00179    frm_dup = cpl_frame_duplicate(frm);
00180    if(sinfo_frame_is_on(frm) == 1) {
00181      cpl_frameset_insert(on_set,frm_dup);
00182      non++;
00183    } else {
00184      cpl_frameset_insert(of_set,frm_dup);
00185      noff++;
00186    }
00187  }
00188 
00189 
00190  if (non == noff) {   
00191      sinfo_msg("Monitor counts: case Non==Noff");
00192 
00193 
00194     avg_on = cpl_vector_new(non);
00195     avg_of = cpl_vector_new(non);
00196     avg_di = cpl_vector_new(non);
00197 
00198     max_on = cpl_vector_new(non);
00199     max_of = cpl_vector_new(non);
00200     max_di = cpl_vector_new(non);
00201 
00202 
00203 
00204     vec_nsat = cpl_vector_new(non);
00205     for (i=0; i< non; i++) {
00206       on_frm = cpl_frameset_get_frame(on_set,i);
00207       strcpy(name,cpl_frame_get_filename(on_frm));
00208       on_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00209 
00210       mean= cpl_image_get_mean(on_ima);
00211       cpl_vector_set(avg_on,i,mean);
00212       max= cpl_image_get_max(on_ima);
00213       cpl_vector_set(max_on,i,max);
00214       tmp_ima = cpl_image_duplicate(on_ima);
00215       cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00216       nsat=cpl_image_get_flux(tmp_ima);
00217       cpl_vector_set(vec_nsat,i,nsat);
00218 
00219 
00220       of_frm = cpl_frameset_get_frame(of_set,i);
00221       strcpy(name,cpl_frame_get_filename(of_frm));
00222       of_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00223       mean= cpl_image_get_mean(of_ima);
00224       cpl_vector_set(avg_of,i,mean);
00225       max= cpl_image_get_max(of_ima);
00226       cpl_vector_set(max_of,i,max);
00227      
00228       dif_ima = cpl_image_subtract_create(on_ima,of_ima);
00229       mean= cpl_image_get_mean(dif_ima);
00230       cpl_vector_set(avg_di,i,mean);
00231       max= cpl_image_get_max(dif_ima);
00232       cpl_vector_set(max_di,i,max);
00233 
00234       cpl_image_delete(on_ima);
00235       cpl_image_delete(of_ima);
00236       cpl_image_delete(dif_ima);
00237       cpl_image_delete(tmp_ima);
00238 
00239     }
00240 
00241     qc->avg_on=cpl_vector_get_mean(avg_on);
00242     qc->avg_of=cpl_vector_get_mean(avg_of);
00243     qc->avg_di=cpl_vector_get_mean(avg_di);
00244 
00245     qc->max_on=cpl_vector_get_max(max_on);
00246     qc->max_of=cpl_vector_get_max(max_of);
00247     qc->max_di=cpl_vector_get_max(max_di);
00248 
00249     qc->nsat=cpl_vector_get_mean(vec_nsat);
00250 
00251     if (non > 1) {
00252        qc->std_on=cpl_vector_get_stdev(avg_on);
00253        qc->std_of=cpl_vector_get_stdev(avg_of);
00254        qc->std_di=cpl_vector_get_stdev(avg_di);
00255     }
00256 
00257     cpl_vector_delete(avg_on);
00258     cpl_vector_delete(avg_of);
00259     cpl_vector_delete(avg_di);    
00260 
00261     cpl_vector_delete(max_on);
00262     cpl_vector_delete(max_of);
00263     cpl_vector_delete(max_di);
00264 
00265     cpl_vector_delete(vec_nsat);
00266 
00267 
00268  } else if ( ((non ==0) | (noff == 0)) && (nraw > 0 ) ) {
00269     sinfo_msg("Monitor counts: case Nraw == 1");
00270     avg_di = cpl_vector_new(nraw);
00271     max_di = cpl_vector_new(nraw);
00272     vec_nsat = cpl_vector_new(nraw);
00273     for (i=0; i< nraw; i++) {
00274       frm = cpl_frameset_get_frame(raw,i);
00275       strcpy(name,cpl_frame_get_filename(frm));
00276       dif_ima = cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00277 
00278       mean= cpl_image_get_mean(dif_ima);
00279       tmp_ima=cpl_image_duplicate(dif_ima);
00280       sinfo_clean_nan(&tmp_ima);
00281       mean= cpl_image_get_mean(tmp_ima);
00282       cpl_vector_set(avg_di,i,mean);
00283       max= cpl_image_get_max(tmp_ima);
00284       cpl_vector_set(max_di,i,max);
00285       cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00286       nsat=cpl_image_get_flux(tmp_ima);
00287       cpl_vector_set(vec_nsat,i,nsat);
00288       cpl_image_delete(tmp_ima);
00289       cpl_image_delete(dif_ima);
00290     }
00291     qc->avg_di=cpl_vector_get_mean(avg_di);
00292     if (nraw > 1) {
00293        qc->std_di=cpl_vector_get_stdev(avg_di);
00294     }
00295     qc->max_di=cpl_vector_get_max(max_di);
00296     qc->nsat=cpl_vector_get_mean(vec_nsat);
00297 
00298     cpl_vector_delete(avg_di);
00299     cpl_vector_delete(max_di);
00300     cpl_vector_delete(vec_nsat);
00301  } else {
00302    sinfo_msg("Monitor counts: else case");
00303 
00304     avg_on = cpl_vector_new(non);
00305     avg_of = cpl_vector_new(non);
00306     avg_di = cpl_vector_new(non);
00307 
00308     max_on = cpl_vector_new(non);
00309     max_of = cpl_vector_new(non);
00310     max_di = cpl_vector_new(non);
00311 
00312     vec_nsat = cpl_vector_new(non);
00313 
00314     for (i=0;i<non;i++) {
00315        on_frm=cpl_frameset_get_frame(on_set,i);
00316        mjd_on=sinfo_get_mjd_obs(on_frm);
00317        of_frm=cpl_frameset_get_frame(of_set,0);
00318        mjd_of=sinfo_get_mjd_obs(of_frm);
00319        strcpy(filename,cpl_frame_get_filename(of_frm));
00320 
00321        for (j=1;j<noff;j++) {
00322           tmp_of_frm = cpl_frameset_get_frame(of_set,j);
00323           mjd_of_frm = sinfo_get_mjd_obs(tmp_of_frm);
00324 
00325           if(1000.*(mjd_of_frm-mjd_on)*(mjd_of_frm-mjd_on) <
00326              1000.*(mjd_of-    mjd_on)*(mjd_of-    mjd_on) ) {
00327          mjd_of=mjd_of_frm;
00328              of_frm=tmp_of_frm;
00329       }
00330        }
00331 
00332        strcpy(filename,cpl_frame_get_filename(of_frm));
00333        of_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0);
00334        mean= cpl_image_get_mean(of_ima);
00335        cpl_vector_set(avg_of,i,mean);
00336        max= cpl_image_get_max(of_ima);
00337        cpl_vector_set(max_of,i,max);
00338 
00339        strcpy(filename,cpl_frame_get_filename(on_frm));
00340        on_ima = cpl_image_load(filename,CPL_TYPE_FLOAT,0,0);
00341        mean= cpl_image_get_mean(on_ima); 
00342        cpl_vector_set(avg_on,i,mean);
00343        max= cpl_image_get_mean(on_ima); 
00344        cpl_vector_set(max_on,i,max);
00345 
00346        tmp_ima = cpl_image_duplicate(on_ima);     
00347        cpl_image_threshold(tmp_ima,thresh_max,thresh_max,0,1);
00348        nsat=cpl_image_get_flux(tmp_ima);
00349        cpl_vector_set(vec_nsat,i,nsat);
00350 
00351        dif_ima = cpl_image_subtract_create(on_ima,of_ima);
00352        mean= cpl_image_get_mean(dif_ima);
00353        cpl_vector_set(avg_di,i,mean);
00354        max= cpl_image_get_max(dif_ima);
00355        cpl_vector_set(max_di,i,max);
00356 
00357 
00358        cpl_image_delete(on_ima);
00359        cpl_image_delete(of_ima);
00360        cpl_image_delete(dif_ima);
00361        cpl_image_delete(tmp_ima);
00362    }
00363     cpl_vector_delete(avg_on);
00364     cpl_vector_delete(avg_of);
00365     cpl_vector_delete(avg_di);
00366 
00367     cpl_vector_delete(max_on);
00368     cpl_vector_delete(max_of);
00369     cpl_vector_delete(max_di);
00370 
00371     cpl_vector_delete(vec_nsat);
00372 
00373  }
00374  /*
00375  sinfo_msg("avg_on=%g std_on=%g ",qc->avg_on,qc_wcal.std_on);
00376  sinfo_msg("avg_of=%g std_of=%g ",qc->avg_of,qc_wcal.std_of);
00377  sinfo_msg("avg_di=%g std_di=%g ",qc->avg_di,qc_wcal.std_di);
00378  sinfo_msg("max_fl=%g nsat_on=%g ",qc->max_di,qc_wcal.nsat);
00379  */
00380  cpl_frameset_delete(on_set);
00381  cpl_frameset_delete(of_set);
00382  
00383  return 0;
00384 
00385 }
00386 
00387 

Generated on Wed Jan 17 08:33:45 2007 for SINFONI Pipeline Reference Manual by  doxygen 1.4.4