36 {
37 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
38 if(tac==NULL) {
41 }
42 if(verbose>0) {printf("%s()\n", __func__); fflush(stdout);}
43
45
49 }
50
51 int ret=0;
52
53
54 if(strcasecmp(csv->
c[0].
content,
"directory")!=0 ||
55 strcasecmp(csv->
c[11].
content,
"group")!=0)
56 {
59 }
60
61
62 int maxFrameNr=0;
63 {
64 int fn;
65 char *cptr, *cptr2;
66 for(
int ri=1; ri<csv->
row_nr; ri++) {
67 cptr=
csvCell(csv, ri, 2);
if(cptr==NULL)
continue;
68 if(verbose>50) printf(" '%s'\n", cptr);
69 cptr2=strchr(cptr, '('); if(cptr2==NULL) continue;
70 fn=atoi(cptr2+1); if(fn>maxFrameNr) maxFrameNr=fn;
71 }
72 }
73 if(verbose>1) printf("maxFrameNr := %d\n", maxFrameNr);
74 if(maxFrameNr<1) {
77 }
78
79 int maxTacNr=(csv->
row_nr-1)/maxFrameNr;
80 if(verbose>1) printf("maxTacNr := %d\n", maxTacNr);
81 if(maxFrameNr<1) {
84 }
85
86
88 statusSet(status, __func__, __FILE__, __LINE__, ret);
91
92
93 ret=0;
94 for(
int i=1; i<csv->
row_nr; i++) {
95
96 char *cnum, *cslice, *cmean, *cpixel, *cgroup;
97 cnum=
csvCell(csv, i, 2);
if(cnum==NULL)
continue;
98 cslice=
csvCell(csv, i, 3);
if(cslice==NULL)
continue;
99 cmean=
csvCell(csv, i, 4);
if(cmean==NULL)
continue;
100 cpixel=
csvCell(csv, i, 9);
if(cpixel==NULL)
continue;
101 cgroup=
csvCell(csv, i, 11);
if(cgroup==NULL)
continue;
102
103 int slice;
105 if(ret!=0) {slice=-1; ret=0;}
106
107 if(slice>0 && grouponly!=0) continue;
108
109 char *cptr=strchr(cnum, '('); if(cptr==NULL) continue;
110 int fn=atoi(cptr+1); if(fn<1 || fn>maxFrameNr) {ret=1; break;}
112 if(slice<1) {
113
114 if(
strnlen(cgroup, 2)<1) {ret=2;
break;}
116 } else {
117
118 int roinr=atoi(cnum); if(roinr<1) {ret=3; break;}
119
121 sprintf(tacname, "%s_roi%d__pl%d", cgroup, roinr, slice);
122 } else {
123
124 sprintf(tacname, "roi%d__pl%d", roinr, slice);
125 }
126 }
127
128 int pxlnr;
129 ret=
atoiCheck(cpixel, &pxlnr);
if(ret) {pxlnr=0; ret=0;}
130
132 if(verbose>20) printf("tacname='%s' pxlnr=%d fn=%d conc=%g\n", tacname, pxlnr, fn, conc);
133
134 int ri;
135 for(ri=0; ri<tac->
tacNr; ri++) {
137 break;
138
139 }
140
141 if(ri>=maxTacNr) {ret=4; break;}
142
143 tac->
c[ri].
y[fn-1]=conc;
144
146 strcpy(tac->
c[ri].
name, tacname);
147 tac->
c[ri].
size=(double)pxlnr;
149 }
150
152 }
153 if(ret) {
154 if(verbose>1) printf(" error %d\n", ret);
158 }
159
164 }
165
166 for(
int i=0; i<tac->
sampleNr; i++) tac->
x[i]=tac->
x1[i]=tac->
x2[i]=0.0;
167
169
172}
char * csvCell(CSV *csv, int row, int col)
double atofVerified(const char *s)
int doubleMatch(const double v1, const double v2, const double lim)
int atoiCheck(const char *s, int *v)
void statusSet(TPCSTATUS *s, const char *func, const char *srcfile, int srcline, tpcerror error)
size_t strnlen(const char *s, size_t n)
size_t strlcpy(char *dst, const char *src, size_t dstsize)
char name[MAX_TACNAME_LEN+1]
int verbose
Verbose level, used by statusPrint() etc.
int tacAllocate(TAC *tac, int sampleNr, int tacNr)
#define MAX_TACNAME_LEN
Max length of TAC ID name (not including trailing zero).
@ TPCERROR_FAIL
General error.
@ TPCERROR_INVALID_FORMAT
Invalid file format.
@ TPCERROR_NO_DATA
File contains no data.
@ TAC_FORMAT_QVIEW
QView CSV TAC format (reading supported).