Files
2026-06-30 08:59:47 +09:00

141 lines
3.8 KiB
C

#include "ilt.h"
void SetDataSize(HEAD *head, INDATA *d){
char buf[1024];
char *tp;
if((head->infp = fopen(head->infile, "r"))==NULL){
printf("%s is not found.\n", head->infile);
exit(1);
}
tp = fgets(buf, sizeof(buf), head->infp);
if (tp == NULL){
printf("Read error. %s\n", head->infile);
exit(1);
}
rewind(head->infp);
if (head->DXnum == 0 && head->DYnum == 0){
/* スペース.を区切りに文字列を抽出 */
tp = strtok(buf, "X:/Y:" );
tp = strtok(NULL, "X:/Y:" );
if (tp == NULL){
printf("X Dimesion for input data error!\n");
exit(1);
}
head->DXnum = atoi(tp); /* tau1軸がu */;
tp = strtok(NULL, "X:/Y:" );
if (tp == NULL){
printf("Y Dimesion for input data error!\n");
exit(1);
}
head->DYnum = atoi(tp); /* tau2軸がv */
}
if (head->DXnum == 0 || head->DYnum == 0){
printf("XY Dimesion for input data error!\n");
exit(1);
}
d->u.m = head->DXnum;
d->v.m = head->DYnum;
d->u.n = 1;
d->v.n = 1;
d->u.a = (double*)malloc(sizeof(double) * d->u.m );
d->v.a = (double*)malloc(sizeof(double) * d->v.m);
d->m.a = (double*)malloc(sizeof(double) * d->u.m * d->v.m);
d->m.m = d->u.m; /* T1軸が行 */
d->m.n = d->v.m; /* T2軸が列 */
}
/* ####################################################################### */
/* 1Dの測定データを読む */
/* ####################################################################### */
void ReadData1D(HEAD *head, INDATA *d){
char buf[1024];
int pnt = 0, col;
if ((strcmp(head->infile, "-")==0)) head->infp = stdin;
else if((head->infp = fopen(head->infile, "r"))==NULL){
printf("%s is not found.\n", head->infile);
exit(1);
}
if (head->DXnum == 0){
while (fgets(buf, sizeof(buf), head->infp) != NULL){
if(strstr(buf, "#") == NULL && buf[0] != '\n'){
pnt++;
}
}
head->DXnum = pnt;
rewind(head->infp);
}
d->u.m = head->DXnum;
d->u.n = 1;
d->v.m = 0;
d->v.n = 0;
d->u.a = (double*)malloc(sizeof(double) * head->DXnum);
d->m.a = (double*)malloc(sizeof(double) * head->DXnum);
d->m.m = d->u.m;
d->m.n = 1;
head->s1 = head->DXnum;
head->s2 = 0;
pnt = 0;
while (fgets(buf, sizeof(buf), head->infp) != NULL){
if(strstr(buf, "#") == NULL && buf[0] != '\n' && buf[0] != '\r'){
col = sscanf(buf, "%lf %lf", &d->u.a[pnt], &d->m.a[pnt]);
if (col != 2){
printf("read error. line numeber=%d (%s)\n", pnt, head->infile);
exit(1);
}
/* d->u.a[pnt] = d->u.a[pnt] * 1e-3; /\* s->ms *\/ */
pnt++;
if (pnt == head->DXnum) break;
}
}
fclose(head->infp);
/* 最大値で規格化 */
/* d->mmax = fabs(d->m.a[idamax_(&m, d->m.a, &incr)-1]); */
/* alpha = 1.0/d->mmax; */
/* dscal_(&m, &alpha, d->m.a, &incr); */
}
/* ####################################################################### */
/* 測定データの読み込み */
/* ####################################################################### */
void ReadData(HEAD *head, INDATA *d){
char buf[1024];
int i=0, j=0, p, col;
double ta, tb, mi;
div_t temp;
while (fgets(buf, sizeof(buf), head->infp) != NULL){
if(strstr(buf, "#") == NULL && buf[0] != '\n' && buf[0] != '\r'){
col = sscanf(buf, "%lf %lf %lf", &ta, &tb, &mi);
if (col != 3){
printf("read error. line:%d (%s)\n", i, head->infile);
exit(1);
}
/* X軸一定でY軸変化のためM行列を転置 */
temp = div(i, d->m.n);
p = temp.rem * d->m.m + temp.quot;
/* Mの並びがT1変化が先なら p=iにする */
d->m.a[p] = mi;
if (i < d->v.m) d->v.a[i] = tb;
if ((i % d->v.m)==0) {
d->u.a[j] = ta;
j++;
}
i++;
}
}
/* mn = d->m.m * d->m.n; */
/* d->mmax = fabs(d->m.a[idamax_(&mn, d->m.a, &incr)-1]); */
/* alpha = 1.0/d->mmax; */
/* dscal_(&mn, &alpha, d->m.a, &incr); */
}