44 #include "sinfo_dfs.h"
47 #include "sinfo_error.h"
48 #include "sinfo_utilities.h"
49 #include "sinfo_utils_wrappers.h"
50 #include "sinfo_msg.h"
51 #include "sinfo_globals.h"
52 #include "sinfo_pro_save.h"
53 #include "sinfo_skycor.h"
54 #include "sinfo_file_handling.h"
68 #define FITS_MAGIC_SZ 6
71 sinfo_frame_is_raw_dark(
char * tag);
84 sinfo_frameset_extract(
const cpl_frameset *frames,
87 cpl_frameset *subset = NULL;
92 assure( frames != NULL, CPL_ERROR_ILLEGAL_INPUT,
"Null frameset" );
93 assure( tag != NULL, CPL_ERROR_ILLEGAL_INPUT,
"Null tag" );
95 subset = cpl_frameset_new();
97 for (f = cpl_frameset_find_const(frames, tag);
99 f = cpl_frameset_find_const(frames, NULL)) {
101 cpl_frameset_insert(subset, cpl_frame_duplicate(f));
114 int sinfo_print_rec_status(
const int val) {
115 if(cpl_error_get_code() != CPL_ERROR_NONE) {
142 sinfo_vector_clip(
const cpl_vector* vinp,
147 cpl_vector* vout=NULL;
148 cpl_vector* vtmp=NULL;
159 cknull(vinp,
"Null input vector");
160 check_nomsg(vout=cpl_vector_duplicate(vinp));
161 check_nomsg(mean=cpl_vector_get_mean(vout));
162 check_nomsg(median=cpl_vector_get_median_const(vout));
163 check_nomsg(stdev=cpl_vector_get_stdev(vout));
164 check_nomsg(pt=cpl_vector_get_data(vtmp));
173 check_nomsg(cpl_vector_sort(vout,1));
174 check_nomsg(po=cpl_vector_get_data(vout));
176 if( (size > 1) && (fabs(po[size-1]-mean) > kappa*stdev)) {
179 check_nomsg(vtmp=cpl_vector_new(size));
180 check_nomsg(pt=cpl_vector_get_data(vtmp));
181 for(i=0;i<size;i++) {
184 check_nomsg(cpl_vector_delete(vout));
185 check_nomsg(vout=cpl_vector_duplicate(vtmp));
186 check_nomsg(cpl_vector_delete(vtmp));
188 check_nomsg(mean=cpl_vector_get_mean(vout));
189 check_nomsg(stdev=cpl_vector_get_stdev(vout));
204 check_nomsg(cpl_vector_sort(vout,1));
205 check_nomsg(po=cpl_vector_get_data(vout));
207 if( (size > 1) && (fabs(po[size-1]-median) > kappa*stdev)) {
210 check_nomsg(vtmp=cpl_vector_new(size));
211 check_nomsg(pt=cpl_vector_get_data(vtmp));
212 for(i=0;i<size;i++) {
215 check_nomsg(cpl_vector_delete(vout));
216 check_nomsg(vout=cpl_vector_duplicate(vtmp));
217 check_nomsg(cpl_vector_delete(vtmp));
219 check_nomsg(median=cpl_vector_get_median_const(vout));
220 check_nomsg(stdev=cpl_vector_get_stdev(vout));
250 int sinfo_vector_dindgen(cpl_vector** v)
256 cknull(*v,
"Null input vector");
257 check(sz=cpl_vector_get_size(*v),
"Getting size of a vector");
260 cpl_vector_set(*v,i,(
double)i);
282 int sinfo_is_fits_file(
const char *filename)
288 if ((fp = fopen(filename,
"r"))==NULL) {
293 magic = cpl_calloc(FITS_MAGIC_SZ+1,
sizeof(
char)) ;
294 (void)fread(magic, 1, FITS_MAGIC_SZ, fp) ;
296 magic[FITS_MAGIC_SZ] = (char)0 ;
297 if (strstr(magic,
"SIMPLE")!=NULL)
313 sinfo_table_correl(cpl_table * t1, cpl_table* t2, cpl_table* range,
double* xcor)
325 cpl_table* tmp_t1=NULL;
326 cpl_table* tmp_t2=NULL;
328 check_nomsg(nr=cpl_table_get_nrow(range));
330 wsr=cpl_table_get_double(range,
"WSTART",i,&status);
331 wer=cpl_table_get_double(range,
"WEND",i,&status);
332 cpl_table_and_selected_double(t1,
"WAVE",CPL_NOT_LESS_THAN,wsr);
333 cpl_table_and_selected_double(t1,
"WAVE",CPL_NOT_GREATER_THAN,wer);
334 tmp_t1=cpl_table_extract_selected(t1);
335 cpl_table_and_selected_double(t2,
"WAVE",CPL_NOT_LESS_THAN,wsr);
336 cpl_table_and_selected_double(t2,
"WAVE",CPL_NOT_GREATER_THAN,wer);
337 tmp_t2=cpl_table_extract_selected(t2);
338 cpl_table_duplicate_column(tmp_t1,
"INT1",tmp_t1,
"INT");
339 cpl_table_duplicate_column(tmp_t1,
"INT2",tmp_t2,
"INT");
340 cpl_table_multiply_columns(tmp_t1,
"INT1",
"INT2");
341 mean=cpl_table_get_column_mean(tmp_t1,
"INT1");
342 nrows=cpl_table_get_nrow(tmp_t1);
348 return cpl_error_get_code();
357 sinfo_frameset_merge(cpl_frameset * set1, cpl_frameset* set2)
360 cpl_frame* frm_dup=NULL;
362 passure(set1 != NULL,
"Wrong input set");
364 cpl_frameset_iterator* it = cpl_frameset_iterator_new(set2);
365 cpl_frame *frm_tmp = cpl_frameset_iterator_get(it);
367 while (frm_tmp != NULL)
369 frm_dup=cpl_frame_duplicate(frm_tmp);
370 cpl_frameset_insert(set1,frm_dup);
372 cpl_frameset_iterator_advance(it, 1);
373 frm_tmp = cpl_frameset_iterator_get(it);
376 cpl_frameset_iterator_delete(it);
379 return cpl_error_get_code();
393 sinfo_extract_frames_group_type(
const cpl_frameset * set,
395 cpl_frame_group type)
398 cpl_frame* frm_dup=NULL;
401 check_nomsg(*ext = cpl_frameset_new());
403 cpl_frameset_iterator* it = cpl_frameset_iterator_new(set);
404 const cpl_frame *frm_tmp = cpl_frameset_iterator_get_const(it);
406 while (frm_tmp != NULL)
408 g=cpl_frame_get_group(frm_tmp);
410 frm_dup=cpl_frame_duplicate(frm_tmp);
411 cpl_frameset_insert(*ext,frm_dup);
413 type,cpl_frame_get_filename(frm_dup));
416 cpl_frameset_iterator_advance(it, 1);
417 frm_tmp = cpl_frameset_iterator_get_const(it);
420 cpl_frameset_iterator_delete(it);
423 return cpl_error_get_code();
435 sinfo_get_pupil_shift(cpl_imagelist* iml,
const int n,cpl_table** qclog_tbl)
437 cpl_size max_ima_x=0;
438 cpl_size max_ima_y=0;
449 cpl_image* img_dup=NULL;
451 char key_name[FILE_NAME_SZ];
453 sinfo_imagelist_reject_value(iml,CPL_VALUE_NAN);
454 img=cpl_imagelist_collapse_median_create(iml);
455 nx=cpl_image_get_size_x(img);
456 ny=cpl_image_get_size_y(img);
458 img_dup=cpl_image_duplicate(img);
460 cpl_image_get_maxpos(img_dup,&max_ima_x,&max_ima_y);
461 max_ima_cx=cpl_image_get_centroid_x_window(img_dup,1,1,nx,ny);
462 max_ima_cy=cpl_image_get_centroid_y_window(img_dup,1,1,nx,ny);
463 cpl_image_delete(img_dup);
466 xshift=max_ima_cx-(double)nx/2;
467 yshift=max_ima_cy-(double)ny/2;
469 snprintf(key_name,
sizeof(key_name),
"%s%d%s",
"QC PUPIL",n,
" SHIFTX");
470 sinfo_qclog_add_double(*qclog_tbl,key_name,xshift,
471 "X shift centroid - center image",
"%f");
473 snprintf(key_name,
sizeof(key_name),
"%s%d%s",
"QC PUPIL",n,
" SHIFTY");
474 sinfo_qclog_add_double(*qclog_tbl,key_name,yshift,
475 "Y shift centroid - center image",
"%f");
476 cpl_image_delete(img);
489 int sinfo_get_strehl_type(cpl_frameset* sof)
494 cpl_frameset* obs=NULL;
496 obs = cpl_frameset_new();
498 sinfo_contains_frames_kind(sof,obs,PRO_OBS_PSF);
500 nobs=cpl_frameset_get_size(obs);
502 sinfo_contains_frames_kind(sof,obs,PRO_OBS_STD);
503 nobs=cpl_frameset_get_size(obs);
506 nobs=cpl_frameset_get_size(obs);
511 float* pix_scale=cpl_calloc(nobs,
sizeof(
float));
513 for(
int i=0;i<nobs;i++) {
514 cpl_frame* frame=cpl_frameset_get_frame(obs,i);
515 cpl_propertylist* plist=cpl_propertylist_load(cpl_frame_get_filename(frame),0);
516 pix_scale[i]=sinfo_pfits_get_pixscale(plist);
517 cpl_propertylist_delete(plist);
519 if(sinfo_pix_scale_isnot_const(pix_scale,nobs)) {
524 cpl_frameset_delete(obs);
536 double sinfo_get_wave_cent(
const char* band)
539 if (strcmp(band,
"H+K") == 0) {
541 }
else if (strcmp(band,
"K") == 0) {
543 }
else if (strcmp(band,
"J") == 0) {
545 }
else if (strcmp(band,
"H") == 0) {
560 int sinfo_pix_scale_isnot_const(
float* pix_scale,
const int n) {
563 float ref=pix_scale[0];
566 if(fabs(pix_scale[i]-ref) > eps)
return 1;
579 const char* sinfo_get_pix_scale(
float ps) {
581 const char* key_value;
584 if(fabs(ps - 0.025) < eps) {
587 else if (fabs(ps - 0.1) < eps) {
590 else if (fabs(ps - 0.25) < eps) {
593 else if (fabs(ps - 1.0) < eps) {
619 int sinfo_get_clean_mean_window(cpl_image* img,
620 int llx,
int lly,
int urx,
int ury,
621 const int kappa,
const int nclip,
622 double* local_clean_mean,
630 cpl_stats* stats=NULL;
633 tmp=cpl_image_extract(img,llx,lly,urx,ury);
634 cpl_image_accept_all(tmp);
635 for(i=0;i<nclip;i++) {
638 cpl_stats_delete(stats);
639 stats = cpl_stats_new_from_image(tmp, CPL_STATS_MEAN | CPL_STATS_STDEV);
640 mean = cpl_stats_get_mean(stats);
641 stdev = cpl_stats_get_stdev(stats);
643 double threshold=kappa*stdev;
644 double lo_cut=mean-threshold;
645 double hi_cut=mean+threshold;
646 cpl_image_accept_all(tmp);
647 cpl_mask* mask=cpl_mask_threshold_image_create(tmp,lo_cut,hi_cut);
650 cpl_image_reject_from_mask(tmp,mask);
651 cpl_mask_delete(mask);
655 *local_clean_mean=mean;
657 cpl_image_delete(tmp);
658 cpl_stats_delete(stats);
670 int sinfo_check_rec_status(
const int val) {
671 if(cpl_error_get_code() != CPL_ERROR_NONE) {
687 sinfo_clean_nan(cpl_image** im)
692 int nx=cpl_image_get_size_x(*im);
693 int ny=cpl_image_get_size_y(*im);
694 float* data=cpl_image_get_data_float(*im);
698 if(isnan(data[j*nx+i]) != 0) {
716 sinfo_add_pro_fits_key(cpl_propertylist * plist,
723 date = sinfo_get_datetime_iso8601() ;
725 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
726 KEY_NAME_PIPEFILE, out_name) ;
727 cpl_propertylist_set_comment(plist, KEY_NAME_PIPEFILE,KEY_HELP_PIPEFILE) ;
729 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
730 KEY_NAME_HPRO_DID, KEY_VALUE_HPRO_DID) ;
731 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DID,KEY_HELP_HPRO_DID) ;
733 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
734 KEY_NAME_HPRO_TYPE,
"REDUCED") ;
735 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_TYPE, KEY_HELP_HPRO_TYPE) ;
737 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
738 KEY_NAME_HPRO_CATG, pro_catg) ;
739 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_CATG, KEY_HELP_HPRO_CATG);
741 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
742 KEY_NAME_HPRO_STATUS,
"OK") ;
743 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_STATUS,KEY_HELP_HPRO_CATG);
745 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
746 KEY_NAME_HPRO_DATE, date) ;
747 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DATE, KEY_HELP_HPRO_DATE);
749 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
750 KEY_NAME_HPRO_RECID, file_name) ;
751 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_RECID,KEY_HELP_HPRO_RECID);
753 cpl_propertylist_insert_after_string(plist,
"EXPTIME",
754 KEY_NAME_HPRO_DRSID, PACKAGE_VERSION);
755 cpl_propertylist_set_comment(plist, KEY_NAME_HPRO_DRSID,KEY_HELP_HPRO_DRSID);
767 int sinfo_compare_tags(
768 const cpl_frame * frame1,
769 const cpl_frame * frame2)
775 if (frame1==NULL || frame2==NULL)
return -1 ;
778 if ((v1 = (
char*)cpl_frame_get_tag(frame1)) == NULL)
return -1 ;
779 if ((v2 = (
char*)cpl_frame_get_tag(frame2)) == NULL)
return -1 ;
782 if (strcmp(v1, v2))
return 0 ;
794 int sinfo_extract_raw_pinhole_frames(cpl_frameset * sof, cpl_frameset** raw)
801 nsof = cpl_frameset_get_size(sof);
802 for (i=0 ; i<nsof ; i++) {
803 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
804 char* name= (
char*) cpl_frame_get_filename(frame);
805 if(sinfo_is_fits_file(name) == 1) {
807 if(cpl_frame_get_tag(frame) != NULL) {
809 char* tag= (
char*) cpl_frame_get_tag(frame);
810 if(sinfo_frame_is_pinhole_lamp(tag) == 1) {
811 cpl_frameset_insert(*raw,frame);
820 int sinfo_get_ins_set(
char* band,
int* ins_set){
822 if (strcmp(band,
"H") == 0) {
825 else if (strcmp(band,
"H+K") == 0) {
828 else if (strcmp(band,
"K") == 0) {
831 else if (strcmp(band,
"J") == 0) {
840 int sinfo_remove_qc_frames(cpl_frameset* sof,cpl_frameset** raw)
845 int nsof = cpl_frameset_get_size(sof);
846 for (i=0 ; i<nsof ; i++) {
847 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
848 char* name= (
char*) cpl_frame_get_filename(frame);
850 if(sinfo_is_fits_file(name) == 1) {
853 if(cpl_frame_get_tag(frame) != NULL) {
855 char* tag= (
char*) cpl_frame_get_tag(frame);
857 if(strstr(tag,
"QC") != NULL) {
859 cpl_frameset_erase(*raw,tag);
864 cpl_frameset_erase_frame(*raw,frame);
872 int sinfo_contains_frames_kind(cpl_frameset * sof,
878 int nsof = cpl_frameset_get_size(sof);
879 for (i=0 ; i<nsof ; i++) {
880 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
881 char* name= (
char*) cpl_frame_get_filename(frame);
882 if(sinfo_is_fits_file(name) == 1) {
884 if(cpl_frame_get_tag(frame) != NULL) {
886 char* tag= (
char*) cpl_frame_get_tag(frame);
888 if(strstr(tag,type) != NULL) {
890 cpl_frame* frame_dup = cpl_frame_duplicate(frame);
891 cpl_frameset_insert(raw,frame_dup);
903 int sinfo_is_fibres_on_off(cpl_frameset * sof,
908 int nsof = cpl_frameset_get_size(sof);
910 for (i=0 ; i<nsof ; i++) {
911 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
912 char* name= (
char*) cpl_frame_get_filename(frame);
913 if(sinfo_is_fits_file(name) == 1) {
915 if(cpl_frame_get_tag(frame) != NULL) {
917 char* tag= (
char*) cpl_frame_get_tag(frame);
919 if( strcmp(tag,PRO_FIBRE_NS_STACKED ) == 0) {
921 cpl_frame* frame_dup = cpl_frame_duplicate(frame);
922 cpl_frameset_insert(raw,frame_dup);
932 int sinfo_contains_frames_type(cpl_frameset * sof,
937 int nsof = cpl_frameset_get_size(sof);
938 for (i=0 ; i<nsof ; i++) {
939 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
940 char* name= (
char*) cpl_frame_get_filename(frame);
941 if(sinfo_is_fits_file(name) == 1) {
943 if(cpl_frame_get_tag(frame) != NULL) {
945 char* tag= (
char*) cpl_frame_get_tag(frame);
946 if(strstr(tag,type) != NULL) {
948 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
949 cpl_frameset_insert(*raw,frame_dup);
957 int sinfo_extract_raw_frames_type2(cpl_frameset * sof,
963 cpl_frame* frame = cpl_frameset_find(sof,type);
965 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
966 cpl_frameset_insert(*raw,frame_dup);
967 frame = cpl_frameset_find(sof,NULL);
974 int sinfo_extract_raw_frames_type1(cpl_frameset * sof,
979 cpl_frame* frame = cpl_frameset_find(sof,type);
981 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
982 cpl_frameset_insert(raw,frame_dup);
983 frame = cpl_frameset_find(sof,NULL);
989 int sinfo_extract_raw_frames_type(cpl_frameset * sof,
993 char tag[FILE_NAME_SZ];
994 char name[FILE_NAME_SZ];
996 int nsof = cpl_frameset_get_size(sof);
997 for (i=0 ; i<nsof ; i++) {
998 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
999 strcpy(name, cpl_frame_get_filename(frame));
1000 if(sinfo_is_fits_file(name) == 1) {
1002 if(cpl_frame_get_tag(frame) != NULL) {
1004 strcpy(tag,cpl_frame_get_tag(frame));
1005 if(strcmp(tag,type) == 0) {
1007 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1009 cpl_frameset_insert(*raw,frame_dup);
1017 int sinfo_extract_frames_type(cpl_frameset * sof,
1023 int nsof = cpl_frameset_get_size(sof);
1024 for (i=0 ; i<nsof ; i++) {
1025 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1026 char* name= (
char*) cpl_frame_get_filename(frame);
1027 if(sinfo_is_fits_file(name) == 1) {
1029 if(cpl_frame_get_tag(frame) != NULL) {
1031 char* tag= (
char*) cpl_frame_get_tag(frame);
1032 if(strcmp(tag,type) == 0) {
1034 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1035 cpl_frameset_insert(raw,frame_dup);
1044 int sinfo_extract_obj_frames(cpl_frameset * sof, cpl_frameset* obj)
1048 int nsof = cpl_frameset_get_size(sof);
1049 for (i=0 ; i<nsof ; i++) {
1050 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1051 char* name= (
char*) cpl_frame_get_filename(frame);
1052 if(sinfo_is_fits_file(name) ==1) {
1054 if(cpl_frame_get_tag(frame) != NULL) {
1056 char* tag= (
char*) cpl_frame_get_tag(frame);
1057 if(sinfo_tag_is_obj(tag) == 1) {
1058 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1059 cpl_frameset_insert(obj,frame_dup);
1069 int sinfo_extract_obj_products(cpl_frameset * sof, cpl_frameset* obj)
1073 int nsof = cpl_frameset_get_size(sof);
1074 for (i=0 ; i<nsof ; i++) {
1075 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1076 char* name= (
char*) cpl_frame_get_filename(frame);
1077 if(sinfo_is_fits_file(name) ==1) {
1079 if(cpl_frame_get_tag(frame) != NULL) {
1081 char* tag= (
char*) cpl_frame_get_tag(frame);
1082 if(sinfo_tag_is_objpro(tag) == 1) {
1083 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1084 cpl_frameset_insert(obj,frame_dup);
1093 int sinfo_extract_on_frames(cpl_frameset * sof, cpl_frameset* on)
1098 int nsof = cpl_frameset_get_size(sof);
1099 for (i=0 ; i<nsof ; i++) {
1100 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1101 if(sinfo_frame_is_on(frame) ==1) {
1102 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1103 cpl_frameset_insert(on,frame_dup);
1110 int sinfo_extract_sky_frames(cpl_frameset * sof, cpl_frameset* sky)
1113 int nsof = cpl_frameset_get_size(sof);
1114 for (i=0 ; i<nsof ; i++) {
1115 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1116 char* name= (
char*) cpl_frame_get_filename(frame);
1117 if(sinfo_is_fits_file(name) ==1) {
1119 if(cpl_frame_get_tag(frame) != NULL) {
1121 char* tag= (
char*) cpl_frame_get_tag(frame);
1122 if(sinfo_tag_is_sky(tag) == 1) {
1123 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1124 cpl_frameset_insert(sky,frame_dup);
1135 int sinfo_extract_off_frames(cpl_frameset * sof, cpl_frameset* off)
1139 int nsof = cpl_frameset_get_size(sof);
1140 for (i=0 ; i<nsof ; i++) {
1141 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1142 if(sinfo_frame_is_on(frame)) {
1143 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1144 cpl_frameset_insert(off,frame_dup);
1151 int sinfo_extract_mst_frames(cpl_frameset * sof, cpl_frameset* cdb)
1155 int nsof = cpl_frameset_get_size(sof);
1156 for (i=0 ; i<nsof ; i++) {
1157 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1158 char* name= (
char*) cpl_frame_get_filename(frame);
1159 if(sinfo_is_fits_file(name) ==1) {
1161 if(cpl_frame_get_tag(frame) != NULL) {
1163 char* tag= (
char*) cpl_frame_get_tag(frame);
1164 if(sinfo_frame_is_cdb(tag) == 1) {
1165 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1166 cpl_frameset_insert(cdb,frame_dup);
1178 cpl_frameset* sinfo_frameset_join(cpl_frameset* fs1,cpl_frameset* fs2) {
1180 cpl_frameset* join=cpl_frameset_duplicate(fs1);
1181 cpl_frameset_join(join,fs2);
1188 int sinfo_extract_stk_frames(cpl_frameset * sof,
1193 int nsof = cpl_frameset_get_size(sof);
1194 for (i=0 ; i<nsof ; i++) {
1195 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1196 char* name= (
char*) cpl_frame_get_filename(frame);
1197 if(sinfo_is_fits_file(name) ==1) {
1199 if(cpl_frame_get_tag(frame) != NULL) {
1201 char* tag= (
char*) cpl_frame_get_tag(frame);
1202 if(sinfo_frame_is_stk(tag) == 1) {
1203 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1204 cpl_frameset_insert(res,frame_dup);
1215 sinfo_extract_preoptic_frames(cpl_frameset * sof,
1221 int nsof = cpl_frameset_get_size(sof);
1222 for (
int i=0 ; i<nsof ; i++) {
1223 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1224 char* name= (
char*) cpl_frame_get_filename(frame);
1225 if(sinfo_is_fits_file(name) ==1) {
1226 if(sinfo_frame_is_preoptic(frame,val) == 1) {
1227 cpl_frame* frame_dup=cpl_frame_duplicate(frame);
1228 cpl_frameset_insert(*res,frame_dup);
1236 int sinfo_extract_raw_stack_frames(cpl_frameset * sof, cpl_frameset** pro)
1240 int nsof = cpl_frameset_get_size(sof);
1242 for (i=0 ; i<nsof ; i++) {
1243 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1244 char* name= (
char*) cpl_frame_get_filename(frame);
1245 if(sinfo_is_fits_file(name) ==1) {
1247 if(cpl_frame_get_tag(frame) != NULL) {
1249 char* tag= (
char*) cpl_frame_get_tag(frame);
1251 if(sinfo_frame_is_raw_stack(tag) == 1) {
1252 cpl_frame* frame_dup = cpl_frame_duplicate(frame);
1253 cpl_frameset_insert(*pro,frame_dup);
1263 int sinfo_extract_raw_slit_frames(cpl_frameset * sof, cpl_frameset** pro)
1267 int nsof = cpl_frameset_get_size(sof);
1268 for (i=0 ; i<nsof ; i++) {
1269 cpl_frame* frame = cpl_frameset_get_frame(sof,i);
1270 char* name= (
char*) cpl_frame_get_filename(frame);
1271 if(sinfo_is_fits_file(name) ==1) {
1273 if(cpl_frame_get_tag(frame) != NULL) {
1275 char* tag= (
char*) cpl_frame_get_tag(frame);
1276 if(sinfo_frame_is_slit_lamp(tag) == 1) {
1277 cpl_frameset_insert(*pro,frame);
1293 int sinfo_frame_is_raw(
char * tag)
1296 if (tag == NULL)
return -1 ;
1299 if (!strcmp(tag, RAW_LINEARITY_LAMP))
return 1 ;
1300 if (!strcmp(tag, RAW_DARK))
return 1 ;
1302 if (!strcmp(tag, RAW_FLAT_LAMP))
return 1 ;
1303 if (!strcmp(tag, RAW_FLAT_LAMP_DITHER))
return 1 ;
1305 if (!strcmp(tag, RAW_WAVE_LAMP))
return 1 ;
1306 if (!strcmp(tag, RAW_WAVE_LAMP_DITHER))
return 1 ;
1308 if (!strcmp(tag, RAW_PINHOLE_LAMP))
return 1 ;
1310 if (!strcmp(tag, RAW_SLIT_LAMP))
return 1 ;
1313 if (!strcmp(tag, RAW_WAVE_NS))
return 1 ;
1314 if (!strcmp(tag, RAW_FLAT_NS))
return 1 ;
1315 if (!strcmp(tag, RAW_FIBRE_LAMP))
return 1 ;
1316 if (!strcmp(tag, RAW_FIBRE_EW))
return 1 ;
1317 if (!strcmp(tag, RAW_FIBRE_NS))
return 1 ;
1320 if (!strcmp(tag, RAW_FLAT_SKY))
return 1 ;
1321 if (!strcmp(tag, RAW_FLUX_LAMP))
return 1 ;
1322 if (!strcmp(tag, RAW_PSF_CALIBRATOR))
return 1 ;
1323 if (!strcmp(tag, RAW_FOCUS))
return 1 ;
1325 if (!strcmp(tag, RAW_STD))
return 1 ;
1326 if (!strcmp(tag, RAW_STD_STAR))
return 1 ;
1327 if (!strcmp(tag, RAW_STD_STAR_DITHER))
return 1 ;
1328 if (!strcmp(tag, RAW_SKY_STD))
return 1 ;
1329 if (!strcmp(tag, RAW_SKY_OH))
return 1 ;
1330 if (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR))
return 1 ;
1332 if (!strcmp(tag, RAW_PUPIL_LAMP))
return 1 ;
1333 if (!strcmp(tag, RAW_OBJECT_JITTER))
return 1 ;
1334 if (!strcmp(tag, RAW_SKY_JITTER))
return 1 ;
1335 if (!strcmp(tag, RAW_OBJECT_NODDING))
return 1 ;
1336 if (!strcmp(tag, RAW_OBJECT_SKYSPIDER))
return 1 ;
1337 if (!strcmp(tag, RAW_SKY_NODDING))
return 1 ;
1340 if (!strcmp(tag, RAW_STD_STAR_DITHER))
return 1 ;
1341 if (!strcmp(tag, RAW_OBJECT_NODDING_DITHER))
return 1 ;
1342 if (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER))
return 1 ;
1343 if (!strcmp(tag, RAW_SKY_NODDING_DITHER))
return 1 ;
1358 int sinfo_frame_is_raw_stack(
char * tag)
1361 if (tag == NULL)
return -1 ;
1364 if (!strcmp(tag, PRO_SKY_DUMMY))
return 1 ;
1367 if (!strcmp(tag, RAW_WAVE_LAMP))
return 1 ;
1368 if (!strcmp(tag, RAW_WAVE_LAMP_DITHER))
return 1 ;
1370 if (!strcmp(tag, RAW_WAVE_NS))
return 1 ;
1371 if (!strcmp(tag, RAW_WAVE_NS_DITHER))
return 1 ;
1374 if (!strcmp(tag, RAW_FIBRE_NS))
return 1 ;
1375 if (!strcmp(tag, RAW_FIBRE_EW))
return 1 ;
1377 if (!strcmp(tag, RAW_PSF_CALIBRATOR))
return 1 ;
1378 if (!strcmp(tag, RAW_FIBRE_PSF))
return 1 ;
1379 if (!strcmp(tag, RAW_FIBRE_DARK))
return 1 ;
1381 if (!strcmp(tag, RAW_FLUX_LAMP))
return 1 ;
1382 if (!strcmp(tag, RAW_FOCUS))
return 1 ;
1384 if (!strcmp(tag, RAW_PUPIL_LAMP))
return 1 ;
1385 if (!strcmp(tag, RAW_OBJECT_JITTER))
return 1 ;
1386 if (!strcmp(tag, RAW_SKY_JITTER))
return 1 ;
1387 if (!strcmp(tag, RAW_OBJECT_NODDING))
return 1 ;
1388 if (!strcmp(tag, RAW_OBJECT_SKYSPIDER))
return 1 ;
1389 if (!strcmp(tag, RAW_SKY_NODDING))
return 1 ;
1391 if (!strcmp(tag, RAW_OBJECT_NODDING_DITHER))
return 1 ;
1392 if (!strcmp(tag, RAW_OBJECT_SKYSPIDER_DITHER))
return 1 ;
1393 if (!strcmp(tag, RAW_SKY_NODDING_DITHER))
return 1 ;
1396 if (!strcmp(tag, RAW_IMAGE_PRE_OBJECT))
return 1 ;
1397 if (!strcmp(tag, RAW_IMAGE_PRE_SKY))
return 1 ;
1398 if (!strcmp(tag, RAW_STD))
return 1 ;
1399 if (!strcmp(tag, RAW_SKY_STD))
return 1 ;
1400 if (!strcmp(tag, RAW_SKY_OH))
return 1 ;
1401 if (!strcmp(tag, RAW_SKY_PSF_CALIBRATOR))
return 1 ;
1402 if (!strcmp(tag, RAW_STD_STAR))
return 1 ;
1403 if (!strcmp(tag, RAW_SKY))
return 1 ;
1416 int sinfo_frame_is_raw_dark(
char * tag)
1419 if (tag == NULL)
return -1 ;
1421 if (!strcmp(tag, RAW_DARK))
return 1 ;
1433 int sinfo_frame_is_slit_lamp(
char * tag)
1436 if (tag == NULL)
return -1 ;
1438 if (!strcmp(tag, RAW_SLIT_LAMP))
return 1 ;
1451 int sinfo_frame_is_pinhole_lamp(
char * tag)
1454 if (tag == NULL)
return -1 ;
1456 if (!strcmp(tag, RAW_PINHOLE_LAMP))
return 1 ;
1462 int sinfo_frame_is_cdb(
char * tag)
1465 if (tag == NULL)
return -1 ;
1495 if (!strcmp(tag, REF_LINE_ARC))
return 1 ;
1496 if (!strcmp(tag, REF_LINE_OH))
return 1 ;
1497 if (!strcmp(tag, PRO_BP_MAP))
return 1 ;
1498 if (!strcmp(tag, PRO_BP_MAP_HP))
return 1 ;
1499 if (!strcmp(tag, PRO_BP_MAP_DI))
return 1 ;
1500 if (!strcmp(tag, PRO_BP_MAP_NO))
return 1 ;
1501 if (!strcmp(tag, PRO_BP_MAP_NL))
return 1 ;
1502 if (!strcmp(tag, PRO_MASTER_BP_MAP))
return 1 ;
1503 if (!strcmp(tag, PRO_MASTER_DARK))
return 1 ;
1504 if (!strcmp(tag, PRO_SLOPE))
return 1 ;
1505 if (!strcmp(tag, PRO_DISTORTION))
return 1 ;
1506 if (!strcmp(tag, PRO_SLITLETS_DISTANCE))
return 1 ;
1507 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP))
return 1 ;
1508 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP1))
return 1 ;
1509 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP2))
return 1 ;
1510 if (!strcmp(tag, PRO_SLIT_POS))
return 1 ;
1511 if (!strcmp(tag, PRO_SLIT_POS_GUESS))
return 1 ;
1512 if (!strcmp(tag, PRO_WAVE_PAR_LIST))
return 1 ;
1513 if (!strcmp(tag, PRO_WAVE_COEF_SLIT))
return 1 ;
1514 if (!strcmp(tag, PRO_MASTER_LAMP_SPEC))
return 1 ;
1515 if (!strcmp(tag, PRO_MASTER_TWIFLAT))
return 1 ;
1516 if (!strcmp(tag, PRO_COEFF_LIST))
return 1 ;
1517 if (!strcmp(tag, PRO_INDEX_LIST))
return 1 ;
1518 if (!strcmp(tag, PRO_HALO_SPECT))
return 1 ;
1519 if (!strcmp(tag, PRO_FIRST_COL))
return 1 ;
1520 if (!strcmp(tag, PRO_FOCUS))
return 1 ;
1521 if (!strcmp(tag, PRO_WAVE_MAP))
return 1 ;
1522 if (!strcmp(tag, PRO_REF_ATM_REF_CORR))
return 1 ;
1531 int sinfo_frame_is_stk(
char * tag)
1534 if (tag == NULL)
return -1 ;
1538 if (!strcmp(tag, PRO_SKY_STACKED_DUMMY))
return 1 ;
1539 if (!strcmp(tag, PRO_STACK_SKY_DIST))
return 1 ;
1540 if (!strcmp(tag, PRO_STACK_MFLAT_DIST))
return 1 ;
1541 if (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED))
return 1 ;
1548 int sinfo_frame_is_preoptic(cpl_frame* frame,
const char* val)
1552 char popt[FILE_NAME_SZ];
1553 cpl_propertylist* plist=NULL;
1556 file = cpl_strdup(cpl_frame_get_filename(frame)) ;
1557 if ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
1559 cpl_propertylist_delete(plist) ;
1564 if (cpl_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
1565 strcpy(popt,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
1571 cpl_propertylist_delete(plist) ;
1574 if (strstr(val,popt) != NULL)
return 1 ;
1582 int sinfo_get_preoptic(
const char* file,
const char* val)
1585 cpl_propertylist* plist=NULL;
1588 if ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
1590 cpl_propertylist_delete(plist) ;
1594 if (cpl_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
1595 strcpy((
char*)val,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
1600 cpl_propertylist_delete(plist) ;
1665 cpl_table* sinfo_compute_gain(cpl_frameset* son, cpl_frameset* sof)
1669 cpl_frame* frm=NULL;
1671 cpl_image* img_on1=NULL;
1672 cpl_image* img_on2=NULL;
1673 cpl_image* img_on_dif=NULL;
1674 cpl_image* img_on_sub=NULL;
1677 cpl_image* img_of1=NULL;
1678 cpl_image* img_of2=NULL;
1679 cpl_image* img_of_dif=NULL;
1680 cpl_image* img_of_sub=NULL;
1682 cpl_table* res_tbl=NULL;
1683 cpl_vector* dit_on=NULL;
1684 cpl_vector* dit_of=NULL;
1685 cpl_vector* exptime_on=NULL;
1686 cpl_vector* exptime_of=NULL;
1687 cpl_propertylist* plist=NULL;
1698 double sig_on_dif=0;
1699 double sig_of_dif=0;
1712 double exptime_ref=0;
1713 double exptime_tmp=0;
1718 non = cpl_frameset_get_size(son);
1719 nof = cpl_frameset_get_size(sof);
1720 nfr = (non <= nof) ? non : nof;
1722 dit_on=cpl_vector_new(nfr);
1723 dit_of=cpl_vector_new(nfr);
1724 exptime_on=cpl_vector_new(nfr);
1725 exptime_of=cpl_vector_new(nfr);
1727 for(i=0;i<nfr;i++) {
1729 frm=cpl_frameset_get_frame(son,i);
1730 name=(
char*)cpl_frame_get_filename(frm);
1731 plist=cpl_propertylist_load(name,0);
1732 dit_ref=sinfo_pfits_get_dit(plist);
1733 exptime_ref=(double)sinfo_pfits_get_exp_time(plist);
1734 cpl_propertylist_delete(plist);
1735 cpl_vector_set(dit_on,i,dit_ref);
1736 cpl_vector_set(exptime_on,i,exptime_ref);
1738 frm=cpl_frameset_get_frame(sof,i);
1739 name=(
char*)cpl_frame_get_filename(frm);
1740 plist=cpl_propertylist_load(name,0);
1741 dit_ref=sinfo_pfits_get_dit(plist);
1742 exptime_ref=(double)sinfo_pfits_get_exp_time(plist);
1743 cpl_propertylist_delete(plist);
1744 cpl_vector_set(dit_of,i,dit_ref);
1745 cpl_vector_set(exptime_of,i,exptime_ref);
1765 check_nomsg(res_tbl=cpl_table_new(nfr));
1766 cpl_table_new_column(res_tbl,
"adu", CPL_TYPE_DOUBLE);
1767 cpl_table_new_column(res_tbl,
"gain", CPL_TYPE_DOUBLE);
1769 for(i=0;i<nfr;i++) {
1770 frm=cpl_frameset_get_frame(son,i);
1771 name=(
char*)cpl_frame_get_filename(frm);
1772 img_on1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
1774 frm=cpl_frameset_get_frame(sof,i);
1775 name=(
char*)cpl_frame_get_filename(frm);
1776 img_of1=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
1779 dit_ref=cpl_vector_get(dit_on,i);
1780 exptime_ref=cpl_vector_get(exptime_on,i);
1783 for(m=0;m<nfr; m++) {
1785 frm=cpl_frameset_get_frame(son,m);
1786 name=(
char*)cpl_frame_get_filename(frm);
1787 dit_tmp=cpl_vector_get(dit_on,m);
1788 exptime_tmp=cpl_vector_get(exptime_on,m);
1789 if(dit_tmp == dit_ref && exptime_tmp == exptime_ref) {
1791 img_on2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
1792 frm=cpl_frameset_get_frame(sof,m);
1793 name=(
char*)cpl_frame_get_filename(frm);
1794 img_of2=cpl_image_load(name,CPL_TYPE_DOUBLE,0,0);
1796 img_on_dif=cpl_image_subtract_create(img_on1,img_on2);
1797 img_of_dif=cpl_image_subtract_create(img_of1,img_of2);
1799 img_on_sub=cpl_image_extract(img_on_dif,llx,lly,urx,ury);
1800 img_of_sub=cpl_image_extract(img_of_dif,llx,lly,urx,ury);
1802 sinfo_get_clean_mean_window(img_on1,llx,lly,urx,ury,kappa,
1803 nclip,&avg_on1,&std);
1804 sinfo_get_clean_mean_window(img_on2,llx,lly,urx,ury,kappa,
1805 nclip,&avg_on2,&std);
1806 sinfo_get_clean_mean_window(img_of1,llx,lly,urx,ury,kappa,
1807 nclip,&avg_of1,&std);
1808 sinfo_get_clean_mean_window(img_of2,llx,lly,urx,ury,kappa,
1809 nclip,&avg_of2,&std);
1826 sinfo_get_clean_mean_window(img_on_dif,llx,lly,urx,ury,kappa,
1827 nclip,¢re,&sig_on_dif);
1828 sinfo_get_clean_mean_window(img_of_dif,llx,lly,urx,ury,kappa,
1829 nclip,¢re,&sig_of_dif);
1846 cpl_image_delete(img_on2);
1847 cpl_image_delete(img_of2);
1848 cpl_image_delete(img_on_dif);
1849 cpl_image_delete(img_of_dif);
1850 cpl_image_delete(img_on_sub);
1851 cpl_image_delete(img_of_sub);
1853 gain=((avg_on1+avg_on2)-(avg_of1+avg_of2))/
1854 ((sig_on_dif*sig_on_dif)-(sig_of_dif*sig_of_dif));
1856 cpl_table_set_double(res_tbl,
"gain",m,gain);
1857 cpl_table_set_double(res_tbl,
"adu",m,
1858 ((avg_on1+avg_on2)/2-(avg_of1+avg_of2)/2));
1869 cpl_image_delete(img_on1);
1870 cpl_image_delete(img_of1);
1881 cpl_vector_delete(dit_on);
1882 cpl_vector_delete(dit_of);
1883 cpl_vector_delete(exptime_on);
1884 cpl_vector_delete(exptime_of);
1889 cpl_vector_delete(dit_on);
1890 cpl_vector_delete(dit_of);
1891 cpl_vector_delete(exptime_on);
1892 cpl_vector_delete(exptime_of);
1913 sinfo_image_estimate_noise(cpl_image* img,
1914 const int noise_fit,
1928 double min_fct=HISTO_DIST_TEMPC_MIN_FCT;
1929 double max_fct=HISTO_DIST_TEMPC_MAX_FCT;
1950 cpl_table* data_tbl=NULL;
1951 cpl_table* histo=NULL;
1952 cpl_table* dist=NULL;
1953 cpl_table* min_xi=NULL;
1954 cpl_table* tmp_tbl1=NULL;
1955 cpl_table* tmp_tbl2=NULL;
1956 cpl_vector* vx=NULL;
1957 cpl_vector* vy=NULL;
1958 cpl_vector* sx=NULL;
1959 cpl_vector* sy=NULL;
1962 check_nomsg(xsz=cpl_image_get_size_x(img));
1963 check_nomsg(ysz=cpl_image_get_size_y(img));
1966 check_nomsg(data_tbl=cpl_table_new(n));
1967 check_nomsg(cpl_table_new_column(data_tbl,
"DATA",CPL_TYPE_DOUBLE));
1969 check_nomsg(pdata=cpl_image_get_data(img));
1971 if(!isnan(pdata[i])) {
1972 cpl_table_set_double(data_tbl,
"DATA",r,pdata[i]);
1977 check_nomsg(cpl_table_erase_invalid(data_tbl));
1978 check_nomsg(avg_d=cpl_table_get_column_mean(data_tbl,
"DATA"));
1979 check_nomsg(std_d=cpl_table_get_column_stdev(data_tbl,
"DATA"));
1981 cpl_table_save(data_tbl, NULL, NULL,
"out_data.fits", CPL_IO_DEFAULT);
1983 hmin=avg_d-kappa*std_d;
1984 hmax=avg_d+kappa*std_d;
1988 ck0(sinfo_histogram(data_tbl,nbins,hmin,hmax,&histo),
"building histogram");
1994 check_nomsg(peak=cpl_table_get_column_max(histo,
"HY"));
1996 sinfo_free_table(&tmp_tbl1);
1998 check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,
"HY",CPL_EQUAL_TO,peak));
2003 check_nomsg(*centre=cpl_table_get_column_mean(tmp_tbl1,
"HL"));
2006 sinfo_free_table(&tmp_tbl1);
2007 check_nomsg(tmp_tbl1=sinfo_extract_table_rows(histo,
"HY",
2010 sinfo_free_table(&tmp_tbl2);
2011 check_nomsg(tmp_tbl2=sinfo_extract_table_rows(tmp_tbl1,
"HY",
2012 CPL_LESS_THAN,peak));
2013 sinfo_free_table(&tmp_tbl1);
2015 check_nomsg(tempc=*centre-cpl_table_get_column_min(tmp_tbl2,
"HL"));
2017 sinfo_free_table(&tmp_tbl2);
2019 check_nomsg(dist=sinfo_where_tab_min_max(histo,
"HL",
2021 *centre-min_fct*tempc,
2022 CPL_NOT_GREATER_THAN,
2023 *centre+max_fct*tempc));
2025 offset=cpl_table_get_column_min(histo,
"HY");
2026 sinfo_free_table(&histo);
2029 check_nomsg(ndist=cpl_table_get_nrow(dist));
2030 check_nomsg(cpl_table_cast_column(dist,
"HY",
"HYdouble",CPL_TYPE_DOUBLE));
2031 check_nomsg(disth=cpl_table_get_data_double(dist,
"HYdouble"));
2032 check_nomsg(distx=cpl_table_get_data_double(dist,
"HL"));
2033 cpl_table_save(dist, NULL, NULL,
"out_dist.fits", CPL_IO_DEFAULT);
2042 if(noise_fit == 1) {
2043 check_nomsg(vy=cpl_vector_wrap(ndist,disth));
2044 check_nomsg(vx=cpl_vector_wrap(ndist,distx));
2045 check_nomsg(sx=cpl_vector_new(ndist));
2046 check_nomsg(cpl_vector_fill(sx,1.));
2047 check_nomsg(sy=cpl_vector_duplicate(sx));
2051 if(CPL_ERROR_NONE != cpl_vector_fit_gaussian(vx,NULL,
2054 &x0,&sigma,&area,&offset,
2064 sinfo_unwrap_vector(&vx);
2065 sinfo_unwrap_vector(&vy);
2066 sinfo_free_my_vector(&sx);
2067 sinfo_free_my_vector(&sy);
2069 sinfo_free_table(&dist);
2074 sinfo_free_table(&min_xi);
2075 sinfo_free_table(&tmp_tbl1);
2076 sinfo_free_table(&tmp_tbl2);
2077 sinfo_free_table(&histo);
2078 sinfo_free_table(&dist);
2079 sinfo_free_table(&data_tbl);
2080 sinfo_free_my_vector(&sx);
2081 sinfo_free_my_vector(&sy);
2082 sinfo_unwrap_vector(&vx);
2083 sinfo_unwrap_vector(&vy);
2093 cpl_table* sinfo_compute_linearity(cpl_frameset* son, cpl_frameset* sof)
2105 cpl_vector* vec_adl=NULL;
2106 cpl_vector* vec_dit=NULL;
2107 cpl_vector* vec_avg=NULL;
2108 cpl_vector* vec_med=NULL;
2109 cpl_vector* vec_avg_dit=NULL;
2110 cpl_vector* vec_med_dit=NULL;
2113 cpl_table* lin_tbl=NULL;
2116 non = cpl_frameset_get_size(son);
2117 nof = cpl_frameset_get_size(sof);
2118 nfr = (non <= nof) ? non : nof;
2120 lin_tbl=cpl_table_new(nfr);
2121 cpl_table_new_column(lin_tbl,
"med", CPL_TYPE_DOUBLE);
2122 cpl_table_new_column(lin_tbl,
"avg", CPL_TYPE_DOUBLE);
2123 cpl_table_new_column(lin_tbl,
"med_dit", CPL_TYPE_DOUBLE);
2124 cpl_table_new_column(lin_tbl,
"avg_dit", CPL_TYPE_DOUBLE);
2125 cpl_table_new_column(lin_tbl,
"dit", CPL_TYPE_DOUBLE);
2126 vec_med=cpl_vector_new(nfr);
2127 vec_avg=cpl_vector_new(nfr);
2128 vec_med_dit=cpl_vector_new(nfr);
2129 vec_avg_dit=cpl_vector_new(nfr);
2130 vec_dit=cpl_vector_new(nfr);
2131 vec_adl=cpl_vector_new(nfr);
2133 for(i=0;i<nfr;i++) {
2134 cpl_frame* frm=cpl_frameset_get_frame(son,i);
2135 char* name=(
char*)cpl_frame_get_filename(frm);
2136 cpl_image* img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
2137 double med_on=cpl_image_get_median(img);
2138 double avg_on=cpl_image_get_mean(img);
2139 cpl_image_delete(img);
2141 frm=cpl_frameset_get_frame(sof,i);
2142 name=(
char*)cpl_frame_get_filename(frm);
2143 img=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
2144 double med_of=cpl_image_get_median(img);
2145 double avg_of=cpl_image_get_mean(img);
2146 cpl_image_delete(img);
2148 double med=med_on-med_of;
2149 double avg=avg_on-avg_of;
2150 cpl_propertylist* plist=cpl_propertylist_load(name,0);
2151 dit=(double)sinfo_pfits_get_dit(plist);
2152 cpl_propertylist_delete(plist);
2153 double avg_dit=avg/dit;
2156 cpl_vector_set(vec_dit,i,dit);
2157 cpl_vector_set(vec_avg,i,avg);
2158 cpl_vector_set(vec_med,i,med);
2159 cpl_vector_set(vec_avg_dit,i,avg_dit);
2160 cpl_vector_set(vec_med_dit,i,med_dit);
2162 cpl_table_set_double(lin_tbl,
"dit",i,dit);
2163 cpl_table_set_double(lin_tbl,
"med",i,med);
2164 cpl_table_set_double(lin_tbl,
"avg",i,avg);
2165 cpl_table_set_double(lin_tbl,
"med_dit",i,med_dit);
2166 cpl_table_set_double(lin_tbl,
"avg_dit",i,avg_dit);
2169 cpl_table_new_column(lin_tbl,
"adl", CPL_TYPE_DOUBLE);
2170 med_dit=cpl_vector_get_mean(vec_med_dit);
2173 for(i=0;i<nfr;i++) {
2174 dit = cpl_table_get_double(lin_tbl,
"dit",i,status);
2175 cpl_vector_set(vec_adl,i,dit*med_dit);
2176 cpl_table_set_double(lin_tbl,
"adl",i,dit*med_dit);
2179 cpl_vector_delete(vec_dit);
2180 cpl_vector_delete(vec_adl);
2181 cpl_vector_delete(vec_avg);
2182 cpl_vector_delete(vec_med);
2183 cpl_vector_delete(vec_avg_dit);
2184 cpl_vector_delete(vec_med_dit);
2200 sinfo_get_ron(cpl_frameset * framelist,
2205 const int ron_hsize,
2206 const int ron_nsamp,
2209 cpl_imagelist * iset =NULL;
2210 cpl_image * tmp_im =NULL;
2214 cpl_frame * frame =NULL;
2216 cpl_propertylist* plist=NULL;
2220 if (framelist == NULL)
return -1 ;
2223 if ((iset = sinfo_new_frameset_to_iset(framelist)) == NULL) {
2235 for (i=0 ; i<cpl_imagelist_get_size(iset)-1 ; i++) {
2238 if ((tmp_im=cpl_image_subtract_create(cpl_imagelist_get(iset,i),
2239 cpl_imagelist_get(iset, i+1)))
2242 sinfo_free_imagelist(&iset) ;
2247 if (cpl_flux_get_noise_window(tmp_im, zone, ron_hsize,
2248 ron_nsamp, &rms, NULL) != CPL_ERROR_NONE) {
2250 sinfo_free_image(&tmp_im) ;
2251 sinfo_free_imagelist(&iset) ;
2254 sinfo_free_image(&tmp_im) ;
2256 frame = cpl_frameset_get_frame(framelist, i) ;
2257 cknull_nomsg(plist=cpl_propertylist_load(cpl_frame_get_filename(frame),
2259 ndit=sinfo_pfits_get_ndit(plist);
2260 sinfo_free_propertylist(&plist);
2262 (*ron)[i] = rms * sqrt(ndit/2.0) ;
2267 sinfo_free_imagelist(&iset) ;
2271 sinfo_free_image(&tmp_im);
2272 sinfo_free_imagelist(&iset);
2273 sinfo_free_propertylist(&plist);
2287 int sinfo_stack_get_pro_tag(
char * tag_in,
char* tag_out)
2290 if (tag_in == NULL)
return -1 ;
2292 if (strcmp(tag_in,RAW_WAVE_LAMP_DITHER) == 0 ) {
2293 strcpy(tag_out,PRO_WAVE_LAMP_STACKED);
2298 if (strcmp(tag_in,RAW_WAVE_LAMP) == 0 ) {
2299 strcpy(tag_out,PRO_WAVE_LAMP_STACKED);
2303 if (strcmp(tag_in,RAW_WAVE_NS_DITHER) == 0 ) {
2304 strcpy(tag_out,PRO_WAVE_NS_STACKED);
2309 if (strcmp(tag_in,RAW_WAVE_NS) == 0 ) {
2310 strcpy(tag_out,PRO_WAVE_NS_STACKED);
2315 if (strcmp(tag_in,RAW_FIBRE_LAMP) == 0 ) {
2316 strcpy(tag_out,PRO_FIBRE_LAMP_STACKED);
2320 if (strcmp(tag_in,RAW_FIBRE_EW) == 0 ) {
2321 strcpy(tag_out,PRO_FIBRE_EW_STACKED);
2325 if (strcmp(tag_in,RAW_FIBRE_NS) == 0 ) {
2326 strcpy(tag_out,PRO_FIBRE_NS_STACKED);
2331 if (strcmp(tag_in,PRO_FIBRE_NS_STACKED_ON) == 0 ) {
2332 strcpy(tag_out,PRO_FIBRE_NS_STACKED);
2336 if (strcmp(tag_in,PRO_FIBRE_NS_STACKED) == 0 ) {
2337 strcpy(tag_out,PRO_FIBRE_NS_STACKED_DIST);
2342 if (strcmp(tag_in,RAW_SLIT_LAMP) == 0 ) {
2343 strcpy(tag_out,PRO_SLIT_LAMP_STACKED);
2348 if (strstr(tag_in,
"FLUX") != NULL ) {
2349 strcpy(tag_out,PRO_FLUX_LAMP_STACKED);
2353 if (strstr(tag_in,
"PSF") != NULL ) {
2354 strcpy(tag_out,PRO_PSF_CALIBRATOR_STACKED);
2359 if (strstr(tag_in,
"FOCUS") != NULL ) {
2360 strcpy(tag_out,PRO_FOCUS_STACKED);
2364 if (strstr(tag_in,
"OBJECT_NODDING") != NULL ) {
2365 strcpy(tag_out,PRO_OBJECT_NODDING_STACKED);
2369 if (strstr(tag_in,
"SKY_NODDING") != NULL ) {
2370 strcpy(tag_out,PRO_SKY_NODDING_STACKED);
2374 if (strstr(tag_in,
"STD_NODDING") != NULL ) {
2375 strcpy(tag_out,PRO_STD_NODDING_STACKED);
2379 if (strstr(tag_in,
"OBJECT_SKYSPIDER") != NULL ) {
2380 strcpy(tag_out,PRO_OBJECT_SKYSPIDER_STACKED);
2385 if (strstr(tag_in, RAW_STD) != NULL ) {
2386 strcpy(tag_out,PRO_STD_STACKED);
2391 if (strstr(tag_in, RAW_SKY_STD) != NULL ) {
2392 strcpy(tag_out,PRO_SKY_STD_STACKED);
2396 if (strstr(tag_in, RAW_SKY_OH) != NULL ) {
2397 strcpy(tag_out,PRO_SKY_OH_STACKED);
2401 if (strstr(tag_in, RAW_SKY_PSF_CALIBRATOR) != NULL ) {
2402 strcpy(tag_out,PRO_SKY_PSF_CALIBRATOR_STACKED);
2406 if (strstr(tag_in, RAW_STD_STAR) != NULL ) {
2407 strcpy(tag_out,PRO_STD_STAR_STACKED);
2411 if (strstr(tag_in, RAW_STD_STAR) != NULL ) {
2412 strcpy(tag_out,PRO_STD_STAR_DITHER_STACKED);
2416 if (strstr(tag_in, RAW_SKY) != NULL ) {
2417 strcpy(tag_out,PRO_SKY_STACKED);
2425 int sinfo_is_dark(
char * tag)
2428 if (tag == NULL)
return -1 ;
2430 if (!strcmp(tag, RAW_DARK))
return 1 ;
2431 if (!strcmp(tag, PRO_MASTER_DARK))
return 1 ;
2435 int sinfo_is_flat_bp(
char * tag)
2438 if (tag == NULL)
return -1 ;
2440 if (!strcmp(tag, RAW_LINEARITY_LAMP))
return 1 ;
2444 int sinfo_is_flat_lindet(
char * tag)
2447 if (tag == NULL)
return -1 ;
2449 if (!strcmp(tag, RAW_LINEARITY_LAMP))
return 1 ;
2454 int sinfo_blank2dot(
const char * in,
char* ou)
2471 int sinfo_is_sky_flat(
char * tag)
2474 if (tag == NULL)
return -1 ;
2475 if (!strcmp(tag, RAW_FLAT_SKY))
return 1 ;
2481 int sinfo_is_master_flat(
char * tag)
2484 if (tag == NULL)
return -1 ;
2486 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP))
return 1 ;
2487 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP1))
return 1 ;
2491 int sinfo_is_master_flat_dither(
char * tag)
2494 if (tag == NULL)
return -1 ;
2496 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP2))
return 1 ;
2507 int sinfo_is_stack(
char * tag)
2510 if (tag == NULL)
return -1 ;
2512 if (strstr(tag, PRO_STACKED) != NULL)
return 1 ;
2516 int sinfo_is_mflat(
char * tag)
2519 if (tag == NULL)
return -1 ;
2521 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP))
return 1 ;
2522 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP1))
return 1 ;
2523 if (!strcmp(tag, PRO_MASTER_FLAT_LAMP2))
return 1 ;
2535 int sinfo_is_psf_calibrator_stacked(
char * tag)
2538 if (tag == NULL)
return -1 ;
2540 if (!strcmp(tag, PRO_PSF_CALIBRATOR_STACKED))
return 1 ;
2550 int sinfo_is_focus_stacked(
char * tag)
2553 if (tag == NULL)
return -1 ;
2555 if (!strcmp(tag, PRO_FOCUS_STACKED))
return 1 ;
2566 int sinfo_is_lamp_wave_stacked(
char * tag)
2569 if (tag == NULL)
return -1 ;
2571 if (!strcmp(tag, PRO_WAVE_LAMP_STACKED))
return 1 ;
2582 int sinfo_is_lamp_flux_stacked(
char * tag)
2585 if (tag == NULL)
return -1 ;
2587 if (!strcmp(tag, PRO_FLUX_LAMP_STACKED))
return 1 ;
2598 int sinfo_is_object_nodding_stacked(
char * tag)
2601 if (tag == NULL)
return -1 ;
2603 if (!strcmp(tag, PRO_OBJECT_NODDING_STACKED))
return 1 ;
2614 int sinfo_is_object_skyspider_stacked(
char * tag)
2617 if (tag == NULL)
return -1 ;
2619 if (!strcmp(tag, PRO_OBJECT_SKYSPIDER_STACKED))
return 1 ;
2631 int sinfo_is_sky_nodding_stacked(
char * tag)
2634 if (tag == NULL)
return -1 ;
2636 if (!strcmp(tag, PRO_SKY_NODDING_STACKED))
return 1 ;
2647 int sinfo_is_wavemap(
char * tag)
2650 if (tag == NULL)
return -1 ;
2652 if (!strcmp(tag, PRO_WAVE_MAP))
return 1 ;
2663 int sinfo_is_halosp(
char * tag)
2666 if (tag == NULL)
return -1 ;
2668 if (!strcmp(tag, PRO_HALO_SPECT))
return 1 ;
2679 int sinfo_is_distlist(
char * tag)
2682 if (tag == NULL)
return -1 ;
2684 if (!strcmp(tag, PRO_SLITLETS_DISTANCE))
return 1 ;
2695 int sinfo_is_slitpos(
char * tag)
2698 if (tag == NULL)
return -1 ;
2700 if (!strcmp(tag, PRO_SLIT_POS))
return 1 ;
2711 int sinfo_is_firstcol(
char * tag)
2714 if (tag == NULL)
return -1 ;
2716 if (!strcmp(tag, PRO_FIRST_COL))
return 1 ;
2727 int sinfo_is_bpmap(
char * tag)
2730 if (tag == NULL)
return -1 ;
2732 if (!strcmp(tag, PRO_BP_MAP))
return 1 ;
2748 int sinfo_get_band(cpl_frame * ref_frame,
char * band)
2751 char* ref_file=NULL;
2752 cpl_propertylist* plist=NULL;
2754 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2755 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2757 cpl_propertylist_delete(plist) ;
2761 if (cpl_propertylist_has(plist, KEY_NAME_FILT_NAME)) {
2762 strcpy(band, cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));
2771 cpl_propertylist_delete(plist);
2788 int sinfo_get_obsname(cpl_frame * ref_frame,
const char* obs_name)
2791 char* ref_file=NULL;
2792 cpl_propertylist* plist=NULL;
2794 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2795 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2797 cpl_propertylist_delete(plist) ;
2801 if (cpl_propertylist_has(plist, KEY_NAME_OBS_NAME)) {
2802 strcpy((
char*)obs_name, cpl_propertylist_get_string(plist,
2803 KEY_NAME_OBS_NAME));
2812 cpl_propertylist_delete(plist);
2830 int sinfo_get_keyvalue_int(cpl_frame * ref_frame,
const char* key_name)
2833 char* ref_file=NULL;
2834 cpl_propertylist* plist=NULL;
2837 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2839 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2841 cpl_propertylist_delete(plist) ;
2846 if (cpl_propertylist_has(plist, key_name)) {
2847 result=cpl_propertylist_get_int(plist,key_name);
2854 cpl_propertylist_delete(plist);
2871 float sinfo_get_keyvalue_float(cpl_frame * ref_frame,
const char* key_name)
2874 char* ref_file=NULL;
2875 cpl_propertylist* plist=NULL;
2878 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2880 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2882 cpl_propertylist_delete(plist) ;
2887 if (cpl_propertylist_has(plist, key_name)) {
2888 result=cpl_propertylist_get_float(plist,key_name);
2895 cpl_propertylist_delete(plist);
2911 char sinfo_get_keyvalue_bool(cpl_frame * ref_frame,
const char* key_name)
2914 char* ref_file=NULL;
2915 cpl_propertylist* plist=NULL;
2918 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2920 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2922 cpl_propertylist_delete(plist) ;
2927 if (cpl_propertylist_has(plist, key_name)) {
2928 res_val=cpl_propertylist_get_bool(plist,key_name);
2935 cpl_propertylist_delete(plist);
2957 sinfo_get_keyvalue_string(cpl_frame * ref_frame,
const char* key_name)
2960 char* ref_file=NULL;
2961 cpl_propertylist* plist=NULL;
2962 const char* result=NULL;
2964 ref_file = cpl_strdup(cpl_frame_get_filename(ref_frame)) ;
2966 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
2968 cpl_propertylist_delete(plist) ;
2973 if (cpl_propertylist_has(plist, key_name)) {
2974 result=cpl_propertylist_get_string(plist,key_name);
2981 cpl_propertylist_delete(plist);
2988 double sinfo_get_mjd_obs(cpl_frame * frame)
2990 cpl_propertylist* plist=NULL;
2991 const char* file=NULL;
2994 file = cpl_frame_get_filename(frame) ;
2996 if ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
2998 sinfo_free_propertylist(&plist) ;
3002 if (cpl_propertylist_has(plist, KEY_NAME_MJD_OBS)) {
3003 mjd_obs=cpl_propertylist_get_double(plist, KEY_NAME_MJD_OBS);
3006 sinfo_free_propertylist(&plist) ;
3009 sinfo_free_propertylist(&plist) ;
3018 double sinfo_get_cumoffsetx(cpl_frame * frame)
3020 cpl_propertylist* plist=NULL;
3024 file = cpl_strdup( cpl_frame_get_filename(frame)) ;
3026 if ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
3028 cpl_propertylist_delete(plist) ;
3033 if (cpl_propertylist_has(plist, KEY_NAME_CUMOFFX)) {
3034 result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFX);
3037 cpl_propertylist_delete(plist) ;
3040 cpl_propertylist_delete(plist) ;
3050 double sinfo_get_cumoffsety(cpl_frame * frame)
3052 cpl_propertylist* plist=NULL;
3056 file = cpl_strdup( cpl_frame_get_filename(frame)) ;
3058 if ((cpl_error_code)((plist = cpl_propertylist_load(file, 0)) == NULL)) {
3060 cpl_propertylist_delete(plist) ;
3065 if (cpl_propertylist_has(plist, KEY_NAME_CUMOFFY)) {
3066 result=cpl_propertylist_get_double(plist, KEY_NAME_CUMOFFY);
3069 cpl_propertylist_delete(plist) ;
3072 cpl_propertylist_delete(plist) ;
3079 int sinfo_frame_is_dither(cpl_frame * frame)
3083 char band[FILE_NAME_SZ];
3086 cpl_propertylist* plist=NULL;
3092 cknull(frame,
"Null input frame. Exit!");
3094 cknull_nomsg(strcpy(file,cpl_frame_get_filename(frame)));
3097 if(len<1)
goto cleanup;
3098 if(sinfo_file_exists(file)==0)
goto cleanup;
3100 cknull(plist = cpl_propertylist_load(file, 0),
3101 "getting header from reference frame %s",file);
3103 if (cpl_propertylist_has(plist, KEY_NAME_FILT_NAME)) {
3104 strcpy(band,cpl_propertylist_get_string(plist, KEY_NAME_FILT_NAME));
3107 sinfo_free_propertylist(&plist) ;
3111 if (cpl_propertylist_has(plist, KEY_NAME_GRAT_ENC)) {
3112 grat_encoder = cpl_propertylist_get_int(plist, KEY_NAME_GRAT_ENC);
3115 sinfo_free_propertylist(&plist) ;
3119 sinfo_free_propertylist(&plist) ;
3121 if (strcmp(band,
"H") == 0) {
3122 if( abs(grat_encoder - GRAT_VAL2_H) <= GRAT_VAL_TOL ) {
3128 else if (strcmp(band,
"H+K") == 0) {
3129 if( abs(grat_encoder - GRAT_VAL2_HK) <= GRAT_VAL_TOL ) {
3135 else if (strcmp(band,
"K") == 0) {
3136 if( abs(grat_encoder - GRAT_VAL2_K) <= GRAT_VAL_TOL ) {
3142 else if (strcmp(band,
"J") == 0) {
3143 if( abs(grat_encoder - GRAT_VAL2_J) <= GRAT_VAL_TOL ) {
3151 sinfo_free_propertylist(&plist) ;
3152 if(cpl_error_get_code() != CPL_ERROR_NONE) {
3170 int sinfo_get_spatial_res(cpl_frame * ref_frame,
char * spat_res)
3173 const char* ref_file;
3174 cpl_propertylist* plist=NULL;
3176 ref_file=cpl_frame_get_filename(ref_frame) ;
3177 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
3179 sinfo_free_propertylist(&plist) ;
3184 if (cpl_propertylist_has(plist, KEY_NAME_PREOPTICS)) {
3185 strcpy(spat_res,cpl_propertylist_get_string(plist, KEY_NAME_PREOPTICS));
3189 sinfo_free_propertylist(&plist);
3192 sinfo_free_propertylist(&plist);
3207 int sinfo_frame_is_sky(cpl_frame * ref_frame)
3210 char dpr_type[FILE_NAME_SZ];
3211 char* ref_file=NULL;
3212 const char* sval=NULL;
3215 cpl_propertylist* plist=NULL;
3217 sval = cpl_frame_get_filename(ref_frame) ;
3218 ref_file = cpl_strdup(sval) ;
3220 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file, 0)) == NULL)) {
3222 cpl_propertylist_delete(plist) ;
3227 if (cpl_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
3228 strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));
3232 cpl_propertylist_delete(plist) ;
3236 cpl_propertylist_delete(plist);
3237 if(strstr(dpr_type,RAW_SKY) != NULL) {
3257 int sinfo_tag_is_sky(
char * tag)
3263 (strcmp(tag,RAW_SKY) == 0) ||
3264 (strcmp(tag,RAW_IMAGE_PRE_SKY) == 0) ||
3265 (strcmp(tag,RAW_SKY_NODDING) == 0) ||
3266 (strcmp(tag,RAW_SKY_JITTER) == 0) ||
3267 (strcmp(tag,RAW_SKY_STD) == 0) ||
3268 (strcmp(tag,RAW_FIBRE_DARK) == 0) ||
3269 (strcmp(tag,RAW_SKY_OH) == 0) ||
3270 (strcmp(tag,RAW_SKY_PSF_CALIBRATOR) == 0)
3290 int sinfo_tag_is_obj(
char * tag)
3296 (strcmp(tag,RAW_PUPIL_LAMP) == 0) ||
3297 (strcmp(tag,RAW_OBJECT) == 0) ||
3298 (strcmp(tag,RAW_IMAGE_PRE_OBJECT) == 0) ||
3299 (strcmp(tag,RAW_OBJECT_NODDING) == 0) ||
3300 (strcmp(tag,RAW_OBJECT_JITTER) == 0) ||
3301 (strcmp(tag,RAW_PSF_CALIBRATOR) == 0) ||
3302 (strcmp(tag,RAW_FIBRE_PSF) == 0) ||
3303 (strcmp(tag,RAW_STD) == 0) ||
3304 (strcmp(tag,RAW_STD_STAR) == 0)
3324 int sinfo_tag_is_objpro(
char * tag)
3330 (strcmp(tag,PRO_COADD_OBJ) == 0) ||
3331 (strcmp(tag,PRO_COADD_PSF) == 0) ||
3332 (strcmp(tag,PRO_COADD_STD) == 0) ||
3333 (strcmp(tag,PRO_OBS_OBJ) == 0) ||
3334 (strcmp(tag,PRO_OBS_PSF) == 0) ||
3335 (strcmp(tag,PRO_OBS_STD) == 0) ||
3336 (strcmp(tag,PRO_PSF_CALIBRATOR_STACKED) == 0) ||
3337 (strcmp(tag,PRO_SKY_PSF_CALIBRATOR_STACKED) == 0) ||
3338 (strcmp(tag,PRO_STD_STACKED) == 0) ||
3339 (strcmp(tag,PRO_SKY_STD_STACKED) == 0) ||
3340 (strcmp(tag,PRO_OBJECT_NODDING_STACKED) == 0) ||
3341 (strcmp(tag,PRO_SKY_NODDING_STACKED) == 0)
3361 int sinfo_frame_is_on(cpl_frame * ref_frame)
3364 char ref_file[FILE_NAME_SZ];
3365 char dpr_type[FILE_NAME_SZ];
3373 cpl_propertylist* plist=NULL;
3374 const char* filename=NULL;
3375 cknull(ref_frame,
"Null input frame. Exit!");
3377 cknull_nomsg(filename=cpl_frame_get_filename(ref_frame));
3378 len= strlen(filename);
3379 if(len<1)
goto cleanup;
3381 check_nomsg(strcpy(ref_file, filename)) ;
3382 if ((cpl_error_code)((plist = cpl_propertylist_load(ref_file,0)) == NULL)) {
3384 sinfo_free_propertylist(&plist) ;
3394 if (cpl_propertylist_has(plist, KEY_NAME_DPR_TYPE)) {
3395 strcpy(dpr_type,cpl_propertylist_get_string(plist, KEY_NAME_DPR_TYPE));
3399 sinfo_free_propertylist(&plist);
3409 if(strstr(dpr_type,
"STD") != NULL) {
3411 sinfo_free_propertylist(&plist);
3415 if(strstr(dpr_type,
"PSF") != NULL) {
3417 sinfo_free_propertylist(&plist);
3421 if(strstr(dpr_type,
"SKY") != NULL) {
3423 sinfo_free_propertylist(&plist);
3428 if(strstr(dpr_type,
"OBJECT") != NULL) {
3430 sinfo_free_propertylist(&plist);
3441 if (cpl_propertylist_has(plist, KEY_NAME_LAMP_XE)) {
3442 lamp_Xe=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_XE);
3446 sinfo_free_propertylist(&plist);
3450 if (cpl_propertylist_has(plist, KEY_NAME_LAMP_KR)) {
3451 lamp_Kr=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_KR);
3455 sinfo_free_propertylist(&plist);
3459 if (cpl_propertylist_has(plist, KEY_NAME_LAMP_NE)) {
3460 lamp_Ne=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_NE);
3464 sinfo_free_propertylist(&plist);
3468 if (cpl_propertylist_has(plist, KEY_NAME_LAMP_AR)) {
3469 lamp_Ar=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_AR);
3473 sinfo_free_propertylist(&plist);
3477 if (cpl_propertylist_has(plist, KEY_NAME_LAMP_HALO)) {
3478 lamp_Halo=cpl_propertylist_get_bool(plist, KEY_NAME_LAMP_HALO);
3482 sinfo_free_propertylist(&plist);
3511 sinfo_free_propertylist(&plist);
3520 sinfo_pfits_add_qc(cpl_propertylist * plist,
3524 char key_value[80] ;
3529 if (plist == NULL)
return -1 ;
3533 for(i=0;i<qclog[0].n;i++) {
3534 strcpy(key_name,
"ESO ");
3535 strcat(key_name,qclog[i].name);
3536 if(strcmp(qclog[i].type,
"string") == 0) {
3537 snprintf(key_value,
sizeof(key_value)-1,
"%s",qclog[i].s_val);
3538 cpl_propertylist_append_string(plist, key_name,key_value) ;
3539 cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
3541 }
else if(strcmp(qclog[i].type,
"bool") == 0) {
3542 snprintf(key_value,
sizeof(key_value),
"%i",(
int)qclog[i].n_val);
3543 cpl_propertylist_append_bool(plist, key_name,(
int)qclog[i].n_val) ;
3544 cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
3545 }
else if(strcmp(qclog[i].type,
"int") == 0) {
3546 snprintf(key_value,
sizeof(key_value),
"%i",(
int)qclog[i].n_val);
3547 cpl_propertylist_append_int(plist, key_name,(
int)qclog[i].n_val) ;
3548 cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
3549 }
else if(strcmp(qclog[i].type,
"float") == 0) {
3550 snprintf(key_value,
sizeof(key_value),
"%f",(
float)qclog[i].n_val);
3551 cpl_propertylist_append_float(plist, key_name,(
float)qclog[i].n_val) ;
3552 cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
3553 }
else if(strcmp(qclog[i].type,
"double") == 0) {
3554 snprintf(key_value,
sizeof(key_value),
"%f",qclog[i].n_val);
3555 cpl_propertylist_append_double(plist, key_name,qclog[i].n_val) ;
3556 cpl_propertylist_set_comment(plist, key_name,qclog[i].comm) ;
#define sinfo_msg_debug(...)
Print a debug message.
#define sinfo_msg_error(...)
Print an error message.
#define sinfo_msg_warning(...)
Print an warning message.