55#define MODULE_ID "XSH_CPL_VECTOR_CORREL_HDELTA"
62 {
"debug", required_argument, 0,
DEBUG_OPT},
69 puts (
"Unitary test : Create two Gaussians one shifted to the other of a given quantity, then correlate them to check if correlation returns expected shift");
70 puts(
"Usage : ./tetst_xsh_correl_gaussians [options]");
73 puts(
" --debug=<n> : Level of debug LOW | MEDIUM | HIGH [MEDIUM]" );
74 puts(
" --help : What you see" ) ;
76 puts(
"The input files argument MUST be in this order:" );
77 puts(
" 1. PRE frame");
78 puts(
" 2. SOF a) MODEL : [XSH_MOD_CFG_TAB_UVB]");
79 puts(
" b) POLYNOMIAL: [DISP_TAB, ORDER_TAB_EDGES]");
90 while( (opt = getopt_long( argc, argv,
"debug:help",
94 if ( strcmp( optarg,
"LOW")==0){
97 else if ( strcmp( optarg,
"HIGH")==0){
113 cpl_vector* result=NULL;
114 int size=cpl_vector_get_size(v);
117 int size_new=
size*factor;
118 double dfactor=factor;
122 xsh_msg(
"rk1 size_new=%d",size_new);
123 result=cpl_vector_new(size_new);
125 dv=cpl_vector_get_data(v);
127 dr=cpl_vector_get_data(result);
132 for(i=0;i<
size-1;i++) {
133 m=(dv[i+1]-dv[i])/dfactor;
135 for(j=0;j<factor;j++) {
136 dr[i*factor+j]=dv[i]+
m*j;
156int main(
int argc,
char** argv)
160 cpl_msg_set_level( CPL_MSG_DEBUG);
166 if ( (argc-optind) >= 2) {
177 double gauss_c=0.5*
size;
181 const int file_size=256;
183 char file_obs[file_size];
184 char file_ref[file_size];
186 sprintf(dir,
"%s",
"/media/SCRATCH_BACKUP/data7/xsh/spr/RESPONSE_SLIT_NOD_UVB_GD71/");
187 sprintf(file_obs,
"%svof.fits",dir);
188 sprintf(file_ref,
"%svrf.fits",dir);
189 xsh_msg(
"file_obs=%s",file_obs);
190 xsh_msg(
"file_ref=%s",file_ref);
192 cpl_vector* vobs=NULL;
193 cpl_vector* vref=NULL;
194 cpl_vector* vobs_res=NULL;
195 cpl_vector* vref_res=NULL;
196 check(vobs=cpl_vector_load(file_obs,0));
197 check(vref=cpl_vector_load(file_ref,0));
198 size_obs=cpl_vector_get_size(vobs);
199 size_ref=cpl_vector_get_size(vref);
202 dobs=cpl_vector_get_data(vobs);
203 dref=cpl_vector_get_data(vref);
214 xsh_msg(
"ok1 size_obs=%d size_ref=%d",size_obs,size_ref);
216 int len_corr=factor*(size_obs+size_ref)-5;
217 xsh_msg(
"len_corr=%d",len_corr);
219 cpl_vector* correl=cpl_vector_new(len_corr);
224 cpl_vector_save(vobs,
"vobs.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
225 cpl_vector_save(vref,
"vref.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
227 cpl_vector_save(vobs_res,
"vobs_res.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
228 cpl_vector_save(vref_res,
"vref_res.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
230 double shift=cpl_vector_correlate(correl,vobs_res,vref_res);
233 filter=cpl_vector_new(size_obs);
242 cpl_vector_save(vobs,
"vobs_filt.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
244 cpl_vector_save(vref,
"vref_filt.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
247 cpl_vector_save(correl,
"correl.fits",CPL_BPP_IEEE_FLOAT,NULL,CPL_IO_DEFAULT);
255 pvec=cpl_vector_get_data(correl);
258 for(i=0;i<len_corr;i++) {
264 xsh_msg(
"maxpos my determination: %d",maxpos);
272 a=cpl_vector_get(correl,maxpos-1);
273 b=cpl_vector_get(correl,maxpos+1);
274 c=cpl_vector_get(correl,maxpos);
275 fraction=(a-b)/(2.*a+2.*b-4.*c);
276 xsh_msg(
"len_corr=%d",len_corr);
277 xsh_msg(
"a=%g b=%g c=%g fraction=%g",a,b,c,fraction);
279 xsh_msg(
"fraction shift - (size-1)=%g",
280 (shift -(
size*factor-1)+fraction)/factor);
293 if (cpl_error_get_code() != CPL_ERROR_NONE) {
int main()
Unit test of xsh_bspline_interpol.
static struct option LongOptions[]
cpl_vector * xsh_vector_supersample(cpl_vector *v, const int factor)
#define xsh_error_dump(level)
#define xsh_msg(...)
Print a message on info level.
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
int xsh_debug_level_set(int level)
set debug level
static void HandleOptions(int argc, char **argv)
#define TESTS_INIT(DRL_ID)