/* ++++++++++++++++ */ # define FILENAME "richards_RAD.c" /* ++++++++++++++++ */ # include "util.h" /* ========== */ int * select_all(int sel[MXPDB]) /* ========== */ { int n; for(n=0; n MXPDB) { printf ("DEBUG: n=%4d MXPDB=%4d\n",n,MXPDB); nonfatal(FILENAME,"rd_RAD","natom > MXPDB"); } bzero(&atm[n][0],10); bzero(&res3[n][0],10); sscanf(buf1,"%5d%5d%3d%3d%6c%6c%5d%8lf%8lf%8lf%5lf%5lf%8lf%5d", ncalc+n,i+n,numchn+n,numfil+n,&atm[n][0],&res3[n][0],seqnum+n, x+n,y+n,z+n,rvdw+n,rcov+n,volume+n,ns+n); /* fix for volumes of 1000 */ sscanf(buf1 + 67,"%8lf",volume+n); /* ATOD(buf1); ATOD(res3[n]); ATOD(atm[n]); ITOD(ncalc[n]); FTOD(z[n]); printf( "%5d%5d%3d%3d%6s%6s%5d%8.3f%8.3f%8.3f%5.2f%5.2f%8.3f%5d\n", ncalc[n],i[n],numchn[n],numfil[n],atm[n],res3[n],seqnum[n], x[n],y[n],z[n],rvdw[n],rcov[n],volume[n], ns[n]); */ } return(n); } /* ========================== */ void wrtsel_richards_RAD_volume /* ========================== */ (FILE *stream, int ncalc[MXPDB],int i[MXPDB],int numchn[MXPDB],int numfil[MXPDB], char atm[MXPDB][10],char res3[MXPDB][10], int seqnum[MXPDB],double x[MXPDB],double y[MXPDB],double z[MXPDB], double rvdw[MXPDB],double rcov[MXPDB], double volume[MXPDB],int ns[MXPDB], int natom, int sel[MXPDB]) { int n; if (stream == NULL) nonfatal(__FILE__,"wrtsel_RAD","stream == NULL"); for(n=1;n<=natom;n++) { if (sel[n]) fprintf(stream, "%5d%5d%3d%3d%6s%6s%5d%8.3f%8.3f%8.3f%5.2f%5.2f%8.3f%5d\n", ncalc[n],i[n],numchn[n],numfil[n],atm[n],res3[n],seqnum[n], x[n],y[n],z[n],rvdw[n],rcov[n],volume[n], ns[n]); } } /* Area Program Output ------------------------------------------------------------------------------- 3) "RAD" FORMAT INPUT FILE (EQUIVALENT TO FORMAT OF OUPUT FILE) ------------------------------------------------------------------------------- ACCESSIBILITY PROGRAM BY MARK HANDSCHUMACHER AND F.M. RICHARDS - 5/4/83 KEY = PROGRAM FLAG: "OMIT", "INCLUDE", "CALCULATE" INDEX = SERIAL NUMBER OF ATOM IC = CHAIN NUMBER IF = FILE NUMBER ATM = ATOM TYPE RES = RESIDUE TYPE NUM = SEQUENCE NUMBER X,Y,Z = ATOM COORDINATES VDW = VAN WAALS RADIUS OF ATOM COV = COVALENT RADIUS OF ATOM AAREA = SURFACE AREA OF CONTACT IN SQUARE ANGSTROMS OF THE PROBE WITH THE EFFECTIVE SURFACE CAREA = SURFACE AREA OF CONTACT IN SQUARE ANGSTROMS OF THE PROBE WITH THE VAN DER WAALS SURFACE FRCT = FRACTIONAL ACCESSIBILITY (NOT IN USE) KEY INDEX IC IF ATM RES NUM X Y Z VDW COV AAREA CAREA FRCT -- ----- -- -- -------- --- ------- ------- ------- ---- ---- ----- ----- ---- BEGIN 0 1 1 1 CA ASN 24 -32.944 -9.029 -2.141 2.00 0.77 18.7 6.5 0.00 0 2 1 1 N ASN 24 -32.810 -7.599 -2.822 1.70 0.70 38.2 11.5 0.00 0 3 1 1 C ASN 24 -32.408 -8.761 -0.778 1.70 0.77 3.4 1.0 0.00 0 4 1 1 O ASN 24 -31.379 -7.465 -0.292 1.40 0.66 15.5 3.9 0.00 0 5 1 1 CB ASN 24 -32.229 -9.789 -3.114 2.00 0.77 45.5 15.7 0.00 C OUTPUT FILE : X[X].ARE LUN=4 C 2X,3I6,2A4,2F10.4 C IB = running count of atoms whose area C has been calculated C IR = serial number of atom in coordinate list C SEQNO = sequence no. C RES3 = residue name C ATM = atom name C AAREA = accessible area C CAREA = contact area C C---- Variables and format of output records for each C atom whose accessibility was calculated. C C OUTPUT: C C key(ir), ir, iflag(ir,2), iflag(i,1), atm(ir), res3(ir), iflag(ir,3) C x(ir), y(ir), z(ir), vdwrad(ir), aarea, carea, frcacc C C OUTPUT:FORMAT( 1X,I2, 1X,I5, 1X,I2, 1X,I2, 1X,2A4, 1X,I3, C OUTPUT 3F8.3, F5.2, 2F8.3, 1X,F5.3) C WRITE (6,FMT=6144) KEY(I),I,IFLAG(I,2),IFLAG(I,1),ATM(I), + RES3(I),IFLAG(I,3),X(I),Y(I),Z(I),VDWRAD(I),COVRAD(I),AAREA, + CAREA,FRCACC 6144 FORMAT (1X,I2,1X,I5,1X,I2,1X,I2,1X,2A4,1X,I3,3F8.3,2F5.2,2F6.1,1X, + F4.2) */ # define RAD_AREA_IN \ " %2d %5d %2d %2d %4c%4c %3d%8lf%8lf%8lf%5lf%5lf%6lf%6lf %4lf" # define RAD_AREA_OUT \ " %2d %5d %2d %2d %4s%4s %3d%8.3f%8.3f%8.3f%5.2f%5.2f%6.1f%6.1f %4.2f\n" /* ==================== */ int rd_richards_RAD_area /* ==================== */ (FILE *stream, int ncalc[MXPDB],int i[MXPDB],int numchn[MXPDB],int numfil[MXPDB], char atm[MXPDB][10],char res3[MXPDB][10], int seqnum[MXPDB],double x[MXPDB],double y[MXPDB],double z[MXPDB], double rvdw[MXPDB],double rcov[MXPDB], double aarea[MXPDB],double carea[MXPDB],double frcacc[MXPDB]) { static char buf[BUFSIZ+1]; char *buf1 = buf + 1; int n = 0; if (stream == NULL) nonfatal(__FILE__,"rd_RAD","stream == NULL"); while ((fgets(buf1,BUFSIZ,stream) != NULL) && (!STRNEQ(buf1," BEGIN",6))) ; while ((fgets(buf1,BUFSIZ,stream) != NULL) && (!STRNEQ(buf1," TOTAL",6))) { if (++n > MXPDB) { printf ("DEBUG: n=%4d MXPDB=%4d\n",n,MXPDB); nonfatal(FILENAME,"rd_RAD","natom > MXPDB"); } bzero(&atm[n][0],10); bzero(&res3[n][0],10); sscanf(buf1, RAD_AREA_IN, ncalc+n,i+n,numchn+n,numfil+n,&atm[n][0],&res3[n][0],seqnum+n, x+n,y+n,z+n,rvdw+n,rcov+n, aarea+n,carea+n,frcacc+n); /* ATOD(buf1); ATOD(res3[n]); ATOD(atm[n]); ITOD(ncalc[n]); FTOD(z[n]); fprintf(stdout,RAD_AREA_OUT, ncalc[n],i[n],numchn[n],numfil[n],atm[n],res3[n],seqnum[n], x[n],y[n],z[n],rvdw[n],rcov[n], aarea[n],carea[n],frcacc[n]); */ } return(n); } /* ======================== */ void wrtsel_richards_RAD_area /* ======================== */ (FILE *stream, int ncalc[MXPDB],int i[MXPDB],int numchn[MXPDB],int numfil[MXPDB], char atm[MXPDB][10],char res3[MXPDB][10], int seqnum[MXPDB],double x[MXPDB],double y[MXPDB],double z[MXPDB], double rvdw[MXPDB],double rcov[MXPDB], double aarea[MXPDB],double carea[MXPDB],double frcacc[MXPDB], int natom, int sel[MXPDB]) { int n; if (stream == NULL) nonfatal(__FILE__,"wrtsel_RAD","stream == NULL"); for(n=1;n<=natom;n++) { if (sel[n]) fprintf(stream,RAD_AREA_OUT, ncalc[n],i[n],numchn[n],numfil[n],atm[n],res3[n],seqnum[n], x[n],y[n],z[n],rvdw[n],rcov[n], aarea[n],carea[n],frcacc[n]); } } /* =============== */ int sum_per_residue /* =============== */ (int seqnum[MXPDB],double prop[MXPDB],int natom,double sum_out[MXPDB]) { int i, max, s; for (i=1;i<=MXPDB;i++) { sum_out[i] = XPLOR_UNKNOWN; } for (i=1;i<=natom; i++) { int old_seqnum; s = seqnum[i]; max = (s > max ? s : max) ; if (i==1 || old_seqnum != s) { sum_out[s] = prop[i]; old_seqnum = s ; } else { sum_out[s] += prop[i]; ; } } return(max); } /* ======================== */ int sum_per_residue_prop1000 /* ======================== */ (int seqnum[MXPDB],double prop[MXPDB],int natom,double sum_out[MXPDB]) { int i, max, s; for (i=1;i<=MXPDB;i++) { sum_out[i] = XPLOR_UNKNOWN; } for (i=1;i<=natom; i++) { int old_seqnum; s = seqnum[i]; max = (s > max ? s : max) ; if (i==1 || old_seqnum != s) { sum_out[s] = prop[i]; old_seqnum = s ; } else if (prop[i] == 1000 || sum_out[s] == 1000) { sum_out[s] = 1000; } else { sum_out[s] += prop[i]; ; } } return(max); }