141 {
142 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
143 if(par==NULL) {
146 }
148
149 if(csv==NULL || ift==NULL || csv->
row_nr<1 || csv->
col_nr<1) {
152 }
153 if(verbose>0) printf("%s()\n", __func__);
154
155 if(verbose>10) {
156 printf("\n CSV contents shown with separator ; \n\n");
159 printf("\n IFT contents \n\n");
161 printf("\n");
162 }
163
165 char *cptr, tmp[256];
166
167
171 if(i<0) {
175 }
177
178
179 i=0; if(verbose>2) printf("estimating parNr\n");
180 while(i<csv->nr) {
182 if(i>=0 && csv->
c[i].
col==0)
break;
183 i++;
184 }
185 if(i<0 || i==csv->nr) {
189 }
190 titlerow=csv->
c[i].
row;
if(verbose>3) printf(
"titlerow := %d\n", titlerow);
191#if(1)
192
193 int parNr=0;
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);
196 if(n>parNr) parNr=n;
197 }
198 if(verbose>4) printf(" initial_parNr := %d\n", parNr);
199#else
200
202#endif
203 if(csv->
separator!=
' ') parNr-=7;
else parNr-=9;
204 if(verbose>2) {
205 printf(" parNr := %d\n", parNr);
206 printf(" tacNr := %d\n", tacNr);
207 }
208 if(parNr<1 || tacNr<1) {
212 }
213
216 statusSet(status, __func__, __FILE__, __LINE__, ret);
217 return ret;
218 }
220
221
222 i=0;
224 if(verbose>3) {
225 printf(
"ift->item[%d].value := '%s'\n", i, ift->
item[i].
value);
226 }
230 }
236 }
237 iftPut(&par->
h,
"program", tmp, 0, NULL);
238
239
242
243
246
247
251
252
256 if(i>=0) {
259 }
260
261
262 for(i=0; i<parNr; i++) sprintf(par->
n[i].
name,
"p%d", 1+i);
263
264
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;}
269 i=0; n=1+j+titlerow;
270
273 i++;
276 i++;
279 }
280
284
286
288
289
290 i++;
int tacParNr=atoi(
csvCell(csv, n, i));
292
294
295#if(1)
296 int k;
297 for(k=0; k<tacParNr; k++) {
299 }
300 for(; k<parNr; k++) par->
r[j].
p[k]=nan(
"");
301#else
302 for(int k=0; k<parNr; k++) {
304#endif
305 }
306 if(ret>0) {
310 }
311
312
313 {
314 int i, tac;
316 for(tac=0; tac<par->
tacNr; tac++) {
317 for(i=0; i<3; i++) {
319 strcmp(fnsp[i], ".")==0)
320 strcpy(fnsp[i], "");
321 }
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]);}
326 }
327 }
328
329
331
332
335}
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 modelOld2New(const unsigned int i)
int parAllocate(PAR *par, int parNr, int tacNr)
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)
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.
#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.
int unitIdentify(const char *s)
@ PAR_FORMAT_FIT
Function fit format of Turku PET Centre.