C NEWHEL93.FOR 20 January 1993 C This is the Fortran program code for helix analysis program NEWHEL93. C For operating instructions, see the separate file NEWHEL93.TEX. C Richard E. Dickerson, UCLA C ********************************************************************* C THE NEWHELIX PROGRAM BEGINS HERE: C ********************************************************************* CHARACTER * 4 NAME,MH CHARACTER * 1 IR,TITL CHARACTER * 60 FMT COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL X ,L15 COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP X ,IHELIX,IBROLL,ICYLIN,ITORNG COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000) COMMON/BROOK/IBARF,IFRES,NBP CALL INIT CALL XDRED IF (IHELIX.NE.0) CALL HELIX IF (IBROLL.NE.0) CALL BROLL IF (ICYLIN.NE.0) CALL CYLIN IF (ITORNG.NE.0) CALL TORANG C RETURN END C------------------------- C SUBROUTINE ANGLE C------------------------- C SUGAR BOND ANGLES CALCULATING SUBROUTINE SUBROUTINE ANGLE (NA,TE,ATM) DIMENSION ATM(3,1000),NA(3) DIMENSION AV(3),BV(3),CV(3),AA(3) DO 10 J=1,3 J1=J+1 IF (J1.GT.3) J1=1 NS=NA(J) NE=NA(J1) AV(J)=ATM(1,NE)-ATM(1,NS) BV(J)=ATM(2,NE)-ATM(2,NS) CV(J)=ATM(3,NE)-ATM(3,NS) 10 CONTINUE DO 20 I=1,3 AA(I)=AV(I)**2+BV(I)**2+CV(I)**2 20 CONTINUE TE= ACOS((AA(1)+AA(2)-AA(3))/(2.*SQRT(AA(1)*AA(2)))) RETURN END C------------------------- C SUBROUTINE BROLL C------------------------- SUBROUTINE BROLL CHARACTER * 4 MH CHARACTER * 1 IR,TITL,NTP,NAT INTEGER * 2 IRES DOUBLE PRECISION CO1,SI1,CO2,SI2,A1R,B1R,A2R,B2R COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(5,1000) COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) COMMON/BROOK/IBARF,IFRES,NPLA DIMENSION A(3,3),EIG(20,3),NA1(15),PHI(20,3,2),THE(20,3,4),TIL(20) * ,NA2(15),XMIN(30,3),XMAJ(30,3),PLA(20,3,3),ANG(3),SV(3),RV(2,3) * ,PV(2,3),PM(2),PTW(20),ALB(2),BKL(20),SLI(20),DIS(20),HYP(20) * ,ROT12(20),AM(3),BM(3),SLJ(20),SIG(12),SSQ(12),SD(12),AV(12) * ,TV(2,3),TV2(2) 500 FORMAT(1X,' ROLL+TILT OUTPUT, NEWHEL93') 501 FORMAT(/,I5,' ATOMS AND ',I5,' BASE PAIRS',I5) 502 FORMAT (/,' ',72A1) 503 FORMAT(//,' BASE PAIR',I5,/) 504 FORMAT(2I5) 505 FORMAT(15I5) 506 FORMAT(1H1) 507 FORMAT(//,' STRAND',I4,' BASE NORMAL COSINES AND ANGLES',/) 508 FORMAT(3F10.5,5X,3F10.2) 509 FORMAT(//,' STRAND 1 ROLL AND TILT ANGLES STRAND 2 ROLL A *ND TILT ANGLES') C........1.........2.........3.........4.........5.........6.........712 510 FORMAT(' TIP INCL ROLL TILT RADJ TADJ TIP INCL ROLL *TILT RADJ TADJ') 511 FORMAT(//,' BEST PLANE THROUGH BOTH BASES') C........1.........2.........3.........4.........5.........6.........712 512 FORMAT(' TIP INCL ROLL TILT RADJ TADJ CUP PROP BUCK S *LIDE X DSP Y DSP') 513 FORMAT(6F6.2,2X,6F6.2) 514 FORMAT(11F7.2) 516 FORMAT(1H ) 517 FORMAT(' NOTE: Angles are calculated from 5" end to 3" end of str *and 1, and signs') 518 FORMAT(' of angles also are calculated with respect to strand 1. * To examine individual') 519 FORMAT(' strand 2 bases w.r.t. strand 2, reverse signs of Tip and * Tilt.') 520 FORMAT(' For Z-DNA, reverse signs of Incl and X Dsp. Y Dsp is cor *rect as printed.') 560 FORMAT(' ROLL and TILT are the simple components of base pair norm *als along minor') 561 FORMAT(' and major axes of base pairs. They are the values that *were calculated') 562 FORMAT(' in NEWHEL90 and earlier.') 563 FORMAT(' RADJ and TADJ are adjusted roll and tilt, in which the tw *ist angle has') 564 FORMAT(' been rotated back to zero before calculation of roll and * tilt. These') 565 FORMAT(' are the values that were calculated by NEWHEL91 and NEWH *EL92. Both') 566 FORMAT(' have been included because both have partisans. But be *sure to make clear') 567 FORMAT(' in publications which ones you are using!!!') 521 FORMAT(2F6.2,4(3X,'-',2X),5X,'-',2X,2F6.2,3X,'-',2X,2F6.2) 522 FORMAT (6(1X,'_____'),2X,6(1X,'_____')/) 523 FORMAT(6F6.2,2X,6F6.2,' AV') 524 FORMAT(6F6.2,2X,6F6.2,' SD') 555 FORMAT(//,' BASE PAIR NORMAL COSINES AND ANGLES',/) 556 FORMAT(' COS(AX) COS(AY) COS(AZ) ANG X ANG Y * ANG Z',/) C SUPPRESS LISTING OF BASE ATOM NUMBERS VIA C BEFORE TEN WRITE COMMANDS C WRITE(LUW,506) C WRITE(LUW,500) C WRITE(LUW,502)TITL C WRITE(LUW,501) NATM,NPLA REWIND L12 2020 FORMAT(3F10.5,11X,A1,I2,5A1) 2021 FORMAT(3F10.5,11X,A1,I3,4A1) DO 10 I=1,NATM IF (IFRES.LE.1) X READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NAT(J,I),J=1,5) IF (IFRES.GT.1) X READ (L12,2021) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NAT(J,I),J=1,4) 10 CONTINUE DO 20 I=1,20 DO 20 J=1,3 DO 20 K=1,2 20 THE(I,J,K)=0.0 IF (INPBRL.EQ.0) CALL SETBRL DO 220 M=1,NPLA C WRITE(LUW,503) M C WRITE(LUW,504) NC(1,M),NC(2,M) NA11=NB1(1,M) NA12=NB1(2,M) NA21=NB2(1,M) NA22=NB2(2,M) C WRITE(LUW,505) NA11,NA12 C WRITE(LUW,505) NA21,NA22 L=0 DO 30 IDR=NA11,NA12 L=L+1 NA1(L)=IDR 30 CONTINUE NA1(L+1)=0 C WRITE(LUW,505) (NA1(J),J=1,L) L=0 DO 40 IDR=NA21,NA22 L=L+1 NA2(L)=IDR 40 CONTINUE NA2(L+1)=0 C WRITE(LUW,505) (NA2(J),J=1,L) DO 70 K=1,15 NTEST=NA1(K) IF(NTEST) 80,80,50 50 DO 60 J=1,3 XMIN(K,J)=ATM(J,NTEST) 60 CONTINUE 70 CONTINUE K=K+1 80 NPL=K-1 CALL MATRIX(XMIN,A,NPL) CALL EIGEN2(A,EIG) DO 90 J=1,3 PLA(M,1,J)=EIG(20,J) 90 CONTINUE DO 120 K=1,15 NTEST=NA2(K) IF(NTEST) 130,130,100 100 DO 110 J=1,3 XMIN(K,J)=ATM(J,NTEST) 110 CONTINUE 120 CONTINUE K=K+1 130 NPL=K-1 CALL MATRIX(XMIN,A,NPL) CALL EIGEN2(A,EIG) DO 140 J=1,3 PLA(M,2,J)=EIG(20,J) 140 CONTINUE DO 160 K=1,15 NTEST=NA1(K) IF(NTEST.LE.0) GO TO 170 DO 150 J=1,3 XMIN(K,J)=ATM(J,NTEST) 150 CONTINUE 160 CONTINUE K=K+1 170 K=K-1 DO 190 L=1,15 NTEST=NA2(L) IF(NTEST.LE.0) GO TO 200 DO 180 J=1,3 LI=K+L XMIN(LI,J)=ATM(J,NTEST) 180 CONTINUE 190 CONTINUE L=L+1 200 NPL=K+L-1 CALL MATRIX(XMIN,A,NPL) CALL EIGEN2(A,EIG) DO 210 J=1,3 PLA(M,3,J)=EIG(20,J) 210 CONTINUE 220 CONTINUE WRITE(LUW,506) WRITE(LUW,500) WRITE(LUW,502)TITL DO 250 J=1,3 IF(J-3)600,601,600 601 WRITE(LUW,555) WRITE(LUW,556) GO TO 602 600 CONTINUE WRITE(LUW,507) J WRITE(LUW,556) 602 CONTINUE DO 240 M=1,NPLA DO 230 K=1,3 CSN=PLA(M,J,K) ANG(K)=57.29578* ACOS(CSN) 230 CONTINUE WRITE(LUW,508) (PLA(M,J,K),K=1,3),(ANG(K),K=1,3) 240 CONTINUE 250 CONTINUE C CALCULATE AND STORE TIP AND INCLINATION DO 300 I=1,NPLA NC1=NC(1,I) NC2=NC(2,I) DELX=ATM(1,NC1)-ATM(1,NC2) DELY=ATM(2,NC1)-ATM(2,NC2) DENO=SQRT(DELX**2+DELY**2) SUMX=(ATM(1,NC1)+ATM(1,NC2))*0.5 SUMY=(ATM(2,NC1)+ATM(2,NC2))*0.5 HVEC=SQRT(SUMX**2+SUMY**2) SLI(I)=(DELX*SUMX+DELY*SUMY)/DENO DIS(I)=(SUMX*DELY-DELX*SUMY)/DENO HYP(I)=HVEC ROT12(I)=DENO DELZ=ATM(3,NC1)-ATM(3,NC2) SV(1)=DELX SV(2)=DELY SV(3)=DELZ DO 260 K=1,3 RV(1,K)=PLA(I,1,K) RV(2,K)=PLA(I,2,K) 260 CONTINUE SV2=SV(1)**2+SV(2)**2+SV(3)**2 DO 280 J=1,2 RDS=RV(J,1)*SV(1)+RV(J,2)*SV(2)+RV(J,3)*SV(3) AKO=RDS/SV2 CALB=AKO*SQRT(SV2) ALB(J)=57.29578* ACOS(CALB) DO 270 K=1,3 PV(J,K)=RV(J,K)-AKO*SV(K) 270 CONTINUE PM(J)=SQRT(PV(J,1)**2+PV(J,2)**2+PV(J,3)**2) 280 CONTINUE BKL(I)=ALB(2) - ALB(1) COPT=PV(1,1)*PV(2,1)+PV(1,2)*PV(2,2)+PV(1,3)*PV(2,3) COPU=COPT/(PM(1)*PM(2)) ANSUP=57.29578* ACOS(COPU) PTW(I)=-ANSUP C REPLACE PTW(I) AS JUST CALCULATED WITH IMPROVED PROPELLER TWIST C WITH PROPER SIGN CONTROL DO 700 J=1,2 TV(J,1)=SV(2)*RV(J,3)-SV(3)*RV(J,2) TV(J,2)=SV(3)*RV(J,1)-SV(1)*RV(J,3) TV(J,3)=SV(1)*RV(J,2)-SV(2)*RV(J,1) TV2(J)=TV(J,1)**2+TV(J,2)**2+TV(J,3)**2 700 CONTINUE VSR=SV(1)*(RV(2,2)*RV(1,3)-RV(2,3)*RV(1,2))+SV(2)*(RV(2,3)*RV(1,1) *-RV(2,1)*RV(1,3))+SV(3)*(RV(2,1)*RV(1,2)-RV(2,2)*RV(1,1)) SPI=VSR*SQRT(SV2/(TV2(1)*TV2(2))) PTW(I)=57.29578*ASIN(SPI) TIL(I)=57.29578*ATAN2(DELZ,DENO) DO 290 J=1,3 SINR=(PLA(I,J,1)*DELY-PLA(I,J,2)*DELX)/DENO PHI(I,J,1)=57.29578* ASIN(SINR) SINT=(PLA(I,J,1)*DELX+PLA(I,J,2)*DELY)/DENO PHI(I,J,2)=-57.29578* ASIN(SINT) 290 CONTINUE 300 CONTINUE C REPLACE TIL(I) AS JUST CALCULATED BY DIFFERENCE IN BUCKLE NST=NPLA-1 DO 610 I=1,NST I1 = I+1 TIL(I)=BKL(I1)-BKL(I) 610 CONTINUE C CALCULATE AND STORE ROLL AND TILT AS THETA(I,J,1) AND THETA (I,J,2) NST=NPLA-1 DO 3330 I=1,NST I1=I+1 NC1=NC(1,I) NC2=NC(2,I) ND1=NC(1,I1) ND2=NC(2,I1) DX=ATM(1,ND1)-ATM(1,ND2)-ATM(1,NC1)+ATM(1,NC2) DY=ATM(2,ND1)-ATM(2,ND2)-ATM(2,NC1)+ATM(2,NC2) DENO=SQRT(DX**2+DY**2) DO 3320 J=1,3 DA=PLA(I1,J,1)-PLA(I,J,1) DB=PLA(I1,J,2)-PLA(I,J,2) SINR=(DA*DX+DB*DY)/DENO THE(I,J,1)=-57.29578*ASIN(SINR) SINT=(DB*DX-DA*DY)/DENO IF(SINT.GT.1.0) SINT=1.0 THE(I,J,2)=57.29578*ASIN(SINT) 3320 CONTINUE 3330 CONTINUE C CALCULATE AND STORE RADJ AND TADJ AS THETA(I,J,3) AND THETA (I,J,4) NST=NPLA-1 DO 330 I=1,NST I1=I+1 C NC2 is complementary to NC1 in base pair C, and ND2 to ND1 in base pair D. NC1=NC(1,I) NC2=NC(2,I) ND1=NC(1,I1) ND2=NC(2,I1) C Compute the x and y components of vectors defining base pair long axes. DX1=ATM(1,NC1)-ATM(1,NC2) DY1=ATM(2,NC1)-ATM(2,NC2) DX2=ATM(1,ND1)-ATM(1,ND2) DY2=ATM(2,ND1)-ATM(2,ND2) C Find sine and cosine of angles between the two long axes and the C coordinate system's x axis. CO1=DX1/SQRT(DX1*DX1+DY1*DY1) SI1=DY1/SQRT(DX1*DX1+DY1*DY1) CO2=DX2/SQRT(DX2*DX2+DY2*DY2) SI2=DY2/SQRT(DX2*DX2+DY2*DY2) C Retrieve the x,y,z components of the normal vectors of the two separate C bases (J=1,2) and the common plane through both bases (J=3). DO 320 J=1,3 A1=PLA(I,J,1) A2=PLA(I1,J,1) B1=PLA(I,J,2) B2=PLA(I1,J,2) C1=PLA(I,J,3) C2=PLA(I1,J,3) C Rotate the normal vectors about the appropriate angle as to make both C long axes parallel to the x axis. A1R= A1 * CO1 - B1 * (-SI1) B1R= A1 * (-SI1) + B1 * CO1 A2R= A2 * CO2 - B2 * (-SI2) B2R= A2 * (-SI2) + B2 * CO2 C Now the normal vectors are oriented so their long axes are parallel to the C coordinate x axis. Tadj then is simply the angle between the two C normal vectors, projected onto the XZ plane. Radj is the angle C between the same two vectors, projected onto the YZ plane. C Radj: THE(I,J,3)=57.29578* ATAN2(B1R*C2-B2R*C1, B1R*B2R+C1*C2) C Tadj: THE(I,J,4)=57.29578* ATAN2(A1R*C2-A2R*C1, A1R*A2R+C1*C2) C Note: The simple ARCCOS will not generally give the correct sign of the C angle. The following relations is used instead: C Tan(Angle between v1 and v2) = |v1 [cross] v2| / v1 [dot] v2 C ATAN2 is the standard FORTRAN subroutine to yield the proper sign of C a tangent given as a ratio of two signed quantities. DO 310 K=1,3 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. 310 CONTINUE AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) SLJ(I)=-ADB/AMAG SLJ(I1)=0.0 320 CONTINUE 330 CONTINUE C PRINT OUT ROLL AND TILT ANGLES WRITE(LUW,506) WRITE(LUW,500) WRITE(LUW,502)TITL DO 335 L=1,12 SSQ(L)=0. 335 SIG(L)=0. N1=0 DO 420 J=2,3 IF(J-2)340,340,350 340 WRITE(LUW,509) WRITE(LUW,516) WRITE(LUW,510) WRITE(LUW,516) GO TO 360 350 WRITE(LUW,511) WRITE(LUW,516) WRITE(LUW,512) WRITE(LUW,516) 360 DO 410 M=1,NPLA IF(J-2)370,370,380 370 K=J-1 C........1.........2.........3.........4.........5.........6.........712 WRITE(LUW,513)PHI(M,K,1),PHI(M,K,2),THE(M,K,1),THE(M,K,2),THE(M,K, *3),THE(M,K,4),PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2),THE(M,J, *3),THE(M,J,4) GO TO 400 380 N1=N1+1 SIG(1) = SIG(1) + PHI(M,J,1) SSQ(1) = SSQ(1) + PHI(M,J,1)*PHI(M,J,1) SIG(2) = SIG(2) + PHI(M,J,2) SSQ(2) = SSQ(2) + PHI(M,J,2)*PHI(M,J,2) SIG(8) = SIG(8) + PTW(M) SSQ(8) = SSQ(8) + PTW(M)*PTW(M) SIG(9) = SIG(9) + BKL(M) SSQ(9) = SSQ(9) + BKL(M)*BKL(M) SIG(11) = SIG(11) + DIS(M) SSQ(11) = SSQ(11) + DIS(M)*DIS(M) SIG(12) = SIG(12) + SLI(M) SSQ(12) = SSQ(12) + SLI(M)*SLI(M) IF (M.NE.NPLA) GO TO 390 WRITE(LUW,521)PHI(M,J,1),PHI(M,J,2),PTW(M),BKL(M),DIS(M),SLI(M) GO TO 400 390 SIG(3) = SIG(3) + THE(M,J,1) SSQ(3) = SSQ(3) + THE(M,J,1)*THE(M,J,1) SIG(4) = SIG(4) + THE(M,J,2) SSQ(4) = SSQ(4) + THE(M,J,2)*THE(M,J,2) SIG(5) = SIG(5) + THE(M,J,3) SSQ(5) = SSQ(5) + THE(M,J,3)*THE(M,J,3) SIG(6) = SIG(6) + THE(M,J,4) SSQ(6) = SSQ(6) + THE(M,J,4)*THE(M,J,4) SIG(7) = SIG(7) + TIL(M) SSQ(7) = SSQ(7) + TIL(M)*TIL(M) SIG(10) = SIG(10) + SLJ(M) SSQ(10) = SSQ(10) + SLJ(M)*SLJ(M) C........1.........2.........3.........4.........5.........6.........712 WRITE(LUW,513)PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2),THE(M,J, *3),THE(M,J,4),TIL(M),PTW(M),BKL(M),SLJ(M),DIS(M),SLI(M) 400 CONTINUE 410 CONTINUE 420 CONTINUE WRITE(LUW,522) DO 440 I=1,12 NN = N1 C IF (I.EQ.3.OR.I.EQ.4.OR.I.EQ.8) NN=N1-1 IF(I.EQ.3.OR.I.EQ.4.OR.I.EQ.5.OR.I.EQ.6.OR.I.EQ.7.OR.I.EQ.10)NN=N1 *-1 AV(I)=SIG(I)/NN SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) IF (SDZ.LE.0.0001) SDZ=0. SD(I) = SQRT(SDZ) 440 CONTINUE WRITE (LUW,523) (AV(I),I=1,12) WRITE(LUW,516) WRITE (LUW,524) (SD(I),I=1,12) WRITE(LUW,516) WRITE(LUW,517) WRITE(LUW,518) WRITE(LUW,519) WRITE(LUW,520) WRITE(LUW,560) WRITE(LUW,561) WRITE(LUW,562) WRITE(LUW,563) WRITE(LUW,564) WRITE(LUW,565) WRITE(LUW,566) WRITE(LUW,567) RETURN END C------------------------- C SUBROUTINE CHSIGN C------------------------- SUBROUTINE CHSIGN (ICHSGN) CHARACTER * 8 ABUF CHARACTER * 4 MH,NAME CHARACTER * 1 IR,TITL CHARACTER * 3 KRES1,KRES2 CHARACTER * 3 ANAM1,ANAM2 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL X ,L15 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON/BROOK/IBARF,IFRES I=0 10 CONTINUE I=I+1 IF (I.EQ.NATOM) GO TO 100 J=I IF (IFRES.GT.1) GO TO 15 KRES1=NAME(1,I)(2:3)//' ' ANAM1=NAME(1,I)(4:4)//NAME(2,I)(1:2) GO TO 20 15 KRES1=NAME(1,I)(2:4) ANAM1=NAME(2,I)(1:3) 20 CONTINUE J=J+1 IF (J.GT.NATOM) GO TO 10 IF (IFRES.LE.1) KRES2=NAME(1,J)(2:3)//' ' IF (IFRES.GT.1) KRES2=NAME(1,J)(2:4) IF (KRES1.EQ.KRES2) GO TO 20 IF (IFRES.LE.1) ANAM2=NAME(1,J)(4:4)//NAME(2,J)(1:2) IF (IFRES.GT.1) ANAM2=NAME(2,J)(1:3) IF (ANAM1.NE.ANAM2) GO TO 20 IF (ATM(3,I).EQ.ATM(3,J)) GO TO 20 IF (ATM(3,I).GT.ATM(3,J)) RETURN ICHSGN=1 RETURN 100 WRITE (LUW,500) 500 FORMAT (//,' ***** NO MATCHING ATOMS BETWEEN RESIDUES *****',//) RETURN END C------------------------- C SUBROUTINE CYLIN C------------------------- SUBROUTINE CYLIN CHARACTER * 4 MH,NAME CHARACTER * 9 NNAME(20) CHARACTER * 3 PBL,C1P,FFC,LN1,LN9,N1N9,O4P,O1P CHARACTER * 4 NTP CHARACTER * 1 IR,TITL,L1,L2,L3,NAT,CC,TT,MM,DOT,CHECK CHARACTER * 1 ZZ,XX,YY,UU,VV COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),NAT(5,1000) COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,20) COMMON/BROOK/IBARF,IFRES,NPLA DIMENSION PS(2,20,5),CS(2,20,5),DQHP(2,20,4),STR(2,20,11),NK(4), 1 D1(3),D2(3),HOL(20),PDIT(20,20),AM(3),BM(3),NA(3),NB(3), 2 SIG1(7),SSQ1(7),AV1(7),SD1(7),SIG2(11),SSQ2(11),AV2(11),SD2(11) 3 ,ND(2,20),ALAMD1(20),ALAMD2(20),O4S(2,21,5),O4DIT(21,21) DATA PBL/'P '/,C1P/'C1'''/,LN1/'N1 '/,LN9/'N9 '/ DATA ZZ/'Z'/,XX/'X'/,YY/'Y'/,UU/'U'/,VV/'V'/ DATA CC/'C'/,TT/'T'/,MM/'M'/,DOT/'.'/,O4P/'O4'''/,O1P/'O1'''/ 500 FORMAT(1X,' CYLINDRICAL PARAMETERS, NEWHEL93') 501 FORMAT(/,I5,' ATOMS AND ',I5,' BASE PAIRS') 502 FORMAT(/,1X,72A1,/) 503 FORMAT(2I5) 504 FORMAT(/,' PHOSPHATE BACKBONE TABLE, 5" TO 3" DIRECTION IN EACH ST *RAND',/) 505 FORMAT(' R PHI Z D Q H PI') 506 FORMAT(/,' STRAND ',I4,/) 507 FORMAT(7F8.2) 508 FORMAT(20I5) 509 FORMAT(/,2X,' ROTATION AND RISE TABLE, 5" TO 3" DIRECTION',/) 510 FORMAT(' S5" S3" Dxy TwC1" TWIST Dz RISE SLIDE *X DSP Y DSP Dxyz') 511 FORMAT(/,' STRAND ',I4,/) 512 FORMAT(5F7.2,2F7.3,4F7.2) C........1.........2.........3.........4.........5.........6.........712 513 FORMAT(' Twist, Rise, Dxyz and Dxy are magnitudes. All other quan *tities have') 514 FORMAT(' opposite signs for ascending and descending strands.') 515 FORMAT(1H1) 516 FORMAT(' PHOSPHORUS-PHOSPHORUS DISTANCES LESS 5.8 A',/) 536 FORMAT(' SUGAR O4"--O4" DISTANCES LESS 2.8 A',/) 517 FORMAT(' STRAND 1 DOWN, STRAND 2 ACROSS, 5" TO 3" DIRECTION') 555 FORMAT(1H ) 518 FORMAT(1X,20F6.2) 519 FORMAT(3F8.2,4(5X,'-',2X)) 520 FORMAT(7(2X,'______'),/) 521 FORMAT(7F8.2,' AV',/) 522 FORMAT(7F8.2,' SD',/) 523 FORMAT(F7.2,7(4X,'-',2X),3F7.2) 524 FORMAT(11(2X,'_____'),/) 525 FORMAT(11F7.2,' AV') 526 FORMAT(11F7.2,' SD',/) 527 FORMAT(4X,'-',2X,4F7.2,2F7.3,4F7.2) 528 FORMAT (//,2X,'RESIDUE LAMBDA(1) LAMBDA(2)',/) 529 FORMAT (2X,A9,2F10.2) 530 FORMAT (/,2X,'ANGLES BETWEEN GLYCOSIDIC BONDS AND C1'' - C1'' BASE X - PAIR VECTORS') RAD=0.0174533 WRITE(LUW,515) WRITE (LUW,500) WRITE(LUW,502)TITL WRITE(LUW,501) NATM,NPLA REWIND L12 2020 FORMAT(3F10.5,11X,A3,5A1) 2021 FORMAT(3F10.5,11X,A4,4A1) DO 10 I=1,NATM IF (IFRES.LE.1) X READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),(NAT(J,I),J=1,5) IF (IFRES.GT.1) X READ (L12,2021) (ATM(J,I),J=1,3),NTP(I),(NAT(J,I),J=1,4) 10 CONTINUE NPHO=NPLA-1 DO 40 I=1,2 DO 30 J=1,NPHO DO 20 K=1,4 DQHP(I,J,K)=0.0 20 CONTINUE 30 CONTINUE 40 CONTINUE DO 70 I=1,2 DO 60 J=1,NPLA DO 50 K=1,11 STR(I,J,K)=0.0 50 CONTINUE 60 CONTINUE 70 CONTINUE IF (INPCYL.NE.0) GO TO 110 NHALF=NATM/2 DO 100 KK=1,2 IFLAG=0 J=0 L=0 N=0 LO=0 DO 100 M=1,NHALF I=(KK-1)*NHALF+M N1N9=LN9 CHECK=NTP(I)(1:1) IF (CHECK.EQ.CC.OR.CHECK.EQ.TT.OR.CHECK.EQ.MM.OR.CHECK.EQ.ZZ) x N1N9=LN1 IF (CHECK.EQ.XX.OR.CHECK.EQ.YY.OR.CHECK.EQ.UU.OR.CHECK.EQ.VV) x N1N9=LN1 L1=NAT(1,I) L2=NAT(2,I) L3=NAT(3,I) FFC=L1//L2//L3 80 IF (FFC.EQ.PBL) GO TO 90 IF (FFC.EQ.O4P) GO TO 701 IF (FFC.EQ.O4P) GO TO 701 702 IF (FFC.NE.C1P) GO TO 95 L=L+1 NC(KK,L)=I GO TO 100 90 J=J+1 NP(KK,J)=I GO TO 100 701 LO=LO+1 NO(KK,LO)=I GO TO 702 95 IF (FFC.NE.N1N9) GO TO 100 N=N+1 ND(KK,N)=I IFLAG=1 100 CONTINUE IF (IFLAG.EQ.0) ND(2,N)=I 110 DO 140 I=1,2 DO 130 J=1,NPHO NPH=NP(I,J) DO 120 K=1,3 PS(I,J,K)=ATM(K,NPH) 120 CONTINUE X=PS(I,J,1) Y=PS(I,J,2) R=SQRT(X**2+Y**2) PHI=57.29578*ATAN2(Y,X) PS(I,J,4)=R IF (PHI.LT.0.) PHI=360.+PHI PS(I,J,5)=PHI 130 CONTINUE 140 CONTINUE DO 141 I=1,2 DO 131 J=1,NPLA NO4=NO(I,J) DO 121 K=1,3 O4S(I,J,K)=ATM(K,NO4) 121 CONTINUE 131 CONTINUE 141 CONTINUE DO 160 I=1,2 DO 150 J=1,NPLA NCA=NC(I,J) CS(I,J,1)=ATM(1,NCA) CS(I,J,2)=ATM(2,NCA) CS(I,J,3)=ATM(3,NCA) X=CS(I,J,1) Y=CS(I,J,2) R=SQRT(X**2+Y**2) PHI=57.29578*ATAN2(Y,X) CS(I,J,4)=R CS(I,J,5)=PHI 150 CONTINUE 160 CONTINUE NPS=NPHO-1 DO 180 I=1,2 DO 170 J=1,NPS J1=J+1 DX=PS(I,J1,1)-PS(I,J,1) DY=PS(I,J1,2)-PS(I,J,2) DZ=PS(I,J1,3)-PS(I,J,3) D=SQRT(DX**2+DY**2+DZ**2) Q=SQRT(DX**2+DY**2) H=DZ SINP=H/D PIT=57.29578* ASIN(SINP) DQHP(I,J,1)=D DQHP(I,J,2)=Q DQHP(I,J,3)=H DQHP(I,J,4)=PIT 170 CONTINUE 180 CONTINUE WRITE(LUW,504) WRITE(LUW,505) DO 190 I=1,7 SSQ1(I)=0. 190 SIG1(I)=0. N1=0 DO 230 I=1,2 WRITE(LUW,506)I DO 220 J=1,NPHO N1=N1+1 SIG1(1) = SIG1(1) + PS(I,J,4) SSQ1(1) = SSQ1(1) + PS(I,J,4)*PS(I,J,4) SIG1(2) = SIG1(2) + PS(I,J,5) SSQ1(2) = SSQ1(2) + PS(I,J,5)*PS(I,J,5) SIG1(3) = SIG1(3) + PS(I,J,3) SSQ1(3) = SSQ1(3) + PS(I,J,3)*PS(I,J,3) IF (J.NE.NPHO) GO TO 200 WRITE(LUW,519) PS(I,J,4),PS(I,J,5),PS(I,J,3) GO TO 220 200 DO 210 K=1,4 SIG1(3+K) = SIG1(3+K) + DQHP(I,J,K) 210 SSQ1(3+K) = SSQ1(3+K) + DQHP(I,J,K)*DQHP(I,J,K) WRITE(LUW,507)PS(I,J,4),PS(I,J,5),PS(I,J,3),(DQHP(I,J,K),K=1,4) 220 CONTINUE 230 CONTINUE DO 240 I=1,7 NN = N1 IF (I.GT.3) NN=N1-2 AV1(I)=SIG1(I)/NN SDZ = (NN*SSQ1(I) - SIG1(I)*SIG1(I))/(NN*(NN-1)) IF (SDZ.LE.0.0001) SDZ=0. SD1(I) = SQRT(SDZ) 240 CONTINUE WRITE (LUW,520) WRITE (LUW,521) (AV1(I),I=1,7) WRITE (LUW,522) (SD1(I),I=1,7) DO 390 I=1,2 ANUL=0.000 STR(I,1,1)=ANUL STR(I,1,3)=ANUL DO 250 L=2,7 STR(I,NPLA,K)=ANUL 250 CONTINUE DO 380 J=1,NPHO J1=J+1 IJ=NPLA-J+1 IJ1=NPLA-J C CALCULATE S5' DIF=CS(I,J1,5)-PS(I,J,5) 260 IF(DIF-180.) 280,280,270 270 DIF=DIF-360. GO TO 260 280 IF(DIF+180.) 290,290,300 290 DIF=DIF+360. GO TO 280 300 STR(I,J1,1)=DIF C CALCULATE S3' DIF=PS(I,J,5)-CS(I,J,5) 310 IF(DIF-180.) 330,330,320 320 DIF=DIF-360. GO TO 310 330 IF(DIF+180.) 340,340,350 340 DIF=DIF+360. GO TO 330 350 STR(I,J,2)=DIF C CALCULATE Q(C1") AND T DX=CS(I,J,1)-CS(I,J1,1) DY=CS(I,J,2)-CS(I,J1,2) STR(I,J,3)=SQRT(DX**2+DY**2) 370 STR(I,J,4)=STR(I,J1,1)+STR(I,J,2) C CALCULATE TGLOBAL DX1=CS(1,J,1)-CS(2,IJ,1) DX2=CS(1,J1,1)-CS(2,IJ1,1) DY1=CS(1,J,2)-CS(2,IJ,2) DY2=CS(1,J1,2)-CS(2,IJ1,2) R1=SQRT(DX1**2+DY1**2) R2=SQRT(DX2**2+DY2**2) R12=DX1*DX2+DY1*DY2 COA=R12/(R1*R2) STR(I,J,5)=57.29578* ACOS(COA) C CALCULATE H AND HGLOBAL STR(I,J,6)=CS(I,J1,3)-CS(I,J,3) STR(I,J,7)=ABS(CS(1,J1,3)-CS(1,J,3)+CS(2,IJ1,3)-CS(2,IJ,3))/2. 380 CONTINUE 390 CONTINUE C PRINT ANGLE TABLE DO 420 K=5,7,2 DO 400 J=1,NPHO IJ=NPHO-J+1 HOL(J)=STR(2,IJ,K) 400 CONTINUE DO 410 J=1,NPHO STR(2,J,K)=HOL(J) 410 CONTINUE 420 CONTINUE WRITE(LUW,515) WRITE(LUW,500) WRITE(LUW,502)TITL WRITE(LUW,509) WRITE(LUW,510) DO 430 I=1,NPLA N1=NC(1,I) NK(2)=N1 NK(1)=ND(1,I) I2=NPLA-I+1 N2=NC(2,I2) NK(3)=N2 NK(4)=ND(2,I2) DO 425 K=1,3 NA(K)=NK(K) NB(K)=NK(4-K+1) 425 CONTINUE CALL ANGLE (NA,TE,ATM) ALAMD1(I)=TE/RAD CALL ANGLE (NB,TE,ATM) ALAMD2(I)=TE/RAD NNAME(I)=NTP(NK(1))//DOT//NTP(NK(3)) DX=ATM(1,N1)-ATM(1,N2) DY=ATM(2,N1)-ATM(2,N2) SX=(ATM(1,N1)+ATM(1,N2))/2. SY=(ATM(2,N1)+ATM(2,N2))/2. HM=SQRT(SX**2+SY**2) RM=SQRT(DX**2+DY**2) SL=(SX*DX+SY*DY)/RM DS=(SX*DY-SY*DX)/RM STR(1,I,10)=SL STR(1,I,9)=DS STR(1,I,11)=RM C REPLACE C1/C1 BY D(C1") DCSQ=STR(1,I,3)**2+STR(1,I,6)**2 STR(1,I,11)=SQRT(DCSQ) DCSQ=STR(2,I,3)**2+STR(2,I,6)**2 STR(2,I,11)=SQRT(DCSQ) 430 CONTINUE NST=NPLA-1 DO 450 I=1,NST I1=I+1 I2=NPLA-I+1 I3=NPLA-I NC1=NC(1,I) NC2=NC(2,I2) ND1=NC(1,I1) ND2=NC(2,I3) DO 440 K=1,3 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. 440 CONTINUE AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) STR(1,I,8)=-ADB/AMAG STR(1,I1,8)=0.00 450 CONTINUE DO 460 I=1,11 SSQ2(I)=0. 460 SIG2(I)=0. N1=0 DO 620 J=1,NPLA N1=N1+1 DO 470 K=9,11 SIG2(K) = SIG2(K) + STR(1,J,K) 470 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) KK=2 IF (J.GT.1) GO TO 480 KK=4 SIG2(2) = SIG2(2) + STR(1,J,2) SSQ2(2) = SSQ2(2) + STR(1,J,2)*STR(1,J,2) GO TO 600 480 SIG2(1) = SIG2(1) + STR(1,J,1) SSQ2(1) = SSQ2(1) + STR(1,J,1)*STR(1,J,1) IF (J.EQ.NPLA) GO TO 620 600 DO 610 K=KK,8 SIG2(K) = SIG2(K) + STR(1,J,K) 610 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) 620 CONTINUE DO 630 I=1,11 IF (I.EQ.3) THEN NN=N1-(I-1) ELSE IF (I.GE.9) THEN NN=N1 ELSE NN=N1-1 ENDIF ENDIF AV2(I)=SIG2(I)/NN SDZ = (NN*SSQ2(I) - SIG2(I)*SIG2(I))/(NN*(NN-1)) IF (SDZ.LE.0.0001) SDZ=0. SD2(I) = SQRT(SDZ) 630 CONTINUE DO 650 I=1,2 WRITE(LUW,511)I DO 640 J=1,NPLA IF (I.NE.1.OR.(J.NE.NPLA.AND.J.NE.1)) WRITE(LUW,512) * (STR(I,J,K),K=1,11) IF (I.EQ.1.AND.J.EQ.NPLA) WRITE (LUW,523) STR(I,J,1), * (STR(I,J,K),K=9,11) IF (I.EQ.1.AND.J.EQ.1) WRITE (LUW,527) STR(I,J,2), * (STR(I,J,K),K=3,11) 640 CONTINUE IF (I.GT.1) GO TO 650 WRITE(LUW,524) WRITE (LUW,525) (AV2(K),K=1,11) WRITE(LUW,508) WRITE (LUW,526) (SD2(K),K=1,11) 650 CONTINUE WRITE(LUW,555) WRITE(LUW,513) WRITE(LUW,514) WRITE(LUW,515) WRITE(LUW,500) WRITE(LUW,502)TITL WRITE(LUW,530) WRITE(LUW,528) WRITE (LUW,529) (NNAME(I),ALAMD1(I),ALAMD2(I),I=1,NPLA) C CALCULATE AND PRINT ALL P-P DISTANCES BETWEEN STRANDS WRITE(LUW,515) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(LUW,500) WRITE(7,500) WRITE(LUW,502)TITL WRITE(7,502)TITL DO 670 I=1,NPHO DO 670 J=1,NPHO SUMMA=0.0 DO 660 K=1,3 660 SUMMA=SUMMA+(PS(1,I,K)-PS(2,J,K))**2 PDIT(I,J)=SQRT(SUMMA)-5.8 670 CONTINUE WRITE(LUW,516) WRITE(7,516) WRITE(LUW,517) WRITE(7,517) DO 680 I=1,NPHO WRITE(LUW,555) WRITE(7,555) WRITE(LUW,518)(PDIT(I,J),J=1,NPHO) WRITE(7,518)(PDIT(I,J),J=1,NPHO) 680 CONTINUE C CALCULATE AND PRINT ALL O4"-O4" DISTANCES BETWEEN STRANDS WRITE(LUW,515) WRITE(7,515) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(LUW,500) WRITE(7,500) WRITE(LUW,502) TITL WRITE(7,502) TITL NO4=NPHO+1 DO 770 I=1,NO4 DO 770 J=1,NO4 SUMMO=0.0 DO 760 K=1,3 760 SUMMO=SUMMO+(O4S(1,I,K)-O4S(2,J,K))**2 O4DIT(I,J)=SQRT(SUMMO)-2.8 770 CONTINUE WRITE(LUW,536) WRITE(7,536) WRITE(LUW,517) WRITE(7,517) DO 780 I=1,NO4 WRITE(LUW,555) WRITE(7,555) WRITE(LUW,518)(O4DIT(I,J),J=1,NO4) WRITE(7,518)(O4DIT(I,J),J=1,NO4) 780 CONTINUE RETURN END C------------------------- C SUBROUTINE DEFROT C------------------------- SUBROUTINE DEFROT(VECTOR,ANGLE,ROTOR) C DEFINE A GENERAL ROTATION MATRIX DIMENSION VECTOR(3),DIRCOS(3),ROTOR(3,3) DO 10 I=1,3 DO 10 J=1,3 10 ROTOR(I,J)=0.0 C=COS(ANGLE) S=SIN(ANGLE) VMAG=SQRT(DOTP(VECTOR,VECTOR)) DO 20 I=1,3 20 DIRCOS(I)=VECTOR(I)/VMAG ROTOR(1,2)=DIRCOS(3)*S ROTOR(2,1)=-ROTOR(1,2) ROTOR(3,1)=DIRCOS(2)*S ROTOR(1,3)=-ROTOR(3,1) ROTOR(2,3)=DIRCOS(1)*S ROTOR(3,2)=-ROTOR(2,3) DO 30 I=1,3 DO 30 J=1,3 30 ROTOR(I,J)=ROTOR(I,J)+DIRCOS(I)*DIRCOS(J)*(1.0-C) DO 40 I=1,3 40 ROTOR(I,I)=ROTOR(I,I)+C RETURN END C------------------------- C FUNCTION DOTP C------------------------- FUNCTION DOTP(X,Y) C TAKE THE DOT PRODUCT OF TWO CARTESIAN VECTORS DIMENSION X(3),Y(3) DOTP=0.0 DO 10 I=1,3 DOTP=DOTP+X(I)*Y(I) 10 CONTINUE RETURN END C------------------------- C SUBROUTINE EIGEN1 C------------------------- SUBROUTINE EIGEN1(A,R,N,MV) C COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL SYMMETRIC MATRIX DIMENSION A(1),R(1) RANGE=1.0E-6 IF(MV-1) 10,25,10 10 IQ=-N DO 20 J=1,N IQ=IQ+N DO 20 I=1,N IJ=IQ+I R(IJ)=0.0 IF(I-J) 20,15,20 15 R(IJ)=1.0 20 CONTINUE 25 ANORM=0.0 DO 35 I=1,N DO 35 J=I,N IF(I-J) 30,35,30 30 IA=I+(J*J-J)/2 ANORM=ANORM+A(IA)*A(IA) 35 CONTINUE IF(ANORM) 165,165,40 40 ANORM=1.414*SQRT(ANORM) ANRMX=ANORM*RANGE/FLOAT(N) IND=0 THR=ANORM 45 THR=THR/FLOAT(N) 50 L=1 55 M=L+1 60 MQ=(M*M-M)/2 LQ=(L*L-L)/2 LM=L+MQ 62 IF(ABS(A(LM))-THR) 130,65,65 65 IND=1 LL=L+LQ MM=M+MQ X=0.5*(A(LL)-A(MM)) 68 Y=-A(LM)/SQRT(A(LM)*A(LM)+X*X) IF(X) 70,75,75 70 Y=-Y 75 SINX=Y/SQRT(2.0*(1.0+(SQRT(1.0-Y*Y)))) SINX2=SINX*SINX 78 COSX=SQRT(1.0-SINX2) COSX2=COSX*COSX SINCS=SINX*COSX ILQ=N*(L-1) IMQ=N*(M-1) DO 125 I=1,N IQ=(I*I-I)/2 IF(I-L) 80,115,80 80 IF(I-M) 85,115,90 85 IM=I+MQ GO TO 95 90 IM=M+IQ 95 IF(I-L) 100,105,105 100 IL=I+LQ GO TO 110 105 IL=L+IQ 110 X=A(IL)*COSX-A(IM)*SINX A(IM)=A(IL)*SINX+A(IM)*COSX A(IL)=X 115 IF(MV-1) 120,125,120 120 ILR=ILQ+I IMR=IMQ+I X=R(ILR)*COSX-R(IMR)*SINX R(IMR)=R(ILR)*SINX+R(IMR)*COSX R(ILR)=X 125 CONTINUE X=2.0*A(LM)*SINCS Y=A(LL)*COSX2+A(MM)*SINX2-X X=A(LL)*SINX2+A(MM)*COSX2+X A(LM)=(A(LL)-A(MM))*SINCS+A(LM)*(COSX2-SINX2) A(LL)=Y A(MM)=X 130 IF(M-N) 135,140,135 135 M=M+1 GO TO 60 140 IF(L-(N-1)) 145,150,145 145 L=L+1 GO TO 55 150 IF(IND-1) 160,155,160 155 IND=0 GO TO 50 160 IF(THR-ANRMX) 165,165,45 165 IQ=-N DO 185 I=1,N IQ=IQ+N LL=I+(I*I-I)/2 JQ=N*(I-2) DO 185 J=I,N JQ=JQ+N MM=J+(J*J-J)/2 IF(A(LL)-A(MM)) 170,185,185 170 X=A(LL) A(LL)=A(MM) A(MM)=X IF(MV-1) 175,185,175 175 DO 180 K=1,N ILR=IQ+K IMR=JQ+K X=R(ILR) R(ILR)=R(IMR) 180 R(IMR)=X 185 CONTINUE RETURN END C------------------------- C SUBROUTINE EIGEN2 C------------------------- SUBROUTINE EIGEN2(A,EIG) CHARACTER * 1 IR,TITL COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL DIMENSION A(3,3),EIG(20,3) DIMENSION AX(6,6),B(3,3) C FIND THE LEAST EIGENVECTOR OF EQUATION AE=LE, WHERE A IS A 3X3 C MATRIX, L IS THE EIGENVALUE, AND E IS THE EIGENVECTOR. START C WITH E OR EIG=(0,0,1) AND ITERATE BY THE SWMB METHOD C (ACTA CRYST 14:185,1959) BY MULTIPLYING EIG BY B, WHERE C IS THE ADJOINT MATRIX OF A. HALT WHEN EIG CONVERGES (LESS THAN C 0.1% CHANGE BETWEEN CYCLES), OR AFTER 20 ITERATIONS. WRITE OUT C EACH EIGENVECTOR FOR INSPECTION. DO 1 I=1,3 DO 1 J=1,3 I3=I+3 J3=J+3 AX(I,J)=A(I,J) AX(I3,J)=A(I,J) AX(I,J3)=A(I,J) AX(I3,J3)=A(I,J) 1 CONTINUE DO 2 I=1,3 DO 2 J=1,3 I1=I+1 I2=I+2 J1=J+1 J2=J+2 B(J,I)=AX(I1,J1)*AX(I2,J2)-AX(I1,J2)*AX(I2,J1) 2 CONTINUE DO 3 I=2,20 DO 3 J=1,3 EIG(I,J)=0.0 3 CONTINUE EIG(1,1)=0.0 EIG(1,2)=0.0 EIG(1,3)=1.0 C SUPPRESS LISTING OF EIGENVECTOR ITERATIONS VIA C BEFORE FIVE WRITE C OR FORMAT COMMANDS C WRITE(LUW,5)(EIG(1,J),J=1,3) C5 FORMAT(' EIGENVECTOR=',3F10.5) DO 4 K=1,19 K1=K+1 EX=B(1,1)*EIG(K,1)+B(1,2)*EIG(K,2)+B(1,3)*EIG(K,3) EY=B(2,1)*EIG(K,1)+B(2,2)*EIG(K,2)+B(2,3)*EIG(K,3) EZ=B(3,1)*EIG(K,1)+B(3,2)*EIG(K,2)+B(3,3)*EIG(K,3) EN=SQRT(EX**2+EY**2+EZ**2) EIG(K1,1)=EX/EN EIG(K1,2)=EY/EN EIG(K1,3)=EZ/EN C WRITE(LUW,5)(EIG(K1,J),J=1,3) DO 6 J=1,3 DIF=ABS(EIG(K1,J)-EIG(K,J)) ARR=DIF/EIG(K1,J) ERR=ABS(ARR) IF(ERR-0.001)6,6,4 6 CONTINUE EIGZ=EIG(K1,3) SIGN=EIGZ/ABS(EIGZ) DO 8 J=1,3 EIG(20,J)=EIG(K1,J)*SIGN 8 CONTINUE GO TO 9 4 CONTINUE C TEST THE EIGENVECTOR BY CARRYING OUT AE=LE AND EXAMINING L 9 EX=A(1,1)*EIG(20,1)+A(1,2)*EIG(20,2)+A(1,3)*EIG(20,3) EY=A(2,1)*EIG(20,1)+A(2,2)*EIG(20,2)+A(2,3)*EIG(20,3) EZ=A(3,1)*EIG(20,1)+A(3,2)*EIG(20,2)+A(3,3)*EIG(20,3) ELAMX=EX/EIG(20,1) ELAMY=EY/EIG(20,2) ELAMZ=EZ/EIG(20,3) C WRITE(LUW,10)ELAMX,ELAMY,ELAMZ C10 FORMAT(' LEAST EIGENVALUES= ',3F12.8) RETURN END C------------------------- C SUBROUTINE GETATM C------------------------- SUBROUTINE GETATM(OMAT) CHARACTER * 5 ATAB CHARACTER * 4 MH,NORIG,NAME,NOX,NOY,NOZ,IBLNK CHARACTER * 1 IR,TITL,Y,R,A,T,G,C,L1,P1,P2,P3,P4,P5 CHARACTER * 60 FMT CHARACTER * 4 CC,EC COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP X ,IHELIX,IBROLL,ICYLIN,ITORNG COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), X ATAB(30,10),LSEQ(10) COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON/BROOK/IBARF,IFRES COMMON NAT,X(3,200),VEC(3,200),PIFAC DIMENSION IW1(3),IW2(3),OMAT(3,3),OATM(3,1000),DDUM(3) DATA NORIG/'ORGN'/,NOX/'A AX'/,NOY/'B AX'/,NOZ/'C AX'/ DATA IBLNK/' '/,Y/'Y'/,R/'R'/,T/'T'/,A/'A'/,G/'G'/,C/'C'/ 1000 FORMAT(72A1) WRITE(LUW,2000) TITL 2000 FORMAT(1H1,1X,72A1,/) WRITE(LUW,2222) 2222 FORMAT(' INPUT FRAC.COORDS. X,Y,Z AND ATOM NAME IN FORMAT:') WRITE(LUW,2986)FMT 2986 FORMAT(1X,A60,/) 1010 FORMAT(2I5) IF (INPHEL.NE.0) GO TO 100 DO 90 JJ=1,IHELIX NNH=0 DO 80 I=1,NATOM L1=NAME(1,I)(1:1) C L4=NAME(1,I)(4:4) C L5=NAME(2,I)(1:1) C L6=NAME(2,I)(2:2) C L7=NAME(2,I)(3:3) IF (IFRES.LE.1) CC=NAME(1,I)(4:4)//NAME(2,I)(1:3) IF (IFRES.GT.1) CC=NAME(2,I)(1:4) C CC=L4//L5//L6//L7 NUMBR=LSEQ(JJ) DO 60 J=1,NUMBR P1=ATAB(J,JJ)(1:1) P2=ATAB(J,JJ)(2:2) P3=ATAB(J,JJ)(3:3) P4=ATAB(J,JJ)(4:4) P5=ATAB(J,JJ)(5:5) EC=P2//P3//P4//P5 IF (P1.NE.R.AND.P1.NE.Y) EC=P1//P2//P3//P4 IF (P1.EQ.R) GO TO 40 IF (P1.EQ.Y) GO TO 50 30 IF (CC.EQ.EC) GO TO 70 GO TO 60 40 IF (L1.EQ.G.OR.L1.EQ.A) GO TO 30 GO TO 60 50 IF (L1.EQ.T.OR.L1.EQ.C) GO TO 30 60 CONTINUE GO TO 80 70 NNH=NNH+1 NSEQ(NNH,JJ)=I 80 CONTINUE MMH(JJ)=NNH 90 CONTINUE 100 WRITE(LUW,2010) NATOM,IFLAGP 2010 FORMAT(' WILL READ ',I5,' ATOMS: PRINT FLAG=',I5/) NAT=NATOM ATM(1,NAT+1)=0.0 ATM(2,NAT+1)=0.0 ATM(3,NAT+1)=0.0 ATM(1,NAT+2)=1.0 ATM(2,NAT+2)=0.0 ATM(3,NAT+2)=0.0 ATM(1,NAT+3)=0.0 ATM(2,NAT+3)=1.0 ATM(3,NAT+3)=0.0 ATM(1,NAT+4)=0.0 ATM(2,NAT+4)=0.0 ATM(3,NAT+4)=1.0 NAME(1,NAT+1)=NORIG NAME(1,NAT+2)=NOX NAME(1,NAT+3)=NOY NAME(1,NAT+4)=NOZ NAME(2,NAT+1)=IBLNK NAME(2,NAT+2)=IBLNK NAME(2,NAT+3)=IBLNK NAME(2,NAT+4)=IBLNK NAT=NAT+4 1020 FORMAT(6F10.5) WRITE(LUW,2333) 2333 FORMAT(/' CELL CONSTANTS A,B,C,ALPHA,BETA,GAMMA ARE:') WRITE(LUW,2020) CELL 2020 FORMAT(1X,6(F7.3,1X)/) CALL GETMAT(OMAT,CELL) WRITE(LUW,2025) IFLAGP 2025 FORMAT(' COORDINATES IN ORTHONORMAL SYSTEM: PRINT FLAG=',I5/) DO 120 I=1,NAT DO 111 J=1,3 111 DDUM(J)=ATM(J,I) CALL ROTATE(OMAT,DDUM) DO 112 J=1,3 112 ATM(J,I)=DDUM(J) IF(IFLAGP.NE.1) GO TO 110 WRITE(LUW,2015) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) 110 CONTINUE 2015 FORMAT (1X,I5,5X,3(F9.4,1X),1X,2A4) DO 120 J=1,3 OATM(J,I)=ATM(J,I) 120 CONTINUE CALL MINV(OMAT,3,DETOMT,IW1,IW2) RETURN END C------------------------- C SUBROUTINE GETHVC C------------------------- SUBROUTINE GETHVC C GET VECTORS RELATING EQUIVALENT ATOMS CHARACTER * 5 ATAB CHARACTER * 4 NAME CHARACTER * 1 IR,TITL CHARACTER * 60 FMT COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), X ATAB(30,10),LNUMB(10) COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP X ,IHELIX,IBROLL,ICYLIN,ITORNG COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON NAT,X(3,200),VEC(3,200),PIFAC DIMENSION FIELD(15) WRITE(LUW,2444) 2444 FORMAT(' **************************************'/) WRITE(LUW,2000) 2000 FORMAT(' ATOM PAIRS USED TO DETERMINE THE HELIX AXIS ARE:') IF (INPHEL.NE.0) GO TO 40 NVEC=0 DO 30 JJ=1,IHELIX NNH=MMH(JJ) KH=NNH/2 NMH=NNH-1 DO 20 K=1,NMH IF (K.EQ.KH) GO TO 20 IF (K.GT.KH) GO TO 10 NVEC=NVEC+1 IF(NVEC.GT.200) GO TO 120 NN1(NVEC)=NSEQ(K,JJ) NN2(NVEC)=NSEQ(K+1,JJ) GO TO 20 10 NVEC=NVEC+1 IF(NVEC.GT.200) GO TO 120 NN2(NVEC)=NSEQ(K,JJ) NN1(NVEC)=NSEQ(K+1,JJ) 20 CONTINUE 30 CONTINUE 40 DO 60 N=1,NVEC N2=NN2(N) N1=NN1(N) WRITE(LUW,2010) N1,(NAME(J,N1),J=1,2),N2,(NAME(J,N2),J=1,2) 2010 FORMAT(1X,2(I3,1X,2A4,8X),15A4) DO 50 I=1,3 X(I,N)=ATM(I,N1) VEC(I,N)=ATM(I,N2)-ATM(I,N1) 50 CONTINUE 60 CONTINUE WRITE(LUW,2444) IF(NVEC.GE.3) RETURN WRITE(LUW,2030) 2030 FORMAT(' LESS THAN 3 VECTORS: HELIX AXIS CANNOT BE DETERMINED') STOP 16 120 WRITE(LUW,2020) 2020 FORMAT(' ARRAYS EXCEEDED BY INPUT OF GT.200 VECTORS') STOP 16 END C------------------------- C SUBROUTINE GETMAT C------------------------- SUBROUTINE GETMAT(BMAT,CELCON) C GET THE MATRIX TO TRANSFORM INTO CARTESIAN COORDINATES REAL BMAT(3,3),CELCON(6),ANG(3) ANG(1)=CELCON(4) ANG(2)=CELCON(5) ANG(3)=CELCON(6) PIFAZE=3.1415926/180.0 DO 10 I=1,3 10 ANG(I)=ANG(I)*PIFAZE A1=CELCON(1) A2=CELCON(2) A3=CELCON(3) TEMP1=(COS(ANG(2))-COS(ANG(1))*COS(ANG(3))) TEMP2=SIN(ANG(1))*SIN(ANG(3)) OMG= ACOS(TEMP1/TEMP2) BMAT(1,1)=A1*SIN(ANG(3))*SIN(OMG) BMAT(1,2)=0.0 BMAT(1,3)=0.0 BMAT(2,1)=A1*COS(ANG(3)) BMAT(2,2)=A2 BMAT(2,3)=A3*COS(ANG(1)) BMAT(3,1)=A1*SIN(ANG(3))*COS(OMG) BMAT(3,2)=0.0 BMAT(3,3)=A3*SIN(ANG(1)) RETURN END C------------------------- C SUBROUTINE HELIX C------------------------- SUBROUTINE HELIX CHARACTER * 5 ATAB CHARACTER * 4 NAME,MH CHARACTER * 1 IR,TITL CHARACTER * 60 FMT COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), X ATAB(30,10) COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON/BROOK/IBARF,IFRES,NPLA COMMON NAT,X(3,200),VEC(3,200),PIFAC INTEGER LS1(200),LS2(200) REAL ROT(3,3),A(200,2),G(200),XYC(2),SGXYC(2),XYZC(3) REAL ROTOT(3,3),WORK(3,3),OMAT(3,3),OUHV(3) REAL X1(3),X2(3),UHV(3),XLS(200,200),ELS(200),UXYZ(3,3) DATA UXYZ/1.0, 3*0.0, 1.0, 3*0.0, 1.0/ PIFAC=3.1415926/180.0 C I/O UNIT ASSIGNMENTS:CARD READ,PRINTER,AND IFPUN.NE.0 CALL READAT CALL GETATM(OMAT) CALL GETHVC CALL MLSP(NVEC,VEC,UHV,DZ,SIGPL) TOL=1.0E-5 IF((ABS(UHV(1)).LE.TOL).AND.(ABS(UHV(2)).LE.TOL)) GO TO 200 ANG= ACOS(UHV(1)/SQRT(UHV(1)**2+UHV(2)**2)) IF(UHV(2).LE.0.0) ANG=-ANG CALL DEFROT(UXYZ(1,3),ANG,ROT) CALL MATMUL(ROTOT,ROT,UXYZ,WORK,3,3,3) DO 100 I=1,NAT CALL ROTATE(ROT,ATM(1,I)) 100 CONTINUE DO 110 I=1,NVEC CALL ROTATE(ROT,X(1,I)) CALL ROTATE(ROT,VEC(1,I)) 110 CONTINUE 200 CONTINUE ANG= ACOS(UHV(3)) CALL DEFROT(UXYZ(1,2),ANG,ROT) CALL MATMUL(ROTOT,ROT,ROTOT,WORK,3,3,3) DO 120 I=1,NAT CALL ROTATE(ROT,ATM(1,I)) 120 CONTINUE DO 130 I=1,NVEC CALL ROTATE(ROT,X(1,I)) CALL ROTATE(ROT,VEC(1,I)) 130 CONTINUE DO 210 I=1,NVEC A(I,1)=VEC(1,I)*2.0 A(I,2)=VEC(2,I)*2.0 G(I)=(VEC(1,I) + X(1,I))**2 + (VEC(2,I) + X(2,I))**2 G(I)=G(I)-X(1,I)**2 -X(2,I)**2 210 CONTINUE CALL LLSQ(NVEC,2,200,2,G,A,XYC,SGXYC,NSING,XLS,ELS,LS1,LS2) IF(NSING.EQ.0) GO TO 220 WRITE(LUW,2200) 2200 FORMAT(' >>>>>>>>>>> CENTER MATRIX SINGULAR') STOP 16 220 CONTINUE XYZC(1)=XYC(1) XYZC(2)=XYC(2) XYZC(3)=0.0 CALL MATMUL(XYZC,XYZC,ROTOT,WORK,1,3,3) WRITE(LUW,2220) 2220 FORMAT(' IN ORTHONORMAL COORDINATES, ') WRITE(LUW,2210) (UHV(JI),XYZC(JI),JI =1,3) 2210 FORMAT(' HELIX AXIS IN PARAMETRIC FORM:'/' X = ',F12.5,'*S + ', *F12.5/' Y = ',F12.5,'*S + ',F12.5/' Z = ',F12.5, '*S + ',F12.5/) CALL MATMUL(XYZC,OMAT,XYZC,WORK,3,3,1) CALL MATMUL(OUHV,OMAT,UHV,WORK,3,3,1) WRITE(LUW,2230) 2230 FORMAT(' IN ORIGINAL CRYSTAL COORDINATES,') WRITE(LUW,2210) (OUHV(JI),XYZC(JI),JI=1,3) DO 250 I=1,2 DO 230 J=1,NAT ATM(I,J)=ATM(I,J)-XYC(I) 230 CONTINUE DO 240 J=1,NVEC X(I,J)=X(I,J)-XYC(I) 240 CONTINUE 250 CONTINUE THETA=0.0 SGTHET=0.0 DO 310 I=1,NVEC DO 300 J=1,3 X1(J)=X(J,I) X2(J)=X(J,I)+VEC(J,I) 300 CONTINUE CALL POLAR(X1) CALL POLAR(X2) T21=X2(2)-X1(2) T21P=T21+PIFAC*360.0 T21M=T21-PIFAC*360.0 IF(ABS(T21P).LT.ABS(T21)) T21=T21P IF(ABS(T21M).LT.ABS(T21)) T21=T21M THETA=THETA+T21 SGTHET=SGTHET+T21*T21 310 CONTINUE THETA=THETA/FLOAT(NVEC) SGTHET=(SGTHET-FLOAT(NVEC)*THETA*THETA)/FLOAT(NVEC-1) C SET SGTHET TO ZERO IF NEGATIVE (ONLY ARISES WITH IDEAL COORDS) IF(SGTHET)450,451,451 450 WRITE(LUW,452)SGTHET 452 FORMAT(/,1X,'****WARNING: SGTHET=',F10.5,3X,'SET TO ZERO****',/) SGTHET=0.0 451 CONTINUE SGTHET=SQRT(SGTHET)/PIFAC SIG=0.0 IF(NVEC.LE.3) GO TO 340 DO 330 I=1,NVEC DO 320 J=1,3 X1(J)=X(J,I) X2(J)=X(J,I)+VEC(J,I) 320 CONTINUE CALL POLAR(X1) CALL POLAR(X2) SIG=SIG+(X1(3)+DZ-X2(3))**2 + X1(1)**2 + X2(1)**2 *-2.0*X1(1)*X2(1)*COS(X1(2)+THETA-X2(2)) 330 CONTINUE SIG=SQRT(SIG/FLOAT(NVEC-3)) 340 CONTINUE IF(DZ.LT.0.0) THETA=-THETA IF(DZ.LT.0.0) DZ=-DZ ANG=THETA/PIFAC WRITE(LUW,2300) ANG,DZ,SIG 2300 FORMAT(' >>>>>> HELIX ROTATION: ',F8.3,5X,'DISPLACEMENT: ', *F8.4/' ',10X,'STATISTICS:'/' ',20X,'OVERALL STANDARD DEV.: ', *F8.4) WRITE(LUW,2310) SGXYC,SIGPL,SGTHET 2310 FORMAT(21X,'SIGMA(X): ',F7.4,', SIGMA(Y): ',F7.4, *', SIGMA(Z)=SIGMA(DISPLACEMENT): ',F7.4,', SIGMA(ROTATION): ', *F7.3) PTURN=ABS(360.0/ANG) WRITE(LUW,2320)PTURN 2320 FORMAT(11X,'THERE ARE ',F5.2,' RESIDUES PER TURN'/) ICHSGN=0 CALL CHSIGN (ICHSGN) CALL PUTATM(THETA,DZ,ICHSGN) WRITE(LUW,2400) 2400 FORMAT(' NORMAL END OF JOB: YOU HAVE GIVEN BIRTH TO A HELIX') WRITE(LUW,2401) 2401 FORMAT(' NUMBER BASE PAIRS =') WRITE(LUW,2402)NPLA 2402 FORMAT(5X,I5) RETURN END C------------------------- C SUBROUTINE INIT C------------------------- SUBROUTINE INIT CHARACTER * 5 ATAB CHARACTER * 4 NAME,MH CHARACTER * 1 IR,TITL,IBL CHARACTER * 60 FMT COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL X ,L15 COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP X ,IHELIX,IBROLL,ICYLIN,ITORNG COMMON/BROOK/IBARF,IFRES,NBP COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), X ATAB(30,10),LSEQ(10) COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,20) COMMON/BROLLP/INPBRL,NB(2,20),NB1(2,20),NB2(2,20) COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500) DATA IBL/' '/ NATOM=0 ICORL=0 IFLAGP=0 IFPUN=0 NPMAX=0 NPMIN=0 INPHEL=0 INPBRL=0 INPCYL=0 INPTOR=0 IHELIX=0 IBROLL=0 ICYLIN=0 ITORNG=0 DO 10 I=1,72 10 TITL(I)=IBL NBP=0 DO 20 JJ=1,10 DO 20 I=1,30 20 ATAB(I,JJ)=' ' DO 30 I=1,2 DO 30 J=1,500 30 NATO(I,J)=0 DO 40 I=1,2 DO 40 J=1,100 DO 40 L=1,4 40 NCHI(I,J,L)=0 RETURN END C------------------------- C SUBROUTINE LLSQ C------------------------- SUBROUTINE LLSQ(NOBS,NPARM,NOD,NPD,G,A,P,SIGP,NSING,FM,E,L1,L2) C GENERAL LINEAR LEAST-SQUARES ROUTINE REAL FM(NPARM,NPARM),E(NPARM) INTEGER L1(NPARM),L2(NPARM) DIMENSION G(NOD),A(NOD,NPD),P(NPD),SIGP(NPD) IF((NOBS.GT.NOD).OR.(NPARM.GT.NPD)) STOP 16 DO 10 I=1,NPARM E(I)=0.0 DO 10 J=1,NPARM FM(I,J)=0.0 10 CONTINUE DO 20 I=1,NPARM DO 20 J=1,NOBS E(I)=E(I)+A(J,I)*G(J) DO 20 K=1,NPARM FM(I,K)=FM(I,K)+A(J,I)*A(J,K) 20 CONTINUE CALL MINV(FM,NPARM,DET,L1,L2) NSING=0 IF(DET.NE.0.0) GO TO 30 NSING=1 RETURN 30 CONTINUE DO 40 I=1,NPARM P(I)=0.0 40 CONTINUE DO 50 I=1,NPARM DO 50 J=1,NPARM P(I)=P(I)+FM(I,J)*E(J) 50 CONTINUE SIGSQ=0.0 DO 70 I=1,NOBS DEL=G(I) DO 60 J=1,NPARM DEL=DEL-A(I,J)*P(J) 60 CONTINUE SIGSQ=SIGSQ+DEL*DEL 70 CONTINUE DO 80 I=1,NPARM SIGP(I)=SQRT(FM(I,I)*SIGSQ) 80 CONTINUE RETURN END C------------------------- C SUBROUTINE MATMUL C------------------------- SUBROUTINE MATMUL(PROD,XM,YM,WM,N,M,L) C MATRIX MULTIPLICATION DIMENSION XM(N,M),YM(M,L),PROD(N,L),WM(N,L) DO 10 I=1,N DO 10 J=1,L WM(I,J)=0.0 10 CONTINUE DO 20 I=1,N DO 20 K=1,L DO 20 J=1,M WM(I,K)=WM(I,K)+XM(I,J)*YM(J,K) 20 CONTINUE DO 30 I=1,N DO 30 J=1,L PROD(I,J)=WM(I,J) 30 CONTINUE RETURN END C------------------------- C SUBROUTINE MATRIX C------------------------- SUBROUTINE MATRIX(XMIN,A,NPL) C BUILT THE A MATRIX FROM A LIST OF ATOM COORDINATES DIMENSION XMIN(30,3),A(3,3) DIMENSION XMAJ(30,3),XAV(3) DO 1 J=1,3 XAV(J)=0.0 1 CONTINUE DO 2 K=1,NPL DO 2 J=1,3 XAV(J)=XAV(J)+XMIN(K,J) 2 CONTINUE DO 3 J=1,3 XAV(J)=XAV(J)/NPL 3 CONTINUE DO 4 K=1,NPL DO 4 J=1,3 XMAJ(K,J)=XMIN(K,J)-XAV(J) 4 CONTINUE DO 5 I=1,3 DO 5 J=1,3 A(I,J)=0.0 5 CONTINUE DO 6 K=1,NPL DO 6 I=1,3 DO 6 J=1,3 A(I,J)=A(I,J)+XMIN(K,I)*XMAJ(K,J) 6 CONTINUE RETURN END C------------------------- C SUBROUTINE MINV C------------------------- SUBROUTINE MINV(A,N,D,L,M) C INVERT A MATRIX DIMENSION A(1),L(1),M(1) D=1.0 NK=-N DO 80 K=1,N NK=NK+N L(K)=K M(K)=K KK=NK+K BIGA=A(KK) DO 20 J=K,N IZ=N*(J-1) DO 20 I=K,N IJ=IZ+I 10 IF(ABS(BIGA)-ABS(A(IJ))) 15,20,20 15 BIGA=A(IJ) L(K)=I M(K)=J 20 CONTINUE J=L(K) IF(J-K) 35,35,25 25 KI=K-N DO 30 I=1,N KI=KI+N HOLD=-A(KI) JI=KI-K+J A(KI)=A(JI) 30 A(JI)=HOLD 35 I=M(K) IF(I-K) 45,45,38 38 JP=N*(I-1) DO 40 J=1,N JK=NK+J JI=JP+J HOLD=-A(JK) A(JK)=A(JI) 40 A(JI)=HOLD 45 IF(BIGA) 48,46,48 46 D=0.0 RETURN 48 DO 55 I=1,N IF(I-K) 50,55,50 50 IK=NK+I A(IK)=A(IK)/(-BIGA) 55 CONTINUE DO 65 I=1,N IK=NK+I HOLD=A(IK) IJ=I-N DO 65 J=1,N IJ=IJ+N IF(I-K) 60,65,60 60 IF(J-K) 62,65,62 62 KJ=IJ-I+K A(IJ)=HOLD*A(KJ)+A(IJ) 65 CONTINUE KJ=K-N DO 75 J=1,N KJ=KJ+N IF(J-K) 70,75,70 70 A(KJ)=A(KJ)/BIGA 75 CONTINUE D=D*BIGA A(KK)=1.0/BIGA 80 CONTINUE K=N 100 K=(K-1) IF(K) 150,150,105 105 I=L(K) IF(I-K) 120,120,108 108 JQ=N*(K-1) JR=N*(I-1) DO 110 J=1,N JK=JQ+J HOLD=A(JK) JI=JR+J A(JK)=-A(JI) 110 A(JI)=HOLD 120 J=M(K) IF(J-K) 100,100,125 125 KI=K-N DO 130 I=1,N KI=KI+N HOLD=A(KI) JI=KI-K+J A(KI)=-A(JI) 130 A(JI)=HOLD GO TO 100 150 RETURN END C------------------------- C SUBROUTINE MLSP C------------------------- SUBROUTINE MLSP(NPOINT,X,U,D,SIG) C GENERAL LEAST-SQUARES PLANE ROUTINE DIMENSION X(3,NPOINT),U(3),XAV(3),XM(3,3),R(3,3),YM(3,3),ZM(9) EQUIVALENCE (XM(1,1),ZM(1)) IF(NPOINT.LT.3) STOP 16 DO 10 I=1,3 XAV(I)=0.0 10 CONTINUE DO 20 I=1,3 DO 20 J=1,NPOINT XAV(I)=XAV(I)+X(I,J) 20 CONTINUE DO 30 I=1,3 XAV(I)=XAV(I)/FLOAT(NPOINT) 30 CONTINUE DO 40 I=1,3 DO 40 J=1,3 XM(I,J)=0.0 YM(I,J)=0.0 40 CONTINUE DO 50 I=1,3 DO 50 J=1,3 DO 50 K=1,NPOINT YM(I,J)=YM(I,J)+(X(I,K)-XAV(I))*(X(J,K)-XAV(J)) 50 CONTINUE ZM(1)=YM(1,1) ZM(2)=YM(1,2) ZM(3)=YM(2,2) ZM(4)=YM(1,3) ZM(5)=YM(2,3) ZM(6)=YM(3,3) CALL EIGEN1(XM,R,3,0) EVAL=ZM(6) SIG=0.0 IF(NPOINT.LE.3) GO TO 60 IF(EVAL.LT.0.0) GO TO 60 SIG=SQRT(EVAL/FLOAT(NPOINT-3)) 60 CONTINUE DO 70 I=1,3 U(I)=R(I,3) 70 CONTINUE UMAG=DOTP(U,U) DO 80 I=1,3 U(I)=U(I)/UMAG 80 CONTINUE D=0.0 DO 90 I=1,3 D=D+U(I)*XAV(I) 90 CONTINUE RETURN END C------------------------- C SUBROUTINE PDBOUT C------------------------- SUBROUTINE PDBOUT (NAME1,NAME2,J,X,Y,Z) CHARACTER * 4 NAME1,NAME2 WRITE (16,100) J,NAME1(4:4),NAME2(1:3),NAME2(4:4),NAME1(1:1),NAME1 *(2:3),X,Y,Z 100 FORMAT ('ATOM',2X,I5,2X,A1,A3,2A1,5X,A2,4X,3F8.4,' 1.0 20.0') RETURN END C------------------------- C SUBROUTINE POLAR C------------------------- SUBROUTINE POLAR(V) C CONVERT A CARTESIAN VECTOR V INTO CYLINDRICAL POLAR DIMENSION V(3) X=V(1) Y=V(2) V(1)=SQRT(X*X+Y*Y) V(2)= ACOS(X/V(1)) IF(Y.LT.0.0) V(2)=-V(2) RETURN END C------------------------- C FUNCTION PRIANG C------------------------- FUNCTION PRIANG(ANGLE) C SET ANGLE T TO BETWEEN 0.0 AND 360.0 T=ANGLE 30 IF(T.LT.360.0) GO TO 40 T=T-360.0 GO TO 30 40 IF(T.GE.0.0) GO TO 50 T=T+360.0 GO TO 40 50 CONTINUE PRIANG=T RETURN END C------------------------- C SUBROUTINE PUTATM C------------------------- SUBROUTINE PUTATM(ANG,DZ,ICHSGN) C OUTPUT ATOMIC POSITIONS FOR VARIOUS POWERS OF THE HELIX OPERATOR CHARACTER * 4 NAME,MH CHARACTER * 1 IR,TITL CHARACTER * 60 FMT COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL X ,L15 COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON NAT,X(3,200),VEC(3,200),PIFAC DIMENSION XA(3) DO 5 I=1,NAT CALL POLAR(ATM(1,I)) 5 CONTINUE 1000 FORMAT(3I5) NPMAX=NPMAX-NPMIN+1 IF (NPMAX.LE.0) NPMAX=1 C OUTPUT ON 'IPR' ALL POWERS OF THE HELIX OPERATOR, BOTH ODD AND EVEN DO 10 I=1,NPMAX POWER=FLOAT(I+NPMIN-1) IP=I+NPMIN-1 AD=ANG*POWER ZD=DZ*POWER WRITE(LUW,2444) 2444 FORMAT(' *****************************************************'/) IF (IFLAGP.EQ.0) GO TO 30 WRITE(LUW,2000) TITL,IP 2000 FORMAT(/,1X,72A1/' NO.',5X,' R',6X,'THETA',7X,'Z',5X, * 'NAME ',4X,'X',8X,'Y',8X,'Z',8X,'POWER = ',I3/) DO 10 J=1,NAT R=ATM(1,J) T=ATM(2,J)+AD Z=ATM(3,J)+ZD XC=R*COS(T) Y=R*SIN(T) T=PRIANG(T/PIFAC) WRITE(LUW,2010) J,R,T,Z,(NAME(K,J),K=1,2),XC,Y,Z 2010 FORMAT(1X,I5,5X,3(F8.3,1X),1X,2A4,2X,3(F8.3,1X)) 10 CONTINUE C OUTPUT ON UNIT 'IPU':ONLY EVEN POWERS OF THE HELIX OPERATOR IN C DIAMOND LIST FORMAT(RECORD LENGTH=132) 30 IF(IFPUN.EQ.0) GO TO 70 NOUT=0 REWIND L12 WRITE(LUW,2666) L12 2666 FORMAT(' THE FOLLOWING DIAMOND LIST HAS BEEN OUTPUT ON UNIT:',I3) WRITE(LUW,2555)TITL 2555 FORMAT(/, 72A1,/) DO 20 I=1,NPMAX POWER=FLOAT(I+NPMIN-1) IP=I+NPMIN-1 IPMOD=MOD(IP,2) IF(IPMOD.NE.0) GO TO 20 AD=ANG*POWER ZD=DZ*POWER DO 299 J=1,NATOM R=ATM(1,J) T=ATM(2,J)+AD Z=ATM(3,J)+ZD XC=R*COS(T) Y=R*SIN(T) T=PRIANG(T/PIFAC) NOUT=NOUT+1 IF (ICHSGN.NE.0) GO TO 40 Y=-Y Z=-Z 40 IF (IFLAGP.NE.0) WRITE(LUW,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT WRITE(L12,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT WRITE (L15,2021) J,(NAME(K,J),K=1,2),XC,Y,Z CALL PDBOUT (NAME(1,J),NAME(2,J),J,XC,Y,Z) 2021 FORMAT (I5,T9,2A4,T18,'1',3F10.5,' 20.00 1.0') 2020 FORMAT (3F10.5,11X,2A4,5X,I5) 299 CONTINUE 20 CONTINUE 70 CONTINUE ENDFILE L12 ENDFILE L15 RETURN END C------------------------- C SUBROUTINE READAT C------------------------- SUBROUTINE READAT CHARACTER * 80 BUF CHARACTER * 4 MH,NAME,TBRF CHARACTER * 3 CHECK,O1 CHARACTER * 1 IR,TITL,TNAME(7),IBL,FOUR,ZER,IST CHARACTER * 60 FMT COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) COMMON/BROOK/IBARF,IFRES DATA NMAX/996/,IBL/' '/,ZER/'0'/,O1/'O1'''/,FOUR/'4'/ DATA IST/'*'/ c OPEN(UNIT=L11,STATUS='OLD',READONLY) IB=3 NOCH=6 IF (IFRES.LE.1) GO TO 5 IB=4 NOCH=7 5 MAX=NMAX IF (NATOM.NE.0) MAX=NATOM I=0 10 CONTINUE I=I+1 TNAME(7)=' ' C >>>>>>>>SET MAX. NO. OF ATOMS=ARRAY SIZE-4<<<<<<<<<<<<<<<<< IF (I.GT.MAX) GO TO 50 IF(I.LE.NMAX) GO TO 20 WRITE(LUW,500) 500 FORMAT(' THAT EXCEEDS THE ATM(I,J),NAME(I),AND OATM(I,J) ARRAYS') STOP 16 20 CONTINUE IF (IREAD.EQ.0) GO TO 120 30 CONTINUE READ(L11,501,END=50,ERR=30) BUF 501 FORMAT (A80) TBRF=BUF(1:4) IF(IBARF.EQ.2.AND.TBRF.NE.'ATOM') GO TO 30 READ(BUF,FMT) (ATM(J,I),J=1,3),(TNAME(K),K=1,NOCH) CHECK=TNAME(IB+1)//TNAME(IB+2)//TNAME(IB+3) IF (CHECK.EQ.O1) TNAME(IB+2)=FOUR IF (TNAME(2).EQ.IBL) TNAME(2)=ZER IF (IFRES.EQ.2.AND.TNAME(3).EQ.IBL) TNAME(3)=ZER IF (TNAME(IB+3).EQ.IST) TNAME(IB+3)='''' NAME(1,I)=TNAME(1)//TNAME(2)//TNAME(3)//TNAME(4) NAME(2,I)=TNAME(5)//TNAME(6)//TNAME(7)//IBL IF(IFLAGP.NE.1) GO TO 10 WRITE(LUW,502) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) 502 FORMAT(1X,I5,5X,3(F9.4,1X),1X,2A4) GO TO 10 50 NATOM=I-1 RETURN 120 WRITE (LUW,505) 505 FORMAT (' **** FORMAT FOR READING ATOMS NOT SPECIFIED, USE *KONN* 1, *CORL*, *BRKH* OR *FFMT*',/) STOP END C------------------------- C SUBROUTINE ROTATE C------------------------- SUBROUTINE ROTATE(ROTOR,VECTOR) C ROTATE A VECTOR VIA THE MATRIX ROTOR DIMENSION ROTOR(3,3),VECTOR(3),WORK(3) DO 10 I=1,3 WORK(I)=0.0 10 CONTINUE DO 20 I=1,3 DO 20 J=1,3 WORK(I)=WORK(I)+ROTOR(I,J)*VECTOR(J) 20 CONTINUE DO 30 I=1,3 VECTOR(I)=WORK(I) 30 CONTINUE RETURN END C------------------------- C SUBROUTINE SETBRL C------------------------- SUBROUTINE SETBRL CHARACTER * 4 MH CHARACTER * 1 IR,TITL,NTP,NAT,A,G,T,C,P,D,II,MM,ZZ CHARACTER * 1 XX,YY,UU,VV INTEGER * 2 IRES CHARACTER * 3 C6,C8,FF,FC,FD COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(5,1000) COMMON/BROOK/IBARF,IFRES,NPLA COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) DIMENSION IGR(2,200),IGN(200),IDUM(200) DATA A/'A'/,G/'G'/,T/'T'/,C/'C'/,P/'P'/,D/''''/ DATA II/'I'/,MM/'M'/,ZZ/'Z'/,UU/'U'/,VV/'V'/,XX/'X'/,YY/'Y'/ DATA C6/'C6 '/,C8/'C8 '/ NOCH=5 IF (IFRES.GT.1) NOCH=4 IRN=1 IGR(1,1)=1 IGN(1)=IRES(1) DO 10 I=2,NATM IF (IRES(I-1).EQ.IRES(I)) GO TO 10 IGR(2,IRN)=I-1 IRN=IRN+1 IGR(1,IRN)=I IGN(IRN)=IRES(I) 10 CONTINUE IGR(2,IRN)=NATM IRNH=IRN/2 DO 100 L=1,IRNH IS=IGR(1,L) IF=IGR(2,L) FF=C8 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G.OR.NTP(IS).EQ.II) GO TO 20 C IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 20 FF=C6 20 DO 30 I=IS,IF FC=NAT(1,I)//NAT(2,I)//NAT(3,I) IF (FC.NE.FF) GO TO 30 NC(1,L)=I 30 CONTINUE M=0 DO 50 I=IS,IF DO 40 J=1,NOCH IF (NAT(J,I).EQ.D.OR.NAT(J,I).EQ.P) GO TO 50 40 CONTINUE M=M+1 IDUM(M)=I 50 CONTINUE NB1(1,L)=IDUM(1) NB1(2,L)=IDUM(M) IS=IGR(1,IRN-L+1) IF=IGR(2,IRN-L+1) FD=C8 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G.OR.NTP(IS).EQ.II) GO TO 200 C IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 200 FD=C6 200 DO 60 I=IS,IF FC=NAT(1,I)//NAT(2,I)//NAT(3,I) IF (FC.NE.FD) GO TO 60 NC(2,L)=I 60 CONTINUE M=0 DO 80 I=IS,IF DO 70 J=1,NOCH IF (NAT(J,I).EQ.D.OR.NAT(J,I).EQ.P) GO TO 80 70 CONTINUE M=M+1 IDUM(M)=I 80 CONTINUE NB2(1,L)=IDUM(1) NB2(2,L)=IDUM(M) 100 CONTINUE RETURN END C------------------------- C SUBROUTINE SETTOR C------------------------- SUBROUTINE SETTOR CHARACTER * 4 MH CHARACTER * 1 IR,TITL,NTP,NAT,A,G INTEGER * 2 IRES CHARACTER * 3 FF(6),FC(4),FD(4),ATAB1(6),ATAB2(4),ATAB3(4),CHECK X ,ATAB4(5),FR(5) COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(5,1000) COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) COMMON/BROOK/IBARF,IFRES,NPLA DIMENSION IGR(2,200),IGN(200),IDUM(200) DATA ATAB1/'P ','O5''','C5''','C4''','C3''','O3'''/ DATA ATAB4/'C4''','O4''','C1''','C2''','C3'''/ DATA ATAB2/'C4 ','N9 ','C1''','O4'''/ DATA ATAB3/'C2 ','N1 ','C1''','O4'''/ DATA A/'A'/,G/'G'/ IRN=1 IGR(1,1)=1 IGN(1)=IRES(1) DO 10 I=2,NATM IF (IRES(I-1).EQ.IRES(I)) GO TO 10 IGR(2,IRN)=I-1 IRN=IRN+1 IGR(1,IRN)=I IGN(IRN)=IRES(I) 10 CONTINUE IGR(2,IRN)=NATM IRNH=IRN/2 C GENERATE ATOM NUMBERS FOR 1ST AND 2ND STRANDS DO 200 M=1,2 NUP=0 DO 110 K=1,IRNH L=K+(M-1)*IRNH N=0 NNR=0 IS=IGR(1,L) IF=IGR(2,L) DO 20 J=1,4 20 FD(J)=ATAB2(J) IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 40 DO 30 J=1,4 30 FD(J)=ATAB3(J) 40 DO 60 J=1,6 DO 50 I=IS,IF CHECK=NAT(1,I)//NAT(2,I)//NAT(3,I) IF (CHECK.NE.ATAB1(J)) GO TO 50 NUP=NUP+1 IF (NUP.GT.500) GO TO 160 NATO(M,NUP)=I GO TO 60 50 CONTINUE 60 CONTINUE DO 80 J=1,4 DO 70 I=IS,IF CHECK=NAT(1,I)//NAT(2,I)//NAT(3,I) IF (CHECK.NE.FD(J)) GO TO 70 N=N+1 IF (N.GT.4) GO TO 150 NCHI(M,K,N)=I GO TO 80 70 CONTINUE 80 CONTINUE DO 100 J=1,5 DO 90 I=IS,IF CHECK=NAT(1,I)//NAT(2,I)//NAT(3,I) IF (CHECK.NE.ATAB4(J)) GO TO 90 NNR=NNR+1 IF (NNR.GT.5) GO TO 170 NRNG(M,K,NNR)=I GO TO 90 90 CONTINUE 100 CONTINUE 110 CONTINUE 200 CONTINUE RETURN 150 WRITE (LUW,500) FD,L 500 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', X 4(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 4') STOP 160 WRITE (LUW,501) ATAB1 501 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', X 6(2X,A3,','),' EXCEEDS 500') STOP 170 WRITE (LUW,502) ATAB4,L 502 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', X 5(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 5') STOP END C------------------------- C SUBROUTINE TORANG C------------------------- SUBROUTINE TORANG CHARACTER * 4 MH CHARACTER * 8 NNAME(2,100,5) CHARACTER * 1 IR,TITL,NTP,NATT,SLASH CHARACTER * 2 BTM(3) INTEGER * 2 IRES COMMON/BROOK/IBARF,IFRES,NBP COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL COMMON/ATOM/NAT,ATM(3,1000),NTP(1000),IRES(1000),NATT(5,1000) COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) DIMENSION NA(4),ANG(300),ACHI(100),ANSW(200,14),ARG(100,5) X ,SIG(14),SSQ(14),ANGL(2,200,5),AV(14),SD(14) Y ,AVV(2,100),THAU(2,100),FAN(200),ANSX(200) DATA SLASH/'-'/ 500 FORMAT(9F8.1) 501 FORMAT(/,' STRAND',I5) 502 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHI 1 DIF EP-ZE',/) 503 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHI 1 MEAN EP-ZE',/) 504 FORMAT(/,' V0 V1 V2 V3 V4 Pseud. Delta 1',/) 505 FORMAT(I5,' ATOMS AND',I5,' BASE PAIRS') 506 FORMAT(1X,' TORSION ANGLE CALCULATION, NEWHEL93') 507 FORMAT (/,1X,72A1,/) 508 FORMAT(8(2X,'______'),/) 509 FORMAT(7F8.2,8X,' AV',/) 510 FORMAT(7F8.2,8X,' SD',///) 511 FORMAT(2(5X,'-',2X),7F8.1) 512 FORMAT (4F8.1,2(5X,'-',2X),3F8.1) 513 FORMAT(6(2X,'______'),/) 514 FORMAT(6F8.2,' AV',/) 515 FORMAT(6F8.2,' SD',///) 516 FORMAT (/,' SUGAR ANGLES',//,2X,5(A8,2X),' AVERAGE THAU(M)' * ,/) 517 FORMAT (6F10.1,F12.4) 518 FORMAT(6F8.1,'(',F5.1,')') 519 FORMAT (1X,'SUGAR PSEUDOROTATION PARAMS, NEWHEL93') 555 FORMAT(1H1) C READ STARTING PARAMETERS RAD=0.0174533 DANG=SIN(36*RAD)+SIN(72*RAD) WRITE(LUW,555) WRITE(LUW,506) WRITE(LUW,507)TITL WRITE(LUW,505)NAT,NBP C READ ATOM COORDINATES 2020 FORMAT(3F10.5,11X,A1,I2,5A1) 2021 FORMAT(3F10.5,11X,A1,I3,4A1) REWIND L12 DO 10 I=1,NAT IF (IFRES.LE.1) X READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NATT(J,I),J=1,5) IF (IFRES.GT.1) X READ (L12,2021) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NATT(J,I),J=1,4) 10 CONTINUE C GET MAIN CHAIN AND CHI ATOM NUMBERS IF (INPTOR.EQ.0) CALL SETTOR 50 CONTINUE DO 60 JC=1,14 SIG(JC)=0. SSQ(JC)=0. DO 60 IC=1,50 60 ANSW(IC,JC)=0. N1=0 DO 65 M=1,2 DO 65 I=1,100 65 AVV(M,I)=0. DO 200 M=1,2 C CALCULATE MAIN CHAIN TORSION ANGLES ANG(1)=0.0 ANG(2)=0.0 NMA=6*NBP-4 DO 80 I=1,NMA DO 70 J=1,4 IU=I+J-1 70 NA(J)=NATO(M,IU) CALL TORSON(NA,TE,ATM) I2=I+2 80 ANG(I2)=TE NMB=NMA+3 NMC=NMA+4 ANG(NMB)=0.0 ANG(NMC)=0.0 DO 120 I=1,NBP DO 110 K=1,5 DO 90 J=1,4 IU=K+J-1 IF (IU.GT.5) IU=IU-IU/5*5 NN=NRNG(M,I,IU) 90 NA(J)=NRNG(M,I,IU) CALL TORSON(NA,TE,ATM) IF(TE-180.)669,669,670 670 TE=TE-360. 669 CONTINUE ARG(I,K)=TE DO 100 J=1,3 IU=K+J-1 C NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) IF (IU.GT.5) IU=IU-IU/5*5 NN=NRNG(M,I,IU) BTM(J)=NATT(1,NN)//NATT(2,NN) 100 NA(J)=NN CALL ANGLE (NA,TE,ATM) ANGL(M,I,K) = TE/RAD NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) AVV(M,I)=AVV(M,I)+ANGL(M,I,K) 110 CONTINUE 120 CONTINUE C CALCULATE GLYCOSYL CHI ANGLES DO 140 I=1,NBP DO 130 J=1,4 130 NA(J)=NCHI(M,I,J) CALL TORSON(NA,TE,ATM) 140 ACHI(I)=TE C REARRANGE ANGLES AND PRINT OUT DO 180 I=1,NBP N1=N1+1 IM=NBP*(M-1)+I DO 150 J=1,6 NO=6*I-6+J 150 ANSW(IM,J)=ANG(NO) ANSW(IM,7)=ACHI(I) DO 160 J=1,5 160 ANSW(IM,8+J)=ARG(I,J) ANSW(IM,14)=(ATAN(((ARG(I,5)+ARG(I,2))-(ARG(I,4)+ARG(I,1)))/ X (2.*ARG(I,3)*DANG)))/RAD IF(ARG(I,3))671,672,672 671 ANSW(IM,14)=ANSW(IM,14)+180. 672 CONTINUE FAN(IM)=ANSW(IM,14) IF (FAN(IM).LT.0.) FAN(IM)=360.+ANSW(IM,14) 180 CONTINUE 200 CONTINUE M=1 WRITE(LUW,501)M WRITE(LUW,502) DO 210 I=1,NBP IM=NBP*2-I+1 DEL=ANSW(I,4)-ANSW(IM,4) ANSW(I,8)=DEL ANSX(I)=ANSW(I,5)-ANSW(I,6) IF(I.GT.1.AND.I.NE.NBP) WRITE(LUW,500)(ANSW(I,J),J=1,8),ANSX(I) IF(I.EQ.1) WRITE(LUW,511)(ANSW(I,J),J=3,8),ANSX(I) IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(I,J),J=1,4),(ANSW(I,J),J=7,8),ANS *X(I) 210 CONTINUE M=2 WRITE(LUW,501)M WRITE(LUW,503) DO 220 I=1,NBP IM=I+NBP IN=NBP-I+1 FMEAN=0.5*(ANSW(IM,4)+ANSW(IN,4)) ANSW(IM,8)=FMEAN ANSX(IM)=ANSW(IM,5)-ANSW(IM,6) IF(I.GT.1.AND.I.NE.NBP) WRITE(LUW,500)(ANSW(IM,J),J=1,8),ANSX(IM) IF(I.EQ.1) WRITE(LUW,511)(ANSW(IM,J),J=3,8),ANSX(IM) IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(IM,J),J=1,4),(ANSW(IM,J),J=7,8),A *NSX(IM) 220 CONTINUE DO 230 M=1,2 DO 230 I=1,NBP IM=NBP*(M-1)+I DO 230 J=1,14 SIG(J) = SIG(J) + ANSW(IM,J) 230 SSQ(J) = SSQ(J) + ANSW(IM,J)*ANSW(IM,J) DO 240 I=1,14 NN = N1 IF (I.LT.3.OR.(I.GT.4.AND.I.LT.7)) NN=N1-2 AV(I)=SIG(I)/NN SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) IF (SDZ.LE.0.0001) SDZ=0. SD(I) = SQRT(SDZ) 240 CONTINUE WRITE (LUW,508) WRITE (LUW,509) (AV(J),J=1,7) WRITE (LUW,510) (SD(J),J=1,7) WRITE(LUW,555) WRITE (LUW,519) WRITE(LUW,507)TITL DO 260 M=1,2 WRITE(LUW,501)M WRITE (LUW,504) DO 250 K=1,NBP I = (M-1)*NBP + K WRITE (LUW,500) (ANSW(I,J),J=9,14),ANSW(I,4) 250 CONTINUE 260 CONTINUE WRITE (LUW,513) WRITE (LUW,514) (AV(J),J=9,14) WRITE (LUW,515) (SD(J),J=9,14) WRITE(LUW,555) WRITE(LUW,507)TITL DO 280 M=1,2 WRITE(LUW,501)M WRITE (LUW,516) (NNAME(M,1,J),J=1,5) DO 270 K=1,NBP AVV(M,K)=AVV(M,K)/5 THAU(M,K)=SQRT((108.-AVV(M,K))/0.00186) WRITE (LUW,517) (ANGL(M,K,J),J=1,5),AVV(M,K),THAU(M,K) 270 CONTINUE 280 CONTINUE RETURN END C------------------------- C SUBROUTINE TORSON C------------------------- C TORSION ANGLE CALCULATING SUBROUTINE SUBROUTINE TORSON(NA,TE,ATM) DIMENSION ATM(3,1000),NA(4) DIMENSION AV(3),BV(3),CV(3),S(3),T(3) DO 1 J=1,3 J1=J+1 NS=NA(J) NE=NA(J1) AV(J)=ATM(1,NE)-ATM(1,NS) BV(J)=ATM(2,NE)-ATM(2,NS) 1 CV(J)=ATM(3,NE)-ATM(3,NS) S(1)=BV(1)*CV(2)-BV(2)*CV(1) S(2)=CV(1)*AV(2)-CV(2)*AV(1) S(3)=AV(1)*BV(2)-AV(2)*BV(1) T(1)=BV(2)*CV(3)-BV(3)*CV(2) T(2)=CV(2)*AV(3)-CV(3)*AV(2) T(3)=AV(2)*BV(3)-AV(3)*BV(2) RM=SQRT(AV(2)**2+BV(2)**2+CV(2)**2) SM=SQRT(S(1)**2+S(2)**2+S(3)**2) TM=SQRT(T(1)**2+T(2)**2+T(3)**2) TOP=AV(1)*(BV(2)*CV(3)-BV(3)*CV(2))+ *AV(2)*(BV(3)*CV(1)-BV(1)*CV(3))+ *AV(3)*(BV(1)*CV(2)-BV(2)*CV(1)) SAL=(RM*TOP)/(SM*TM) CAL=(S(1)*T(1)+S(2)*T(2)+S(3)*T(3))/(SM*TM) TE=57.29578*ATAN2(SAL,CAL) IF(TE)667,668,668 667 TE=TE+360. 668 CONTINUE RETURN END C------------------------- C SUBROUTINE XDRED C------------------------- SUBROUTINE XDRED CHARACTER * 5 ATAB CHARACTER* 4 MH,I,M,JZ,NAME CHARACTER*1 TITL,IR,IBLNK,M1 CHARACTER * 60 FMT,FMKONN(2),FMCORL,FMBRKH CHARACTER * 1 AIR(4,30,10) COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000) COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD DIMENSION AA(200) COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), X ATAB(30,10),KSEQ(10) COMMON/INPUT/CELL(6),FMT,NPMIN,NPMAX,IFPUN,IFLAGP X ,IHELIX,IBROLL,ICYLIN,ITORNG COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,10) COMMON/BROLLP/INPBRL,NBB(2,20),NB1(2,20),NB2(2,20) COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,500) COMMON/BROOK/IBARF,IFRES,NBP DATA FMBRKH/'(T31,3F8.3,T20,A1,T25,2A1,T14,3A1)'/ DATA FMKONN/'(T19,3F10.5,T9,6A1)', X '(T19,3F10.5,T8,7A1)'/ DATA FMCORL/'(T16,3F10.5,T4,A1,T10,5A1)'/ DATA JZ/' '/,IBLNK/' '/ NA=0 IFRES=1 IREAD=0 KSEQ(1)=0 10 FORMAT(A4,72A1) 20 FORMAT(1H ,A4,72A1) C C READ IN FREE FORMAT IBARF=0 30 READ(LUR,10,END=820)I,IR NA=0 NB=0 IF(I.NE.JZ)GO TO 35 WRITE (LUW,20) I,IR GO TO 30 35 N=0 NK=37 40 IF(I.EQ.MH(NK)) GOTO 50 NK=NK-1 IF(18-NK)40,50,50 50 NK=NK-17 GO TO 180 60 W=1. 70 V=0. NB=0 Y=1. U=10. Z=1. GOTO 100 80 Z=Y*Z V=U*ABS(V)+Z*XX NB=1 IF(V)90,100,90 90 V=SIGN(V,W) W=V 100 N=N+1 K=10 IF(72-N)240,110,110 110 XX=0. DO 120 MM=1,10 M1=MH(MM)(1:1) IF(IR(N).EQ.MH(MM)) GOTO 80 120 XX=XX+1. GOTO 140 130 M1=MH(K+9)(1:1) IF(IR(N).EQ.M1) GOTO 240 140 K=K-1 IF(K-2)240,130,130 150 U=1. Y=0.1 GOTO 100 160 READ(LUR,10,END=820)M,IR WRITE(LUW,20)M,IR N=0 IF(JZ.EQ.M)GOTO 60 170 WRITE (LUW,5000) 5000 FORMAT (/,' **************** INPUT ERROR') GOTO 830 180 CONTINUE 220 DO 230 J=1,200 230 AA(J)=0. NA=0 WRITE(LUW,20)I,IR GOTO 60 240 IF(K-2) 250,150,250 250 NA=NA+NB IF(200-NA)170,260,260 260 IF(-NA)270,280,280 270 AA(NA)=V+AA(NA) 280 IF(K-9)290,160,350 290 IF(K-3)60,300,60 300 W=-1. GOTO 70 350 GOTO(490,400,410,420,430,440,450,460,470,480,500,510,520,530,540 X,550,560,570,580,820) , NK C UNITCELL 400 CONTINUE IF (NA.LT.6) GO TO 170 DO 402 J=1,6 402 CELL(J)=AA(J) GO TO 30 C FPUN 410 CONTINUE IFPUN=1 GO TO 30 C PMIN 420 CONTINUE NPMIN=AA(1) GO TO 30 C PMAX 430 CONTINUE NPMAX=AA(1) GO TO 30 C KONN 440 CONTINUE FMT = FMKONN(IFRES) IREAD=1 GO TO 30 C CORL 450 CONTINUE IREAD=2 FMT=FMCORL GO TO 30 C FFMT 460 CONTINUE DO 461 J=1,72 461 FMT(J:J)=IR(J) IREAD=2 GO TO 30 C HELX 470 CONTINUE IHELIX=IHELIX+1 NNUMBR=0 J=0 471 CONTINUE J=J+1 IF (J.GT.72) GO TO 474 IF (IR(J).EQ.IBLNK) GOTO 471 NNUMBR=NNUMBR+1 AIR(1,NNUMBR,IHELIX)=IR(J) AIR(2,NNUMBR,IHELIX)=IR(J+1) AIR(3,NNUMBR,IHELIX)=IR(J+2) AIR(4,NNUMBR,IHELIX)=IR(J+3) J=J+3 GO TO 471 474 KSEQ(IHELIX)=NNUMBR GO TO 30 C NATM 480 CONTINUE IF (AA(1).NE.0) NATM=AA(1) GO TO 30 C DUMM 490 CONTINUE GO TO 30 C TITL 500 DO 501 J=1,72 501 TITL(J)=IR(J) GO TO 30 C FLGP 510 CONTINUE IFLAGP=1 GO TO 30 C BASE 520 CONTINUE NBP=AA(1) GO TO 30 C BROL 530 CONTINUE IBROLL=1 IF (NA.EQ.0) GO TO 30 INPBRL=1 IF (NBP*6.EQ.NA) GO TO 531 WRITE (LUW,5004) 5004 FORMAT (/,' ****** INPUT ERROR, NUMBER OF INPUT PARAMETERS DOES NO XT MATCH, CHECK NUMBER OF BASE PAIRS') STOP 531 JJ=0 DO 532 J=1,NBP JJ=JJ+1 NBB(1,J)=AA(JJ) NBB(2,J)=AA(JJ+1) NB1(1,J)=AA(JJ+2) NB1(2,J)=AA(JJ+3) NB2(1,J)=AA(JJ+4) NB2(2,J)=AA(JJ+5) JJ=JJ+5 532 CONTINUE GO TO 30 C CYLN 540 CONTINUE ICYLIN=1 IF (NA.EQ.0) GO TO 30 INPCYL=1 NBPM=NBP-1 IF ((2*NBPM+2*NBP).EQ.NA) GO TO 541 WRITE (LUW,5004) STOP 541 DO 543 J=1,NBP JJ=NBPM+J IF (J.EQ.NBP) GO TO 542 NP(1,J)=AA(J) NP(2,J)=AA(JJ) 542 JJ=JJ+NBPM NC(1,J)=AA(JJ) JJ=JJ+NBP NC(2,J)=AA(JJ) 543 CONTINUE GO TO 30 C TRNG 550 CONTINUE ITORNG=1 IF (NA.EQ.0) GO TO 30 INPTOR=1 KK=NBP*6 LL=NBP*4 IF ((KK+LL).EQ.NA) GO TO 551 WRITE (LUW,5004) STOP 551 DO 552 J=1,KK 552 NATO(1,J)=AA(J) DO 553 J=1,NBP DO 553 JJ=1,4 553 NCHI(1,J,JJ)=AA(KK+(J-1)*4+JJ) GO TO 30 C HLX2 560 CONTINUE IHELIX=1 IF (NA.EQ.0) GO TO 30 INPHEL=1 NVEC=NA/2 DO 561 J=1,NVEC JJ=(J-1)*2 NN1(J)=AA(JJ+1) NN2(J)=AA(JJ+2) 561 CONTINUE GO TO 30 C BRKH 570 CONTINUE IBARF=2 IREAD=2 FMT=FMBRKH GO TO 30 C FRES 580 CONTINUE IFRES=AA(1) GO TO 30 C END 820 CONTINUE DO 828 JJ=1,IHELIX IF (KSEQ(1).LE.0) GO TO 827 NUMBR=KSEQ(JJ) DO 826 J=1,NUMBR ATAB(J,JJ)=AIR(1,J,JJ)//AIR(2,J,JJ)//AIR(3,J,JJ)//AIR(4,J,JJ) 826 CONTINUE GO TO 828 827 KSEQ(JJ)=1 ATAB(1,JJ)='C1'' ' 828 CONTINUE IF (IREAD.NE.0) RETURN IREAD=1 FMT = FMKONN(IFRES) RETURN 830 STOP END C------------------------- C BLOCK DATA C------------------------- BLOCK DATA CHARACTER* 4 MH CHARACTER* 1 IR,TITL COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL X ,L15 DATA MH(1)/'0'/,MH(2)/'1'/,MH(3)/'2'/,MH(4)/'3'/,MH(5)/'4'/ DATA MH(6)/'5'/,MH(7)/'6'/,MH(8)/'7'/,MH(9)/'8'/,MH(10)/'9'/ DATA MH(11)/'.'/,MH(12)/'-'/,MH(13)/'+'/,MH(14)/'X'/,MH(15)/'Y'/ DATA MH(16)/'Z'/,MH(17)/','/,MH(18)/'='/,MH(19)/'CELL'/ DATA MH(20)/'FPUN'/,MH(21)/'PMIN'/,MH(22)/'PMAX'/,MH(23)/'KONN'/ DATA MH(24)/'CORL'/,MH(25)/'FFMT'/,MH(26)/'HELX'/,MH(27)/'NATM'/ DATA MH(28)/'TITL'/,MH(29)/'FLGP'/,MH(30)/'BASE'/,MH(31)/'BROL'/ DATA MH(32)/'CYLN'/,MH(33)/'TRNG'/,MH(34)/'HLX2'/,MH(35)/'BRKH'/ DATA MH(36)/'FRES'/,MH(37)/'END '/ DATA LUR/5/,LUW/6/,L11/11/,L12/12/,L13/13/,L14/14/,L15/15/ END