62 cpl_ensure(vin != NULL, CPL_ERROR_NULL_INPUT,NULL);
63 cpl_ensure(hsize > 0, CPL_ERROR_ILLEGAL_INPUT,NULL);
64 cpl_ensure(pos>hsize, CPL_ERROR_ILLEGAL_INPUT,NULL);
65 cpl_ensure(hsize > 0, CPL_ERROR_ILLEGAL_INPUT,NULL);
66 size_i=cpl_vector_get_size(vin);
67 cpl_ensure(pos+hsize < size_i, CPL_ERROR_ILLEGAL_INPUT,NULL);
69 result=cpl_vector_new(size_o);
71 data_i=cpl_vector_get_data(vin);
72 data_o=cpl_vector_get_data(result);
74 for(i=-hsize;i<=hsize;i++){
75 data_o[k]=data_i[
ref+i];
105 cpl_ensure(vin != NULL, CPL_ERROR_NULL_INPUT,NULL);
106 cpl_ensure(factor > 0, CPL_ERROR_ILLEGAL_INPUT,NULL);
108 size_i=cpl_vector_get_size(vin);
109 size_o=(size_i-1)*factor+1;
111 result=cpl_vector_new(size_o);
113 data_i=cpl_vector_get_data(vin);
114 data_o=cpl_vector_get_data(result);
116 for(i=0;i<size_i-1;i++){
122 for(j=0;j<factor;j++){
123 data_o[i*factor+j]= y1 +
m * j;
126 data_o[size_o-1]=data_i[size_i-1];
143 cpl_vector* vec_slope=NULL;
153 cpl_polynomial* pfit=NULL;
155 cpl_vector* vec_x=NULL;
156 cpl_vector* vec_y=NULL;
159 cpl_ensure(vec_wave,CPL_ERROR_NULL_INPUT,NULL);
160 cpl_ensure(vec_flux,CPL_ERROR_NULL_INPUT,NULL);
161 cpl_ensure(wmin_max<wmax_min,CPL_ERROR_INCOMPATIBLE_INPUT,NULL);
162 cpl_ensure(
degree>0 &&
degree < 3,CPL_ERROR_INCOMPATIBLE_INPUT,NULL);
165 size=cpl_vector_get_size(vec_flux);
166 vec_x=cpl_vector_new(
size);
167 vec_y=cpl_vector_new(
size);
168 pwave=cpl_vector_get_data(vec_wave);
169 pflux=cpl_vector_get_data(vec_flux);
170 pvec_x=cpl_vector_get_data(vec_x);
171 pvec_y=cpl_vector_get_data(vec_y);
173 for(i=0;i<
size;i++) {
174 if( pwave[i] <= wmin_max || pwave[i] >= wmax_min ) {
181 cpl_vector_set_size(vec_x,k);
182 cpl_vector_set_size(vec_y,k);
188 vec_slope=cpl_vector_new(
size);
189 pslope=cpl_vector_get_data(vec_slope);
190 for(i=0;i<
size;i++) {
191 pslope[i] = cpl_polynomial_eval_1d( pfit, pwave[i], NULL);
void xsh_free_polynomial(cpl_polynomial **p)
Deallocate a polynomial and set the pointer to NULL.
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
cpl_vector * xsh_vector_fit_slope(cpl_vector *vec_wave, cpl_vector *vec_flux, const double wmin_max, const double wmax_min, const int degree)
cpl_vector * xsh_vector_upsample(cpl_vector *vin, const int factor)
cpl_vector * xsh_vector_extract_range(cpl_vector *vin, const cpl_size pos, const int hsize)
cpl_polynomial * xsh_polynomial_fit_1d_create(const cpl_vector *x_pos, const cpl_vector *values, int degree, double *mse)