/* get_epics: reads in a coda raw data file and searches for epics keywords */ #include #include #include #include #include main() { int inrun; char expnr[80]; char epicsvar[80],buffer[80]; int ilenepicsvarname; char infile[80]; char outfile[80]; char *cdum; FILE *fin; FILE *fout; double rvalue; double rsummed,raverage; int infound; int istatus; int i,ihit; infound=0; rsummed=0.; printf("\n *** Get Epics ***"); printf("\n \n reads in a coda file, searches for an epics keyword,"); printf("\n puts the epics value(s) in an output file and calculates"); printf("\n the average value of this epics value for this run."); printf("\n Caution: if the epics variable was not correct and "); printf("\n therefore set to zero, the average is meaningless!!"); printf("\n \n The coda file is characterized by EXPID and RUNID, and is"); printf("\n supposed to be on the cache disk."); printf("\n \n Enter EXPID: "); scanf("%s",&expnr); printf("\n Enter RUNID: "); scanf("%d",&inrun); printf("\n Enter Name of Epics Field: "); cdum=fgets(epicsvar,80,stdin); cdum=fgets(epicsvar,80,stdin); ilenepicsvarname=strlen(epicsvar)-1; epicsvar[ilenepicsvarname]=0; printf("\n Enter Name of Output-File: "); scanf("%s",&outfile); fout=fopen( outfile,"w"); sprintf(infile,"/cache/mss/halla/e%s/raw/e%s_%d.dat.0",expnr,expnr,inrun); fin=fopen(infile,"r"); if (fin) { cdum=fgets(buffer,80,fin); while (cdum) { if ( (strncmp(buffer,epicsvar,ilenepicsvarname)==0) || (strncmp(&buffer[1],epicsvar,ilenepicsvarname)==0)) { i=ilenepicsvarname; ihit=0; while ((buffer[i]!='\0')&&(i<80)&&(ihit==0)) { if (buffer[i]==' ') { ihit=i+1; } i++; } if (ihit>0) { istatus=sscanf(&buffer[ihit],"%lf",&rvalue); if (istatus>0) { if ((rvalue<1.e10)&&(rvalue>-1.e10)) { infound=infound+1; rsummed=rsummed+rvalue; fprintf(fout," %d %lf \n",inrun,rvalue); } } } } /* istatus=fscanf(fin,"%s",&buffer); */ cdum=fgets(buffer,80,fin); } fclose(fin); } fclose(fout); raverage=rsummed/infound; printf("\n average value (for %d readings) = %lf \n",infound,raverage); }