/* ROFF.C */ # include # include # define EOF (-1) main (argc,argv) int argc; char *argv[]; { FILE *fp1,*fp2; char line[100]; int a1,a2,c,i,j,k,nl,ni,nc,c1,c2,mode,nr,r1,r2,max,min; double b0f1,b0f2,b1,c1p,c2p,r1p,r2p,fcor,inte,intcor,freq,fcp,maxp,minp; long pos1,pos2; /*----------------------------------------------------------------------------- OPEN FILES AND ASK FOR REQUIRED PARAMETERS -----------------------------------------------------------------------------*/ if (argc != 2) { printf ("Usage: 'rocoff RESULTFILE' !\n\n"); exit (0); } fp1 = fopen ("int2d","r"); fp2 = fopen (argv[1],"w"); printf ("\n*** Roesy OFFset correction ***\n\n"); printf ("Type in spectrometer frequency in MHz: "); scanf ("%lf",&freq); printf ("Type in spin lock field in Hz: "); scanf ("%lf",&b1); /*----------------------------------------------------------------------------- SCAN INPUT FILE FOR NUMBER OF LINES -----------------------------------------------------------------------------*/ nl = 0; while (i = fgets(line,100,fp1) != 0) { ++nl; } rewind (fp1); /*----------------------------------------------------------------------------- FIND MAXIMUM AND MINIMUM PEAK POSITION -----------------------------------------------------------------------------*/ for (i=0; i<8; ++i) { fgets(line,100,fp1); fputs(line,fp2); } if (nl >= 10) { fscanf (fp1,"%*d %*d %*d %*d %*lf %*lf %*lf %*c"); fscanf (fp1," %d %d %d %lf %lf ",&nc,&max,&min,&maxp,&minp); } if (nl >= 12) { for (i=0; i<(nl-10)/2; ++i) { fscanf (fp1,"%*d %*d %*d %*d %*lf %*lf %*lf %*c"); fscanf (fp1," %*d %d %d %lf %lf ",&c1,&c2,&c1p,&c2p); if (c1min) { min = c2; minp = c2p; } } } rewind (fp1); /*----------------------------------------------------------------------------- CALCULATE CENTER FREQUENCY IN PPM IN F2 DIRECTION -----------------------------------------------------------------------------*/ fcp=((((nc-1)/2.0)-max)*(maxp-minp)/(max-min))+maxp; printf ("\nCenter of spectrum at %5.2lf ppm !\n",fcp); /*----------------------------------------------------------------------------- CALCULATE CORRECTED INTEGRALS -----------------------------------------------------------------------------*/ for (i=0; i<8; ++i) { fgets(line,100,fp1); } if (nl >= 10) { for (i=0; i<(nl-8)/2; ++i) { fscanf (fp1,"%d %d %d %d %lf %lf %lf %c",&ni,&nr,&r1,&r2,&r1p,&r2p,&inte,&mode); fscanf (fp1," %d %d %d %lf %lf ",&nc,&c1,&c2,&c1p,&c2p); b0f1 = freq * fabs(fcp - 0.5*(r1p+r2p)); b0f2 = freq * fabs(fcp - 0.5*(c1p+c2p)); fcor = 1.0 / (sin(atan(b1/b0f1)) * sin(atan(b1/b0f2))); intcor = fcor * inte; fprintf (fp2,"%3d %5d %4d %4d %10.5lf %10.5lf %10.2lf %c\n",ni,nr,r1,r2,r1p,r2p,intcor,mode); fprintf (fp2," %5d %4d %4d %10.5lf %10.5lf\n",nc,c1,c2,c1p,c2p); } } a1 = fclose (fp1); a2 = fclose (fp2); if (a1==0 & a2==0) { printf ("\n Files successfully closed,\n"); printf (" good bye from ROCOFF !\n\n"); } }