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 "utl_spectrum_divide_by_blackbody.h"
00035 #include <eclipse.h>
00036 #include <spectrum_ops.h>
00037 #include "sinfoni_key_names.h"
00038 #include <sinfoni_memory.h>
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00059
00060 int si_utl_spectrum_divide_by_blackbody(
00061 cpl_parameterlist * parlist,
00062 cpl_frameset * framelist)
00063 {
00064 const char * fctid = "si_utl_spectrum_divide_by_blackbody" ;
00065 cpl_parameter * param =NULL;
00066 const char * name_i =NULL;
00067 const char * name_o =NULL;
00068
00069 double temp=0 ;
00070
00071 cpl_frame * frm_spct=NULL ;
00072
00073 cpl_propertylist * plist=NULL ;
00074 cpl_image * image =NULL;
00075 cpl_image * image_w =NULL;
00076
00077 cpl_frame * product_frame=NULL;
00078 OneImage * bb_img=NULL;
00079 OneImage * image_o=NULL;
00080 OneImage * image_i=NULL;
00081
00082 Vector* bb=NULL;
00083
00084
00085
00086
00087 name_o = "out_ima.fits";
00088
00089
00090 param = cpl_parameterlist_find(parlist,"sinfoni.si_utl_spectrum_divide_by_blackbody.temperature");
00091 temp = cpl_parameter_get_double(param) ;
00092
00093
00094
00095 if ((frm_spct = cpl_frameset_find(framelist, SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM))==NULL) {
00096 cpl_msg_error(fctid, "SOF does not have a file tagged as %s",SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_SPECTRUM);
00097 return -1 ;
00098 }
00099
00100
00101 if ((plist=cpl_propertylist_load(cpl_frame_get_filename(frm_spct),
00102 0)) == NULL) {
00103 cpl_msg_error(fctid, "Cannot read the FITS header") ;
00104 return -1 ;
00105 }
00106
00107
00108 name_i = cpl_frame_get_filename(frm_spct);
00109 image_i= load_image ((char*)name_i);
00110 bb = blackbodySpectrum ((char*)name_i, temp);
00111 bb_img = vectorToImage(bb);
00112 image_o = divImageBySpectrum (image_i,bb_img);
00113
00114
00115
00116 image_w=cpl_image_wrap_float(image_o->lx,image_o->ly,image_o->data);
00117 image=cpl_image_duplicate(image_w);
00118 cpl_image_unwrap(image_w);
00119
00120
00121 product_frame = cpl_frame_new();
00122 cpl_frame_set_filename(product_frame, name_o) ;
00123 cpl_frame_set_tag(product_frame, SI_UTL_SPECTRUM_DIVIDE_BY_BLACKBODY_PROSPECTRUM) ;
00124 cpl_frame_set_type(product_frame, CPL_FRAME_TYPE_IMAGE) ;
00125 cpl_frame_set_group(product_frame, CPL_FRAME_GROUP_PRODUCT) ;
00126 cpl_frame_set_level(product_frame, CPL_FRAME_LEVEL_FINAL) ;
00127 if (cpl_error_get_code()) {
00128 cpl_msg_error(fctid, "Error while initialising the product frame") ;
00129 cpl_propertylist_delete(plist) ;
00130 cpl_frame_delete(product_frame) ;
00131 cpl_image_delete(image) ;
00132 destroy_image(image_i);
00133 destroy_image(image_o);
00134 if(bb != NULL) {
00135
00136 }
00137 if(bb_img != NULL) {
00138 destroy_image(bb_img);
00139 }
00140 sinfoni_memory_status();
00141 return -1 ;
00142 }
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 if (cpl_image_save(image, name_o, CPL_BPP_DEFAULT, plist,
00158 CPL_IO_DEFAULT) != CPL_ERROR_NONE) {
00159 cpl_msg_error(fctid, "Could not save product");
00160 cpl_propertylist_delete(plist) ;
00161 cpl_frame_delete(product_frame) ;
00162 cpl_image_delete(image) ;
00163 return -1 ;
00164 }
00165 cpl_propertylist_delete(plist) ;
00166 cpl_image_delete(image) ;
00167
00168
00169
00170
00171 cpl_frameset_insert(framelist, product_frame) ;
00172
00173 destroy_image(image_i);
00174 destroy_image(image_o);
00175
00176 if(bb != NULL) {
00177
00178 }
00179 if(bb_img != NULL) {
00180 destroy_image(bb_img);
00181 }
00182
00183 sinfoni_memory_status();
00184
00185 if (cpl_error_get_code())
00186 return -1 ;
00187 else
00188 return 0 ;
00189 }