5#include "tpcclibConfig.h"
38 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
47 if(verbose>0) printf(
"%s()\n", __func__);
53 char scan_start_time[20];
56 int yy, mm, dd, h, m, s;
57 n=sscanf(scan_start_time,
"%d-%d-%d %d:%d:%d", &yy, &mm, &dd, &h, &m, &s);
59 sprintf(scan_start_time,
"%d/%d/%04d %02d:%02d:%02d", dd, mm, yy, h, m, s);
60 else strcpy(scan_start_time,
"1/1/1970 00:00:00");
62 strcpy(scan_start_time,
"1/1/1970 00:00:00");
76 n=fprintf(fp,
"%s %d %d 1 %s %s\n", scan_start_time, tac->
sampleNr, colNr, studynr,
isotope);
88 if(round(tac->
x1[fi])==round(tac->
x1[fi-1])) {req_decimals=1;
break;}
89 if(round(tac->
x2[fi])==round(tac->
x2[fi-1])) {req_decimals=1;
break;}
95 if(req_decimals==0) n=fprintf(fp,
"%.0f %.0f", tac->
x1[fi], tac->
x2[fi]);
96 else n=fprintf(fp,
"%.1f %.1f", tac->
x1[fi], tac->
x2[fi]);
97 if(n<3) {ret++;
break;}
98 for(
int ci=0; ci<tac->
tacNr; ci++) {
99 n=fprintf(fp,
" %.0f", tac->
c[ci].
y[fi]);
100 if(n<2) {ret++;
break;}
102 if(ret==0) fprintf(fp,
"\n");
else break;
144 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
145 if(verbose>0) {printf(
"%s(tac, csv, hdr, status)\n", __func__); fflush(stdout);}
160 if(verbose>2) {printf(
" checking that CSV contains SIF\n"); fflush(stdout);}
163 if(title_item_nr==1 && csv->
separator!=
' ') {
164 if(verbose>1) printf(
"title_item_nr := %d\n", title_item_nr);
165 if(verbose>2) {printf(
" SIF has not space character as column separator; fixing title line\n");}
167 char s1[128];
int n=0;
182 for(
int i=1+csv->
nr-n; i<csv->nr; i++) {
184 csv->
c[i].
row=0; csv->
c[i].
col=j; j++;
192 if(csv->
row_nr<2 || title_item_nr<5 ) {
193 if(verbose>1) {printf(
"title_item_nr := %d\n", title_item_nr);
csvList(csv, stdout);}
201 if(verbose>2) {printf(
" allocating memory\n"); fflush(stdout);}
203 statusSet(status, __func__, __FILE__, __LINE__, ret);
215 strcpy(tac->
c[0].
name,
"Prompts");
216 strcpy(tac->
c[1].
name,
"Randoms");
217 strcpy(tac->
c[2].
name,
"Trues");
220 if(verbose>2) {printf(
" reading SIF header\n"); fflush(stdout);}
222 char sif_scan_start_time[20];
226 strcpy(temp, csv->
c[0].
content); strcat(temp,
" ");
228 if(verbose>4) printf(
" datetime := '%s'\n", temp);
231 if(verbose>1) printf(
" invalid SIF date/time (%d).\n", ret);
232 else if(verbose>0) printf(
" invalid SIF date/time.\n");
238 printf(
" cell0 := '%s'\n", csv->
c[0].
content);
239 printf(
" cell1 := '%s'\n", csv->
c[1].
content);
245 if(verbose>1) printf(
"sif_scan_start_time := %s\n", sif_scan_start_time);
249 if(verbose>1) printf(
"sif_frame_nr := %d\n", frameNr);
250 if(frameNr<1 || frameNr>tac->
_sampleNr) {
259 if(verbose>1) printf(
"sif_col_nr := %d\n", colNr);
268 if(title_item_nr>5) {
270 if(strcmp(studynr,
".")==0) strcpy(studynr,
"");
271 if(verbose>2) printf(
"sif_studynr := %s\n", studynr);
275 if(title_item_nr>6) {
280 if(verbose>1) printf(
"sif_isotope := %s\n",
isotope);
283 if(verbose>2) {printf(
" reading SIF frames\n"); fflush(stdout);}
291 if(isnan(v)) {ret++;
break;}
else tac->
x1[fi]=v;
294 if(isnan(v)) {ret++;
break;}
else tac->
x2[fi]=v;
295 tac->
x[fi]=0.5*(tac->
x1[fi]+tac->
x2[fi]);
300 if(colNr<3)
continue;
303 if(isnan(v)) {ret++;
break;}
else tac->
c[0].
y[fi]=v;
304 if(colNr<4)
continue;
307 if(isnan(v)) {ret++;
break;}
else tac->
c[1].
y[fi]=v;
310 tac->
c[2].
y[fi]=tac->
c[0].
y[fi]-tac->
c[1].
y[fi];
315 if(isnan(v)) {ret++;
break;}
else tac->
c[2].
y[fi]=v;
333 if(!studynr[0] && hdr!=NULL) {
338 if(verbose>2) printf(
"sifhdr_studynr := %s\n", studynr);
343 if(verbose>3) printf(
"setting TAC studynr to '%s'\n", studynr);
356 if(verbose>4) {printf(
" %s() out\n", __func__); fflush(stdout);}
char * csvCell(CSV *csv, int row, int col)
int csvPutString(CSV *csv, const char *s, int newline)
int csvReorg(CSV *d, TPCSTATUS *status)
int csvRowLength(CSV *csv, int row)
int csvList(CSV *csv, FILE *fp)
int strDateTimeValid(const char *str, char *intdate)
double atofVerified(const char *s)
char * isotopeName(int isotope_code)
int isotopeIdentify(const char *isotope)
int tacWriteSIF(TAC *tac, FILE *fp, int extra, TPCSTATUS *status)
int tacReadSIF(TAC *tac, CSV *csv, IFT *hdr, TPCSTATUS *status)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
int strTokenNCpy(const char *s1, const char *s2, int i, char *s3, int count)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
char name[MAX_TACNAME_LEN+1]
IFT h
Optional (but often useful) header information.
int verbose
Verbose level, used by statusPrint() etc.
int tacAllocate(TAC *tac, int sampleNr, int tacNr)
int tacSetHeaderScanstarttime(IFT *h, const char *s)
int tacGetHeaderScanstarttime(IFT *h, char *s, TPCSTATUS *status)
int tacGetHeaderStudynr(IFT *h, char *s, TPCSTATUS *status)
int tacSetHeaderIsotope(IFT *h, const char *s)
int tacGetHeaderIsotope(IFT *h, char *s, TPCSTATUS *status)
int tacSetHeaderStudynr(IFT *h, const char *s)
int tacXUnitConvert(TAC *tac, const int u, TPCSTATUS *status)
Header file for library libtpccsv.
@ TPCERROR_INVALID_VALUE
Invalid value.
@ TPCERROR_FAIL
General error.
@ TPCERROR_INVALID_FORMAT
Invalid file format.
@ TPCERROR_NO_DATA
File contains no data.
@ TPCERROR_CANNOT_WRITE
Cannot write file.
#define MAX_STUDYNR_LEN
Define max study number length.
Header file for library libtpcift.
Header file for library libtpcisotope.
#define MAX_ISOTOPE_LEN
Max string length for PET isotope.
Header file for library libtpctac.
@ TAC_FORMAT_SIF
Scan information file.