TPCCLIB
Loading...
Searching...
No Matches
libtpcmodel.h
Go to the documentation of this file.
1
5#ifndef _LIBTPCMODEL_H
6#define _LIBTPCMODEL_H
7/*****************************************************************************/
8
9/*****************************************************************************/
10#include "tpcclibConfig.h"
11/*****************************************************************************/
12//#include <omp.h>
13/*****************************************************************************/
14#include <stdio.h>
15#include <stdint.h>
16#include <stdlib.h>
17#include <string.h>
18#include <strings.h>
19#include <ctype.h>
20#include <math.h>
21#include <float.h>
22#include <sys/time.h>
23#include <time.h>
24/*****************************************************************************/
25#include "libtpcmisc.h"
26/*****************************************************************************/
27
28/*****************************************************************************/
29#ifndef MAX_PARAMETERS
31#define MAX_PARAMETERS 50
32#endif
33#ifndef MAX_PARAMS
35#define MAX_PARAMS MAX_PARAMETERS
36#endif
37/*****************************************************************************/
38
39/*****************************************************************************/
41#define TPCCLIB_MERTWI_NN 312
43#define TPCCLIB_MERTWI_A UINT64_C(0xB5026F5AA96619E9)
46typedef struct MERTWI {
48 unsigned int n;
50 unsigned int m;
52 uint64_t a;
54 uint64_t um;
56 uint64_t lm;
60 uint64_t mti;
61} MERTWI;
62/* mertwi */
63extern uint32_t mertwiSeed32(void);
64extern uint64_t mertwiSeed64(void);
65extern void mertwiInit(MERTWI *mt);
66extern void mertwiInitWithSeed64(MERTWI *mt, uint64_t seed);
67extern void mertwiInitByArray64(MERTWI *mt, uint64_t init_key[], uint64_t key_length);
68extern uint64_t mertwiRandomInt64(MERTWI *mt);
69extern int64_t mertwiRandomInt63(MERTWI *mt);
70extern double mertwiRandomDouble1(MERTWI *mt);
71extern double mertwiRandomDouble2(MERTWI *mt);
72extern double mertwiRandomDouble3(MERTWI *mt);
73/*****************************************************************************/
74
75/*****************************************************************************/
77typedef enum {
78 BOBYQA_INVALID_ARGS = -1,
79 BOBYQA_OUT_OF_MEMORY = -2,
80 BOBYQA_ROUNDOFF_LIMITED = -3,
81 BOBYQA_FAIL = -4, /* generic fail code */
82 BOBYQA_SUCCESS = 0, /* generic success code */
83 BOBYQA_MINF_MAX_REACHED = 1,
84 BOBYQA_FTOL_REACHED = 2,
85 BOBYQA_XTOL_REACHED = 3,
86 BOBYQA_MAXEVAL_REACHED = 4,
87 BOBYQA_RELFTOL_REACHED = 5,
88 BOBYQA_ABSFTOL_REACHED = 6
90
92typedef double (*bobyqa_func)(int n, const double *x, void *func_data);
93
95typedef struct {
97 int n;
100 int npt;
103 double *x;
107 double *xscale;
111 int nfull;
115 double *xfull;
118 int *xplace;
124 double *xl;
128 double *xu;
136 double rhobeg;
138 double rhoend;
140 double minf_max;
142 double ftol_rel;
144 double ftol_abs;
149
157 double minf;
158
160 double *wmptr;
164 double *lwmptr;
168
172 double *xbase;
177 double *xpt;
181 double *fval;
187 double *xopt;
191 double *gopt;
195 double *hq;
199 double *pq;
203 double *bmat;
209 double *zmat;
213 int ndim;
215 double *sl;
219 double *su;
225 double *xnew;
230 double *xalt;
234 double *dtrial;
239 double *vlag;
242
244 double *w2npt;
248 double *wndim;
252 double *wn;
257 double *gnew;
266 double *xbdi;
273 double *s;
280 double *hs;
287 double *hred;
292 double *glag;
297 double *hcol;
304 double *ccstep;
307
310
314
318 double _crvmin;
320
323 double rho;
325 int nresc;
327 double delta;
329 double diffa;
331 double diffb;
333 double diffc;
335 double ratio;
337 int itest;
339 int nfsav;
341 int kopt;
343 double fsave;
345 double vquad;
347 double fopt;
349 double dsq;
351 double xoptsq;
353 int nptm;
355 double alpha;
357 double beta;
359 double dnorm;
361 int rc;
363 double newf;
365 int knew;
367 int kbase;
369 double denom;
371 double delsq;
373 double scaden;
375 double biglsq;
377 double distsq;
379 double cauchy;
381 double adelt;
393/*****************************************************************************/
394
395/*****************************************************************************/
396/* aic */
397extern double aicSS(double ss, const int n, const int k);
398extern int parFreeNr(const int n, double *pLower, double *pUpper);
399extern int aicWeights(double *aic, double *w, int n);
400extern double aicWeightedAvg(double *w, double *p, int n);
401extern double aicModel(double *w, int n);
402/*****************************************************************************/
403
404/*****************************************************************************/
405/* bobyqa */
406extern bobyqa_result bobyqb(
407 bobyqa_data *bdata
408);
409extern bobyqa_result bobyqa(
410 int n,
411 int npt,
412 double *x,
413 const double *xl,
414 const double *xu,
415 const double *dx,
416 const double rhoend,
417 double xtol_rel,
418 double minf_max,
419 double ftol_rel,
420 double ftol_abs,
421 int maxeval,
422 int *nevals,
423 double *minf,
424 double (*f)(int n, double *x, void *objf_data),
425 void *objf_data,
426 double *working_space,
427 int verbose
428);
430 bobyqa_data *bdata
431);
432extern char *bobyqa_rc(
434);
435extern int fixed_params(
436 int n, const double *lower, const double *upper, const double *delta
437);
439 int n, int fitted_n, int npt, bobyqa_data *bdata
440);
442 int n, int fitted_n, int npt, bobyqa_data *bdata, double *wm
443);
445 bobyqa_data *bdata
446);
448 bobyqa_data *bdata
449);
450extern void bobyqa_print(
451 bobyqa_data *bdata, int sw, FILE *fp
452);
453extern double bobyqa_x_funcval(
454 bobyqa_data *bdata, double *x
455);
456extern void bobyqa_xfull(
457 bobyqa_data *bdata
458);
460 int full_n,
461 double *x,
462 const double *dx,
463 const double *xl,
464 const double *xu,
465 const double rhoend,
466 double xtol_rel,
467 double minf_max,
468 double ftol_rel,
469 double ftol_abs,
470 int maxeval,
471 double (*f)(int n, double *x, void *objf_data),
472 void *objf_data,
473 int verbose,
474 bobyqa_data *bdata
475);
476/*****************************************************************************/
477
478/*****************************************************************************/
479/* bootstrap */
480extern int bootstrap(
481 int iterNr,
482 double *cLim1, double *cLim2, double *SD, double *parameter,
483 double *lowlim, double *uplim, int frameNr, double *origTac,
484 double *fitTac, double *bsTAC, int parNr, double *weight,
485 double (*objf)(int, double*, void*), char *status, int verbose
486);
487/*****************************************************************************/
488
489/*****************************************************************************/
490/* bvls */
491extern int bvls(
492 int key, const /*unsigned*/ int m, const /*unsigned*/ int n,
493 double *a, double *b, double *bl, double *bu, double *x,
494 double *w, double *act, double *zz, int *istate, int *iter,
495 int verbose
496);
497extern int llsqWght(int N, int M, double **A, double *a, double *b, double *weight);
498extern int llsqWghtSquared(int N, int M, double **A, double *a, double *b, double *weight);
499/*****************************************************************************/
500
501/*****************************************************************************/
502/* constraints */
503extern int modelCheckParameters(
504 int par_nr, double *lower_p, double *upper_p, double *test_p,
505 double *accept_p, double *penalty
506);
507extern int modelCheckLimits(
508 int par_nr, double *lower_p, double *upper_p, double *test_p
509);
510extern int fitExpDecayNNLS(
511 double *x, double *y, int n, double fittime, double kmin, double kmax,
512 int pnr, double *a, double *k, int *fnr, int verbose
513);
514/*****************************************************************************/
515
516/*****************************************************************************/
517/* gaussdev */
518
520extern long int GAUSSDEV_SEED;
521
522extern unsigned int drandSeed(short int seed);
523extern double gaussdev();
524extern double gaussdev2();
525extern void init_gaussdev();
526extern double drand();
527extern int rand_range(
528 int nr, double *d, double low, double up, int type
529);
530/*****************************************************************************/
531
532/*****************************************************************************/
533/* hholder */
534extern double householder_transform(double *v, int N);
535extern int householder_hm(
536 double tau, double *vector, double **matrix, int rowNr, int columnNr
537);
538extern int householder_hv(
539 double tau, int size, double *v, double *w
540);
541extern double householder_norm(double *v, int size);
542/*****************************************************************************/
543
544/*****************************************************************************/
545/* integr */
546
547extern int interpolate(
548 double *x, double *y, int nr,
549 double *newx, double *newy, double *newyi, double *newyii, int newnr
550);
551extern int finterpolate(
552 float *x, float *y, int nr,
553 float *newx, float *newy, float *newyi, float *newyii, int newnr
554);
555extern int integrate(
556 double *x, double *y, int nr,
557 double *yi
558);
559extern int fintegrate(
560 float *x, float *y, int nr,
561 float *yi
562);
563extern int petintegrate(
564 double *x1, double *x2, double *y, int nr,
565 double *newyi, double *newyii
566);
567extern int fpetintegrate(
568 float *x1, float *x2, float *y, int nr,
569 float *newyi, float *newyii
570);
571extern int interpolate4pet(
572 double *x, double *y, int nr,
573 double *newx1, double *newx2,
574 double *newy, double *newyi, double *newyii, int newnr
575);
576extern int finterpolate4pet(
577 float *x, float *y, int nr,
578 float *newx1, float *newx2,
579 float *newy, float *newyi, float *newyii, int newnr
580);
581extern int petintegral(
582 double *x1, double *x2, double *y, int nr,
583 double *ie, double *iie
584);
585extern int fpetintegral(
586 float *x1, float *x2, float *y, int nr,
587 float *ie, float *iie
588);
589extern int petintegrate2fe(
590 double *x1, double *x2, double *y, int nr,
591 double *e, double *ie, double *iie
592);
593extern int fpetintegrate2fe(
594 float *x1, float *x2, float *y, int nr,
595 float *e, float *ie, float *iie
596);
597/*****************************************************************************/
598
599/*****************************************************************************/
600/* llsqwt */
601
602extern int llsqwt(
603 double *x, double *y, int n, double *wx, double *wy, double tol, double *w,
604 double *ic, double *slope, double *nwss, double *sic, double *sslope,
605 double *cx, double *cy
606);
607extern int best_llsqwt(
608 double *x, double *y, double *wx, double *wy, int nr, int min_nr, int mode,
609 double *slope, double *ic, double *nwss, double *sslope, double *sic,
610 double *cx, double *cy, int *bnr
611);
612extern int llsqperp(double *x, double *y, int nr,
613 double *slope, double *ic, double *ssd
614);
615extern int llsqperp3(double *x, double *y, int nr,
616 double *slope, double *ic, double *ssd
617);
618extern int quadratic(double a, double b, double c, double *m1, double *m2);
619extern int medianline(double *x, double *y, int nr, double *slope, double *ic);
620/*****************************************************************************/
621
622/*****************************************************************************/
623/* lms */
624extern double least_median_of_squares(
625 double *data, int n
626);
627/*****************************************************************************/
628
629/*****************************************************************************/
630/* lts */
632#ifndef CHI2INV_1
633#define CHI2INV_1 0.45493642311957
634#endif
636
637extern int least_trimmed_square(
638 double data[], long int n, double *mean, double *variance
639);
640/*****************************************************************************/
641
642/*****************************************************************************/
643/* median */
644extern double d_kth_smallest(double *data, int n, int k);
645extern double dmedian(double *data, int n);
646extern double dmean(double *data, int n, double *sd);
647extern double dmean_nan(double *data, int n, double *sd, int *vn);
648/*****************************************************************************/
649
650/*****************************************************************************/
651/* mestim */
652extern double mEstim(
653 double *data, int nr, int iterNr, double cutoff
654);
655extern double huber(
656 double x, double b
657);
658/*****************************************************************************/
659
660/*****************************************************************************/
661/* mtga */
662
664#define MTGA_BEST_MIN_NR 5
665
679
681typedef enum {
682 PRESET, EXCLUDE_BEGIN, EXCLUDE_END
684
685extern int patlak_data(
686 int data_nr, double *i, double *ii, double *c, double *x, double *y
687);
688extern int logan_data(
689 int data_nr, double *i, double *ii, double *c, double *ci,
690 double k2, double *x, double *y
691);
692extern int mtga_best_perp(
693 double *x, double *y, int nr,
694 double *slope, double *ic, double *ssd, int *fnr
695);
696/*****************************************************************************/
697
698/*****************************************************************************/
699/* nnls */
700extern int nnls(
701 double **a, int m, int n, double *b, double *x,
702 double *rnorm, double *w, double *zz, int *index
703);
704extern int nnlsWght(
705 int N, int M, double **A, double *b, double *weight
706);
707extern int nnlsWghtSquared(
708 int N, int M, double **A, double *b, double *sweight
709);
710/*****************************************************************************/
711
712/*****************************************************************************/
713/* normaldistr */
714extern double ndtr(double a);
715extern double normal_pvalue_2(double x);
716extern double normal_pvalue_1(double x);
717/*****************************************************************************/
718
719/*****************************************************************************/
720/* pearson */
721
722extern int pearson(
723 double *x, double *y, int nr,
724 double *k, double *kSD, double *b, double *bSD, double *r, double *ySD
725);
726extern int pearson2(
727 double *x, double *y, char *is, int nr,
728 double *k, double *kSD, double *b, double *bSD, double *r, double *ySD
729);
730extern int pearson3(
731 double *x, double *y, int nr,
732 double *k, double *kSD, double *b, double *bSD, double *r, double *ySD
733);
734extern int pearson4(
735 double *x, double *y, int nr, double start, double end,
736 double *k, double *kSD, double *b, double *bSD, double *r, double *ySD
737);
738extern int best_pearson(
739 double *x, double *y, int nr, int min_nr, int *first, int *last,
740 double *k, double *kSD, double *b, double *bSD, double *r, double *ySD
741);
742extern int mean(
743 double *x, double *y, int nr,
744 double *xmean, double *xsd, double *ymean, double *ysd
745);
746extern int regr_line(
747 double *x, double *y, int n, double *m, double *c
748);
749extern int highest_slope(
750 double *x, double *y, int n, int slope_n,
751 double *m, double *c, double *xi, double *xh
752);
753extern int highest_slope_after(
754 double *x, double *y, int n, int slope_n,
755 double x_start, double *m, double *c, double *xi, double *xh
756);
757/*****************************************************************************/
758
759/*****************************************************************************/
760/* powell */
762extern int POWELL_LINMIN_MAXIT;
764
765extern int powell(double *p, double *delta, int parNr, double ftol, int *iterNr,
766 double *fret, double (*_fun)(int, double*, void*), void *fundata, int verbose
767);
768/*****************************************************************************/
769
770/*****************************************************************************/
771/* qr */
772extern int qrLSQ(
773 double **mat, double *rhs, double *sol,
774 const unsigned int rows, const unsigned int cols, double *r2
775);
776extern int qr(
777 double **A, int m, int n, double *B, double *X, double *rnorm,
778 double *tau, double *res, double **wws, double *ws
779);
780extern int qr_decomp(
781 double **a, int M, int N, double *tau, double **cchain, double *chain
782);
783extern int qr_solve(
784 double **QR, int M, int N, double *tau, double *b, double *x,
785 double *residual, double *resNorm, double **cchain, double *chain
786);
787extern int qr_weight(
788 int N, int M, double **A, double *b, double *weight, double *ws
789);
790extern int qrLH(
791 const unsigned int m, const unsigned int n,
792 double *a, double *b, double *x, double *r2
793);
794/*****************************************************************************/
795
796/*****************************************************************************/
797/* runs_test */
798extern int runs_test(
799 double *data1, double *data2, int N, double alpha, double *p
800);
801extern int residuals(
802 double *d1, double *d2, int Nr, int *Rnr, int *Nminus, int *Nplus
803);
804extern int mrl_between_tacs(
805 double y1[], double y2[], int n
806);
807/*****************************************************************************/
808
809/*****************************************************************************/
810/* shuffle */
811extern void random_shuffle(int *array, int n);
812extern void randperm(int *array, int n, int a);
813/*****************************************************************************/
814
815/*****************************************************************************/
816/* simplex */
817
818extern double simplex(
819 double (*_fun)(double*), int parNr, double *par, double *delta,
820 double maxerr, int maxiter, int verbose
821);
822/*****************************************************************************/
823
824/*****************************************************************************/
825/* simulate */
826/*****************************************************************************/
827extern int simC3s(
828 double *t, double *ca, int nr, double k1, double k2,
829 double k3, double k4, double k5, double k6,
830 double *ct, double *cta, double *ctb, double *ctc
831);
832extern int simC3p(
833 double *t, double *ca, int nr, double k1, double k2,
834 double k3, double k4, double k5, double k6,
835 double *ct, double *cta, double *ctb, double *ctc
836);
837extern int simC3vs(
838 double *t, double *ca, double *cb, int nr,
839 double k1, double k2, double k3, double k4, double k5, double k6,
840 double f, double vb, double fa,
841 double *cpet, double *cta, double *ctb, double *ctc,
842 double *ctab, double *ctvb
843);
844extern int simC3vp(
845 double *t, double *ca, double *cb, int nr,
846 double k1, double k2, double k3, double k4, double k5, double k6,
847 double f, double vb, double fa,
848 double *cpet, double *cta, double *ctb, double *ctc,
849 double *ctab, double *ctvb
850);
851extern int simC2l(
852 double *t, double *ca, int nr, double k1, double k2,
853 double k3, double kLoss, double *ct, double *cta, double *ctb
854);
855extern int simC2vl(
856 double *t, double *ca, double *cb, int nr,
857 double k1, double k2, double k3, double kL,
858 double f, double vb, double fa,
859 double *cpet, double *cta, double *ctb,
860 double *ctab, double *ctvb
861);
862extern int simC3vpKLoss(
863 double *t, double *ca, double *cb, int nr,
864 double k1, double k2, double k3, double k4, double k5, double k6,
865 double kLoss, double f, double vb, double fa,
866 double *cpet, double *cta, double *ctb, double *ctc,
867 double *ctab, double *ctvb
868);
869extern int simRTCM(
870 double *t, double *cr, int nr, double R1, double k2,
871 double k3, double k4, double *ct, double *cta, double *ctb
872);
873extern int simSRTM(
874 double *t, double *cr, int nr, double R1, double k2,
875 double BP, double *ct
876);
877extern int simTRTM(
878 double *t, double *cr, int nr, double R1, double k2,
879 double k3, double *ct
880);
881extern int simHuangmet(
882 double *t, double *ctot, int nr,
883 double k01, double k12, double k21, double k03, double k34, double k43,
884 double *c0, double *c1, double *c3
885);
886extern int simTPCMOD0009c(
887 double *t, double *ctot, int nr, double km, double k1m,
888 double k2m, double k3m, double k4m, double *ca, double *cm
889);
890extern int simMBF(
891 double *t, double *ci, int nr, double k1, double k2, double Vfit, double *ct
892);
893extern int simC1(
894 double *t, double *ca, int nr, double k1, double k2, double *ct
895);
896extern int simC3DIvs(
897 double *t, double *ca1, double *ca2, double *cb, int nr,
898 double k1, double k2, double k3, double k4, double k5, double k6,
899 double k1b, double k2b, double f, double vb, double fa,
900 double *scpet, double *sct1, double *sct2, double *sct3, double *sct1b,
901 double *sctab, double *sctvb
902);
903extern int simC4DIvp(
904 double *t, double *ca1, double *ca2, double *cb, int nr,
905 double k1, double k2, double k3, double k4, double k5, double k6, double k7,
906 double km, double k1b, double k2b, double f, double vb, double fa,
907 double *scpet, double *sct1, double *sct2, double *sct3,
908 double *sct1b, double *sctab, double *sctvb,
909 int verbose
910);
911extern int simC4DIvs(
912 double *t, double *ca1, double *ca2, double *cb, int nr,
913 double k1, double k2, double k3, double k4, double k5, double k6, double k7,
914 double km, double k1b, double k2b, double f, double vb, double fa,
915 double *scpet, double *sct1, double *sct2, double *sct3,
916 double *sct1b, double *sctab, double *sctvb,
917 int verbose
918);
919extern int simDispersion(
920 double *x, double *y, int n,
921 double tau1, double tau2, double *tmp
922);
923extern int simOxygen(
924 double *t, double *ca1, double *ca2, double *ca1i, double *ca2i, const int n,
925 const double k1a, const double k2a, const double km,
926 const double k1b, const double k2b,
927 const double vb, const double fa,
928 double *scpet, double *sct1, double *sct2, double *sctab,
929 double *sctvb1, double *sctvb2, double *scvb1, double *scvb2,
930 const int verbose
931);
932
933
935/* Deprecated functions. Please don't use these any more */
936#define autointerpolateDFT dftAutointerpolate
937#define c3sSIM simC3s
938#define c3pSIM simC3p
939#define c3vsSIM simC3vs
940#define c3vpSIM simC3vp
941#define c2lSIM simC2l
942#define c2vlSIM simC2vl
943#define rtcmSIM simRTCM
944#define srtmSIM simSRTM
945#define trtmSIM simTRTM
946#define sim_dispersion simDispersion
948/*****************************************************************************/
949
950/*****************************************************************************/
951/* o2 */
952
954#define DEFAULT_SAO2 0.97
956#define DEFAULT_P50HB 3.6
958#define DEFAULT_P50MB 0.319
960#define DEFAULT_NHB 2.7
962#define DEFAULT_CHB 150.0
964#define DEFAULT_CMB 4.7
965
966extern double mo2k1k2(
967 const double OER, const double SaO2, const double p50Hb, const double p50Mb,
968 const double nHb, const double cHb, const double cMb,
969 const int verbose
970);
971extern double mo2pO2(
972 const double OER, const double K1k2, const double SaO2, const double p50Mb,
973 const double cHb, const double cMb,
974 const int verbose
975);
976/*****************************************************************************/
977
978/*****************************************************************************/
979/* tgo */
981extern int TGO_SQUARED_TRANSF;
983extern int TGO_LOCAL_INSIDE;
985extern int TGO_LOCAL_OPT;
986
988typedef struct {
992 double fvalue;
994 double par[MAX_PARAMS];
996 double delta[MAX_PARAMS]; // added by VO 2011-11-25
998 double fvalrange; // added by VO 2011-11-25
999} TGO_POINT;
1000
1001extern int tgo(
1002 double *lowlim, double *uplim, double (*objf)(int, double*, void*),
1003 void *objfData, int dim, int neighNr, double *fmin, double *gmin,
1004 int samNr, int tgoNr, int verbose
1005);
1006extern void tgoRandomParameters(
1007 TGO_POINT *p, int parNr, int sNr,
1008 double *low, double *up
1009);
1010extern void tgoRandomParametersST(
1011 TGO_POINT *p, int parNr, int sNr,
1012 double *low, double *up
1013);
1014/*****************************************************************************/
1015
1016/*****************************************************************************/
1017/* nlopt1d */
1018extern int nlopt1D(
1019 double (*_fun)(double, void*), void *_fundata,
1020 double x, double xl, double xu, double delta, double tol, const int maxeval,
1021 double *nx, double *nf, int verbose
1022);
1023/*****************************************************************************/
1024
1025/*****************************************************************************/
1026#endif // _LIBTPCMODEL_H
Header file for libtpcmisc.
int llsqperp3(double *x, double *y, int nr, double *slope, double *ic, double *ssd)
Definition llsqwt.c:453
int simTRTM(double *t, double *cr, int nr, double R1, double k2, double k3, double *ct)
Definition simulate.c:986
int nnlsWghtSquared(int N, int M, double **A, double *b, double *sweight)
Definition nnls.c:303
int bootstrap(int iterNr, double *cLim1, double *cLim2, double *SD, double *parameter, double *lowlim, double *uplim, int frameNr, double *origTac, double *fitTac, double *bsTAC, int parNr, double *weight, double(*objf)(int, double *, void *), char *status, int verbose)
Definition bootstrap.c:55
void randperm(int *array, int n, int a)
Definition shuffle.c:29
int simC3vp(double *t, double *ca, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double f, double vb, double fa, double *cpet, double *cta, double *ctb, double *ctc, double *ctab, double *ctvb)
Definition simulate.c:373
double drand()
Definition gaussdev.c:142
int fpetintegrate(float *x1, float *x2, float *y, int nr, float *newyi, float *newyii)
Calculates integrals of PET data at frame end times. Float version of petintegrate().
Definition integr.c:418
double dmean_nan(double *data, int n, double *sd, int *vn)
Definition median.c:104
void tgoRandomParameters(TGO_POINT *p, int parNr, int sNr, double *low, double *up)
Definition tgo.c:533
int simC4DIvp(double *t, double *ca1, double *ca2, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double k7, double km, double k1b, double k2b, double f, double vb, double fa, double *scpet, double *sct1, double *sct2, double *sct3, double *sct1b, double *sctab, double *sctvb, int verbose)
Definition simulate.c:1533
int highest_slope_after(double *x, double *y, int n, int slope_n, double x_start, double *m, double *c, double *xi, double *xh)
Definition pearson.c:475
double gaussdev2()
Definition gaussdev.c:112
int residuals(double *d1, double *d2, int Nr, int *Rnr, int *Nminus, int *Nplus)
Definition runs_test.c:56
#define TPCCLIB_MERTWI_NN
Definition libtpcmodel.h:41
bobyqa_result bobyqb(bobyqa_data *bdata)
Definition bobyqa.c:1622
uint64_t mertwiRandomInt64(MERTWI *mt)
Generate a random number on [0, 2^64-1]-interval using Mersenne Twister MT19937.
Definition mertwi.c:152
char * bobyqa_rc(bobyqa_result rc)
Definition bobyqa.c:381
int fintegrate(float *x, float *y, int nr, float *yi)
float version of integrate().
Definition integr.c:300
int simTPCMOD0009c(double *t, double *ctot, int nr, double km, double k1m, double k2m, double k3m, double k4m, double *ca, double *cm)
Definition simulate.c:1165
int llsqWghtSquared(int N, int M, double **A, double *a, double *b, double *weight)
Definition bvls.c:474
int simOxygen(double *t, double *ca1, double *ca2, double *ca1i, double *ca2i, const int n, const double k1a, const double k2a, const double km, const double k1b, const double k2b, const double vb, const double fa, double *scpet, double *sct1, double *sct2, double *sctab, double *sctvb1, double *sctvb2, double *scvb1, double *scvb2, const int verbose)
Definition simulate.c:1978
double aicWeightedAvg(double *w, double *p, int n)
Definition aic.c:108
int petintegral(double *x1, double *x2, double *y, int nr, double *ie, double *iie)
Integrate PET TAC data to frame mid times.
Definition integr.c:771
void tgoRandomParametersST(TGO_POINT *p, int parNr, int sNr, double *low, double *up)
Definition tgo.c:564
void bobyqa_print(bobyqa_data *bdata, int sw, FILE *fp)
Definition bobyqa.c:640
int highest_slope(double *x, double *y, int n, int slope_n, double *m, double *c, double *xi, double *xh)
Definition pearson.c:424
int simHuangmet(double *t, double *ctot, int nr, double k01, double k12, double k21, double k03, double k34, double k43, double *c0, double *c1, double *c3)
Definition simulate.c:1054
bobyqa_result bobyqa_free_memory(bobyqa_data *bdata)
Definition bobyqa.c:592
double simplex(double(*_fun)(double *), int parNr, double *par, double *delta, double maxerr, int maxiter, int verbose)
Definition simplex.c:27
int fpetintegrate2fe(float *x1, float *x2, float *y, int nr, float *e, float *ie, float *iie)
Integrate PET TAC data to frame end times. Float version of petintegrate2fe().
Definition integr.c:974
int simC3vs(double *t, double *ca, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double f, double vb, double fa, double *cpet, double *cta, double *ctb, double *ctc, double *ctab, double *ctvb)
Definition simulate.c:243
int runs_test(double *data1, double *data2, int N, double alpha, double *p)
Definition runs_test.c:12
int aicWeights(double *aic, double *w, int n)
Definition aic.c:74
double mo2pO2(const double OER, const double K1k2, const double SaO2, const double p50Mb, const double cHb, const double cMb, const int verbose)
Definition o2.c:83
int qrLH(const unsigned int m, const unsigned int n, double *a, double *b, double *x, double *r2)
Solve over-determined least-squares problem A x ~ b using successive Householder rotations.
Definition qr.c:633
void mertwiInitWithSeed64(MERTWI *mt, uint64_t seed)
Initialize the state vector mt[] inside data struct for Mersenne Twister MT19937 pseudorandom number ...
Definition mertwi.c:91
int medianline(double *x, double *y, int nr, double *slope, double *ic)
Definition llsqwt.c:533
int llsqperp(double *x, double *y, int nr, double *slope, double *ic, double *ssd)
Definition llsqwt.c:382
int tgo(double *lowlim, double *uplim, double(*objf)(int, double *, void *), void *objfData, int dim, int neighNr, double *fmin, double *gmin, int samNr, int tgoNr, int verbose)
Definition tgo.c:39
int TGO_LOCAL_INSIDE
Definition tgo.c:29
double huber(double x, double b)
Definition mestim.c:53
int nnls(double **a, int m, int n, double *b, double *x, double *rnorm, double *w, double *zz, int *index)
Definition nnls.c:38
int llsqwt(double *x, double *y, int n, double *wx, double *wy, double tol, double *w, double *ic, double *slope, double *nwss, double *sic, double *sslope, double *cx, double *cy)
Definition llsqwt.c:48
void random_shuffle(int *array, int n)
Definition shuffle.c:13
int petintegrate(double *x1, double *x2, double *y, int nr, double *newyi, double *newyii)
Definition integr.c:334
double mo2k1k2(const double OER, const double SaO2, const double p50Hb, const double p50Mb, const double nHb, const double cHb, const double cMb, const int verbose)
Calculates K1/k2 ratio for [O-15]O2 in muscle, based on OER.
Definition o2.c:29
double mertwiRandomDouble1(MERTWI *mt)
Generate a 64-bit double precision floating point pseudorandom number in the range of [0,...
Definition mertwi.c:218
int finterpolate4pet(float *x, float *y, int nr, float *newx1, float *newx2, float *newy, float *newyi, float *newyii, int newnr)
Interpolate and integrate TAC to PET frames. Float version of interpolate4pet().
Definition integr.c:646
double mEstim(double *data, int nr, int iterNr, double cutoff)
Definition mestim.c:18
int parFreeNr(const int n, double *pLower, double *pUpper)
Calculate the number of free parameters.
Definition aic.c:50
int simDispersion(double *x, double *y, int n, double tau1, double tau2, double *tmp)
Definition simulate.c:1911
int mrl_between_tacs(double y1[], double y2[], int n)
Definition runs_test.c:103
int fitExpDecayNNLS(double *x, double *y, int n, double fittime, double kmin, double kmax, int pnr, double *a, double *k, int *fnr, int verbose)
Estimate initial values for sum of exponentials to be fitted on decaying x,y-data.
void mertwiInitByArray64(MERTWI *mt, uint64_t init_key[], uint64_t key_length)
Initialize the state vector mt[] inside data struct for Mersenne Twister MT19937 pseudorandom number ...
Definition mertwi.c:111
bobyqa_result bobyqa(int n, int npt, double *x, const double *xl, const double *xu, const double *dx, const double rhoend, double xtol_rel, double minf_max, double ftol_rel, double ftol_abs, int maxeval, int *nevals, double *minf, double(*f)(int n, double *x, void *objf_data), void *objf_data, double *working_space, int verbose)
Definition bobyqa.c:40
double householder_norm(double *v, int size)
Definition hholder.c:136
int best_llsqwt(double *x, double *y, double *wx, double *wy, int nr, int min_nr, int mode, double *slope, double *ic, double *nwss, double *sslope, double *sic, double *cx, double *cy, int *bnr)
Definition llsqwt.c:294
int petintegrate2fe(double *x1, double *x2, double *y, int nr, double *e, double *ie, double *iie)
Integrate PET TAC data to frame end times.
Definition integr.c:905
int simC4DIvs(double *t, double *ca1, double *ca2, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double k7, double km, double k1b, double k2b, double f, double vb, double fa, double *scpet, double *sct1, double *sct2, double *sct3, double *sct1b, double *sctab, double *sctvb, int verbose)
Definition simulate.c:1724
int nnlsWght(int N, int M, double **A, double *b, double *weight)
Definition nnls.c:254
int qr_weight(int N, int M, double **A, double *b, double *weight, double *ws)
Definition qr.c:576
int patlak_data(int data_nr, double *i, double *ii, double *c, double *x, double *y)
Definition mtga.c:22
int bvls(int key, const int m, const int n, double *a, double *b, double *bl, double *bu, double *x, double *w, double *act, double *zz, int *istate, int *iter, int verbose)
Bounded-value least-squares method to solve the linear problem A x ~ b , subject to limit1 <= x <= li...
Definition bvls.c:24
double gaussdev()
Definition gaussdev.c:30
double bobyqa_x_funcval(bobyqa_data *bdata, double *x)
Definition bobyqa.c:751
double(* bobyqa_func)(int n, const double *x, void *func_data)
Definition libtpcmodel.h:92
int llsqWght(int N, int M, double **A, double *a, double *b, double *weight)
Definition bvls.c:419
double normal_pvalue_1(double x)
Definition normaldistr.c:60
int TGO_LOCAL_OPT
Definition tgo.c:31
int pearson4(double *x, double *y, int nr, double start, double end, double *k, double *kSD, double *b, double *bSD, double *r, double *ySD)
Calculate slope and intercept of a line and Pearson's correlation coefficient.
Definition pearson.c:198
linefit_range
int simSRTM(double *t, double *cr, int nr, double R1, double k2, double BP, double *ct)
Definition simulate.c:919
int modelCheckParameters(int par_nr, double *lower_p, double *upper_p, double *test_p, double *accept_p, double *penalty)
Definition constraints.c:15
int nlopt1D(double(*_fun)(double, void *), void *_fundata, double x, double xl, double xu, double delta, double tol, const int maxeval, double *nx, double *nf, int verbose)
Definition nlopt1d.c:14
int TGO_SQUARED_TRANSF
Definition tgo.c:27
int qrLSQ(double **mat, double *rhs, double *sol, const unsigned int rows, const unsigned int cols, double *r2)
QR least-squares solving routine.
Definition qr.c:54
void init_gaussdev()
Definition gaussdev.c:92
int simC1(double *t, double *ca, int nr, double k1, double k2, double *ct)
Definition simulate.c:1317
double least_median_of_squares(double *data, int n)
Fit a constant (horisontal straight line) to the data by minimising the median of squared residuals.
Definition lms.c:21
int regr_line(double *x, double *y, int n, double *m, double *c)
Definition pearson.c:387
#define MAX_PARAMS
Definition libtpcmodel.h:35
bobyqa_result bobyqa_set_memory(int n, int fitted_n, int npt, bobyqa_data *bdata, double *wm)
Definition bobyqa.c:501
int modelCheckLimits(int par_nr, double *lower_p, double *upper_p, double *test_p)
Definition constraints.c:59
int simRTCM(double *t, double *cr, int nr, double R1, double k2, double k3, double k4, double *ct, double *cta, double *ctb)
Definition simulate.c:835
bobyqa_result bobyqa_reset_memory(bobyqa_data *bdata)
Definition bobyqa.c:614
uint64_t mertwiSeed64(void)
Make uint64_t seed for pseudorandom number generators.
Definition mertwi.c:72
double aicModel(double *w, int n)
Definition aic.c:132
int integrate(double *x, double *y, int nr, double *yi)
Definition integr.c:271
int householder_hv(double tau, int size, double *v, double *w)
Definition hholder.c:107
double dmean(double *data, int n, double *sd)
Definition median.c:73
int bobyqa_working_memory_size(int n, int fitted_n, int npt, bobyqa_data *bdata)
Definition bobyqa.c:441
linefit_method
@ LLSQWT
@ PEARSON
@ PERP
@ MEDIAN
void bobyqa_xfull(bobyqa_data *bdata)
Definition bobyqa.c:769
int simMBF(double *t, double *ci, int nr, double k1, double k2, double Vfit, double *ct)
Definition simulate.c:1253
double dmedian(double *data, int n)
Definition median.c:48
int simC3vpKLoss(double *t, double *ca, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double kLoss, double f, double vb, double fa, double *cpet, double *cta, double *ctb, double *ctc, double *ctab, double *ctvb)
Definition simulate.c:707
double aicSS(double ss, const int n, const int k)
Definition aic.c:20
double mertwiRandomDouble2(MERTWI *mt)
Generate a 64-bit double precision floating point pseudorandom number in the range of [0,...
Definition mertwi.c:235
int householder_hm(double tau, double *vector, double **matrix, int rowNr, int columnNr)
Definition hholder.c:68
double ndtr(double a)
Definition normaldistr.c:17
int pearson2(double *x, double *y, char *is, int nr, double *k, double *kSD, double *b, double *bSD, double *r, double *ySD)
Definition pearson.c:109
int pearson(double *x, double *y, int nr, double *k, double *kSD, double *b, double *bSD, double *r, double *ySD)
Definition pearson.c:14
int qr_solve(double **QR, int M, int N, double *tau, double *b, double *x, double *residual, double *resNorm, double **cchain, double *chain)
Definition qr.c:492
int rand_range(int nr, double *d, double low, double up, int type)
Definition gaussdev.c:159
void mertwiInit(MERTWI *mt)
Definition mertwi.c:23
int pearson3(double *x, double *y, int nr, double *k, double *kSD, double *b, double *bSD, double *r, double *ySD)
Definition pearson.c:154
bobyqa_result
Definition libtpcmodel.h:77
double householder_transform(double *v, int N)
Definition hholder.c:23
int powell(double *p, double *delta, int parNr, double ftol, int *iterNr, double *fret, double(*_fun)(int, double *, void *), void *fundata, int verbose)
Definition powell.c:43
int simC2vl(double *t, double *ca, double *cb, int nr, double k1, double k2, double k3, double kL, double f, double vb, double fa, double *cpet, double *cta, double *ctb, double *ctab, double *ctvb)
Definition simulate.c:592
int64_t mertwiRandomInt63(MERTWI *mt)
Generate a random number on [0, 2^63-1]-interval using Mersenne Twister MT19937.
Definition mertwi.c:197
double mertwiRandomDouble3(MERTWI *mt)
Generate a 64-bit double precision floating point pseudorandom number in the range of (0,...
Definition mertwi.c:252
int mtga_best_perp(double *x, double *y, int nr, double *slope, double *ic, double *ssd, int *fnr)
Definition mtga.c:141
bobyqa_result bobyqa_set_optimization(int full_n, double *x, const double *dx, const double *xl, const double *xu, const double rhoend, double xtol_rel, double minf_max, double ftol_rel, double ftol_abs, int maxeval, double(*f)(int n, double *x, void *objf_data), void *objf_data, int verbose, bobyqa_data *bdata)
Definition bobyqa.c:781
int qr(double **A, int m, int n, double *B, double *X, double *rnorm, double *tau, double *res, double **wws, double *ws)
Definition qr.c:346
uint32_t mertwiSeed32(void)
Make uint32_t seed for pseudorandom number generators.
Definition mertwi.c:43
int fpetintegral(float *x1, float *x2, float *y, int nr, float *ie, float *iie)
Integrate PET TAC data to frame mid times. Float version of petintegral().
Definition integr.c:838
int bobyqa_minimize_single_parameter(bobyqa_data *bdata)
Definition bobyqa.c:210
double d_kth_smallest(double *data, int n, int k)
Definition median.c:15
int mean(double *x, double *y, int nr, double *xmean, double *xsd, double *ymean, double *ysd)
Definition pearson.c:341
int fixed_params(int n, const double *lower, const double *upper, const double *delta)
Definition bobyqa.c:418
int interpolate(double *x, double *y, int nr, double *newx, double *newy, double *newyi, double *newyii, int newnr)
Linear interpolation and integration.
Definition integr.c:28
int least_trimmed_square(double data[], long int n, double *mean, double *variance)
Definition lts.c:27
int finterpolate(float *x, float *y, int nr, float *newx, float *newy, float *newyi, float *newyii, int newnr)
float version of interpolate().
Definition integr.c:161
int simC3p(double *t, double *ca, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double *ct, double *cta, double *ctb, double *ctc)
Definition simulate.c:136
int best_pearson(double *x, double *y, int nr, int min_nr, int *first, int *last, double *k, double *kSD, double *b, double *bSD, double *r, double *ySD)
Definition pearson.c:252
int simC2l(double *t, double *ca, int nr, double k1, double k2, double k3, double kLoss, double *ct, double *cta, double *ctb)
Definition simulate.c:500
int simC3DIvs(double *t, double *ca1, double *ca2, double *cb, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double k1b, double k2b, double f, double vb, double fa, double *scpet, double *sct1, double *sct2, double *sct3, double *sct1b, double *sctab, double *sctvb)
Definition simulate.c:1387
long int GAUSSDEV_SEED
Definition gaussdev.c:7
unsigned int drandSeed(short int seed)
Make and optionally set the seed for rand(), drand, drandRange, and drandGaussian().
Definition gaussdev.c:63
int simC3s(double *t, double *ca, int nr, double k1, double k2, double k3, double k4, double k5, double k6, double *ct, double *cta, double *ctb, double *ctc)
Definition simulate.c:27
int quadratic(double a, double b, double c, double *m1, double *m2)
Definition llsqwt.c:490
int interpolate4pet(double *x, double *y, int nr, double *newx1, double *newx2, double *newy, double *newyi, double *newyii, int newnr)
Interpolate and integrate TAC to PET frames.
Definition integr.c:510
int qr_decomp(double **a, int M, int N, double *tau, double **cchain, double *chain)
Definition qr.c:427
double normal_pvalue_2(double x)
Definition normaldistr.c:43
int logan_data(int data_nr, double *i, double *ii, double *c, double *ci, double k2, double *x, double *y)
Definition mtga.c:81
double p50Mb
Definition o2.c:16
double nHb
Definition o2.c:18
double p50Hb
Definition o2.c:14
double cHb
Definition o2.c:20
double SaO2
Definition o2.c:12
double cMb
Definition o2.c:22
int POWELL_LINMIN_MAXIT
Definition powell.c:11
uint64_t mt[TPCCLIB_MERTWI_NN]
Definition libtpcmodel.h:58
uint64_t mti
Definition libtpcmodel.h:60
unsigned int m
Definition libtpcmodel.h:50
uint64_t lm
Definition libtpcmodel.h:56
uint64_t a
Definition libtpcmodel.h:52
uint64_t um
Definition libtpcmodel.h:54
unsigned int n
Definition libtpcmodel.h:48
double fvalrange
double fvalue
double * hcol
double * xnew
double cauchy
double * dtrial
double rhoend
double * wmptr
double * su
double biglsq
double distsq
double * xl
double * hs
double * zmat
double * gopt
double ftol_abs
double * xscale
double * xbase
double scaden
double * pq
double minf_max
double * xopt
double * fval
double * glag
double ftol_rel
void * objf_data
double rhobeg
double * w2npt
double * xbdi
double * bmat
double * x
double * lwmptr
double * wn
double * wndim
double * s
double * hred
double * gnew
double xoptsq
bobyqa_func objf
double * vlag
double * sl
double * xu
double * xfull
double * xalt
double * hq
double * xpt
double * ccstep