63#define XSH_STAR_FLUX_UVB_WAV_MIN 308
72 cpl_vector* vflux=NULL;
73 cpl_vector* vmedian=NULL;
74 double* pvmedian=NULL;
80 vflux=cpl_vector_wrap(result->
size,result->
flux);
81 vmedian=cpl_vector_filter_median_create(vflux,hsize);
82 pvmedian=cpl_vector_get_data(vmedian);
84 for(i=0;i<result->
size;i++) {
85 result->
flux[i]=pvmedian[i];
89 cpl_vector_unwrap(vflux);
91 return cpl_error_get_code();
96 cpl_lowpass filter_type,
100 cpl_vector* vflux=NULL;
101 cpl_vector* vlowpass=NULL;
102 double* pvlowpass=NULL;
108 vflux=cpl_vector_wrap(result->
size,result->
flux);
109 vlowpass=cpl_vector_filter_lowpass_create(vflux,filter_type,hsize);
110 pvlowpass=cpl_vector_get_data(vlowpass);
112 for(i=0;i<result->
size;i++) {
113 result->
flux[i]=pvlowpass[i];
117 cpl_vector_unwrap(vflux);
119 return cpl_error_get_code();
140 cpl_table *table = NULL ;
141 const char * tablename = NULL ;
144 double * plambda, * pflux ;
150 check(tablename = cpl_frame_get_filename( star_frame ));
160 check( nentries = cpl_table_get_nrow( table ) ) ;
165 plambda = result->
lambda ;
166 pflux = result->
flux ;
168 check(result->
header = cpl_propertylist_load(tablename, 0));
175 for( i = 0 ; i< nentries ; i++, plambda++, pflux++ ) {
179 CPL_TYPE_FLOAT, i, &value ) ) ;
182 CPL_TYPE_FLOAT, i, &value ) ) ;
187 if (cpl_error_get_code () != CPL_ERROR_NONE) {
188 xsh_error_msg(
"can't load frame %s",cpl_frame_get_filename(star_frame));
199 const char * name = NULL ;
203 const char* tag=NULL;
213 cpl_ensure_code(list->
size ==
s->size, CPL_ERROR_ILLEGAL_INPUT);
215 cpl_ensure_code(list->
lambda[0] ==
s->lambda_min, CPL_ERROR_ILLEGAL_INPUT);
216 cpl_ensure_code(list->
lambda[
size-1] ==
s->lambda_max, CPL_ERROR_ILLEGAL_INPUT);
220 for(i=0;i<
size;i++) {
221 pflux[i]=list->
flux[i];
225 name = cpl_frame_get_filename(frame);
226 tag = cpl_frame_get_tag(frame);
232 return cpl_error_get_code() ;
243 double * plambda, * pflux ;
259 plambda = result->
lambda ;
260 pflux = result->
flux ;
263 pima=cpl_image_get_data_double(spectrum->
flux);
271 for( i = 0 ; i< nentries ; i++, plambda++, pflux++ ) {
273 *plambda = (float) (wmin+i*wstep) ;
274 *pflux = (float) pima[i];
279 if (cpl_error_get_code () != CPL_ERROR_NONE) {
280 xsh_error_msg(
"can't load frame %s",cpl_frame_get_filename(star_frame));
290 if ( list != NULL && *list != NULL ) {
292 cpl_free( (*list)->lambda ) ;
293 cpl_free( (*list)->flux ) ;
309 double * plambda=NULL;
318 if((fout=fopen(filename,
"w"))==NULL) {
320 return CPL_ERROR_FILE_IO ;
322 for(i=0;i<
size;i++) {
323 fprintf(fout,
"%f %f \n", plambda[i], pflux[i]);
326 if ( fout ) fclose( fout ) ;
329 return cpl_error_get_code() ;
335 const char * filename,
const char * tag )
337 cpl_table * table = NULL ;
338 cpl_frame * result = NULL ;
340 double * plambda, * pflux ;
346 check(table = cpl_table_new( 2 ));
363 for( i = 0 ; i<
size ; i++, plambda++, pflux++ ) {
375 check(cpl_table_save( table, list->
header, NULL, filename, CPL_IO_DEFAULT));
380 CPL_FRAME_TYPE_TABLE,
381 CPL_FRAME_GROUP_PRODUCT,
382 CPL_FRAME_LEVEL_TEMPORARY));
396 const char * filename,
400 cpl_table * table = NULL ;
401 cpl_frame * result = NULL ;
403 double * plambda, * pflux ;
409 check(table = cpl_table_new( 2 ));
426 for( i = 0 ; i<
size ; i++, plambda++, pflux++ ) {
439 check(cpl_table_save( table,list->
header,NULL,filename,CPL_IO_DEFAULT));
441 check(cpl_table_save( table,list->
header,NULL,filename,CPL_IO_EXTEND));
447 CPL_FRAME_TYPE_TABLE,
448 CPL_FRAME_GROUP_PRODUCT,
449 CPL_FRAME_LEVEL_TEMPORARY));
521 for (i = 0; i <
size; i++) {
522 if (list->
lambda[i]<wmax) {
528 f1 = list->
flux[k - off];
531 w1 = 1./list->
lambda[k - off];
533 m = (f2 - f1) / (x2 - x1);
540 list->
flux[i]=f1+
m*(
x-x1);
564 for(i=0;i<
size;i++) {
569 return cpl_error_get_code();
xsh_spectrum * xsh_spectrum_load(cpl_frame *s1d_frame)
Load a 1D spectrum structure.
cpl_frame * xsh_spectrum_save(xsh_spectrum *s, const char *filename, const char *tag)
save a spectrum
double * xsh_spectrum_get_flux(xsh_spectrum *s)
Get flux of spectrum.
void xsh_spectrum_free(xsh_spectrum **s)
free memory associated to an 1D spectrum
#define XSH_ASSURE_NOT_NULL_MSG(pointer, msg)
#define XSH_ASSURE_NOT_ILLEGAL_MSG(cond, msg)
#define xsh_error_msg(...)
#define XSH_ASSURE_NOT_NULL(pointer)
#define xsh_msg_dbg_low(...)
double xsh_pfits_get_cdelt1(const cpl_propertylist *plist)
find out the cdelt1
int xsh_pfits_get_naxis1(const cpl_propertylist *plist)
find out the NAXIS1 value
double xsh_pfits_get_crval1(const cpl_propertylist *plist)
find out the crval1
void xsh_free_vector(cpl_vector **v)
Deallocate a vector and set the pointer to NULL.
void xsh_free_frame(cpl_frame **f)
Deallocate a frame and set the pointer to NULL.
void xsh_free_propertylist(cpl_propertylist **p)
Deallocate a property list and set the pointer to NULL.
cpl_error_code xsh_get_table_value(const cpl_table *table, const char *colname, cpl_type coltype, int i, void *result)
Read a table value from a fits table.
cpl_propertylist * flux_header
cpl_propertylist * header
double * xsh_star_flux_list_get_lambda(xsh_star_flux_list *list)
cpl_error_code xsh_star_flux_list_filter_lowpass(xsh_star_flux_list *result, cpl_lowpass filter_type, int hsize)
cpl_error_code xsh_star_flux_list_divide(xsh_star_flux_list *result, xsh_star_flux_list *factor)
void xsh_star_flux_list_extrapolate_wave_end(xsh_star_flux_list *list, const double wmax)
cpl_frame * xsh_star_flux_list_save_order(xsh_star_flux_list *list, const char *filename, const char *tag, const int order)
cpl_error_code xsh_star_flux_list_to_frame(xsh_star_flux_list *list, cpl_frame *frame)
void xsh_star_flux_list_free(xsh_star_flux_list **list)
xsh_star_flux_list * xsh_star_flux_list_load_spectrum(cpl_frame *star_frame)
cpl_error_code xsh_star_flux_list_dump_ascii(xsh_star_flux_list *list, const char *filename)
xsh_star_flux_list * xsh_star_flux_list_load(cpl_frame *star_frame)
cpl_error_code xsh_star_flux_list_filter_median(xsh_star_flux_list *result, int hsize)
xsh_star_flux_list * xsh_star_flux_list_create(int size)
cpl_frame * xsh_star_flux_list_save(xsh_star_flux_list *list, const char *filename, const char *tag)
double * xsh_star_flux_list_get_flux(xsh_star_flux_list *list)
xsh_star_flux_list * xsh_star_flux_list_duplicate(xsh_star_flux_list *list)
#define XSH_STAR_FLUX_LIST_COLNAME_FLUX
#define XSH_STAR_FLUX_LIST_COLNAME_WAVELENGTH
cpl_frame * xsh_frame_product(const char *fname, const char *tag, cpl_frame_type type, cpl_frame_group group, cpl_frame_level level)
Creates a frame with given characteristics.
#define XSH_CALLOC(POINTER, TYPE, SIZE)
#define XSH_TABLE_LOAD(TABLE, NAME)
#define XSH_TABLE_FREE(TABLE)