36 unsigned int max_name_len
39 if(name1!=NULL) strcpy(name1,
"");
40 if(name2!=NULL) strcpy(name2,
"");
41 if(name3!=NULL) strcpy(name3,
"");
44 if(max_name_len<1)
return 0;
45 if(rname==NULL || *rname==
'\0')
return 0;
51 if(
strClean(temp)) {free(temp);
return 0;}
55 int fullLen=(int)strlen(rname);
56 char sname[3][fullLen+1];
62 if(n<3) {strcat(space,
"_"); n=
strTokenNr(temp, space);}
63 if(n<3) {strcat(space,
"-"); n=
strTokenNr(temp, space);}
67 char *cptr=temp;
int i;
69 while(n<3 && *cptr!=
'\0') {
72 if(strspn(cptr, space)>0) {
82 if(n<3) {sname[n][i]=
'\0'; n++;}
83 for( ; n<3 ;n++) strcpy(sname[n],
"");
87 if(strcmp(sname[i],
".")==0) strcpy(sname[i],
"");
92 if(sname[1][0]==
'\0' && strlen(sname[0])>max_name_len)
93 strlcpy(sname[1], &sname[0][max_name_len], fullLen+1);
95 if(sname[2][0]==
'\0' && strlen(sname[1])>max_name_len)
96 strlcpy(sname[2], &sname[1][max_name_len], fullLen+1);
100 for(i=n=0; i<3; i++) {
102 if(i==0) nptr=name1;
else if(i==1) nptr=name2;
else nptr=name3;
103 if(strlen(sname[i])>0) n=i+1;
104 if(nptr==NULL)
continue;
105 strlcpy(nptr, sname[i], max_name_len+1);
129 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
138 if(verbose>0) printf(
"%s()\n", __func__);
148 if(verbose>99)
iftWrite(&tac->
h, stdout, NULL);
152 statusSet(status, __func__, __FILE__, __LINE__, ret);
157 if(verbose>1) printf(
"writing obligatory title lines\n");
162 n=fprintf(fp,
"DFT1");
if(n<1) {
167 for(
int ri=0; ri<tac->
tacNr; ri++) {
169 fprintf(fp,
"\t%s", subname);
172 n=fprintf(fp,
"\n");
if(n<1) {
179 if(verbose>2) printf(
" writing 2nd title line\n");
183 strcpy(tmp,
".");
if(verbose>5) printf(
"no studynr\n");
185 n=fprintf(fp,
"%s", tmp);
if(n<1) {
190 for(
int ri=0; ri<tac->
tacNr; ri++) {
192 if(n<2 || !subname[0]) strcpy(subname,
".");
193 fprintf(fp,
"\t%s", subname);
196 n=fprintf(fp,
"\n");
if(n<1) {
203 if(verbose>2) printf(
" writing 3rd title line\n");
207 n=fprintf(fp,
"%s", tmp);
if(n<1) {
212 for(
int ri=0; ri<tac->
tacNr; ri++) {
214 if(n<3 || !subname[0]) strcpy(subname,
".");
215 fprintf(fp,
"\t%s", subname);
218 n=fprintf(fp,
"\n");
if(n<1) {
225 if(verbose>2) printf(
" writing 4th title line\n");
227 else strcpy(tmp,
"Time");
228 if(tac->
isframe!=0) strcat(tmp,
"s");
229 n=fprintf(fp,
"%s (%s)", tmp,
unitName(tac->
tunit));
if(n<1) {
234 for(
int ri=0; ri<tac->
tacNr; ri++) {
235 if(!isnan(tac->
c[ri].
size)) sprintf(tmp,
"%.*e", prec, tac->
c[ri].
size);
236 else strcpy(tmp,
".");
237 fprintf(fp,
"\t%s", tmp);
240 n=fprintf(fp,
"\n");
if(n<1) {
247 if(verbose>1) printf(
"writing data table\n");
250 for(
int fi=0; fi<tac->
sampleNr; fi++) {
252 if(tac->
isframe==0) v=tac->
x[fi];
else v=tac->
x1[fi];
253 if(isnan(v)) n=fprintf(fp,
".");
else n=fprintf(fp,
"%.5f", v);
257 if(isnan(v)) n=fprintf(fp,
"\t.");
else n=fprintf(fp,
"\t%.5f", v);
261 for(
int ri=0; ri<tac->
tacNr; ri++) {
262 if(isnan(tac->
c[ri].
y[fi])) n=fprintf(fp,
"\t.");
263 else n=fprintf(fp,
"\t%.*e", prec, tac->
c[ri].
y[fi]);
269 if(isnan(tac->
w[fi])) n=fprintf(fp,
"\t.");
270 else n=fprintf(fp,
"\t%.*e", prec, tac->
w[fi]);
274 n=fprintf(fp,
"\n");
if(n<1)
break;
283 if(extra && localh.
keyNr>0) {
284 int ret=
iftWrite(&localh, fp, status);
312 int verbose=0;
if(status!=NULL) verbose=status->
verbose;
322 if(verbose>0) printf(
"%s()\n", __func__);
325 if(strncasecmp(csv->
c[0].
content,
"DFT", 3)!=0) {
330 int ret, i, j, m, n, isframe=0, is2cunit=0, is2tunit=0, tunit;
334 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
col==0 && csv->
c[i].
row==3)
break;
342 if(strncasecmp(csv->
c[i].
content,
"Times", 5)==0) isframe=1;
343 else if(strncasecmp(csv->
c[i].
content,
"Time", 4)==0) isframe=0;
344 else if(strncasecmp(csv->
c[i].
content,
"Distances", 9)==0) isframe=1;
345 else if(strncasecmp(csv->
c[i].
content,
"Distance", 8)==0) isframe=0;
350 if(verbose>2) printf(
" isframe=%d\n", isframe);
352 cptr=strchr(csv->
c[i].
content,
'(');
353 if(cptr==NULL) cptr=strchr(csv->
c[i].
content,
'[');
354 if(cptr==NULL) {cptr=strchr(csv->
c[i+1].
content,
'('); is2tunit=1;}
355 if(cptr==NULL) {cptr=strchr(csv->
c[i+1].
content,
'['); is2tunit=1;}
366 n=csv->
col_nr-1;
if(isframe) n--;
372 statusSet(status, __func__, __FILE__, __LINE__, ret);
383 for(i=1; i<csv->
nr; i++) {
384 if(csv->
c[i].
row!=0 || n>=tac->
tacNr)
break;
387 if(strcmp(tac->
c[n].
name,
".")==0) strcpy(tac->
c[n].
name,
"");
396 printf(
" tacNr=%d\n sampleNr=%d\n", tac->
tacNr, tac->
sampleNr);
399 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
row==1 && csv->
c[i].
col==0) {
406 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
row==2 && csv->
c[i].
col==0)
break;
413 if(verbose>2) printf(
" concentration unit spans two columns\n");
424 for(
int ri=0; ri<tac->
tacNr; ri++) {
425 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
row==1 && csv->
c[i].
col==ri+1)
break;
426 for(j=i; j<csv->
nr; j++)
if(csv->
c[j].
row==2 && csv->
c[j].
col==ri+1)
break;
427 if(i==csv->
nr || j==csv->
nr) {
435 strcat(tac->
c[ri].
name,
"_");
439 strcat(tac->
c[ri].
name,
"_");
446 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
row==3) {
447 m=csv->
c[i].
col-1;
if(is2tunit) m--;
451 for(i=0, m=-1, n=0; i<csv->
nr; i++)
if(csv->
c[i].
row==3) {n++;
if(m<0) m=i;}
452 if(n==tac->
tacNr+1) m+=1;
453 else if(n==tac->
tacNr+2) m+=2;
458 for(
int ri=0; ri<tac->
tacNr; ri++)
463 int fi=0, ri=0, oknr=0;
466 for(i=0; i<csv->
nr; i++)
if(csv->
c[i].
row==4)
break;
467 for(; i<csv->
nr; i++) {
469 printf(
"i=%d\trow=%d\tcol=%d\n", i, csv->
c[i].
row, csv->
c[i].
col);
470 fi=csv->
c[i].
row-4;
if(fi<0 || fi>=tac->
sampleNr) {ret++;
continue;}
471 if(csv->
c[i].
col<0) {ret++;
continue;}
474 if(ri>=tac->
tacNr) {ret++;
continue;}
476 if(verbose>10) printf(
" -> fi=%d\tri=%d\t=\t%g\n", fi, ri, v);
479 if(ri==-2) tac->
x1[fi]=v;
else if(ri==-1) tac->
x2[fi]=v;
481 }
else tac->
c[ri].
y[fi]=v;
483 if(verbose>0 && ret>0)
484 printf(
"%d error(s) in reading DFT file format.\n", ret);
492 tac->
x[fi]=0.5*(tac->
x1[fi]+tac->
x2[fi]);
503 statusSet(status, __func__, __FILE__, __LINE__, ret);
int tacNameSplit(const char *rname, char *name1, char *name2, char *name3, unsigned int max_name_len)