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
00034 #include "eclipse.h"
00035 #include "fitshead.h"
00036 #include "cube_ops.h"
00037 #include "skymap.h"
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00060
00061 int si_skymap(
00062 cpl_parameterlist * parlist,
00063 cpl_frameset * framelist)
00064 {
00065 const char * fctid = "si_skymap" ;
00066 cpl_parameter * param =NULL ;
00067 const char * name_i =NULL;
00068 const char * name_o =NULL;
00069 const char * method =NULL;
00070
00071 double ws=0 ;
00072 double we=0 ;
00073 double wc=0 ;
00074 float disp=0 ;
00075
00076
00077 cpl_frame * frm_cub=NULL ;
00078
00079 cpl_propertylist * plist=NULL ;
00080 cpl_image * image=NULL ;
00081 cpl_frame * product_frame=NULL;
00082
00083 OneCube * cube=NULL;
00084 OneImage * img=NULL;
00085 fits_header * header=NULL;
00086
00087
00088
00089 param = cpl_parameterlist_find(parlist, "sinfoni.si_skymap.method");
00090 method = cpl_parameter_get_string(param);
00091
00092
00093 param = cpl_parameterlist_find(parlist, "sinfoni.si_skymap.out_filename");
00094 name_o = cpl_parameter_get_string(param);
00095
00096
00097 param = cpl_parameterlist_find(parlist,"sinfoni.si_skymap.ws");
00098 ws = cpl_parameter_get_double(param) ;
00099
00100
00101 param = cpl_parameterlist_find(parlist,"sinfoni.si_skymap.we");
00102 we = cpl_parameter_get_double(param) ;
00103
00104
00105 param = cpl_parameterlist_find(parlist,"sinfoni.si_skymap.wc");
00106 wc = cpl_parameter_get_double(param) ;
00107
00108
00109
00110 if (sinfoni_dfs_set_groups(framelist)) {
00111 cpl_msg_error(fctid, "Cannot identify RAW and CALIB frames") ;
00112 return -1 ;
00113 }
00114
00115
00116 if ((frm_cub = cpl_frameset_find(framelist, SI_SKYMAP_CUBE))==NULL) {
00117 cpl_msg_error(fctid, "SOF does not have a file tagged as %s",SI_SKYMAP_CUBE);
00118 return -1 ;
00119 }
00120
00121 name_i = cpl_frame_get_filename(frm_cub);
00122
00123 cube = load_cube((char*)name_i);
00124 header = fits_read_header((char*)name_i);
00125
00126 wc = spiffi_get_cenLambda((char*)name_i);
00127 disp = spiffi_get_dispersion((char*)name_i);
00128 img = averageCubeToImageBetweenWaves(cube,disp,wc,ws,we);
00129
00130
00131 fits_header_del(header, "CTYPE3");
00132 fits_header_del(header, "CRPIX3");
00133 fits_header_del(header, "CRVAL3");
00134 fits_header_del(header, "CDELT3");
00135 fits_header_del(header, "CUNIT3");
00136
00137 image=cpl_image_wrap_float(img->lx,img->ly,img->data);
00138
00139 destroy_cube(cube);
00140 destroy_image(img);
00141 fits_header_destroy(header);
00142
00143
00144
00145
00146
00147 product_frame = cpl_frame_new();
00148 cpl_frame_set_filename(product_frame, name_o) ;
00149 cpl_frame_set_tag(product_frame, SI_SKYMAP_PROIMA) ;
00150 cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00151 cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00152 cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00153 if (cpl_error_get_code()) {
00154 cpl_msg_error(fctid, "Error while initialising the product frame") ;
00155 cpl_propertylist_delete(plist) ;
00156 cpl_frame_delete(product_frame) ;
00157 cpl_image_delete(image) ;
00158 return -1 ;
00159 }
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 if (cpl_image_save(image, name_o, CPL_BPP_DEFAULT, plist,
00174 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
00175 cpl_msg_error(fctid, "Could not save product");
00176 cpl_propertylist_delete(plist) ;
00177 cpl_frame_delete(product_frame) ;
00178 cpl_image_delete(image) ;
00179 return -1 ;
00180 }
00181 cpl_propertylist_delete(plist) ;
00182 cpl_image_delete(image);
00183
00184
00185 cpl_frameset_insert(framelist, product_frame) ;
00186
00187
00188 if (cpl_error_get_code())
00189 return -1 ;
00190 else
00191 return 0 ;
00192 }