Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-16 09:11:48

0001 /*
0002 # <<BEGIN-copyright>>
0003 # Copyright 2019, Lawrence Livermore National Security, LLC.
0004 # This file is part of the gidiplus package (https://github.com/LLNL/gidiplus).
0005 # gidiplus is licensed under the MIT license (see https://opensource.org/licenses/MIT).
0006 # SPDX-License-Identifier: MIT
0007 # <<END-copyright>>
0008 */
0009 
0010 #ifndef ptwXY_h_included
0011 #define ptwXY_h_included
0012 
0013 #include <stdio.h>
0014 #include <stdint.h>
0015 
0016 #include <nf_utilities.h>
0017 #include <ptwX.h>
0018 
0019 #if defined __cplusplus
0020     extern "C" {
0021 #endif
0022 
0023 #define ptwXY_minimumSize 10            /* This must be > 0 otherwise some logic will fail. */
0024 #define ptwXY_minimumOverflowSize 4     /* This must be > 0 otherwise some logic will fail. */
0025 #define ptwXY_maxBiSectionMax 20
0026 #define ptwXY_minAccuracy 1e-14
0027 #define ptwXY_sectionSubdivideMax 1 << 16
0028 #define ClosestAllowXFactor 10
0029 
0030 typedef enum ptwXY_dataFrom_e { ptwXY_dataFrom_Unknown, ptwXY_dataFrom_Points, ptwXY_dataFrom_Overflow } ptwXY_dataFrom;
0031 typedef enum ptwXY_group_normType_e { ptwXY_group_normType_none, ptwXY_group_normType_dx, ptwXY_group_normType_norm } ptwXY_group_normType;
0032 
0033 /* The next macro are used in the routine ptwXY_union. */
0034 #define ptwXY_union_fill 1              /* If filling, union is filled with y value of first ptw. */
0035 #define ptwXY_union_trim 2              /* If trimming, union in only over common domain of ptw1 and ptw2. */
0036 #define ptwXY_union_mergeClosePoints 4  /* If true, union calls ptwXY_mergeClosePoints with eps = 4 * DBL_EPSILON. */
0037 typedef enum ptwXY_interpolation_e { ptwXY_interpolationLinLin, ptwXY_interpolationLogLin, ptwXY_interpolationLinLog, 
0038     ptwXY_interpolationLogLog, ptwXY_interpolationFlat, ptwXY_interpolationOther } ptwXY_interpolation;
0039 
0040 /*
0041 *  The function ptwXY_getPointsAroundX determines where an x fits into a ptwXY instance. It returns/sets the following.
0042 *
0043 *  if ( some point's x == x )
0044 *      lessThanEqualXPoint is set to point's information (prior, next, index, x, y),
0045 *      greaterThanXPoint is set to a overflowHeader,
0046 *      return( ptwXY_lessEqualGreaterX_equal ).
0047 *   else if ( x < first point's x )
0048 *       lessThanEqualXPoint is set to overflowHeader,
0049 *       greaterThanXPoint is set to first point's information,
0050 *       and greaterThanXPoint.prior points to the overflow which will be before the new point when the new point is inserted into overflowPoints.
0051 *   else if ( x > last point's x )
0052 *       lessThanEqualXPoint is set to last point's information
0053 *       greaterThanXPoint is set to a overflowHeader point
0054 *       and lessThanEqualXPoint.prior points to the overflow which will be before new point when the new point is inserted into overflowPoints.
0055 *   else
0056 *       lessThanEqualXPoint is set to point's information for closes point with point's x <= x
0057 *       greaterThanXPoint is set to point's information for closes point with point's x > x
0058 */
0059 typedef enum ptwXY_lessEqualGreaterX_e { ptwXY_lessEqualGreaterX_empty, ptwXY_lessEqualGreaterX_lessThan, ptwXY_lessEqualGreaterX_equal,
0060     ptwXY_lessEqualGreaterX_between, ptwXY_lessEqualGreaterX_greater, ptwXY_lessEqualGreaterX_Error } ptwXY_lessEqualGreaterX;
0061 
0062 typedef
0063     struct ptwXYPoint_s {
0064         double x, y;
0065     } ptwXYPoint;
0066 
0067 typedef nfu_status (*ptwXY_createFromFunction_callback)( statusMessageReporting *smr, double x, double *y, void *argList );
0068 typedef nfu_status (*ptwXY_applyFunction_callback)( statusMessageReporting *smr, ptwXYPoint *point, void *argList );
0069 
0070 typedef
0071     struct ptwXYOverflowPoint_s {
0072         struct ptwXYOverflowPoint_s *prior;
0073         struct ptwXYOverflowPoint_s *next;
0074         int64_t index;                             /* For overflowHeader set to -1. */
0075         ptwXYPoint point;
0076     } ptwXYOverflowPoint;
0077 
0078 typedef
0079     struct ptwXYPoints_s {
0080         nfu_status status;
0081         ptwXY_interpolation interpolation;
0082         char const *interpolationString;
0083         int userFlag;
0084         double biSectionMax;
0085         double accuracy;
0086         double minFractional_dx;
0087         int64_t length;
0088         int64_t allocatedSize;
0089         int64_t overflowLength;
0090         int64_t overflowAllocatedSize;
0091         int64_t mallocFailedSize;
0092         ptwXYOverflowPoint overflowHeader;
0093         ptwXYPoint *points;
0094         ptwXYOverflowPoint *overflowPoints;
0095     } ptwXYPoints;
0096 
0097 /*
0098 * Routines in ptwXY_core.c
0099 */
0100 ptwXYPoints *ptwXY_new( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, 
0101         double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag );
0102 ptwXYPoints *ptwXY_new2( statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize );
0103 nfu_status ptwXY_initialize( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, 
0104         char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, 
0105         int userFlag );
0106 ptwXYPoints *ptwXY_create( statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, 
0107         double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, 
0108         int userFlag );
0109 ptwXYPoints *ptwXY_create2( statusMessageReporting *smr, ptwXY_interpolation interpolation, 
0110         int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, int userFlag );
0111 ptwXYPoints *ptwXY_createFrom_Xs_Ys( statusMessageReporting *smr, ptwXY_interpolation interpolation, 
0112         char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, 
0113         int64_t length, double const *Xs, double const *Ys, int userFlag );
0114 ptwXYPoints *ptwXY_createFrom_Xs_Ys2( statusMessageReporting *smr, ptwXY_interpolation interpolation, 
0115         int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, double const *Ys, int userFlag );
0116 
0117 nfu_status ptwXY_copy( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src );
0118 nfu_status ptwXY_copyPointsOnly( statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src );
0119 ptwXYPoints *ptwXY_clone( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0120 ptwXYPoints *ptwXY_clone2( statusMessageReporting *smr, ptwXYPoints const *ptwXY );
0121 ptwXYPoints *ptwXY_cloneToInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo );
0122 ptwXYPoints *ptwXY_slice( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize );
0123 ptwXYPoints *ptwXY_domainSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, 
0124         int64_t secondarySize, int fill );
0125 ptwXYPoints *ptwXY_domainMinSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, int64_t secondarySize, int fill );
0126 ptwXYPoints *ptwXY_domainMaxSlice( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMax, int64_t secondarySize, int fill );
0127 
0128 ptwXY_interpolation ptwXY_getInterpolation( ptwXYPoints *ptwXY );
0129 char const *ptwXY_getInterpolationString( ptwXYPoints *ptwXY );
0130 nfu_status ptwXY_setInterpolationString( ptwXYPoints *ptwXY, char const *interpolationString );
0131 nfu_status ptwXY_getStatus( ptwXYPoints *ptwXY );
0132 int ptwXY_getUserFlag( ptwXYPoints *ptwXY );
0133 void ptwXY_setUserFlag( ptwXYPoints *ptwXY, int userFlag );
0134 double ptwXY_getAccuracy( ptwXYPoints *ptwXY );
0135 double ptwXY_setAccuracy( ptwXYPoints *ptwXY, double accuracy );
0136 double ptwXY_getBiSectionMax( ptwXYPoints *ptwXY );
0137 double ptwXY_setBiSectionMax( ptwXYPoints *ptwXY, double biSectionMax );
0138 
0139 nfu_status ptwXY_reallocatePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize );
0140 nfu_status ptwXY_reallocateOverflowPoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size );
0141 nfu_status ptwXY_coalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, ptwXYPoint *newPoint, 
0142         int forceSmallerResize );
0143 nfu_status ptwXY_simpleCoalescePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0144 
0145 nfu_status ptwXY_clear( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0146 nfu_status ptwXY_release( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0147 ptwXYPoints *ptwXY_free( ptwXYPoints *ptwXY );
0148 
0149 int64_t ptwXY_length( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0150 int64_t ptwXY_getNonOverflowLength( statusMessageReporting *smr, ptwXYPoints const *ptwXY );
0151 
0152 nfu_status ptwXY_startIndex( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, double a_x, int64_t *a_startIndex, int64_t *a_length );
0153 nfu_status ptwXY_setXYData( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *xy );
0154 nfu_status ptwXY_setXYDataFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *x, double const *y );
0155 nfu_status ptwXY_deletePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t i1, int64_t i2 );
0156 nfu_status ptwXY_getLowerIndexBoundingX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, int64_t *index );
0157 ptwXYPoint *ptwXY_getPointAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index );
0158 ptwXYPoint *ptwXY_getPointAtIndex_Unsafely( ptwXYPoints const *ptwXY, int64_t index );
0159 nfu_status ptwXY_getXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double *x, double *y );
0160 ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, 
0161         ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint );
0162 ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, 
0163         ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, 
0164         ptwXYPoint **closePoint );
0165 nfu_status ptwXY_getValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double *y );
0166 nfu_status ptwXY_setValueAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y );
0167 nfu_status ptwXY_setValueAtX_overrideIfClose( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y, double eps, int override );
0168 nfu_status ptwXY_mergeFromXsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xs, double *ys );
0169 nfu_status ptwXY_mergeFromXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xys );
0170 nfu_status ptwXY_appendXY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y );
0171 nfu_status ptwXY_setXYPairAtIndex( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double x, double y );
0172 
0173 nfu_status ptwXY_getSlopeAtX( statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, char side, double *slope );
0174 
0175 nfu_status ptwXY_domainMinAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value );
0176 nfu_status ptwXY_domainMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0177 nfu_status ptwXY_domainMaxAndFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value );
0178 nfu_status ptwXY_domainMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0179 nfu_status ptwXY_range( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMin, double *rangeMax );
0180 nfu_status ptwXY_rangeMin( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0181 nfu_status ptwXY_rangeMax( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0182 char const *ptwXY_interpolationToString( ptwXY_interpolation interpolation );
0183 ptwXY_interpolation ptwXY_stringToInterpolation( char const *interpolationString );
0184 
0185 /* 
0186 * Methods in ptwXY_methods.c 
0187 */
0188 nfu_status ptwXY_clip( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double rangeMin, double rangeMax );
0189 nfu_status ptwXY_thicken( statusMessageReporting *smr, ptwXYPoints *ptwXY1, int sectionSubdivideMax, 
0190         double dDomainMax, double fDomainMax );
0191 ptwXYPoints *ptwXY_thin( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double accuracy );
0192 ptwXYPoints *ptwXY_thinDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double epsilon );
0193 nfu_status ptwXY_trim( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0194 
0195 ptwXYPoints *ptwXY_union( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int unionOptions );
0196 
0197 nfu_status ptwXY_scaleOffsetXAndY( statusMessageReporting *smr, ptwXYPoints *ptwXY, double xScale, double xOffset, 
0198         double yScale, double yOffset );
0199 nfu_status ptwXY_scaleAndOffsetDomainWith_ptwXYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXYPoints *offset, ptwXYPoints *slope, int skipLastPoint );
0200 
0201 /*
0202 * Functions in ptwXY_unitaryOperators.c
0203 */
0204 nfu_status ptwXY_abs( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0205 nfu_status ptwXY_neg( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0206 
0207 /*
0208 * Functions in ptwXY_binaryOperators.c
0209 */
0210 nfu_status ptwXY_slopeOffset( statusMessageReporting *smr, ptwXYPoints *ptwXY, double slope, double offset );
0211 nfu_status ptwXY_add_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0212 nfu_status ptwXY_sub_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0213 nfu_status ptwXY_sub_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0214 nfu_status ptwXY_mul_double( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0215 nfu_status ptwXY_div_doubleFrom( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0216 nfu_status ptwXY_div_fromDouble( statusMessageReporting *smr, ptwXYPoints *ptwXY, double value );
0217 nfu_status ptwXY_mod( statusMessageReporting *smr, ptwXYPoints *ptwXY, double m, int pythonMod );
0218 
0219 ptwXYPoints *ptwXY_binary_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, 
0220         double v1, double v2, double v1v2 );
0221 ptwXYPoints *ptwXY_add_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 );
0222 ptwXYPoints *ptwXY_sub_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 );
0223 ptwXYPoints *ptwXY_mul_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 );
0224 ptwXYPoints *ptwXY_mul2_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 );
0225 ptwXYPoints *ptwXY_div_ptwXY( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide );
0226 
0227 /* 
0228 * Functions in ptwXY_functions.c 
0229 */
0230 nfu_status ptwXY_pow( statusMessageReporting *smr, ptwXYPoints *ptwXY, double p );
0231 nfu_status ptwXY_exp( statusMessageReporting *smr, ptwXYPoints *ptwXY, double a );
0232 ptwXYPoints *ptwXY_convolution( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int mode );
0233 ptwXYPoints *ptwXY_inverse( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0234 
0235 /*
0236 * Functions in ptwXY_interpolation.c
0237 */
0238 nfu_status ptwXY_interpolatePoint( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x, double *y, 
0239         double x1, double y1, double x2, double y2 );
0240 ptwXYPoints *ptwXY_flatInterpolationToLinear( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps );
0241 ptwXYPoints *ptwXY_toOtherInterpolation( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, 
0242         double accuracy );
0243 ptwXYPoints *ptwXY_unitbaseInterpolate( statusMessageReporting *smr, double w, double w1, ptwXYPoints *ptwXY1, 
0244         double w2, ptwXYPoints *ptwXY2, int scaleRange );
0245 ptwXYPoints *ptwXY_toUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, int scaleRange );
0246 ptwXYPoints *ptwXY_fromUnitbase( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, 
0247         int scaleRange );
0248 
0249 /* 
0250 * Functions in ptwXY_convenient.c 
0251 */
0252 ptwXPoints *ptwXY_getXArray( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0253 ptwXPoints *ptwXY_ysMappedToXs( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *Xs, int64_t *offset );
0254 nfu_status ptwXY_mapToXsAndAdd( statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, int64_t a_offset, int64_t a_length, double const *a_Xs,
0255         double *a_results, double a_scaleFractor );
0256 nfu_status ptwXY_dullEdges( statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly );
0257 nfu_status ptwXY_mergeClosePoints( statusMessageReporting *smr, ptwXYPoints *ptwXY, double epsilon );
0258 ptwXYPoints *ptwXY_intersectionWith_ptwX( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *ptwX );
0259 nfu_status ptwXY_areDomainsMutual( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2 );
0260 nfu_status ptwXY_tweakDomainsToMutualify( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, 
0261         int epsilonFactor, double epsilon );
0262 nfu_status ptwXY_mutualifyDomains( statusMessageReporting *smr, ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, 
0263         int positiveXOnly1, ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2 );
0264 nfu_status ptwXY_copyToC_XY( statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, 
0265         int64_t allocatedSize, int64_t *numberOfPoints, double *xy );
0266 nfu_status ptwXY_valuesToC_XsAndYs( statusMessageReporting *smr, ptwXYPoints *ptwXY, double **xs, double **ys );
0267 ptwXYPoints *ptwXY_valueTo_ptwXY( statusMessageReporting *smr, double x1, double x2, double y );
0268 ptwXYPoints *ptwXY_createGaussianCenteredSigma1( statusMessageReporting *smr, double accuracy );
0269 ptwXYPoints *ptwXY_createGaussian( statusMessageReporting *smr, double accuracy, double xCenter, double sigma, 
0270         double amplitude, double domainMin, double domainMax, double dullEps );
0271 
0272 /* 
0273 * Functions in ptwXY_misc.c 
0274 */
0275 double ptwXY_limitAccuracy( double accuracy );
0276 void ptwXY_update_biSectionMax( ptwXYPoints *ptwXY1, double oldLength );
0277 ptwXYPoints *ptwXY_createFromFunction( statusMessageReporting *smr, int n, double *xs, 
0278         ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax );
0279 ptwXYPoints *ptwXY_createFromFunction2( statusMessageReporting *smr, ptwXPoints *xs, ptwXY_createFromFunction_callback func, 
0280         void *argList, double accuracy, int checkForRoots, int biSectionMax );
0281 nfu_status ptwXY_applyFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, 
0282         void *argList, int checkForRoots );
0283 ptwXYPoints *ptwXY_fromString( statusMessageReporting *smr, char const *str, char sep, ptwXY_interpolation interpolation, char const *interpolationString, 
0284         double biSectionMax, double accuracy, char **endCharacter, int useSystem_strtod );
0285 
0286 void ptwXY_showInteralStructure( ptwXYPoints *ptwXY, FILE *f, int printPointersAsNull );
0287 void ptwXY_simpleWrite( ptwXYPoints *ptwXY, FILE *f, char const *format );
0288 void ptwXY_simplePrint( ptwXYPoints *ptwXY, char const *format );
0289 
0290 /* 
0291 * Functions in ptwXY_integration.c 
0292 */
0293 nfu_status ptwXY_f_integrate( statusMessageReporting *smr, ptwXY_interpolation interpolation, double x1, double y1, 
0294         double x2, double y2, double *value );
0295 nfu_status ptwXY_integrate( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value );
0296 nfu_status ptwXY_integrateDomain( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0297 nfu_status ptwXY_normalize( statusMessageReporting *smr, ptwXYPoints *ptwXY1 );
0298 nfu_status ptwXY_integrateDomainWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0299 nfu_status ptwXY_integrateWithWeight_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, 
0300         double *value );
0301 nfu_status ptwXY_integrateDomainWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value );
0302 nfu_status ptwXY_integrateWithWeight_sqrt_x( statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, 
0303         double *value );
0304 ptwXPoints *ptwXY_groupOneFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, 
0305         ptwXY_group_normType normType, ptwXPoints *ptwX_norm );
0306 ptwXPoints *ptwXY_groupTwoFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, 
0307         ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm );
0308 ptwXPoints *ptwXY_groupThreeFunctions( statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, 
0309         ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm );
0310 ptwXPoints *ptwXY_runningIntegral( statusMessageReporting *smr, ptwXYPoints *ptwXY );
0311 nfu_status ptwXY_integrateWithFunction( statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, 
0312         void *argList, double domainMin, double domainMax, int degree, int recursionLimit, double tolerance,
0313         double *value );
0314 ptwXPoints *ptwXY_equalProbableBins( statusMessageReporting *smr, ptwXYPoints *ptwXY, int numberOfBins );
0315 
0316 #if defined __cplusplus
0317     }
0318 #endif
0319 
0320 #endif          /* End of ptwXY_h_included. */