8#include "tpcclibConfig.h"
22static char *info[] = {
23 "Converts blood-to-plasma (or optionally plasma-to-blood) ratio curve to",
24 "RBC-to-plasma (blood cell-to-plasma) curve using haematocrit (HCT),",
27 " Blood = HCT*RBC + (1-HCT)*Plasma ",
29 "HCT is normally between 0.40-0.51 in men and 0.36-0.47 in women.",
31 "Usage: @P [Options] bprfile HCT cprfile",
35 " Conversion is applied to plasma-to-blood ratio data.",
38 "See also: b2rbc, p2blood, b2plasma, taccalc, fit_bpr",
40 "Keywords: input, modelling, simulation, RBC, plasma, blood",
59int main(
int argc,
char **argv)
61 int ai, help=0, version=0, verbose=1;
63 char *cptr, bprfile[FILENAME_MAX], cprfile[FILENAME_MAX];
72 if(argc==1) {
tpcPrintUsage(argv[0], info, stderr);
return(1);}
73 bprfile[0]=cprfile[0]=(char)0;
76 for(ai=1; ai<argc; ai++)
if(*argv[ai]==
'-') {
79 if(strcasecmp(cptr,
"BPR")==0) {
81 }
else if(strcasecmp(cptr,
"PBR")==0) {
84 fprintf(stderr,
"Error: invalid option '%s'.\n", argv[ai]);
93 if(help==2) {
tpcHtmlUsage(argv[0], info,
"");
return(0);}
98 for(; ai<argc; ai++) {
100 strlcpy(bprfile, argv[ai], FILENAME_MAX);
continue;
103 if(HCT>1.0) HCT/=100.0;
104 if(HCT>0.0 && HCT<=1.0)
continue;
106 fprintf(stderr,
"Error: invalid HCT.\n");
108 }
else if(!cprfile[0]) {
109 strlcpy(cprfile, argv[ai], FILENAME_MAX);
continue;
111 fprintf(stderr,
"Error: too many arguments: '%s'.\n", argv[ai]);
117 fprintf(stderr,
"Error: missing command-line argument; use option --help\n");
123 for(ai=0; ai<argc; ai++)
124 printf(
"%s ", argv[ai]);
126 printf(
"bprfile := %s\n", bprfile);
127 printf(
"cprfile := %s\n", cprfile);
128 printf(
"HCT := %g\n", HCT);
129 printf(
"inmode := %d\n", inmode);
136 if(verbose) printf(
"reading %s\n", bprfile);
137 ret=
tacRead(&tac, bprfile, &status);
139 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
144 printf(
"tacNr := %d\n", tac.
tacNr);
145 printf(
"sampleNr := %d\n", tac.
sampleNr);
150 fprintf(stderr,
"Warning: only first ratio curve is used.\n");
160 if(isnan(tac.
c[0].
y[i]))
continue;
162 if(tac.
c[0].
y[i]<1.0E-100) tac.
c[0].
y[i]=0.0;
163 else tac.
c[0].
y[i]=1.0/tac.
c[0].
y[i];
165 tac.
c[0].
y[i]-=(1.0-HCT);
170 if(verbose>1) printf(
"writing %s\n", cprfile);
171 FILE *fp; fp=fopen(cprfile,
"w");
173 fprintf(stderr,
"Error: cannot open file for writing (%s)\n", cprfile);
179 fprintf(stderr,
"Error (%d): %s\n", ret,
errorMsg(status.
error));
182 if(verbose>=0) printf(
"RBC-to-plasma curve written in %s\n", cprfile);
int atofCheck(const char *s, double *v)
int tpcProcessStdOptions(const char *s, int *print_usage, int *print_version, int *verbose_level)
int tpcHtmlUsage(const char *program, char *text[], const char *path)
void tpcPrintBuild(const char *program, FILE *fp)
void tpcPrintUsage(const char *program, char *text[], FILE *fp)
void statusInit(TPCSTATUS *s)
char * errorMsg(tpcerror e)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
int verbose
Verbose level, used by statusPrint() etc.
tpcerror error
Error code.
int tacRead(TAC *d, const char *fname, TPCSTATUS *status)
char * tacFormattxt(tacformat c)
int tacWrite(TAC *tac, FILE *fp, tacformat format, int extra, TPCSTATUS *status)
int tacSortByTime(TAC *d, TPCSTATUS *status)
Header file for library libtpcextensions.
char * unitName(int unit_code)
Header file for library libtpcift.
Header file for libtpcli.
Header file for library libtpctac.
@ TAC_FORMAT_UNKNOWN
Unknown format.