10#ifndef ptwXY_h_included
11#define ptwXY_h_included
19#if defined __cplusplus
23#define ptwXY_minimumSize 10
24#define ptwXY_minimumOverflowSize 4
25#define ptwXY_maxBiSectionMax 20
26#define ptwXY_minAccuracy 1e-14
27#define ptwXY_sectionSubdivideMax 1 << 16
28#define ClosestAllowXFactor 10
34#define ptwXY_union_fill 1
35#define ptwXY_union_trim 2
36#define ptwXY_union_mergeClosePoints 4
101 double biSectionMax,
double accuracy, int64_t primarySize, int64_t secondarySize,
int userFlag );
104 char const *interpolationString,
double biSectionMax,
double accuracy, int64_t primarySize, int64_t secondarySize,
107 double biSectionMax,
double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length,
double const *xy,
110 int64_t primarySize, int64_t secondarySize, int64_t length,
double const *xy,
int userFlag );
112 char const *interpolationString,
double biSectionMax,
double accuracy, int64_t primarySize, int64_t secondarySize,
113 int64_t length,
double const *Xs,
double const *Ys,
int userFlag );
115 int64_t primarySize, int64_t secondarySize, int64_t length,
double const *Xs,
double const *Ys,
int userFlag );
124 int64_t secondarySize,
int fill );
142 int forceSmallerResize );
190 double dDomainMax,
double fDomainMax );
198 double yScale,
double yOffset );
220 double v1,
double v2,
double v1v2 );
239 double x1,
double y1,
double x2,
double y2 );
255 double *a_results,
double a_scaleFractor );
261 int epsilonFactor,
double epsilon );
263 int positiveXOnly1,
ptwXYPoints *ptwXY2,
double lowerEps2,
double upperEps2,
int positiveXOnly2 );
265 int64_t allocatedSize, int64_t *numberOfPoints,
double *xy );
270 double amplitude,
double domainMin,
double domainMax,
double dullEps );
280 void *argList,
double accuracy,
int checkForRoots,
int biSectionMax );
282 void *argList,
int checkForRoots );
284 double biSectionMax,
double accuracy,
char **endCharacter,
int useSystem_strtod );
294 double x2,
double y2,
double *value );
312 void *argList,
double domainMin,
double domainMax,
int degree,
int recursionLimit,
double tolerance,
316#if defined __cplusplus
G4double epsilon(G4double density, G4double temperature)
G4ThreadLocal T * G4GeomSplitter< T >::offset
enum nfu_status_e nfu_status
nfu_status ptwXY_setInterpolationString(ptwXYPoints *ptwXY, char const *interpolationString)
nfu_status ptwXY_div_fromDouble(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
nfu_status ptwXY_dullEdges(statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps, int positiveXOnly)
nfu_status ptwXY_scaleAndOffsetDomainWith_ptwXYs(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXYPoints *offset, ptwXYPoints *slope, int skipLastPoint)
nfu_status ptwXY_add_double(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
ptwXYPoints * ptwXY_convolution(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int mode)
nfu_status ptwXY_neg(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_deletePoints(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t i1, int64_t i2)
ptwXYPoints * ptwXY_unitbaseInterpolate(statusMessageReporting *smr, double w, double w1, ptwXYPoints *ptwXY1, double w2, ptwXYPoints *ptwXY2, int scaleRange)
ptwXYPoints * ptwXY_domainSlice(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, int64_t secondarySize, int fill)
ptwXYPoints * ptwXY_mul_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
nfu_status ptwXY_mergeFromXsAndYs(statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xs, double *ys)
double ptwXY_getAccuracy(ptwXYPoints *ptwXY)
nfu_status ptwXY_trim(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_setValueAtX(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y)
ptwXY_interpolation ptwXY_getInterpolation(ptwXYPoints *ptwXY)
double ptwXY_setAccuracy(ptwXYPoints *ptwXY, double accuracy)
nfu_status ptwXY_initialize(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag)
nfu_status ptwXY_valuesToC_XsAndYs(statusMessageReporting *smr, ptwXYPoints *ptwXY, double **xs, double **ys)
nfu_status ptwXY_rangeMax(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
ptwXYPoints * ptwXY_clone2(statusMessageReporting *smr, ptwXYPoints const *ptwXY)
double ptwXY_limitAccuracy(double accuracy)
ptwXPoints * ptwXY_equalProbableBins(statusMessageReporting *smr, ptwXYPoints *ptwXY, int numberOfBins)
int ptwXY_getUserFlag(ptwXYPoints *ptwXY)
nfu_status ptwXY_startIndex(statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, double a_x, int64_t *a_startIndex, int64_t *a_length)
enum ptwXY_group_normType_e ptwXY_group_normType
char const * ptwXY_interpolationToString(ptwXY_interpolation interpolation)
nfu_status ptwXY_release(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_integrateDomainWithWeight_sqrt_x(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
enum ptwXY_lessEqualGreaterX_e ptwXY_lessEqualGreaterX
nfu_status ptwXY_exp(statusMessageReporting *smr, ptwXYPoints *ptwXY, double a)
nfu_status ptwXY_integrateWithFunction(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_createFromFunction_callback func, void *argList, double domainMin, double domainMax, int degree, int recursionLimit, double tolerance, double *value)
void ptwXY_showInteralStructure(ptwXYPoints *ptwXY, FILE *f, int printPointersAsNull)
nfu_status ptwXY_scaleOffsetXAndY(statusMessageReporting *smr, ptwXYPoints *ptwXY, double xScale, double xOffset, double yScale, double yOffset)
enum ptwXY_dataFrom_e ptwXY_dataFrom
ptwXPoints * ptwXY_runningIntegral(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_normalize(statusMessageReporting *smr, ptwXYPoints *ptwXY1)
nfu_status ptwXY_sub_doubleFrom(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
nfu_status ptwXY_domainMinAndFrom(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value)
ptwXYPoints * ptwXY_createFromFunction(statusMessageReporting *smr, int n, double *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax)
nfu_status ptwXY_integrateDomainWithWeight_x(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
nfu_status ptwXY_clip(statusMessageReporting *smr, ptwXYPoints *ptwXY1, double rangeMin, double rangeMax)
nfu_status(* ptwXY_createFromFunction_callback)(statusMessageReporting *smr, double x, double *y, void *argList)
ptwXYPoints * ptwXY_createGaussianCenteredSigma1(statusMessageReporting *smr, double accuracy)
int64_t ptwXY_getNonOverflowLength(statusMessageReporting *smr, ptwXYPoints const *ptwXY)
ptwXYPoints * ptwXY_clone(statusMessageReporting *smr, ptwXYPoints *ptwXY)
@ ptwXY_group_normType_dx
@ ptwXY_group_normType_none
@ ptwXY_group_normType_norm
nfu_status ptwXY_div_doubleFrom(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
ptwXYPoints * ptwXY_intersectionWith_ptwX(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *ptwX)
nfu_status ptwXY_tweakDomainsToMutualify(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int epsilonFactor, double epsilon)
void ptwXY_setUserFlag(ptwXYPoints *ptwXY, int userFlag)
nfu_status ptwXY_coalescePoints(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, ptwXYPoint *newPoint, int forceSmallerResize)
ptwXYPoints * ptwXY_add_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
nfu_status ptwXY_getLowerIndexBoundingX(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, int64_t *index)
ptwXYPoints * ptwXY_thinDomain(statusMessageReporting *smr, ptwXYPoints *ptwXY1, double epsilon)
ptwXYPoints * ptwXY_createFrom_Xs_Ys2(statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, double const *Ys, int userFlag)
ptwXYPoints * ptwXY_binary_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double v1, double v2, double v1v2)
nfu_status ptwXY_range(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *rangeMin, double *rangeMax)
nfu_status ptwXY_abs(statusMessageReporting *smr, ptwXYPoints *ptwXY)
struct ptwXYOverflowPoint_s ptwXYOverflowPoint
ptwXPoints * ptwXY_getXArray(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_pow(statusMessageReporting *smr, ptwXYPoints *ptwXY, double p)
void ptwXY_simplePrint(ptwXYPoints *ptwXY, char const *format)
ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint)
nfu_status ptwXY_reallocateOverflowPoints(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size)
nfu_status ptwXY_slopeOffset(statusMessageReporting *smr, ptwXYPoints *ptwXY, double slope, double offset)
ptwXYPoints * ptwXY_new2(statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize)
ptwXPoints * ptwXY_groupTwoFunctions(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm)
nfu_status ptwXY_integrate(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value)
nfu_status(* ptwXY_applyFunction_callback)(statusMessageReporting *smr, ptwXYPoint *point, void *argList)
nfu_status ptwXY_rangeMin(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
ptwXYPoints * ptwXY_cloneToInterpolation(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolationTo)
ptwXYPoints * ptwXY_thin(statusMessageReporting *smr, ptwXYPoints *ptwXY1, double accuracy)
nfu_status ptwXY_mul_double(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
ptwXY_lessEqualGreaterX ptwXY_getPointsAroundX_closeIsEqual(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, ptwXYOverflowPoint *lessThanEqualXPoint, ptwXYOverflowPoint *greaterThanXPoint, double eps, int *closeIsEqual, ptwXYPoint **closePoint)
enum ptwXY_interpolation_e ptwXY_interpolation
ptwXYPoints * ptwXY_sub_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
nfu_status ptwXY_areDomainsMutual(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
nfu_status ptwXY_mergeFromXYs(statusMessageReporting *smr, ptwXYPoints *ptwXY, int length, double *xys)
nfu_status ptwXY_thicken(statusMessageReporting *smr, ptwXYPoints *ptwXY1, int sectionSubdivideMax, double dDomainMax, double fDomainMax)
char const * ptwXY_getInterpolationString(ptwXYPoints *ptwXY)
ptwXYPoints * ptwXY_div_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int safeDivide)
@ ptwXY_interpolationFlat
@ ptwXY_interpolationLinLog
@ ptwXY_interpolationLogLog
@ ptwXY_interpolationLinLin
@ ptwXY_interpolationOther
@ ptwXY_interpolationLogLin
ptwXYPoints * ptwXY_mul2_ptwXY(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
nfu_status ptwXY_setXYPairAtIndex(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double x, double y)
ptwXYPoints * ptwXY_createFromFunction2(statusMessageReporting *smr, ptwXPoints *xs, ptwXY_createFromFunction_callback func, void *argList, double accuracy, int checkForRoots, int biSectionMax)
struct ptwXYPoints_s ptwXYPoints
nfu_status ptwXY_mutualifyDomains(statusMessageReporting *smr, ptwXYPoints *ptwXY1, double lowerEps1, double upperEps1, int positiveXOnly1, ptwXYPoints *ptwXY2, double lowerEps2, double upperEps2, int positiveXOnly2)
ptwXYPoints * ptwXY_domainMinSlice(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, int64_t secondarySize, int fill)
nfu_status ptwXY_getXYPairAtIndex(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index, double *x, double *y)
ptwXYPoints * ptwXY_createFrom_Xs_Ys(statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *Xs, double const *Ys, int userFlag)
ptwXYPoints * ptwXY_domainMaxSlice(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMax, int64_t secondarySize, int fill)
nfu_status ptwXY_integrateWithWeight_sqrt_x(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value)
nfu_status ptwXY_clear(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_copyToC_XY(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t allocatedSize, int64_t *numberOfPoints, double *xy)
nfu_status ptwXY_mapToXsAndAdd(statusMessageReporting *a_smr, ptwXYPoints *a_ptwXY, int64_t a_offset, int64_t a_length, double const *a_Xs, double *a_results, double a_scaleFractor)
double ptwXY_getBiSectionMax(ptwXYPoints *ptwXY)
nfu_status ptwXY_interpolatePoint(statusMessageReporting *smr, ptwXY_interpolation interpolation, double x, double *y, double x1, double y1, double x2, double y2)
ptwXY_lessEqualGreaterX_e
@ ptwXY_lessEqualGreaterX_equal
@ ptwXY_lessEqualGreaterX_Error
@ ptwXY_lessEqualGreaterX_empty
@ ptwXY_lessEqualGreaterX_between
@ ptwXY_lessEqualGreaterX_lessThan
@ ptwXY_lessEqualGreaterX_greater
nfu_status ptwXY_getStatus(ptwXYPoints *ptwXY)
ptwXYPoints * ptwXY_new(statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int userFlag)
void ptwXY_simpleWrite(ptwXYPoints *ptwXY, FILE *f, char const *format)
nfu_status ptwXY_appendXY(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y)
void ptwXY_update_biSectionMax(ptwXYPoints *ptwXY1, double oldLength)
ptwXYPoints * ptwXY_create2(statusMessageReporting *smr, ptwXY_interpolation interpolation, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, int userFlag)
nfu_status ptwXY_mod(statusMessageReporting *smr, ptwXYPoints *ptwXY, double m, int pythonMod)
int64_t ptwXY_length(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_copy(statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src)
nfu_status ptwXY_domainMaxAndFrom(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_dataFrom *dataFrom, double *value)
nfu_status ptwXY_reallocatePoints(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t size, int forceSmallerResize)
nfu_status ptwXY_applyFunction(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXY_applyFunction_callback func, void *argList, int checkForRoots)
ptwXYPoints * ptwXY_union(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, int unionOptions)
struct ptwXYPoint_s ptwXYPoint
nfu_status ptwXY_f_integrate(statusMessageReporting *smr, ptwXY_interpolation interpolation, double x1, double y1, double x2, double y2, double *value)
nfu_status ptwXY_mergeClosePoints(statusMessageReporting *smr, ptwXYPoints *ptwXY, double epsilon)
ptwXYPoints * ptwXY_fromString(statusMessageReporting *smr, char const *str, char sep, ptwXY_interpolation interpolation, char const *interpolationString, double biSectionMax, double accuracy, char **endCharacter, int useSystem_strtod)
ptwXYPoints * ptwXY_valueTo_ptwXY(statusMessageReporting *smr, double x1, double x2, double y)
ptwXY_interpolation ptwXY_stringToInterpolation(char const *interpolationString)
nfu_status ptwXY_setXYData(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *xy)
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
ptwXYPoints * ptwXY_slice(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index1, int64_t index2, int64_t secondarySize)
nfu_status ptwXY_getSlopeAtX(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, char side, double *slope)
ptwXYPoint * ptwXY_getPointAtIndex_Unsafely(ptwXYPoints const *ptwXY, int64_t index)
ptwXPoints * ptwXY_groupThreeFunctions(statusMessageReporting *smr, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, ptwXYPoints *ptwXY3, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm)
nfu_status ptwXY_sub_fromDouble(statusMessageReporting *smr, ptwXYPoints *ptwXY, double value)
ptwXYPoints * ptwXY_create(statusMessageReporting *smr, ptwXY_interpolation interpolation, char const *interpolationString, double biSectionMax, double accuracy, int64_t primarySize, int64_t secondarySize, int64_t length, double const *xy, int userFlag)
ptwXPoints * ptwXY_groupOneFunction(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *groupBoundaries, ptwXY_group_normType normType, ptwXPoints *ptwX_norm)
ptwXYPoints * ptwXY_toOtherInterpolation(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXY_interpolation interpolation, double accuracy)
@ ptwXY_dataFrom_Overflow
nfu_status ptwXY_domainMax(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
ptwXYPoint * ptwXY_getPointAtIndex(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t index)
ptwXYPoints * ptwXY_toUnitbase(statusMessageReporting *smr, ptwXYPoints *ptwXY, int scaleRange)
double ptwXY_setBiSectionMax(ptwXYPoints *ptwXY, double biSectionMax)
nfu_status ptwXY_getValueAtX(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double *y)
nfu_status ptwXY_simpleCoalescePoints(statusMessageReporting *smr, ptwXYPoints *ptwXY)
nfu_status ptwXY_setValueAtX_overrideIfClose(statusMessageReporting *smr, ptwXYPoints *ptwXY, double x, double y, double eps, int override)
ptwXYPoints * ptwXY_createGaussian(statusMessageReporting *smr, double accuracy, double xCenter, double sigma, double amplitude, double domainMin, double domainMax, double dullEps)
nfu_status ptwXY_integrateDomain(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
nfu_status ptwXY_domainMin(statusMessageReporting *smr, ptwXYPoints *ptwXY, double *value)
nfu_status ptwXY_integrateWithWeight_x(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, double *value)
ptwXYPoints * ptwXY_fromUnitbase(statusMessageReporting *smr, ptwXYPoints *ptwXY, double domainMin, double domainMax, int scaleRange)
ptwXPoints * ptwXY_ysMappedToXs(statusMessageReporting *smr, ptwXYPoints *ptwXY, ptwXPoints *Xs, int64_t *offset)
nfu_status ptwXY_copyPointsOnly(statusMessageReporting *smr, ptwXYPoints *dest, ptwXYPoints *src)
ptwXYPoints * ptwXY_inverse(statusMessageReporting *smr, ptwXYPoints *ptwXY)
ptwXYPoints * ptwXY_flatInterpolationToLinear(statusMessageReporting *smr, ptwXYPoints *ptwXY, double lowerEps, double upperEps)
nfu_status ptwXY_setXYDataFromXsAndYs(statusMessageReporting *smr, ptwXYPoints *ptwXY, int64_t length, double const *x, double const *y)
struct ptwXPoints_s ptwXPoints
struct ptwXYOverflowPoint_s * next
struct ptwXYOverflowPoint_s * prior
ptwXYOverflowPoint overflowHeader
ptwXY_interpolation interpolation
int64_t overflowAllocatedSize
ptwXYOverflowPoint * overflowPoints
char const * interpolationString