00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifdef HAVE_CONFIG_H
00030 # include <config.h>
00031 #endif
00032
00033
00034
00035
00036 #include "sinfo_wcal_functions.h"
00037 #include "sinfo_globals.h"
00038
00039
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
00376
00377
00378
00379
00380 cpl_frameset_delete(on_set);
00381 cpl_frameset_delete(of_set);
00382
00383 return 0;
00384
00385 }
00386
00387