#include "stdio.h" #include "string.h" #include "astring.h" #include "flatfile.h" #include "stdlib.h" #include "math.h" void main(int argc, char *argv[]) { FILE *fpout; char filein[100], fileout[100]; char *vn, *vu, *vs, *vt, no[1000]; double outtime, uttime[1]; char stime[24], etime[24]; int inunit, outunit, ncol[1], csize[1], error, nvar; int ifilef, ofilef, stdf, nptsf, datef, helpf, timef, flag, itime[6]; long srow, erow, nrow[1], orow, irow, *nave, i, npts, j, k, jj; float *data, *totdata, *outdata, *keepdata, missing, dt; missing = -1.0e32; ifilef = 0; ofilef = 0; stdf = 0; datef = 0; nptsf = 0; helpf = 0; if (argc >= 2) { for (i=2; i<=argc; i++) { if (strpos(argv[i-1],"-")==0) { flag = 0; if (strpos(argv[i-1],"s")>0) { stdf = 1; flag=1; } if (strpos(argv[i-1],"m")>0) { datef = 1; flag=1; } if (strpos(argv[i-1],"n")>0) { nptsf = 1; flag=1; } if (strpos(argv[i-1],"t")>0) { timef = 1; dt = atof(strmid(argv[i-1],2,strlen(argv[i-1])-2)); flag=1; } if ((strpos(argv[i-1],"h")>0) || (!flag)) { helpf = 1; printf("usage : \n"); printf("aveflat [-smn] [-t#] [flatfilein] [flatfileout]\n"); printf(" -s output standard deviation\n"); printf(" -n output number of points used in average\n"); printf(" -m start output at midnight of start day\n"); printf(" -t# # is number of minutes to average\n"); } } else { if (!ifilef) { ifilef = 1; strcpy(filein,argv[i-1]); } else { ofilef = 1; strcpy(fileout,argv[i-1]); } } } } if (!helpf) { if (!ifilef) { printf("Enter flat file to copy : "); gets(filein); } if (!ofilef) { printf("Enter output file name : "); gets(fileout); } if (!timef) { printf("Enter number of minutes to average over : "); scanf("%f",&dt); } dt = dt*60.0; inunit = ffopen(filein); nvar = (ff_ncol[inunit]-1)*(1+nptsf+stdf)+1; vn = calloc(sizeof(char),nvar*16+2); vu = calloc(sizeof(char),nvar*16+2); vs = calloc(sizeof(char),nvar*31+2); vt = calloc(sizeof(char),nvar*2+2); data = calloc(sizeof(float),ff_ncol[inunit]); totdata = calloc(sizeof(float),nvar); outdata = calloc(sizeof(float),nvar); nave = calloc(sizeof(long),ff_ncol[inunit]); error = rdhead(inunit,vn,vu,vs,vt,no, stime,etime,nrow,ncol,csize); strcat(no,",Averaged from file : "); strcat(no,filein); strcat(no,",Time of averaging : "); strcat(no,c_long_str((long) dt,1)); strcat(no," seconds"); printf("aveflat, stdf,nptsf,nvar: %ld %ld %ld\n",stdf,nptsf,nvar); if (stdf) { for (i=1;i= outtime-((double) dt)/2.0) && (uttime[0] < outtime+((double) dt)/2.0)) { for (i=0; i < ff_ncol[inunit]-1; i++) { if (data[i] != missing) { if (stdf) { /* if (nave[i] > npts) { printf("Error in estimating how many points to keep\n"); printf("nave[%d] : %ld irow : %ld\n",i,nave[i],irow); } else keepdata[i*npts+nave[i]] = data[i]; } */ keepdata[i*npts+nave[i]] = data[i];} nave[i]++; totdata[i] = totdata[i] + data[i]; } } irow++; } else { if ((uttime[0] >= outtime+((double) dt)/2.0) || (irow == erow-1)) { for (i=0; i < ff_ncol[inunit]-1; i++) { if (stdf) outdata[i+ff_ncol[inunit]-1]=0.0; if (nave[i] > 0) { outdata[i] = totdata[i]/((float) nave[i]); } else { outdata[i] = missing; } } if (stdf) { for (i=0; i < ff_ncol[inunit]-1; i++) { k = i+ff_ncol[inunit]-1; for (j=0; j