5#include "tpcclibConfig.h"
35 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
40 if(verbose>0) printf(
"%s():\n", __func__);
41 if(par==NULL || par->
tacNr<1 || par->
parNr<1) {
53 n=fprintf(fp,
"%-11.11s %s\n",
"FIT1", tmp);
62 fprintf(fp,
"Date:\t%s\n", tmp);
66 if(i>=0) fprintf(fp,
"Data file:\t%s\n", par->
h.
item[i].
value);
67 else fprintf(fp,
"Data file:\t\n");
72 if(i>=0) fprintf(fp,
"Study number:\t%s\n", par->
h.
item[i].
value);
76 if(i<0) i=
iftFindKey(&par->
h,
"calibration_unit", 0);
77 if(i>=0) fprintf(fp,
"Data unit:\t%s\n", par->
h.
item[i].
value);
78 else fprintf(fp,
"Data unit:\t\n");
83 if(i>=0) fprintf(fp,
"Time unit:\t%s\n", par->
h.
item[i].
value);
84 else fprintf(fp,
"Time unit:\t\n");
87 fprintf(fp,
"Nr of VOIs:\t%d\n", par->
tacNr);
90 fprintf(fp,
"%s %s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
91 "Region",
"Plane",
"Start",
"End",
"dataNr",
"WSS",
"parNr",
"Type",
"Parameters");
94 for(i=0; i<par->
tacNr; i++) {
96 if(strlen(par->
r[i].
name)>0) {
98 fprintf(fp,
"%s ", tmp);
100 fprintf(fp,
"%s ", tmp);
102 fprintf(fp,
"%s", tmp);
104 fprintf(fp,
"tac%d . .", 1+i);
107 fprintf(fp,
"\t%.3f\t%.3f\t%d\t%.2E\t%d\t%04d",
111 for(j=0; j<par->
parNr; j++) fprintf(fp,
"\t%.6E", par->
r[i].
p[j]);
142 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
149 if(csv==NULL || ift==NULL || csv->
row_nr<1 || csv->
col_nr<1) {
153 if(verbose>0) printf(
"%s()\n", __func__);
156 printf(
"\n CSV contents shown with separator ; \n\n");
159 printf(
"\n IFT contents \n\n");
165 char *cptr, tmp[256];
179 i=0;
if(verbose>2) printf(
"estimating parNr\n");
182 if(i>=0 && csv->
c[i].
col==0)
break;
185 if(i<0 || i==csv->nr) {
190 titlerow=csv->
c[i].
row;
if(verbose>3) printf(
"titlerow := %d\n", titlerow);
194 for(
int r=0; r<tacNr; r++) {
195 int n=
csvRowLength(csv, r+titlerow+1);
if(verbose>5) printf(
"n=%d at row %d\n", n, r+titlerow+1);
198 if(verbose>4) printf(
" initial_parNr := %d\n", parNr);
203 if(csv->
separator!=
' ') parNr-=7;
else parNr-=9;
205 printf(
" parNr := %d\n", parNr);
206 printf(
" tacNr := %d\n", tacNr);
208 if(parNr<1 || tacNr<1) {
216 statusSet(status, __func__, __FILE__, __LINE__, ret);
225 printf(
"ift->item[%d].value := '%s'\n", i, ift->
item[i].
value);
237 iftPut(&par->
h,
"program", tmp, 0, NULL);
262 for(i=0; i<parNr; i++) sprintf(par->
n[i].
name,
"p%d", 1+i);
265 ret=0;
if(verbose>2) {printf(
"reading individual parameter values...\n"); fflush(stdout);}
266 for(
int j=0; j<tacNr; j++) {
268 if(n>parNr) {ret++;
break;}
290 i++;
int tacParNr=atoi(
csvCell(csv, n, i));
297 for(k=0; k<tacParNr; k++) {
300 for(; k<parNr; k++) par->
r[j].
p[k]=nan(
"");
302 for(
int k=0; k<parNr; k++) {
316 for(tac=0; tac<par->
tacNr; tac++) {
319 strcmp(fnsp[i],
".")==0)
322 strcpy(par->
r[tac].
name, fnsp[0]);
323 if(strlen(fnsp[1]) || strlen(fnsp[2])) strcat(par->
r[tac].
name,
"_");
324 if(strlen(fnsp[1])) strcat(par->
r[tac].
name, fnsp[1]);
325 if(strlen(fnsp[2])) {strcat(par->
r[tac].
name,
"_"); strcat(par->
r[tac].
name, fnsp[2]);}
char * csvCell(CSV *csv, int row, int col)
int csvRowLength(CSV *csv, int row)
int csvSearchField(CSV *csv, const char *s, int start_index)
int csvWrite(CSV *csv, int regular, FILE *fp, TPCSTATUS *status)
double atofVerified(const char *s)
int iftPut(IFT *ift, const char *key, const char *value, char comment, TPCSTATUS *status)
int iftFindKey(IFT *ift, const char *key, int start_index)
int iftWrite(IFT *ift, FILE *fp, TPCSTATUS *status)
unsigned int modelOldId(const unsigned int i)
unsigned int modelOld2New(const unsigned int i)
int parAllocate(PAR *par, int parNr, int tacNr)
int parWriteFIT(PAR *par, FILE *fp, TPCSTATUS *status)
int parReadFIT(PAR *par, CSV *csv, IFT *ift, TPCSTATUS *status)
char * roinameSubpart(const char *roiname, const char *dlm, const unsigned int si, char *subpart, const unsigned int slen)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strnlen(const char *s, size_t n)
int strncpyCleanSpaces(char *s1, const char *s2, int maxlen)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
size_t strlcat(char *dst, const char *src, size_t dstsize)
IFT h
Optional (but often useful) header information.
char name[MAX_PARNAME_LEN+1]
char name[MAX_TACNAME_LEN+1]
int verbose
Verbose level, used by statusPrint() etc.
Header file for library libtpccsv.
Header file for library libtpcextensions.
#define MAX_TACNAME_LEN
Max length of TAC ID name (not including trailing zero)
@ UNIT_UNKNOWN
Unknown unit.
@ TPCERROR_FAIL
General error.
@ TPCERROR_INVALID_FORMAT
Invalid file format.
@ TPCERROR_UNSUPPORTED
Unsupported file type.
@ TPCERROR_NO_DATA
File contains no data.
@ TPCERROR_CANNOT_WRITE
Cannot write file.
int unitIdentify(const char *s)
Header file for library libtpcift.
Header file for libtpcmodels.
Header file for libtpcpar.
@ PAR_FORMAT_FIT
Function fit format of Turku PET Centre.