/*
******************************************************************************** * profile.h -- Master include file for the Profile Library * * Version 1.0: Original version. * Mark Showalter & Neil Heather, PDS Ring-Moon Systems Node, March 1998. * Version 1.1: QUICK compilation mode and Pro_StatRange() function added. * Mark Showalter, January 2000. *******************************************************************************/ #include "ringlib.h" /******************************************************************************* * SYMBOL DEFINITIONS *******************************************************************************/ /* Object class identifiers */ #define XPRO_OBJECT_CLASS 0 #define XPRO_SERIES_CLASS 1000 #define XPRO_ARRAY_CLASS 1100 #define XPRO_COLUMN_CLASS 1200 #define XPRO_STAT_CLASS 1300 #define XPRO_BUFFERED_CLASS 1310 #define XPRO_FIXED_CLASS 1320 #define XPRO_WEIGHTED_CLASS 1330 #define XPRO_FUNCTION_CLASS 2000 #define XPRO_LSPLINE_CLASS 2100 #define XPRO_SOFTFUNC_CLASS 2200 #define XPRO_COMPFUNC_CLASS 2300 #define XPRO_SLOPEFUNC_CLASS 2400 #define XPRO_CURVE_CLASS 2500 #define XPRO_SPLINE_CLASS 2510 #define XPRO_INVERSE_CLASS 2520 #define XPRO_LABEL_CLASS 3000 /* Series flag values */ #define PRO_MISSING_FLAG 1 #define PRO_INVALID_FLAG 2 /******************************************************************************* * TYPE DEFINITIONS *******************************************************************************/ #define PRO_NAMELEN 59 /* limit on lengths of names */ #define PRO_FILELEN 255 /* limit on lengths of file names */ typedef struct XPRO_CLASS_STRUCT { RL_INT4 id; RL_CHAR name[PRO_NAMELEN+1]; RL_VOID *pointer; } XPRO_CLASS; typedef struct XPRO_OBJECT_STRUCT { XPRO_CLASS class; RL_CHAR name[PRO_NAMELEN+1]; RL_CHAR xname[PRO_NAMELEN+1], yname[PRO_NAMELEN+1]; RL_FLT8 x1, x2; void (*freefunc) RL_PROTO((RL_VOID *pointer)); void (*printfunc) RL_PROTO((RL_VOID *pointer)); RL_BOOL isfreed; struct XPRO_LINK_STRUCT { struct XPRO_LINK_STRUCT *next; struct XPRO_OBJECT_STRUCT *object; } owners, slaves; } PRO_OBJECT; typedef struct XPRO_LINK_STRUCT XPRO_LINK; /******************************************************************************* * DECLARATIONS *******************************************************************************/ /* A large limit for lengths of error messages */ #define XPRO_MESSAGE_LEN 1023 /* A non-external declaration is found in errors.c */ extern RL_CHAR xpro_message[XPRO_MESSAGE_LEN+1]; /******************************************************************************* * MACROS used for QUICK mode compilation *******************************************************************************/ #ifdef QUICK #define XPro_Ptr1(object) (((XPRO_CLASS *) object)->pointer) #define XPro_Ptr2(object) (((XPRO_CLASS *) XPro_Ptr1(object))->pointer) #define XPro_Ptr3(object) (((XPRO_CLASS *) XPro_Ptr2(object))->pointer) #endif /******************************************************************************* * FUNCTION PROTOTYPES *******************************************************************************/ /* *************************************** * object.c -- Generic object routines * ***************************************/ void Pro_FreeObject RL_PROTO((PRO_OBJECT *object)); void Pro_PrintObject RL_PROTO((PRO_OBJECT *object)); RL_CHAR *Pro_ObjectName RL_PROTO((PRO_OBJECT *object, RL_INT4 coord)); void Pro_RenameObject RL_PROTO((PRO_OBJECT *object, RL_INT4 coord, RL_CHAR *name)); RL_FLT8 Pro_ObjectDomain RL_PROTO((PRO_OBJECT *object, RL_FLT8 *x1, RL_FLT8 *x2)); RL_FLT8 Pro_ObjectOverlap RL_PROTO((PRO_OBJECT *object, PRO_OBJECT *refobj, RL_FLT8 *x1, RL_FLT8 *x2)); RL_CHAR *XPro_ObjectName RL_PROTO((PRO_OBJECT *object, RL_INT4 coord)); PRO_OBJECT *XPro_MakeObject RL_PROTO((RL_FLT8 x1, RL_FLT8 x2, void (*freefunc) (RL_VOID *pointer), void (*printfunc)(RL_VOID *pointer), RL_VOID *pointer)); RL_BOOL XPro_EnslaveObject RL_PROTO((PRO_OBJECT *object, PRO_OBJECT *slave)); void XPro_PrintInfo RL_PROTO((PRO_OBJECT *object)); void XPro_PrintClass RL_PROTO((XPRO_CLASS *class)); #ifdef QUICK #define XPro_ObjectPtr(ob) XPro_Ptr1(ob) #else RL_VOID *XPro_ObjectPtr RL_PROTO((PRO_OBJECT *object)); #endif /* ******************************* * series.c -- Series routines * *******************************/ RL_FLT8 Pro_SeriesValue RL_PROTO((PRO_OBJECT *object, RL_INT4 k, RL_INT4 *flag)); RL_INT4 Pro_SeriesIndices RL_PROTO((PRO_OBJECT *object, RL_INT4 *k1, RL_INT4 *k2)); RL_FLT8 Pro_SeriesSampling RL_PROTO((PRO_OBJECT *object, RL_FLT8 *x1, RL_FLT8 *x2, RL_FLT8 *dx)); RL_FLT8 Pro_SeriesIndex RL_PROTO((PRO_OBJECT *object, RL_FLT8 x)); RL_FLT8 Pro_SeriesXValue RL_PROTO((PRO_OBJECT *object, RL_FLT8 kRL_FLT8)); PRO_OBJECT *Pro_WindowSeries RL_PROTO((PRO_OBJECT *object, RL_INT4 k1, RL_INT4 k2)); PRO_OBJECT *XPro_MakeSeries RL_PROTO((RL_INT4 k1, RL_INT4 k2, RL_FLT8 x1, RL_FLT8 dx, RL_FLT8 (*evalfunc) (RL_VOID *pointer, RL_INT4 k, RL_INT4 *flag), void (*printfunc) (RL_VOID *pointer), void (*freefunc) (RL_VOID *pointer), RL_VOID *pointer)); #ifdef QUICK #define XPro_SeriesPtr(ob) XPro_Ptr2(ob) #else RL_VOID *XPro_SeriesPtr RL_PROTO((PRO_OBJECT *object)); #endif /* * array.c -- Array series routines */ PRO_OBJECT *Pro_ArraySeries RL_PROTO((RL_VOID *table, RL_INT4 k1, RL_INT4 nsamples, RL_FLT8 x1, RL_FLT8 dx, RL_FLT8 missing, RL_FLT8 invalid, RL_BOOL isdouble, RL_BOOL dupe)); /* * column.c -- PDS column series routines */ PRO_OBJECT *Pro_ColumnSeries RL_PROTO((PRO_OBJECT *label, RL_INT4 table, RL_INT4 column, RL_INT4 item, RL_INT4 row1, RL_INT4 row2, RL_INT4 k1, RL_INT4 buffersize, RL_BOOL usedouble)); /* ***************************************** * stat.c -- Statistical series routines * *****************************************/ RL_FLT8 Pro_StatCovar RL_PROTO((PRO_OBJECT *object, RL_INT4 k1, RL_INT4 k2)); RL_INT4 Pro_StatRange RL_PROTO((PRO_OBJECT *object, RL_INT4 k, RL_INT4 *k1, RL_INT4 *k2)); PRO_OBJECT *XPro_MakeStat RL_PROTO((RL_INT4 k1, RL_INT4 k2, RL_FLT8 x1, RL_FLT8 dx, RL_FLT8 (*evalfunc) (RL_VOID *pointer, RL_INT4 k, RL_INT4 *flag), RL_FLT8 (*covarfunc) (RL_VOID *pointer, RL_INT4 k1, RL_INT4 k2), void (*rangefunc) (RL_VOID *pointer, RL_INT4 k, RL_INT4 *k1, RL_INT4 *k2), void (*freefunc) (RL_VOID *pointer), void (*printfunc) (RL_VOID *pointer), RL_VOID *pointer)); #ifdef QUICK #define XPro_StatPtr(ob) XPro_Ptr3(ob) #else RL_VOID *XPro_StatPtr RL_PROTO((PRO_OBJECT *object)); #endif /* * fixed.c -- fixed statistical series routines */ PRO_OBJECT *Pro_FixedStat RL_PROTO((PRO_OBJECT *series, RL_INT4 span, RL_FLT8 *covars)); /* * weighted.c -- weighted statistical series routines */ PRO_OBJECT *Pro_WeightedStat RL_PROTO((PRO_OBJECT *stat, RL_INT4 k1, RL_INT4 k2, RL_FLT8 x1, RL_FLT8 dx, void (*krange) (RL_INT4 knew, RL_INT4 *k1, RL_INT4 *k2, RL_VOID *params), RL_FLT8 (*weights) (RL_INT4 knew, RL_INT4 k, RL_VOID *params), RL_VOID *params, RL_SIZE paramsize, RL_BOOL dupe, void (*printmore) (RL_VOID *params))); /* * filtered.c -- filtered weighted statistical series routines */ PRO_OBJECT *Pro_FilteredStat RL_PROTO((PRO_OBJECT *stat, RL_FLT8 *filter, RL_INT4 df1, RL_INT4 df2)); /* * resample.c -- resampled weighted statistical series routines */ PRO_OBJECT *Pro_ResampledStat RL_PROTO((PRO_OBJECT *stat, PRO_OBJECT *oldpsf, PRO_OBJECT *newpsf, PRO_OBJECT *curve, RL_INT4 segment, RL_FLT8 x1, RL_FLT8 dx, RL_INT4 k1, RL_INT4 k2)); RL_INT4 Pro_ResampledSize RL_PROTO((PRO_OBJECT *series, PRO_OBJECT *oldpsf, PRO_OBJECT *newpsf, PRO_OBJECT *curve, RL_INT4 segment, RL_FLT8 r1, RL_FLT8 r2, RL_FLT8 dr)); /* * psffilt.c -- support routines for statistical series filters */ RL_INT4 Pro_PSFFilter RL_PROTO((PRO_OBJECT *oldpsf, PRO_OBJECT *newpsf, RL_FLT8 center, RL_FLT8 expand, RL_FLT8 *filter, RL_INT4 nfilter, RL_INT4 *f1, RL_INT4 *f2)); RL_INT4 XPro_PSFInfo RL_PROTO((PRO_OBJECT *psf, RL_FLT8 *halfwidth, RL_FLT8 *param)); RL_FLT8 XPro_PSFInteg RL_PROTO((RL_INT4 type1, RL_INT4 type2, RL_FLT8 a, RL_FLT8 b, RL_FLT8 par1, RL_FLT8 par2)); /* ******************************************* * function.c -- Generic function routines * *******************************************/ RL_FLT8 Pro_FuncValue RL_PROTO((PRO_OBJECT *object, RL_FLT8 x)); PRO_OBJECT *Pro_WindowFunc RL_PROTO((PRO_OBJECT *object, RL_FLT8 x1, RL_FLT8 x2)); PRO_OBJECT *XPro_MakeFunc RL_PROTO((RL_FLT8 x1, RL_FLT8 x2, RL_FLT8 (*evalfunc) (RL_VOID *pointer, RL_FLT8 x), void (*freefunc) (RL_VOID *pointer), void (*printfunc)(RL_VOID *pointer), RL_VOID *pointer)); #ifdef QUICK #define XPro_FuncPtr(ob) XPro_Ptr2(ob) #else RL_VOID *XPro_FuncPtr RL_PROTO((PRO_OBJECT *object)); #endif /* * lspline.c -- Linear spline function routines */ PRO_OBJECT *Pro_LSplineFunc RL_PROTO((PRO_OBJECT *series)); /* * software.c -- Software function routines */ PRO_OBJECT *Pro_SoftFunc RL_PROTO(( RL_FLT8 (*calc) (RL_FLT8 x, RL_VOID *params), RL_FLT8 x1, RL_FLT8 x2, RL_VOID *params, RL_SIZE paramsize, RL_BOOL dupe, void (*printmore) (RL_VOID *params))); PRO_OBJECT *Pro_SoftFunc1 RL_PROTO((PRO_OBJECT *object, RL_FLT8 (*calc) (RL_FLT8 y, RL_VOID *params), RL_VOID *params, RL_SIZE paramsize, RL_BOOL dupe, void (*printmore) (RL_VOID *params))); PRO_OBJECT *Pro_SoftFunc2 RL_PROTO((PRO_OBJECT *object1, PRO_OBJECT *object2, RL_FLT8 (*calc) (RL_FLT8 y1, RL_FLT8 y2, RL_VOID *params), RL_VOID *params, RL_SIZE paramsize, RL_BOOL dupe, void (*printmore) (RL_VOID *params))); RL_VOID *XPro_SoftParams RL_PROTO((PRO_OBJECT *object)); /* * composit.c -- Composite function routines */ PRO_OBJECT *Pro_CompFunc RL_PROTO((PRO_OBJECT *inner, PRO_OBJECT *outer)); /* * slope.c -- Slope function routines */ PRO_OBJECT *Pro_SlopeFunc RL_PROTO((PRO_OBJECT *object)); /* * boxcar.c -- Boxcar function routines */ PRO_OBJECT *Pro_BoxcarFunc RL_PROTO((RL_FLT8 height, RL_FLT8 halfwidth)); RL_BOOL Pro_BoxcarInfo RL_PROTO((PRO_OBJECT *object, RL_FLT8 *height, RL_FLT8 *halfwidth)); /* * sinc.c -- Sinc function routines */ PRO_OBJECT *Pro_SincFunc RL_PROTO((RL_FLT8 height, RL_FLT8 step, RL_FLT8 halfwidth, RL_FLT8 shoulder)); RL_BOOL Pro_SincInfo RL_PROTO((PRO_OBJECT *object, RL_FLT8 *height, RL_FLT8 *step, RL_FLT8 *halfwidth, RL_FLT8 *shoulder)); /* * triangle.c -- Triangle function routines */ PRO_OBJECT *Pro_TriangleFunc RL_PROTO((RL_FLT8 height, RL_FLT8 halfwidth)); RL_BOOL Pro_TriangleInfo RL_PROTO((PRO_OBJECT *object, RL_FLT8 *height, RL_FLT8 *halfwidth)); /* *************************** * Curve function routines * ***************************/ RL_FLT8 Pro_CurveValue RL_PROTO((PRO_OBJECT *object, RL_FLT8 x, RL_FLT8 *slope)); RL_FLT8 Pro_CurveInverse RL_PROTO((PRO_OBJECT *object, RL_INT4 segment, RL_FLT8 y)); RL_INT4 Pro_CurveSegments RL_PROTO((PRO_OBJECT *object)); RL_FLT8 Pro_CurveExtremum RL_PROTO((PRO_OBJECT *object, RL_INT4 segment, RL_FLT8 *value, RL_INT4 *type)); PRO_OBJECT *XPro_MakeCurve RL_PROTO((RL_FLT8 x1, RL_FLT8 x2, RL_INT4 nextrema, RL_FLT8 *xextrema, RL_FLT8 (*evalfunc) (RL_VOID *pointer, RL_FLT8 x, RL_FLT8 *slope), RL_FLT8 (*invfunc) (RL_VOID *pointer, RL_FLT8 y, RL_FLT8 x1, RL_FLT8 x2), void (*freefunc) (RL_VOID *pointer), void (*printfunc)(RL_VOID *pointer), RL_VOID *pointer)); #ifdef QUICK #define XPro_CurvePtr(ob) XPro_Ptr3(ob) #else RL_VOID *XPro_CurvePtr RL_PROTO((PRO_OBJECT *object)); #endif /* * spline.c -- Cubic spline curve routines */ PRO_OBJECT *Pro_SplineCurve RL_PROTO((PRO_OBJECT *series)); /* * inverse.c -- Inverse curve routines */ PRO_OBJECT *Pro_InverseCurve RL_PROTO((PRO_OBJECT *curve, RL_INT4 segment)); /* ********************** * PDS label routines * **********************/ PRO_OBJECT *Pro_OpenLabel RL_PROTO((RL_CHAR *labelfile)); RL_INT4 Pro_LabelCount RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn)); RL_CHAR *Pro_LabelName RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn)); RL_CHAR *Pro_LabelXName RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable)); RL_INT4 Pro_LabelFind RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_CHAR *name)); RL_INT4 Pro_LabelSampling RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn, RL_INT4 nitem, RL_FLT8 *x1, RL_FLT8 *x2, RL_FLT8 *dx)); RL_INT4 Pro_LabelInt RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn, RL_CHAR *keyword, RL_INT4 dfault, RL_BOOL raise_error)); RL_FLT8 Pro_LabelFloat RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn, RL_CHAR *keyword, RL_FLT8 dfault, RL_BOOL raise_error)); RL_CHAR *Pro_LabelString RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn, RL_CHAR *keyword, RL_CHAR *dfault, RL_BOOL raise_error)); RL_BOOL XPro_LabelInfo RL_PROTO((PRO_OBJECT *object, RL_INT4 ntable, RL_INT4 ncolumn, RL_VOID **tabletree, RL_VOID **columntree, RL_INT4 *rows, RL_INT4 *items, RL_FLT8 *x1, RL_FLT8 *x2, RL_FLT8 *dx, RL_CHAR **xname, RL_CHAR **yname, RL_FLT8 *missing, RL_FLT8 *invalid, RL_FLT8 *offset, RL_FLT8 *scale)); /* ************************** * Special error routines * **************************/ void XPro_NullError RL_PROTO((RL_CHAR *info, PRO_OBJECT *object)); void XPro_ClassError RL_PROTO((RL_CHAR *info, PRO_OBJECT *object)); void XPro_DomainError RL_PROTO((RL_CHAR *info, PRO_OBJECT *object, RL_FLT8 x1, RL_FLT8 x2, RL_FLT8 x)); void XPro_IDomainError RL_PROTO((RL_CHAR *info, PRO_OBJECT *object, RL_INT4 k1, RL_INT4 k2, RL_INT4 k)); void XPro_EmptyDomain RL_PROTO((RL_CHAR *info, PRO_OBJECT *object1, PRO_OBJECT *object2, RL_FLT8 x1, RL_FLT8 x2, RL_FLT8 x1a, RL_FLT8 x2a)); void XPro_IEmptyDomain RL_PROTO((RL_CHAR *info, PRO_OBJECT *object1, PRO_OBJECT *object2, RL_INT4 k1, RL_INT4 k2, RL_INT4 k1a, RL_INT4 k2a)); void XPro_CoordMismatch RL_PROTO((RL_CHAR *info, PRO_OBJECT *object1, PRO_OBJECT *object2, RL_CHAR *name1, RL_CHAR *name2)); /********************************************************************************/