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 #ifdef HAVE_CONFIG_H
00027 # include <config.h>
00028 #endif
00029
00030
00036
00039
00040
00041
00042
00043
00044 #include <xsh_data_pre.h>
00045 #include <xsh_error.h>
00046 #include <xsh_msg.h>
00047 #include <xsh_data_instrument.h>
00048 #include <xsh_parameters.h>
00049 #include <xsh_dfs.h>
00050 #include <xsh_pfits.h>
00051 #include <tests.h>
00052 #include <cpl.h>
00053 #include <math.h>
00054 #include <string.h>
00055
00056
00057
00058
00059 #define MODULE_ID "XSH_CREATE_MASTER_BIAS"
00060
00061
00062
00063
00064
00071
00072
00073 int main(void)
00074 {
00075 xsh_instrument* instrument = NULL;
00076 cpl_frame* frame = NULL;
00077 cpl_frame* med_frame = NULL;
00078 cpl_frame* mbias = NULL;
00079 cpl_frameset* set = NULL;
00080 cpl_image* ima=NULL;
00081 cpl_frame* product=NULL;
00082 const char* name=NULL;
00083 cpl_propertylist* header=NULL;
00084 float mean = 0.0,median = 0.0, stdev = 0.0;
00085 xsh_clipping_param crh_clipping = {0.,4., 2, 0.7, 0};
00086 xsh_hot_cold_pix_param hp_clip_param = {0, 3.0, 3, 3.0, 3};
00087 xsh_fpn_param fpn_param = {-1,-1,-1,-1,4,10};
00088 xsh_ron_param ron_param = {"ALL",
00089 4,100,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,25};
00090 xsh_struct_param struct_param = {-1,-1};
00091 cpl_parameterlist* parameters=NULL;
00092 xsh_stack_param stack_param = {"median",5.,5.};
00093 const char* RECIPE_ID="xsh_mbias";
00094 const char* ftag=NULL;
00095 const int decode_bp=2147483647;
00096
00097
00098 TESTS_INIT(MODULE_ID);
00099
00100
00101 instrument = xsh_instrument_new() ;
00102 xsh_instrument_set_mode( instrument, XSH_MODE_IFU ) ;
00103 xsh_instrument_set_arm( instrument, XSH_ARM_UVB ) ;
00104 xsh_instrument_set_lamp( instrument, XSH_LAMP_QTH ) ;
00105 xsh_instrument_set_recipe_id(instrument, "xsh_mbias");
00106
00107 ftag=XSH_GET_TAG_FROM_ARM(XSH_MASTER_BIAS,instrument);
00108
00109
00110 frame = xsh_test_create_frame("frame.fits",10,10,
00111 XSH_BIAS_UVB,CPL_FRAME_GROUP_RAW, instrument);
00112 set = cpl_frameset_new();
00113 cpl_frameset_insert(set,frame);
00114
00115
00116
00117 parameters = cpl_parameterlist_new();
00118 check(xsh_parameters_generic( RECIPE_ID, parameters ));
00119
00120
00121 check(xsh_parameters_clipping_crh_create(RECIPE_ID,parameters,crh_clipping));
00122
00123 check(xsh_parameters_hot_cold_pix_create(RECIPE_ID,parameters,hp_clip_param));
00124
00125
00126 check(xsh_parameters_fpn_create(RECIPE_ID,parameters,fpn_param));
00127 check(xsh_parameters_ron_create(RECIPE_ID,parameters,ron_param));
00128 check(xsh_parameters_struct_create(RECIPE_ID,parameters,struct_param));
00129
00130
00131 xsh_instrument_set_decode_bp( instrument, decode_bp ) ;
00132
00133
00134 check(xsh_prepare(set,NULL, NULL, "PRE",instrument,0,CPL_FALSE));
00135
00136 check (med_frame = xsh_remove_crh_multiple( set, "remove_crh",
00137 &stack_param,NULL,
00138 instrument,
00139 NULL,NULL,0 ));
00140
00141 check(mbias = xsh_create_master_bias2(set,&stack_param,instrument,ftag,0));
00142 check(product=xsh_compute_qc_on_master_bias(set,mbias,instrument,parameters));
00143
00144 name=cpl_frame_get_filename(product);
00145 header=cpl_propertylist_load(name,0);
00146 ima=cpl_image_load(name,CPL_TYPE_FLOAT,0,0);
00147 xsh_free_frame(&product);
00148 check(product=xsh_frame_product(name,ftag,
00149 CPL_FRAME_TYPE_IMAGE,
00150 CPL_FRAME_GROUP_PRODUCT,
00151 CPL_FRAME_LEVEL_FINAL));
00152
00153
00154
00155 assure( strcmp(xsh_pfits_get_pcatg(header),"MASTER_BIAS_UVB")
00156 == 0,CPL_ERROR_ILLEGAL_OUTPUT,"Wrong pcatg keyword");
00157
00158 check(mean = xsh_pfits_get_qc_mbiasavg (header));
00159 check(median = xsh_pfits_get_qc_mbiasmed(header));
00160 check(stdev = xsh_pfits_get_qc_mbiasrms (header));
00161
00162 assure( mean - cpl_image_get_mean(ima) < XSH_FLOAT_PRECISION,
00163 CPL_ERROR_ILLEGAL_OUTPUT,"Wrong mean value in QC");
00164 assure( median - cpl_image_get_median(ima) < XSH_FLOAT_PRECISION,
00165 CPL_ERROR_ILLEGAL_OUTPUT,"Wrong median value in QC");
00166 assure( stdev - cpl_image_get_stdev(ima) < XSH_FLOAT_PRECISION,
00167 CPL_ERROR_ILLEGAL_OUTPUT,"Wrong rms value in QC");
00168 xsh_msg("header is ok");
00169
00170
00171 assure(cpl_frame_get_group(product) == CPL_FRAME_GROUP_PRODUCT,
00172 CPL_ERROR_ILLEGAL_OUTPUT,"Wrong group for MASTER BIAS frame");
00173 assure(strcmp(cpl_frame_get_tag(product),XSH_MASTER_BIAS_UVB) == 0,
00174 CPL_ERROR_ILLEGAL_OUTPUT,"Wrong tag (%s) for MASTER BIAS frame ",
00175 cpl_frame_get_tag(product));
00176 xsh_msg("frame is ok");
00177 cleanup:
00178 xsh_free_parameterlist(¶meters);
00179 xsh_free_frame(&med_frame);
00180 xsh_free_frame(&product);
00181
00182 xsh_free_propertylist(&header);
00183 xsh_free_image(&ima);
00184
00185 xsh_free_frameset(&set);
00186 xsh_free_frame(&mbias);
00187 xsh_instrument_free(&instrument);
00188 if (cpl_error_get_code() != CPL_ERROR_NONE) {
00189 xsh_error_dump(CPL_MSG_ERROR);
00190 return 1;
00191 } else {
00192 return 0;
00193 }
00194 }
00195