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
00030
00031
00032
00033 #include "sinfoni_wcal_functions.h"
00034 #include <qfits.h>
00035
00036
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
00346
00347
00348
00349
00350 cpl_frameset_delete(on_set);
00351 cpl_frameset_delete(of_set);
00352
00353 return 0;
00354
00355 }
00356
00357