C NEWHELIX: The complete library of helix parameter calculating programs, C HELIX (written by John Rosenberg), BROLL, CYLIND and DTORAN (written C by Richard Dickerson). Combined into single MODHELIX program with vastly C superior input format by Dov Rabinovich, Klara Reich and Zippora Shakked. C Modified in accordance with 1988 Cambridge Conventions on signs and C nomenclature by Richard Dickerson. UCLA, 22 June 1989. C C Notes: Sign of Y DSP corrected 8 May 1989. C Q(C1") = C1"-C1" distances along each strand on a plane C perpendicular to the helix axis added 20 June 1989. C Epsilon-Zeta added to torsion angle tables 22 June 1989. C CHARACTER * 4 NAME,MH MOD00010 CHARACTER * 1 IR,TITL,FMT MOD00020 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD00030 X ,L15 MOD00040 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD00050 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD00060 COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000),NBP MOD00070 COMMON/BROOK/IBARF CALL INIT MOD00080 CALL XDRED MOD00090 IF (IHELIX.NE.0) CALL HELIX MOD00100 IF (IBROLL.NE.0) CALL BROLL MOD00110 IF (ICYLIN.NE.0) CALL CYLIN MOD00120 IF (ITORNG.NE.0) CALL TORANG MOD00130 c RETURN MOD00140 END MOD00150 C MOD00160 C------------------------- MOD00170 C SUBROUTINE ANGLE MOD00180 C------------------------- MOD00190 C MOD00200 C MOD00210 C SUGAR BOND ANGLES CALCULATING SUBROUTINE MOD00220 C MOD00230 SUBROUTINE ANGLE (NA,TE,ATM) MOD00240 DIMENSION ATM(3,1000),NA(3) MOD00250 DIMENSION AV(3),BV(3),CV(3),AA(3) MOD00260 DO 10 J=1,3 MOD00270 J1=J+1 MOD00280 IF (J1.GT.3) J1=1 MOD00290 NS=NA(J) MOD00300 NE=NA(J1) MOD00310 AV(J)=ATM(1,NE)-ATM(1,NS) MOD00320 BV(J)=ATM(2,NE)-ATM(2,NS) MOD00330 CV(J)=ATM(3,NE)-ATM(3,NS) MOD00340 10 CONTINUE MOD00350 C MOD00360 DO 20 I=1,3 MOD00370 AA(I)=AV(I)**2+BV(I)**2+CV(I)**2 MOD00380 20 CONTINUE MOD00390 TE= ACOS((AA(1)+AA(2)-AA(3))/(2.*SQRT(AA(1)*AA(2)))) MOD00400 RETURN MOD00410 END MOD00420 C MOD00430 C------------------------- MOD00440 C SUBROUTINE BROLL MOD00450 C------------------------- MOD00460 C MOD00470 SUBROUTINE BROLL MOD00480 CHARACTER * 4 MH MOD00490 CHARACTER * 1 IR,TITL,NTP,NAT MOD00500 INTEGER * 2 IRES MOD00510 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD00520 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD00530 COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) MOD00540 DIMENSION A(3,3),EIG(20,3),NA1(15),PHI(20,3,2),THE(20,3,2),TIL(20)MOD00550 * ,NA2(15),XMIN(30,3),XMAJ(30,3),PLA(20,3,3),ANG(3),SV(3),RV(2,3) MOD00560 * ,PV(2,3),PM(2),PTW(20),ALB(2),BKL(20),SLI(20),DIS(20),HYP(20) MOD00570 * ,ROT12(20),AM(3),BM(3),SLJ(20),SIG(11),SSQ(11),SD(11),AV(11) MOD00580 500 FORMAT(1X,' BASE ROLL AND TILT OUTPUT, CAMBRIDGE CONVENTION') MOD00590 501 FORMAT(/,I5,' ATOMS AND ',I5,' BASE PAIRS',I5) MOD00600 502 FORMAT (/,' ',72A1) MOD00610 503 FORMAT(//,' BASE PAIR',I5,/) MOD00620 504 FORMAT(2I5) MOD00630 505 FORMAT(15I5) MOD00640 506 FORMAT(1H1) MOD00650 507 FORMAT(//,' STRAND',I4,' BASE NORMAL COSINES AND ANGLES',/) MOD00660 508 FORMAT(3F10.5,5X,3F10.2) MOD00670 509 FORMAT(//,' STRAND 1 ROLL AND TILT ANGLES STRAND 2 ROLL AND TMOD00680 *ILT ANGLES') MOD00690 510 FORMAT(' TIP INCL ROLL TILT TIP INCL ROLL * TILT') 511 FORMAT(//,' BEST PLANE THROUGH BOTH BASES') MOD00720 512 FORMAT(' TIP INCL ROLL TILT INCL* PR TW BUCKLE SLIDE * X DSP Y DSP C6/C8') 513 FORMAT(4F7.2,7X,4F7.2) MOD00750 514 FORMAT(11F7.2) MOD00760 516 FORMAT(1H ) MOD00770 517 FORMAT(//,' NOTE: ANGLES ARE CALCULATED FROM 5" END TO 3" END OF S *TRAND 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 C *ORRECT AS PRINTED.') 521 FORMAT(2F7.2,2(4X,'-',2X),3F7.2,4X,'-',2X,3F7.2) MOD00850 522 FORMAT (/,11(2X,'_____'),/) MOD00860 523 FORMAT(11F7.2,' AV.') MOD00870 524 FORMAT(11F7.2,' S.D.') MOD00880 555 FORMAT(//,'BASE PAIR NORMAL COSINES AND ANGLES',/) WRITE(LUW,506) WRITE(LUW,500) MOD00890 WRITE(LUW,502)TITL MOD00910 WRITE(LUW,501) NATM,NPLA MOD00900 REWIND L12 MOD00920 2020 FORMAT(3F10.5,11X,A1,I2,5A1) MOD00930 DO 10 I=1,NATM MOD00940 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NAT(I,J),J=1,5) MOD00950 DO 20 I=1,20 MOD00960 DO 20 J=1,3 MOD00970 DO 20 K=1,2 MOD00980 20 THE(I,J,K)=0.0 MOD00990 IF (INPBRL.EQ.0) CALL SETBRL MOD01000 DO 220 M=1,NPLA MOD01010 WRITE(LUW,503) M MOD01020 WRITE(LUW,504) NC(1,M),NC(2,M) MOD01030 NA11=NB1(1,M) MOD01040 NA12=NB1(2,M) MOD01050 NA21=NB2(1,M) MOD01060 NA22=NB2(2,M) MOD01070 WRITE(LUW,505) NA11,NA12 MOD01080 WRITE(LUW,505) NA21,NA22 MOD01090 L=0 MOD01100 DO 30 IDR=NA11,NA12 MOD01110 L=L+1 MOD01120 NA1(L)=IDR MOD01130 30 CONTINUE MOD01140 NA1(L+1)=0 MOD01150 WRITE(LUW,505) (NA1(J),J=1,L) MOD01160 L=0 MOD01170 DO 40 IDR=NA21,NA22 MOD01180 L=L+1 MOD01190 NA2(L)=IDR MOD01200 40 CONTINUE MOD01210 NA2(L+1)=0 MOD01220 WRITE(LUW,505) (NA2(J),J=1,L) MOD01230 DO 70 K=1,15 MOD01240 NTEST=NA1(K) MOD01250 IF(NTEST) 80,80,50 MOD01260 50 DO 60 J=1,3 MOD01270 XMIN(K,J)=ATM(J,NTEST) MOD01280 60 CONTINUE MOD01290 70 CONTINUE MOD01300 K=K+1 MOD01310 80 NPL=K-1 MOD01320 CALL MATRIX(XMIN,A,NPL) MOD01330 CALL EIGEN2(A,EIG) MOD01340 DO 90 J=1,3 MOD01350 PLA(M,1,J)=EIG(20,J) MOD01360 90 CONTINUE MOD01370 C MOD01380 DO 120 K=1,15 MOD01390 NTEST=NA2(K) MOD01400 IF(NTEST) 130,130,100 MOD01410 100 DO 110 J=1,3 MOD01420 XMIN(K,J)=ATM(J,NTEST) MOD01430 110 CONTINUE MOD01440 120 CONTINUE MOD01450 K=K+1 MOD01460 130 NPL=K-1 MOD01470 CALL MATRIX(XMIN,A,NPL) MOD01480 CALL EIGEN2(A,EIG) MOD01490 DO 140 J=1,3 MOD01500 PLA(M,2,J)=EIG(20,J) MOD01510 140 CONTINUE MOD01520 C MOD01530 DO 160 K=1,15 MOD01540 NTEST=NA1(K) MOD01550 IF(NTEST.LE.0) GO TO 170 MOD01560 DO 150 J=1,3 MOD01570 XMIN(K,J)=ATM(J,NTEST) MOD01580 150 CONTINUE MOD01590 160 CONTINUE MOD01600 K=K+1 MOD01610 170 K=K-1 MOD01620 DO 190 L=1,15 MOD01630 NTEST=NA2(L) MOD01640 IF(NTEST.LE.0) GO TO 200 MOD01650 DO 180 J=1,3 MOD01660 LI=K+L MOD01670 XMIN(LI,J)=ATM(J,NTEST) MOD01680 180 CONTINUE MOD01690 190 CONTINUE MOD01700 L=L+1 MOD01710 200 NPL=K+L-1 MOD01720 CALL MATRIX(XMIN,A,NPL) MOD01730 CALL EIGEN2(A,EIG) MOD01740 DO 210 J=1,3 MOD01750 PLA(M,3,J)=EIG(20,J) MOD01760 210 CONTINUE MOD01770 220 CONTINUE MOD01780 WRITE(LUW,506) WRITE(LUW,500) WRITE(LUW,502)TITL DO 250 J=1,3 MOD01790 IF(J-3)600,601,600 601 WRITE(LUW,555) GO TO 602 600 CONTINUE WRITE(LUW,507) J MOD01800 602 CONTINUE DO 240 M=1,NPLA MOD01810 DO 230 K=1,3 MOD01820 CSN=PLA(M,J,K) MOD01830 ANG(K)=57.29578* ACOS(CSN) MOD01840 230 CONTINUE MOD01850 WRITE(LUW,508) (PLA(M,J,K),K=1,3),(ANG(K),K=1,3) MOD01860 240 CONTINUE MOD01870 250 CONTINUE MOD01880 C MOD01890 C CALCULATE AND STORE PHI ANGLES MOD01900 C MOD01910 DO 300 I=1,NPLA MOD01920 NC1=NC(1,I) MOD01930 NC2=NC(2,I) MOD01940 DELX=ATM(1,NC1)-ATM(1,NC2) MOD01950 DELY=ATM(2,NC1)-ATM(2,NC2) MOD01960 DENO=SQRT(DELX**2+DELY**2) MOD01970 SUMX=(ATM(1,NC1)+ATM(1,NC2))*0.5 MOD01980 SUMY=(ATM(2,NC1)+ATM(2,NC2))*0.5 MOD01990 HVEC=SQRT(SUMX**2+SUMY**2) MOD02000 SLI(I)=(DELX*SUMX+DELY*SUMY)/DENO MOD02010 DIS(I)=(SUMX*DELY-DELX*SUMY)/DENO MOD02020 HYP(I)=HVEC MOD02030 ROT12(I)=DENO MOD02040 DELZ=ATM(3,NC1)-ATM(3,NC2) MOD02050 SV(1)=DELX MOD02060 SV(2)=DELY MOD02070 SV(3)=DELZ MOD02080 DO 260 K=1,3 MOD02090 RV(1,K)=PLA(I,1,K) MOD02100 RV(2,K)=PLA(I,2,K) MOD02110 260 CONTINUE MOD02120 SV2=SV(1)**2+SV(2)**2+SV(3)**2 MOD02130 DO 280 J=1,2 MOD02140 RDS=RV(J,1)*SV(1)+RV(J,2)*SV(2)+RV(J,3)*SV(3) MOD02150 AKO=RDS/SV2 MOD02160 CALB=AKO*SQRT(SV2) MOD02170 ALB(J)=57.29578* ACOS(CALB) MOD02180 DO 270 K=1,3 MOD02190 PV(J,K)=RV(J,K)-AKO*SV(K) MOD02200 270 CONTINUE MOD02210 PM(J)=SQRT(PV(J,1)**2+PV(J,2)**2+PV(J,3)**2) MOD02220 280 CONTINUE MOD02230 BKL(I)=ALB(2) - ALB(1) MOD02240 COPT=PV(1,1)*PV(2,1)+PV(1,2)*PV(2,2)+PV(1,3)*PV(2,3) MOD02250 COPU=COPT/(PM(1)*PM(2)) MOD02260 ANSUP=57.29578* ACOS(COPU) MOD02270 PTW(I)=-ANSUP MOD02280 TIL(I)=57.29578*ATAN2(DELZ,DENO) MOD02290 DO 290 J=1,3 MOD02300 SINR=(PLA(I,J,1)*DELY-PLA(I,J,2)*DELX)/DENO MOD02310 PHI(I,J,1)=57.29578* ASIN(SINR) MOD02320 SINT=(PLA(I,J,1)*DELX+PLA(I,J,2)*DELY)/DENO MOD02330 PHI(I,J,2)=-57.29578* ASIN(SINT) MOD02340 290 CONTINUE MOD02350 300 CONTINUE MOD02360 C MOD02370 C CALCULATE AND STORE THETA ANGLES MOD02380 C MOD02390 NST=NPLA-1 MOD02400 DO 330 I=1,NST MOD02410 I1=I+1 MOD02420 NC1=NC(1,I) MOD02430 NC2=NC(2,I) MOD02440 ND1=NC(1,I1) MOD02450 ND2=NC(2,I1) MOD02460 DX=ATM(1,ND1)-ATM(1,ND2)-ATM(1,NC1)+ATM(1,NC2) MOD02470 DY=ATM(2,ND1)-ATM(2,ND2)-ATM(2,NC1)+ATM(2,NC2) MOD02480 DENO=SQRT(DX**2+DY**2) MOD02490 DO 320 J=1,3 MOD02500 DA=PLA(I1,J,1)-PLA(I,J,1) MOD02510 DB=PLA(I1,J,2)-PLA(I,J,2) MOD02520 SINR=(DA*DX+DB*DY)/DENO MOD02530 THE(I,J,1)=-57.29578* ASIN(SINR) MOD02540 SINT=(DB*DX-DA*DY)/DENO MOD02550 C === MOD 15.2.85. TO OVERCOME SINT.GT.1.0 === TH MOD02560 IF (SINT.GT.1.0) SINT=1.0 MOD02570 THE(I,J,2)=57.29578* ASIN(SINT) MOD02580 C MOD02590 C INSERTED COMMANDS BEGIN MOD02600 DO 310 K=1,3 MOD02610 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. MOD02620 BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. MOD02630 310 CONTINUE MOD02640 AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) MOD02650 ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) MOD02660 SLJ(I)=-ADB/AMAG MOD02670 SLJ(I1)=0.0 MOD02680 C INSERTED COMMANDS END MOD02690 C MOD02700 320 CONTINUE MOD02710 330 CONTINUE MOD02720 C MOD02730 C PRINT OUT ROLL AND TILT ANGLES MOD02740 C MOD02750 WRITE(LUW,506) MOD02760 WRITE(LUW,500) WRITE(LUW,502)TITL MOD02770 DO 335 L=1,11 MOD02780 SSQ(L)=0. MOD02790 335 SIG(L)=0. MOD02800 N1=0 MOD02810 DO 420 J=2,3 MOD02820 IF(J-2)340,340,350 MOD02830 340 WRITE(LUW,509) MOD02840 WRITE(LUW,516) WRITE(LUW,510) MOD02850 WRITE(LUW,516) GO TO 360 MOD02860 350 WRITE(LUW,511) MOD02870 WRITE(LUW,516) WRITE(LUW,512) MOD02880 WRITE(LUW,516) 360 DO 410 M=1,NPLA MOD02890 IF(J-2)370,370,380 MOD02900 370 K=J-1 MOD02910 WRITE(LUW,513)PHI(M,K,1),PHI(M,K,2),THE(M,K,1),THE(M,K,2), MOD02920 *PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2) MOD02930 GO TO 400 MOD02940 380 N1=N1+1 MOD02950 SIG(1) = SIG(1) + PHI(M,J,1) MOD02960 SSQ(1) = SSQ(1) + PHI(M,J,1)*PHI(M,J,1) MOD02970 SIG(2) = SIG(2) + PHI(M,J,2) MOD02980 SSQ(2) = SSQ(2) + PHI(M,J,2)*PHI(M,J,2) MOD02990 SIG(5) = SIG(5) + TIL(M) MOD03000 SSQ(5) = SSQ(5) + TIL(M)*TIL(M) MOD03010 SIG(6) = SIG(6) + PTW(M) MOD03020 SSQ(6) = SSQ(6) + PTW(M)*PTW(M) MOD03030 SIG(7) = SIG(7) + BKL(M) MOD03040 SSQ(7) = SSQ(7) + BKL(M)*BKL(M) MOD03050 SIG(9) = SIG(9) + DIS(M) MOD03060 SSQ(9) = SSQ(9) + DIS(M)*DIS(M) MOD03070 SIG(10) = SIG(10) + SLI(M) MOD03080 SSQ(10) = SSQ(10) + SLI(M)*SLI(M) MOD03090 SIG(11) = SIG(11) + ROT12(M) MOD03100 SSQ(11) = SSQ(11) + ROT12(M)*ROT12(M) MOD03110 IF (M.NE.NPLA) GO TO 390 MOD03120 WRITE(LUW,521)PHI(M,J,1),PHI(M,J,2),TIL(M),PTW(M),BKL(M), MOD03130 * DIS(M),SLI(M),ROT12(M) MOD03140 GO TO 400 MOD03150 390 SIG(3) = SIG(3) + THE(M,J,1) MOD03160 SSQ(3) = SSQ(3) + THE(M,J,1)*THE(M,J,1) MOD03170 SIG(4) = SIG(4) + THE(M,J,2) MOD03180 SSQ(4) = SSQ(4) + THE(M,J,2)*THE(M,J,2) MOD03190 SIG(8) = SIG(8) + SLJ(M) MOD03200 SSQ(8) = SSQ(8) + SLJ(M)*SLJ(M) MOD03210 WRITE(LUW,514)PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2),TIL(M),PMOD03220 *TW(M),BKL(M),SLJ(M),DIS(M),SLI(M),ROT12(M) MOD03230 400 CONTINUE MOD03240 410 CONTINUE MOD03250 420 CONTINUE MOD03260 WRITE(LUW,522) MOD03270 DO 440 I=1,11 MOD03280 NN = N1 MOD03290 IF (I.EQ.3.OR.I.EQ.4.OR.I.EQ.8) NN=N1-1 MOD03300 AV(I)=SIG(I)/NN MOD03310 SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) MOD03320 IF (SDZ.LE.0.0001) SDZ=0. MOD03330 SD(I) = SQRT(SDZ) MOD03340 440 CONTINUE MOD03350 WRITE (LUW,523) (AV(I),I=1,11) MOD03360 WRITE(LUW,516) MOD03370 WRITE (LUW,524) (SD(I),I=1,11) MOD03380 WRITE(LUW,516) MOD03390 WRITE(LUW,517) MOD03400 WRITE(LUW,518) MOD03410 WRITE(LUW,519) MOD03420 WRITE(LUW,520) MOD03430 RETURN MOD03440 END MOD03450 C MOD03460 C------------------------- MOD03470 C SUBROUTINE CHSIGN MOD03480 C------------------------- MOD03490 C MOD03500 SUBROUTINE CHSIGN (ICHSGN) MOD03510 CHARACTER * 8 ABUF MOD03520 CHARACTER * 4 MH,NAME MOD03530 CHARACTER * 1 IR,TITL MOD03540 CHARACTER * 2 KRES1,KRES2 MOD03550 CHARACTER * 3 ANAM1,ANAM2 MOD03560 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD03570 X ,L15 MOD03580 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000),IDUM MOD03590 I=0 MOD03600 10 CONTINUE MOD03610 I=I+1 MOD03620 IF (I.EQ.NATOM) GO TO 100 MOD03630 J=I MOD03640 KRES1=NAME(1,I)(2:3) MOD03650 ANAM1=NAME(1,I)(4:4)//NAME(2,I)(1:2) MOD03660 20 CONTINUE MOD03670 J=J+1 MOD03680 IF (J.GT.NATOM) GO TO 10 MOD03690 KRES2=NAME(1,J)(2:3) MOD03700 IF (KRES1.EQ.KRES2) GO TO 20 MOD03710 ANAM2=NAME(1,J)(4:4)//NAME(2,J)(1:2) MOD03720 IF (ANAM1.NE.ANAM2) GO TO 20 MOD03730 IF (ATM(3,I).EQ.ATM(3,J)) GO TO 20 MOD03740 IF (ATM(3,I).GT.ATM(3,J)) RETURN MOD03750 ICHSGN=1 MOD03760 RETURN MOD03770 100 WRITE (LUW,500) MOD03780 500 FORMAT (//,' ***** NO MATCHING ATOMS BETWEEN RESIDUES *****',//) MOD03790 RETURN MOD03800 END MOD03810 C MOD03820 C------------------------- MOD03830 C SUBROUTINE CYLIN MOD03840 C------------------------- MOD03850 C MOD03860 SUBROUTINE CYLIN MOD03870 CHARACTER * 4 MH,NAME MOD03880 CHARACTER * 7 NNAME(20) MOD03890 CHARACTER * 3 PBL,C1P,FFC,LN1,LN9,N1N9,NTP MOD03900 CHARACTER * 1 IR,TITL,L1,L2,L3,NAT,CC,TT,DOT,CHECK MOD03910 CHARACTER * 2 IRES MOD03920 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD03930 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),NAT(1000,5),NPLA MOD03940 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20) MOD03950 DIMENSION PS(2,20,5),CS(2,20,5),DQHP(2,20,4),STR(2,20,11),NK(4), MOD03960 1 D1(3),D2(3),HOL(20),PDIT(20,20),AM(3),BM(3),NA(3),NB(3), MOD03970 2 SIG1(7),SSQ1(7),AV1(7),SD1(7),SIG2(11),SSQ2(11),AV2(11),SD2(11) MOD03980 3 ,ND(2,20),ALAMD1(20),ALAMD2(20) MOD03990 DATA PBL/'P '/,C1P/'C1'''/,LN1/'N1 '/,LN9/'N9 '/ MOD04000 DATA CC/'C'/,TT/'T'/,DOT/'.'/ MOD04010 C MOD04020 500 FORMAT(1X,' CYLINDRICAL PARAMETERS, CAMBRIDGE CONVENTION') MOD04030 501 FORMAT(//,I5,' ATOMS AND ',I5,' BASE PAIRS',/) MOD04040 502 FORMAT(/,1X,72A1,/) MOD04050 503 FORMAT(2I5) MOD04060 504 FORMAT(//,' PHOSPHATE BACKBONE TABLE, 5" TO 3" DIRECTION IN EACH SMOD04070 *TRAND',//) MOD04080 505 FORMAT(' R PHI Z D Q H PI') MOD04090 506 FORMAT(/,' STRAND ',I4,/) MOD04100 507 FORMAT(7F8.2) MOD04110 508 FORMAT(20I5) MOD04120 509 FORMAT(///,2X,' ROTATION AND RISE TABLE, 5" TO 3" DIRECTION',//) MOD04130 510 FORMAT(' S5" S3" Q(C1") T(C1") TWIST H(C1") RISE SLIDE MOD04140 *X DSP Y DSP C1/C1') MOD04150 511 FORMAT(/,' STRAND ',I4,/) MOD04160 512 FORMAT(5F7.2,2F7.3,4F7.2) MOD04170 513 FORMAT(' D,Q,TG AND HG ARE MAGNITUDES. ALL OTHER DERIVED QUANTITIMOD04180 *ES HAVE') MOD04190 514 FORMAT(' PROPER SIGNS--OPPOSITE FOR DESCENDING AND ASCENDING STMOD04200 *RANDS.') MOD04210 515 FORMAT(1H1) MOD04220 516 FORMAT(' PHOSPHORUS-PHOSPHORUS DISTANCES LESS 5.8 A') MOD04230 517 FORMAT(' STRAND 1 DOWN, STRAND 2 ACROSS, 5" TO 3" DIRECTION') MOD04240 555 FORMAT(1H ) 518 FORMAT(1X,20F6.2) MOD04250 519 FORMAT(3F8.2,4(5X,'-',2X)) MOD04260 520 FORMAT(/,7(2X,'______'),/) MOD04270 521 FORMAT(7F8.2,' AV.',/) MOD04280 522 FORMAT(7F8.2,' S.D.',///) MOD04290 523 FORMAT(F7.2,7(4X,'-',2X),3F7.2) MOD04300 524 FORMAT(/,11(2X,'_____'),/) MOD04310 525 FORMAT(11F7.2,' AV.',/) MOD04320 526 FORMAT(11F7.2,' S.D.',///) MOD04330 527 FORMAT(4X,'-',2X,4F7.2,2F7.3,4F7.2) MOD04340 528 FORMAT (///,2X,'RESIDUE LAMBDA(1) LAMBDA(2)',/) MOD04350 529 FORMAT (2X,A7,2F10.2) MOD04360 530 FORMAT (///,2X,'ANGLES BETWEEN GLYCOSIDIC BONDS AND C1'' - C1'' BAMOD04370 XSE - PAIR VECTORS') MOD04380 RAD=0.0174533 MOD04390 WRITE(LUW,515) WRITE (LUW,500) MOD04400 WRITE(LUW,502)TITL MOD04420 WRITE(LUW,501) NATM,NPLA MOD04410 REWIND L12 MOD04430 2020 FORMAT(3F10.5,11X,A3,5A1) MOD04440 DO 10 I=1,NATM MOD04450 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),(NAT(I,J),J=1,5) MOD04460 C MOD04470 NPHO=NPLA-1 MOD04480 C MOD04490 C************** M.J.MCCALL 24.08.84 ************* MOD04500 DO 40 I=1,2 MOD04510 DO 30 J=1,NPHO MOD04520 DO 20 K=1,4 MOD04530 DQHP(I,J,K)=0.0 MOD04540 20 CONTINUE MOD04550 30 CONTINUE MOD04560 40 CONTINUE MOD04570 C MOD04580 DO 70 I=1,2 MOD04590 DO 60 J=1,NPLA MOD04600 DO 50 K=1,11 MOD04610 STR(I,J,K)=0.0 MOD04620 50 CONTINUE MOD04630 60 CONTINUE MOD04640 70 CONTINUE MOD04650 C************** M.J.MCCALL 24.08.84 ************* MOD04660 IF (INPCYL.NE.0) GO TO 110 MOD04670 NHALF=NATM/2 MOD04680 DO 100 KK=1,2 MOD04690 J=0 MOD04700 L=0 MOD04710 N=0 MOD04720 DO 100 M=1,NHALF MOD04730 I=(KK-1)*NHALF+M MOD04740 N1N9=LN9 MOD04750 CHECK=NTP(I)(1:1) MOD04760 IF (CHECK.EQ.CC.OR.CHECK.EQ.TT) N1N9=LN1 MOD04770 L1=NAT(I,1) MOD04780 L2=NAT(I,2) MOD04790 L3=NAT(I,3) MOD04800 FFC=L1//L2//L3 MOD04810 80 IF (FFC.EQ.PBL) GO TO 90 MOD04820 IF (FFC.NE.C1P) GO TO 95 MOD04830 L=L+1 MOD04840 NC(KK,L)=I MOD04850 GO TO 100 MOD04860 90 J=J+1 MOD04870 NP(KK,J)=I MOD04880 GO TO 100 MOD04890 95 IF (FFC.NE.N1N9) GO TO 100 MOD04900 N=N+1 MOD04910 ND(KK,N)=I MOD04920 100 CONTINUE MOD04930 C MOD04940 110 DO 140 I=1,2 MOD04950 DO 130 J=1,NPHO MOD04960 NPH=NP(I,J) MOD04970 DO 120 K=1,3 MOD04980 PS(I,J,K)=ATM(K,NPH) MOD04990 120 CONTINUE MOD05000 X=PS(I,J,1) MOD05010 Y=PS(I,J,2) MOD05020 R=SQRT(X**2+Y**2) MOD05030 PHI=57.29578*ATAN2(Y,X) MOD05040 PS(I,J,4)=R MOD05050 IF (PHI.LT.0.) PHI=360.+PHI MOD05060 PS(I,J,5)=PHI MOD05070 130 CONTINUE MOD05080 140 CONTINUE MOD05090 C MOD05100 DO 160 I=1,2 MOD05110 DO 150 J=1,NPLA MOD05120 NCA=NC(I,J) MOD05130 CS(I,J,1)=ATM(1,NCA) MOD05140 CS(I,J,2)=ATM(2,NCA) MOD05150 CS(I,J,3)=ATM(3,NCA) MOD05160 X=CS(I,J,1) MOD05170 Y=CS(I,J,2) MOD05180 R=SQRT(X**2+Y**2) MOD05190 PHI=57.29578*ATAN2(Y,X) MOD05200 CS(I,J,4)=R MOD05210 CS(I,J,5)=PHI MOD05220 150 CONTINUE MOD05230 160 CONTINUE MOD05240 C MOD05250 NPS=NPHO-1 MOD05260 DO 180 I=1,2 MOD05270 DO 170 J=1,NPS MOD05280 J1=J+1 MOD05290 DX=PS(I,J1,1)-PS(I,J,1) MOD05300 DY=PS(I,J1,2)-PS(I,J,2) MOD05310 DZ=PS(I,J1,3)-PS(I,J,3) MOD05320 D=SQRT(DX**2+DY**2+DZ**2) MOD05330 Q=SQRT(DX**2+DY**2) MOD05340 H=DZ MOD05350 SINP=H/D MOD05360 PIT=57.29578* ASIN(SINP) MOD05370 DQHP(I,J,1)=D MOD05380 DQHP(I,J,2)=Q MOD05390 DQHP(I,J,3)=H MOD05400 DQHP(I,J,4)=PIT MOD05410 170 CONTINUE MOD05420 180 CONTINUE MOD05430 C MOD05440 WRITE(LUW,504) MOD05450 WRITE(LUW,505) MOD05460 DO 190 I=1,7 MOD05470 SSQ1(I)=0. MOD05480 190 SIG1(I)=0. MOD05490 N1=0 MOD05500 DO 230 I=1,2 MOD05510 WRITE(LUW,506)I MOD05520 DO 220 J=1,NPHO MOD05530 N1=N1+1 MOD05540 SIG1(1) = SIG1(1) + PS(I,J,4) MOD05550 SSQ1(1) = SSQ1(1) + PS(I,J,4)*PS(I,J,4) MOD05560 SIG1(2) = SIG1(2) + PS(I,J,5) MOD05570 SSQ1(2) = SSQ1(2) + PS(I,J,5)*PS(I,J,5) MOD05580 SIG1(3) = SIG1(3) + PS(I,J,3) MOD05590 SSQ1(3) = SSQ1(3) + PS(I,J,3)*PS(I,J,3) MOD05600 IF (J.NE.NPHO) GO TO 200 MOD05610 WRITE(LUW,519) PS(I,J,4),PS(I,J,5),PS(I,J,3) MOD05620 GO TO 220 MOD05630 200 DO 210 K=1,4 MOD05640 SIG1(3+K) = SIG1(3+K) + DQHP(I,J,K) MOD05650 210 SSQ1(3+K) = SSQ1(3+K) + DQHP(I,J,K)*DQHP(I,J,K) MOD05660 WRITE(LUW,507)PS(I,J,4),PS(I,J,5),PS(I,J,3),(DQHP(I,J,K),K=1,4) MOD05670 220 CONTINUE MOD05680 230 CONTINUE MOD05690 DO 240 I=1,7 MOD05700 NN = N1 MOD05710 IF (I.GT.3) NN=N1-2 MOD05720 AV1(I)=SIG1(I)/NN MOD05730 SDZ = (NN*SSQ1(I) - SIG1(I)*SIG1(I))/(NN*(NN-1)) MOD05740 IF (SDZ.LE.0.0001) SDZ=0. MOD05750 SD1(I) = SQRT(SDZ) MOD05760 240 CONTINUE MOD05770 WRITE (LUW,520) MOD05780 WRITE (LUW,521) (AV1(I),I=1,7) MOD05790 WRITE (LUW,522) (SD1(I),I=1,7) MOD05800 DO 390 I=1,2 MOD05810 ANUL=0.000 MOD05820 STR(I,1,1)=ANUL MOD05830 STR(I,1,3)=ANUL MOD05840 DO 250 L=2,7 MOD05850 STR(I,NPLA,K)=ANUL MOD05860 250 CONTINUE MOD05870 C MOD05880 DO 380 J=1,NPHO MOD05890 J1=J+1 MOD05900 IJ=NPLA-J+1 MOD05910 IJ1=NPLA-J MOD05920 C MOD05930 C CALCULATE S5' MOD05940 C MOD05950 DIF=CS(I,J1,5)-PS(I,J,5) MOD05960 260 IF(DIF-180.) 280,280,270 MOD05970 270 DIF=DIF-360. MOD05980 GO TO 260 MOD05990 280 IF(DIF+180.) 290,290,300 MOD06000 290 DIF=DIF+360. MOD06010 GO TO 280 MOD06020 300 STR(I,J1,1)=DIF MOD06030 C MOD06040 C CALCULATE S3' MOD06050 C MOD06060 DIF=PS(I,J,5)-CS(I,J,5) MOD06070 310 IF(DIF-180.) 330,330,320 MOD06080 320 DIF=DIF-360. MOD06090 GO TO 310 MOD06100 330 IF(DIF+180.) 340,340,350 MOD06110 340 DIF=DIF+360. MOD06120 GO TO 330 MOD06130 350 STR(I,J,2)=DIF MOD06140 C MOD06150 C CALCULATE Q(C1") AND T MOD06160 C MOD06170 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) MOD06200 C MOD06210 C CALCULATE TGLOBAL MOD06220 C MOD06230 DX1=CS(1,J,1)-CS(2,IJ,1) MOD06240 DX2=CS(1,J1,1)-CS(2,IJ1,1) MOD06250 DY1=CS(1,J,2)-CS(2,IJ,2) MOD06260 DY2=CS(1,J1,2)-CS(2,IJ1,2) MOD06270 R1=SQRT(DX1**2+DY1**2) MOD06280 R2=SQRT(DX2**2+DY2**2) MOD06290 R12=DX1*DX2+DY1*DY2 MOD06300 COA=R12/(R1*R2) MOD06310 STR(I,J,5)=57.29578* ACOS(COA) MOD06320 C MOD06330 C CALCULATE H AND HGLOBAL MOD06340 C MOD06350 STR(I,J,6)=CS(I,J1,3)-CS(I,J,3) MOD06360 STR(I,J,7)=ABS(CS(1,J1,3)-CS(1,J,3)+CS(2,IJ1,3)-CS(2,IJ,3))/2. MOD06370 C MOD06380 380 CONTINUE MOD06390 390 CONTINUE MOD06400 C MOD06410 C PRINT ANGLE TABLE MOD06420 C MOD06430 DO 420 K=5,7,2 MOD06440 DO 400 J=1,NPHO MOD06450 IJ=NPHO-J+1 MOD06460 HOL(J)=STR(2,IJ,K) MOD06470 400 CONTINUE MOD06480 DO 410 J=1,NPHO MOD06490 STR(2,J,K)=HOL(J) MOD06500 410 CONTINUE MOD06510 420 CONTINUE MOD06520 WRITE(LUW,515) WRITE(LUW,500) WRITE(LUW,502)TITL WRITE(LUW,509) MOD06530 WRITE(LUW,510) MOD06540 DO 430 I=1,NPLA MOD06550 N1=NC(1,I) MOD06560 NK(2)=N1 MOD06570 NK(1)=ND(1,I) MOD06580 I2=NPLA-I+1 MOD06590 N2=NC(2,I2) MOD06600 NK(3)=N2 MOD06610 NK(4)=ND(2,I2) MOD06620 DO 425 K=1,3 MOD06630 NA(K)=NK(K) MOD06640 NB(K)=NK(4-K+1) MOD06650 425 CONTINUE MOD06660 CALL ANGLE (NA,TE,ATM) MOD06670 ALAMD1(I)=TE/RAD MOD06680 CALL ANGLE (NB,TE,ATM) MOD06690 ALAMD2(I)=TE/RAD MOD06700 NNAME(I)=NTP(NK(1))//DOT//NTP(NK(3)) MOD06710 DX=ATM(1,N1)-ATM(1,N2) MOD06720 DY=ATM(2,N1)-ATM(2,N2) MOD06730 SX=(ATM(1,N1)+ATM(1,N2))/2. MOD06740 SY=(ATM(2,N1)+ATM(2,N2))/2. MOD06750 HM=SQRT(SX**2+SY**2) MOD06760 RM=SQRT(DX**2+DY**2) MOD06770 SL=(SX*DX+SY*DY)/RM MOD06780 DS=(SX*DY-SY*DX)/RM MOD06790 STR(1,I,10)=SL MOD06800 STR(1,I,9)=DS MOD06810 STR(1,I,11)=RM MOD06820 430 CONTINUE MOD06830 C MOD06840 NST=NPLA-1 MOD06850 DO 450 I=1,NST MOD06860 I1=I+1 MOD06870 I2=NPLA-I+1 MOD06880 I3=NPLA-I MOD06890 NC1=NC(1,I) MOD06900 NC2=NC(2,I2) MOD06910 ND1=NC(1,I1) MOD06920 ND2=NC(2,I3) MOD06930 DO 440 K=1,3 MOD06940 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. MOD06950 BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. MOD06960 440 CONTINUE MOD06970 AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) MOD06980 ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) MOD06990 STR(1,I,8)=-ADB/AMAG MOD07000 STR(1,I1,8)=0.00 MOD07010 450 CONTINUE MOD07020 DO 460 I=1,11 MOD07030 SSQ2(I)=0. MOD07040 460 SIG2(I)=0. MOD07050 N1=0 MOD07060 C MOD07070 DO 620 J=1,NPLA MOD07080 N1=N1+1 MOD07090 DO 470 K=9,11 MOD07100 SIG2(K) = SIG2(K) + STR(1,J,K) MOD07110 470 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) MOD07120 KK=2 MOD07130 IF (J.GT.1) GO TO 480 MOD07140 KK=4 MOD07150 SIG2(2) = SIG2(2) + STR(1,J,2) MOD07160 SSQ2(2) = SSQ2(2) + STR(1,J,2)*STR(1,J,2) MOD07170 GO TO 600 MOD07180 480 SIG2(1) = SIG2(1) + STR(1,J,1) MOD07190 SSQ2(1) = SSQ2(1) + STR(1,J,1)*STR(1,J,1) MOD07200 IF (J.EQ.NPLA) GO TO 620 MOD07210 600 DO 610 K=KK,8 MOD07220 SIG2(K) = SIG2(K) + STR(1,J,K) MOD07230 610 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) MOD07240 620 CONTINUE MOD07250 DO 630 I=1,11 MOD07260 NN = N1 MOD07270 IF (I.LT.3.OR.(I.GT.3.AND.I.LT.9)) NN=N1-1 MOD07280 IF (I.EQ.3) NN=N1-2 MOD07290 AV2(I)=SIG2(I)/NN MOD07300 SDZ = (NN*SSQ2(I) - SIG2(I)*SIG2(I))/(NN*(NN-1)) MOD07310 IF (SDZ.LE.0.0001) SDZ=0. MOD07320 SD2(I) = SQRT(SDZ) MOD07330 630 CONTINUE MOD07340 DO 650 I=1,2 MOD07350 WRITE(LUW,511)I MOD07360 DO 640 J=1,NPLA MOD07370 IF (I.NE.1.OR.(J.NE.NPLA.AND.J.NE.1)) WRITE(LUW,512) MOD07380 * (STR(I,J,K),K=1,11) MOD07390 IF (I.EQ.1.AND.J.EQ.NPLA) WRITE (LUW,523) STR(I,J,1), MOD07400 * (STR(I,J,K),K=9,11) MOD07410 IF (I.EQ.1.AND.J.EQ.1) WRITE (LUW,527) STR(I,J,2), MOD07420 * (STR(I,J,K),K=3,11) MOD07430 640 CONTINUE MOD07440 IF (I.GT.1) GO TO 650 MOD07450 WRITE(LUW,524) MOD07460 WRITE (LUW,525) (AV2(K),K=1,11) MOD07470 WRITE(LUW,508) MOD07480 WRITE (LUW,526) (SD2(K),K=1,11) MOD07490 650 CONTINUE MOD07500 WRITE(LUW,555) WRITE(LUW,513) MOD07510 WRITE(LUW,514) MOD07520 WRITE(LUW,515) WRITE(LUW,500) WRITE(LUW,502)TITL WRITE(LUW,530) MOD07530 WRITE(LUW,528) MOD07540 WRITE (LUW,529) (NNAME(I),ALAMD1(I),ALAMD2(I),I=1,NPLA) MOD07550 C MOD07560 C CALCULATE AND PRINT ALL P-P DISTANCES BETWEEN STRANDS MOD07570 C MOD07580 WRITE(LUW,515) MOD07590 WRITE(LUW,500) WRITE(LUW,502)TITL MOD07600 DO 670 I=1,NPHO MOD07610 DO 670 J=1,NPHO MOD07620 SUMMA=0.0 MOD07630 DO 660 K=1,3 MOD07640 660 SUMMA=SUMMA+(PS(1,I,K)-PS(2,J,K))**2 MOD07650 PDIT(I,J)=SQRT(SUMMA)-5.8 MOD07660 670 CONTINUE MOD07670 WRITE(LUW,516) MOD07680 WRITE(LUW,517) MOD07690 DO 680 I=1,NPHO MOD07700 WRITE(LUW,555) WRITE(LUW,518)(PDIT(I,J),J=1,NPHO) MOD07710 680 CONTINUE MOD07720 RETURN MOD07730 END MOD07740 C MOD07750 C------------------------- MOD07760 C SUBROUTINE DEFROT MOD07770 C------------------------- MOD07780 C MOD07790 SUBROUTINE DEFROT(VECTOR,ANGLE,ROTOR) MOD07800 C MOD07810 C DEFINE A GENERAL ROTATION MATRIX MOD07820 C MOD07830 DIMENSION VECTOR(3),DIRCOS(3),ROTOR(3,3) MOD07840 DO 10 I=1,3 MOD07850 DO 10 J=1,3 MOD07860 10 ROTOR(I,J)=0.0 MOD07870 C=COS(ANGLE) MOD07880 S=SIN(ANGLE) MOD07890 VMAG=SQRT(DOTP(VECTOR,VECTOR)) MOD07900 DO 20 I=1,3 MOD07910 20 DIRCOS(I)=VECTOR(I)/VMAG MOD07920 ROTOR(1,2)=DIRCOS(3)*S MOD07930 ROTOR(2,1)=-ROTOR(1,2) MOD07940 ROTOR(3,1)=DIRCOS(2)*S MOD07950 ROTOR(1,3)=-ROTOR(3,1) MOD07960 ROTOR(2,3)=DIRCOS(1)*S MOD07970 ROTOR(3,2)=-ROTOR(2,3) MOD07980 DO 30 I=1,3 MOD07990 DO 30 J=1,3 MOD08000 30 ROTOR(I,J)=ROTOR(I,J)+DIRCOS(I)*DIRCOS(J)*(1.0-C) MOD08010 DO 40 I=1,3 MOD08020 40 ROTOR(I,I)=ROTOR(I,I)+C MOD08030 RETURN MOD08040 END MOD08050 C MOD08060 C------------------------- MOD08070 C FUNCTION DOTP MOD08080 C------------------------- MOD08090 C MOD08100 FUNCTION DOTP(X,Y) MOD08110 C MOD08120 C TAKE THE DOT PRODUCT OF TWO CARTESIAN VECTORS MOD08130 C MOD08140 DIMENSION X(3),Y(3) MOD08150 DOTP=0.0 MOD08160 DO 10 I=1,3 MOD08170 DOTP=DOTP+X(I)*Y(I) MOD08180 10 CONTINUE MOD08190 RETURN MOD08200 END MOD08210 C MOD08220 C------------------------- MOD08230 C SUBROUTINE EIGEN1 MOD08240 C------------------------- MOD08250 C MOD08260 SUBROUTINE EIGEN1(A,R,N,MV) MOD08270 C MOD08280 C COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL SYMMETRIC MATRIX MOD08290 C MOD08300 DIMENSION A(1),R(1) MOD08310 RANGE=1.0E-6 MOD08320 IF(MV-1) 10,25,10 MOD08330 10 IQ=-N MOD08340 DO 20 J=1,N MOD08350 IQ=IQ+N MOD08360 DO 20 I=1,N MOD08370 IJ=IQ+I MOD08380 R(IJ)=0.0 MOD08390 IF(I-J) 20,15,20 MOD08400 15 R(IJ)=1.0 MOD08410 20 CONTINUE MOD08420 25 ANORM=0.0 MOD08430 DO 35 I=1,N MOD08440 DO 35 J=I,N MOD08450 IF(I-J) 30,35,30 MOD08460 30 IA=I+(J*J-J)/2 MOD08470 ANORM=ANORM+A(IA)*A(IA) MOD08480 35 CONTINUE MOD08490 IF(ANORM) 165,165,40 MOD08500 40 ANORM=1.414*SQRT(ANORM) MOD08510 ANRMX=ANORM*RANGE/FLOAT(N) MOD08520 IND=0 MOD08530 THR=ANORM MOD08540 45 THR=THR/FLOAT(N) MOD08550 50 L=1 MOD08560 55 M=L+1 MOD08570 60 MQ=(M*M-M)/2 MOD08580 LQ=(L*L-L)/2 MOD08590 LM=L+MQ MOD08600 62 IF(ABS(A(LM))-THR) 130,65,65 MOD08610 65 IND=1 MOD08620 LL=L+LQ MOD08630 MM=M+MQ MOD08640 X=0.5*(A(LL)-A(MM)) MOD08650 68 Y=-A(LM)/SQRT(A(LM)*A(LM)+X*X) MOD08660 IF(X) 70,75,75 MOD08670 70 Y=-Y MOD08680 75 SINX=Y/SQRT(2.0*(1.0+(SQRT(1.0-Y*Y)))) MOD08690 SINX2=SINX*SINX MOD08700 78 COSX=SQRT(1.0-SINX2) MOD08710 COSX2=COSX*COSX MOD08720 SINCS=SINX*COSX MOD08730 ILQ=N*(L-1) MOD08740 IMQ=N*(M-1) MOD08750 DO 125 I=1,N MOD08760 IQ=(I*I-I)/2 MOD08770 IF(I-L) 80,115,80 MOD08780 80 IF(I-M) 85,115,90 MOD08790 85 IM=I+MQ MOD08800 GO TO 95 MOD08810 90 IM=M+IQ MOD08820 95 IF(I-L) 100,105,105 MOD08830 100 IL=I+LQ MOD08840 GO TO 110 MOD08850 105 IL=L+IQ MOD08860 110 X=A(IL)*COSX-A(IM)*SINX MOD08870 A(IM)=A(IL)*SINX+A(IM)*COSX MOD08880 A(IL)=X MOD08890 115 IF(MV-1) 120,125,120 MOD08900 120 ILR=ILQ+I MOD08910 IMR=IMQ+I MOD08920 X=R(ILR)*COSX-R(IMR)*SINX MOD08930 R(IMR)=R(ILR)*SINX+R(IMR)*COSX MOD08940 R(ILR)=X MOD08950 125 CONTINUE MOD08960 X=2.0*A(LM)*SINCS MOD08970 Y=A(LL)*COSX2+A(MM)*SINX2-X MOD08980 X=A(LL)*SINX2+A(MM)*COSX2+X MOD08990 A(LM)=(A(LL)-A(MM))*SINCS+A(LM)*(COSX2-SINX2) MOD09000 A(LL)=Y MOD09010 A(MM)=X MOD09020 130 IF(M-N) 135,140,135 MOD09030 135 M=M+1 MOD09040 GO TO 60 MOD09050 140 IF(L-(N-1)) 145,150,145 MOD09060 145 L=L+1 MOD09070 GO TO 55 MOD09080 150 IF(IND-1) 160,155,160 MOD09090 155 IND=0 MOD09100 GO TO 50 MOD09110 160 IF(THR-ANRMX) 165,165,45 MOD09120 165 IQ=-N MOD09130 DO 185 I=1,N MOD09140 IQ=IQ+N MOD09150 LL=I+(I*I-I)/2 MOD09160 JQ=N*(I-2) MOD09170 DO 185 J=I,N MOD09180 JQ=JQ+N MOD09190 MM=J+(J*J-J)/2 MOD09200 IF(A(LL)-A(MM)) 170,185,185 MOD09210 170 X=A(LL) MOD09220 A(LL)=A(MM) MOD09230 A(MM)=X MOD09240 IF(MV-1) 175,185,175 MOD09250 175 DO 180 K=1,N MOD09260 ILR=IQ+K MOD09270 IMR=JQ+K MOD09280 X=R(ILR) MOD09290 R(ILR)=R(IMR) MOD09300 180 R(IMR)=X MOD09310 185 CONTINUE MOD09320 RETURN MOD09330 END MOD09340 C MOD09350 C------------------------- MOD09360 C SUBROUTINE EIGEN2 MOD09370 C------------------------- MOD09380 C MOD09390 SUBROUTINE EIGEN2(A,EIG) MOD09400 CHARACTER * 1 IR,TITL MOD09410 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD09420 DIMENSION A(3,3),EIG(20,3) MOD09430 DIMENSION AX(6,6),B(3,3) MOD09440 C MOD09450 C FIND THE LEAST EIGENVECTOR OF EQUATION AE=LE, WHERE A IS A 3X3 MOD09460 C MATRIX, L IS THE EIGENVALUE, AND E IS THE EIGENVECTOR. START MOD09470 C WITH E OR EIG=(0,0,1) AND ITERATE BY THE SWMB METHOD MOD09480 C (ACTA CRYST 14:185,1959) BY MULTIPLYING EIG BY B, WHERE MOD09490 C IS THE ADJOINT MATRIX OF A. HALT WHEN EIG CONVERGES (LESS THAN MOD09500 C 0.1% CHANGE BETWEEN CYCLES), OR AFTER 20 ITERATIONS. WRITE OUT MOD09510 C EACH EIGENVECTOR FOR INSPECTION. MOD09520 C MOD09530 DO 1 I=1,3 MOD09540 DO 1 J=1,3 MOD09550 I3=I+3 MOD09560 J3=J+3 MOD09570 AX(I,J)=A(I,J) MOD09580 AX(I3,J)=A(I,J) MOD09590 AX(I,J3)=A(I,J) MOD09600 AX(I3,J3)=A(I,J) MOD09610 1 CONTINUE MOD09620 C MOD09630 DO 2 I=1,3 MOD09640 DO 2 J=1,3 MOD09650 I1=I+1 MOD09660 I2=I+2 MOD09670 J1=J+1 MOD09680 J2=J+2 MOD09690 B(J,I)=AX(I1,J1)*AX(I2,J2)-AX(I1,J2)*AX(I2,J1) MOD09700 2 CONTINUE MOD09710 C MOD09720 DO 3 I=2,20 MOD09730 DO 3 J=1,3 MOD09740 EIG(I,J)=0.0 MOD09750 3 CONTINUE MOD09760 EIG(1,1)=0.0 MOD09770 EIG(1,2)=0.0 MOD09780 EIG(1,3)=1.0 MOD09790 C WRITE(LUW,5)(EIG(1,J),J=1,3) MOD09800 C5 FORMAT(' EIGENVECTOR=',3F10.5) MOD09810 DO 4 K=1,19 MOD09820 K1=K+1 MOD09830 EX=B(1,1)*EIG(K,1)+B(1,2)*EIG(K,2)+B(1,3)*EIG(K,3) MOD09840 EY=B(2,1)*EIG(K,1)+B(2,2)*EIG(K,2)+B(2,3)*EIG(K,3) MOD09850 EZ=B(3,1)*EIG(K,1)+B(3,2)*EIG(K,2)+B(3,3)*EIG(K,3) MOD09860 EN=SQRT(EX**2+EY**2+EZ**2) MOD09870 EIG(K1,1)=EX/EN MOD09880 EIG(K1,2)=EY/EN MOD09890 EIG(K1,3)=EZ/EN MOD09900 C WRITE(LUW,5)(EIG(K1,J),J=1,3) MOD09910 DO 6 J=1,3 MOD09920 DIF=ABS(EIG(K1,J)-EIG(K,J)) MOD09930 ARR=DIF/EIG(K1,J) MOD09940 ERR=ABS(ARR) MOD09950 IF(ERR-0.001)6,6,4 MOD09960 6 CONTINUE MOD09970 EIGZ=EIG(K1,3) MOD09980 SIGN=EIGZ/ABS(EIGZ) MOD09990 DO 8 J=1,3 MOD10000 EIG(20,J)=EIG(K1,J)*SIGN MOD10010 8 CONTINUE MOD10020 GO TO 9 MOD10030 4 CONTINUE MOD10040 C MOD10050 C TEST THE EIGENVECTOR BY CARRYING OUT AE=LE AND EXAMINING L MOD10060 C MOD10070 9 EX=A(1,1)*EIG(20,1)+A(1,2)*EIG(20,2)+A(1,3)*EIG(20,3) MOD10080 EY=A(2,1)*EIG(20,1)+A(2,2)*EIG(20,2)+A(2,3)*EIG(20,3) MOD10090 EZ=A(3,1)*EIG(20,1)+A(3,2)*EIG(20,2)+A(3,3)*EIG(20,3) MOD10100 ELAMX=EX/EIG(20,1) MOD10110 ELAMY=EY/EIG(20,2) MOD10120 ELAMZ=EZ/EIG(20,3) MOD10130 C WRITE(LUW,10)ELAMX,ELAMY,ELAMZ MOD10140 C10 FORMAT(' LEAST EIGENVALUES= ',3F12.8) MOD10150 RETURN MOD10160 END MOD10170 C MOD10180 C------------------------- MOD10190 C SUBROUTINE GETATM MOD10200 C------------------------- MOD10210 C MOD10220 SUBROUTINE GETATM(OMAT) MOD10230 CHARACTER * 5 ATAB MOD10240 CHARACTER * 4 MH,NORIG,NAME,NOX,NOY,NOZ,IBLNK MOD10250 CHARACTER * 1 IR,TITL,FMT,Y,R,A,T,G,C,L1,L4,L5,L6,L7, MOD10260 X P1,P2,P3,P4,P5 MOD10270 CHARACTER * 4 CC,EC MOD10280 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD10290 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD10300 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD10310 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD10320 X ATAB(30,10),LSEQ(10) MOD10330 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD10340 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD10350 DIMENSION W1(3),W2(3),OMAT(3,3),OATM(3,1000),DDUM(3) MOD10360 DATA NORIG/'ORGN'/,NOX/'A AX'/,NOY/'B AX'/,NOZ/'C AX'/ MOD10370 DATA IBLNK/' '/,Y/'Y'/,R/'R'/,T/'T'/,A/'A'/,G/'G'/,C/'C'/ MOD10380 1000 FORMAT(72A1) MOD10390 WRITE(LUW,2000) TITL MOD10400 2000 FORMAT(1H1,1X,72A1,/) MOD10410 WRITE(LUW,2222) MOD10420 2222 FORMAT(' INPUT FRAC.COORDS. X,Y,Z AND ATOM NAME IN FORMAT:') MOD10430 WRITE(LUW,2000)FMT MOD10440 1010 FORMAT(2I5) MOD10450 IF (INPHEL.NE.0) GO TO 100 MOD10460 DO 90 JJ=1,IHELIX MOD10470 NNH=0 MOD10480 DO 80 I=1,NATOM MOD10490 L1=NAME(1,I)(1:1) MOD10500 L4=NAME(1,I)(4:4) MOD10510 L5=NAME(2,I)(1:1) MOD10520 L6=NAME(2,I)(2:2) MOD10530 L7=NAME(2,I)(3:3) MOD10540 CC=L4//L5//L6//L7 MOD10550 NUMBR=LSEQ(JJ) MOD10560 DO 60 J=1,NUMBR MOD10570 P1=ATAB(J,JJ)(1:1) MOD10580 P2=ATAB(J,JJ)(2:2) MOD10590 P3=ATAB(J,JJ)(3:3) MOD10600 P4=ATAB(J,JJ)(4:4) MOD10610 P5=ATAB(J,JJ)(5:5) MOD10620 EC=P2//P3//P4//P5 MOD10630 IF (P1.NE.R.AND.P1.NE.Y) EC=P1//P2//P3//P4 MOD10640 IF (P1.EQ.R) GO TO 40 MOD10650 IF (P1.EQ.Y) GO TO 50 MOD10660 30 IF (CC.EQ.EC) GO TO 70 MOD10670 GO TO 60 MOD10680 40 IF (L1.EQ.G.OR.L1.EQ.A) GO TO 30 MOD10690 GO TO 60 MOD10700 50 IF (L1.EQ.T.OR.L1.EQ.C) GO TO 30 MOD10710 60 CONTINUE MOD10720 GO TO 80 MOD10730 70 NNH=NNH+1 MOD10740 NSEQ(NNH,JJ)=I MOD10750 80 CONTINUE MOD10760 MMH(JJ)=NNH MOD10770 90 CONTINUE MOD10780 100 WRITE(LUW,2010) NATOM,IFLAGP MOD10790 2010 FORMAT(' WILL READ ',I5,' ATOMS: PRINT FLAG=',I5/) MOD10800 NAT=NATOM MOD10810 ATM(1,NAT+1)=0.0 MOD10820 ATM(2,NAT+1)=0.0 MOD10830 ATM(3,NAT+1)=0.0 MOD10840 ATM(1,NAT+2)=1.0 MOD10850 ATM(2,NAT+2)=0.0 MOD10860 ATM(3,NAT+2)=0.0 MOD10870 ATM(1,NAT+3)=0.0 MOD10880 ATM(2,NAT+3)=1.0 MOD10890 ATM(3,NAT+3)=0.0 MOD10900 ATM(1,NAT+4)=0.0 MOD10910 ATM(2,NAT+4)=0.0 MOD10920 ATM(3,NAT+4)=1.0 MOD10930 NAME(1,NAT+1)=NORIG MOD10940 NAME(1,NAT+2)=NOX MOD10950 NAME(1,NAT+3)=NOY MOD10960 NAME(1,NAT+4)=NOZ MOD10970 NAME(2,NAT+1)=IBLNK MOD10980 NAME(2,NAT+2)=IBLNK MOD10990 NAME(2,NAT+3)=IBLNK MOD11000 NAME(2,NAT+4)=IBLNK MOD11010 NAT=NAT+4 MOD11020 1020 FORMAT(6F10.5) MOD11030 WRITE(LUW,2333) MOD11040 2333 FORMAT(/' CELL CONSTANTS A,B,C,ALPHA,BETA,GAMMA ARE:') MOD11050 WRITE(LUW,2020) CELL MOD11060 2020 FORMAT(1X,6(F7.3,1X)/) MOD11070 CALL GETMAT(OMAT,CELL) MOD11080 WRITE(LUW,2025) IFLAGP MOD11090 2025 FORMAT(' COORDINATES IN ORTHONORMAL SYSTEM: PRINT FLAG=',I5/) MOD11100 DO 120 I=1,NAT MOD11110 DO 111 J=1,3 MOD11120 111 DDUM(J)=ATM(J,I) MOD11130 CALL ROTATE(OMAT,DDUM) MOD11140 DO 112 J=1,3 MOD11150 112 ATM(J,I)=DDUM(J) MOD11160 IF(IFLAGP.NE.1) GO TO 110 MOD11170 WRITE(LUW,2015) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) MOD11180 110 CONTINUE MOD11190 2015 FORMAT (1X,I5,5X,3(F9.4,1X),1X,2A4) MOD11200 DO 120 J=1,3 MOD11210 OATM(J,I)=ATM(J,I) MOD11220 120 CONTINUE MOD11230 CALL MINV(OMAT,3,DETOMT,W1,W2) MOD11240 RETURN MOD11250 END MOD11260 C MOD11270 C------------------------- MOD11280 C SUBROUTINE GETHVC MOD11290 C------------------------- MOD11300 C MOD11310 SUBROUTINE GETHVC MOD11320 C MOD11330 C GET VECTORS RELATING EQUIVALENT ATOMS MOD11340 C MOD11350 CHARACTER * 5 ATAB MOD11360 CHARACTER * 4 NAME MOD11370 CHARACTER * 1 IR,TITL,FMT MOD11380 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD11390 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD11400 X ATAB(30,10),LNUMB(10) MOD11410 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD11420 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD11430 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD11440 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD11450 DIMENSION FIELD(15) MOD11460 WRITE(LUW,2444) MOD11470 2444 FORMAT(' **************************************'/) MOD11480 WRITE(LUW,2000) MOD11490 2000 FORMAT(' ATOM PAIRS USED TO DETERMINE THE HELIX AXIS ARE:') MOD11500 IF (INPHEL.NE.0) GO TO 40 MOD11510 NVEC=0 MOD11520 DO 30 JJ=1,IHELIX MOD11530 NNH=MMH(JJ) MOD11540 KH=NNH/2 MOD11550 NMH=NNH-1 MOD11560 DO 20 K=1,NMH MOD11570 IF (K.EQ.KH) GO TO 20 MOD11580 IF (K.GT.KH) GO TO 10 MOD11590 NVEC=NVEC+1 MOD11600 IF(NVEC.GT.200) GO TO 120 MOD11610 NN1(NVEC)=NSEQ(K,JJ) MOD11620 NN2(NVEC)=NSEQ(K+1,JJ) MOD11630 GO TO 20 MOD11640 10 NVEC=NVEC+1 MOD11650 IF(NVEC.GT.200) GO TO 120 MOD11660 NN2(NVEC)=NSEQ(K,JJ) MOD11670 NN1(NVEC)=NSEQ(K+1,JJ) MOD11680 20 CONTINUE MOD11690 30 CONTINUE MOD11700 40 DO 60 N=1,NVEC MOD11710 N2=NN2(N) MOD11720 N1=NN1(N) MOD11730 WRITE(LUW,2010) N1,(NAME(J,N1),J=1,2),N2,(NAME(J,N2),J=1,2) MOD11740 2010 FORMAT(1X,2(I3,1X,2A4,8X),15A4) MOD11750 DO 50 I=1,3 MOD11760 X(I,N)=ATM(I,N1) MOD11770 VEC(I,N)=ATM(I,N2)-ATM(I,N1) MOD11780 50 CONTINUE MOD11790 60 CONTINUE MOD11800 WRITE(LUW,2444) MOD11810 IF(NVEC.GE.3) RETURN MOD11820 WRITE(LUW,2030) MOD11830 2030 FORMAT(' LESS THAN 3 VECTORS: HELIX AXIS CANNOT BE DETERMINED') MOD11840 STOP 16 MOD11850 120 WRITE(LUW,2020) MOD11860 2020 FORMAT(' ARRAYS EXCEEDED BY INPUT OF GT.200 VECTORS') MOD11870 STOP 16 MOD11880 END MOD11890 C MOD11900 C------------------------- MOD11910 C SUBROUTINE GETMAT MOD11920 C------------------------- MOD11930 C MOD11940 SUBROUTINE GETMAT(BMAT,CELCON) MOD11950 C MOD11960 C GET THE MATRIX TO TRANSFORM INTO CARTESIAN COORDINATES MOD11970 C MOD11980 REAL BMAT(3,3),CELCON(6),ANG(3) MOD11990 ANG(1)=CELCON(4) MOD12000 ANG(2)=CELCON(5) MOD12010 ANG(3)=CELCON(6) MOD12020 PIFAZE=3.1415926/180.0 MOD12030 DO 10 I=1,3 MOD12040 10 ANG(I)=ANG(I)*PIFAZE MOD12050 A1=CELCON(1) MOD12060 A2=CELCON(2) MOD12070 A3=CELCON(3) MOD12080 TEMP1=(COS(ANG(2))-COS(ANG(1))*COS(ANG(3))) MOD12090 TEMP2=SIN(ANG(1))*SIN(ANG(3)) MOD12100 OMG= ACOS(TEMP1/TEMP2) MOD12110 BMAT(1,1)=A1*SIN(ANG(3))*SIN(OMG) MOD12120 BMAT(1,2)=0.0 MOD12130 BMAT(1,3)=0.0 MOD12140 BMAT(2,1)=A1*COS(ANG(3)) MOD12150 BMAT(2,2)=A2 MOD12160 BMAT(2,3)=A3*COS(ANG(1)) MOD12170 BMAT(3,1)=A1*SIN(ANG(3))*COS(OMG) MOD12180 BMAT(3,2)=0.0 MOD12190 BMAT(3,3)=A3*SIN(ANG(1)) MOD12200 RETURN MOD12210 END MOD12220 C MOD12230 C------------------------- MOD12240 C SUBROUTINE HELIX MOD12250 C------------------------- MOD12260 C MOD12270 SUBROUTINE HELIX MOD12280 CHARACTER * 5 ATAB MOD12290 CHARACTER * 4 NAME,MH MOD12300 CHARACTER * 1 IR,TITL,FMT MOD12310 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD12320 X ATAB(30,10) MOD12330 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD12340 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD12350 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD12360 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD12370 INTEGER LS1(200),LS2(200) MOD12380 REAL ROT(3,3),A(200,2),G(200),XYC(2),SGXYC(2),XYZC(3) MOD12390 REAL ROTOT(3,3),WORK(3,3),OMAT(3,3),OUHV(3) MOD12400 REAL X1(3),X2(3),UHV(3),XLS(200,200),ELS(200),UXYZ(3,3) MOD12410 DATA UXYZ/1.0, 3*0.0, 1.0, 3*0.0, 1.0/ MOD12420 PIFAC=3.1415926/180.0 MOD12430 C MOD12440 C I/O UNIT ASSIGNMENTS:CARD READ,PRINTER,AND IFPUN.NE.0 MOD12450 C MOD12460 C MOD12470 CALL READAT MOD12480 CALL GETATM(OMAT) MOD12490 CALL GETHVC MOD12500 CALL MLSP(NVEC,VEC,UHV,DZ,SIGPL) MOD12510 TOL=1.0E-5 MOD12520 IF((ABS(UHV(1)).LE.TOL).AND.(ABS(UHV(2)).LE.TOL)) GO TO 200 MOD12530 ANG= ACOS(UHV(1)/SQRT(UHV(1)**2+UHV(2)**2)) MOD12540 IF(UHV(2).LE.0.0) ANG=-ANG MOD12550 CALL DEFROT(UXYZ(1,3),ANG,ROT) MOD12560 CALL MATMUL(ROTOT,ROT,UXYZ,WORK,3,3,3) MOD12570 DO 100 I=1,NAT MOD12580 CALL ROTATE(ROT,ATM(1,I)) MOD12590 100 CONTINUE MOD12600 DO 110 I=1,NVEC MOD12610 CALL ROTATE(ROT,X(1,I)) MOD12620 CALL ROTATE(ROT,VEC(1,I)) MOD12630 110 CONTINUE MOD12640 200 CONTINUE MOD12650 ANG= ACOS(UHV(3)) MOD12660 CALL DEFROT(UXYZ(1,2),ANG,ROT) MOD12670 CALL MATMUL(ROTOT,ROT,ROTOT,WORK,3,3,3) MOD12680 DO 120 I=1,NAT MOD12690 CALL ROTATE(ROT,ATM(1,I)) MOD12700 120 CONTINUE MOD12710 DO 130 I=1,NVEC MOD12720 CALL ROTATE(ROT,X(1,I)) MOD12730 CALL ROTATE(ROT,VEC(1,I)) MOD12740 130 CONTINUE MOD12750 DO 210 I=1,NVEC MOD12760 A(I,1)=VEC(1,I)*2.0 MOD12770 A(I,2)=VEC(2,I)*2.0 MOD12780 G(I)=(VEC(1,I) + X(1,I))**2 + (VEC(2,I) + X(2,I))**2 MOD12790 G(I)=G(I)-X(1,I)**2 -X(2,I)**2 MOD12800 210 CONTINUE MOD12810 CALL LLSQ(NVEC,2,200,2,G,A,XYC,SGXYC,NSING,XLS,ELS,LS1,LS2) MOD12820 IF(NSING.EQ.0) GO TO 220 MOD12830 WRITE(LUW,2200) MOD12840 2200 FORMAT(' >>>>>>>>>>> CENTER MATRIX SINGULAR') MOD12850 STOP 16 MOD12860 220 CONTINUE MOD12870 XYZC(1)=XYC(1) MOD12880 XYZC(2)=XYC(2) MOD12890 XYZC(3)=0.0 MOD12900 CALL MATMUL(XYZC,XYZC,ROTOT,WORK,1,3,3) MOD12910 WRITE(LUW,2220) MOD12920 2220 FORMAT(' IN ORTHONORMAL COORDINATES, ') MOD12930 WRITE(LUW,2210) (UHV(JI),XYZC(JI),JI =1,3) MOD12940 2210 FORMAT(' HELIX AXIS IN PARAMETRIC FORM:'/' X = ',F12.5,'*S + ', MOD12950 *F12.5/' Y = ',F12.5,'*S + ',F12.5/' Z = ',F12.5, '*S + ',F12.5/) MOD12960 CALL MATMUL(XYZC,OMAT,XYZC,WORK,3,3,1) MOD12970 CALL MATMUL(OUHV,OMAT,UHV,WORK,3,3,1) MOD12980 WRITE(LUW,2230) MOD12990 2230 FORMAT(' IN ORIGINAL CRYSTAL COORDINATES,') MOD13000 WRITE(LUW,2210) (OUHV(JI),XYZC(JI),JI=1,3) MOD13010 DO 250 I=1,2 MOD13020 DO 230 J=1,NAT MOD13030 ATM(I,J)=ATM(I,J)-XYC(I) MOD13040 230 CONTINUE MOD13050 DO 240 J=1,NVEC MOD13060 X(I,J)=X(I,J)-XYC(I) MOD13070 240 CONTINUE MOD13080 250 CONTINUE MOD13090 THETA=0.0 MOD13100 SGTHET=0.0 MOD13110 DO 310 I=1,NVEC MOD13120 DO 300 J=1,3 MOD13130 X1(J)=X(J,I) MOD13140 X2(J)=X(J,I)+VEC(J,I) MOD13150 300 CONTINUE MOD13160 CALL POLAR(X1) MOD13170 CALL POLAR(X2) MOD13180 T21=X2(2)-X1(2) MOD13190 T21P=T21+PIFAC*360.0 MOD13200 T21M=T21-PIFAC*360.0 MOD13210 IF(ABS(T21P).LT.ABS(T21)) T21=T21P MOD13220 IF(ABS(T21M).LT.ABS(T21)) T21=T21M MOD13230 THETA=THETA+T21 MOD13240 SGTHET=SGTHET+T21*T21 MOD13250 310 CONTINUE MOD13260 THETA=THETA/FLOAT(NVEC) MOD13270 SGTHET=(SGTHET-FLOAT(NVEC)*THETA*THETA)/FLOAT(NVEC-1) MOD13280 SGTHET=SQRT(SGTHET)/PIFAC MOD13290 SIG=0.0 MOD13300 IF(NVEC.LE.3) GO TO 340 MOD13310 DO 330 I=1,NVEC MOD13320 DO 320 J=1,3 MOD13330 X1(J)=X(J,I) MOD13340 X2(J)=X(J,I)+VEC(J,I) MOD13350 320 CONTINUE MOD13360 CALL POLAR(X1) MOD13370 CALL POLAR(X2) MOD13380 SIG=SIG+(X1(3)+DZ-X2(3))**2 + X1(1)**2 + X2(1)**2 MOD13390 *-2.0*X1(1)*X2(1)*COS(X1(2)+THETA-X2(2)) MOD13400 330 CONTINUE MOD13410 SIG=SQRT(SIG/FLOAT(NVEC-3)) MOD13420 340 CONTINUE MOD13430 IF(DZ.LT.0.0) THETA=-THETA MOD13440 IF(DZ.LT.0.0) DZ=-DZ MOD13450 ANG=THETA/PIFAC MOD13460 WRITE(LUW,2300) ANG,DZ,SIG MOD13470 2300 FORMAT(' >>>>>> HELIX ROTATION: ',F8.3,5X,'DISPLACEMENT: ', MOD13480 *F8.4/' ',10X,'STATISTICS:'/' ',20X,'OVERALL STANDARD DEV.: ', MOD13490 *F8.4) MOD13500 WRITE(LUW,2310) SGXYC,SIGPL,SGTHET MOD13510 2310 FORMAT(21X,'SIGMA(X): ',F7.4,', SIGMA(Y): ',F7.4, MOD13520 *', SIGMA(Z)=SIGMA(DISPLACEMENT): ',F7.4,', SIGMA(ROTATION): ', MOD13530 *F7.3) MOD13540 PTURN=ABS(360.0/ANG) MOD13550 WRITE(LUW,2320)PTURN MOD13560 2320 FORMAT(11X,'THERE ARE ',F5.2,' RESIDUES PER TURN'/) MOD13570 ICHSGN=0 MOD13580 CALL CHSIGN (ICHSGN) MOD13590 CALL PUTATM(THETA,DZ,ICHSGN) MOD13600 WRITE(LUW,2400) MOD13610 2400 FORMAT(' NORMAL END OF JOB: YOU HAVE GIVEN BIRTH TO A HELIX') MOD13620 RETURN MOD13630 END MOD13640 C MOD13650 C------------------------- MOD13660 C SUBROUTINE INIT MOD13670 C------------------------- MOD13680 C MOD13690 SUBROUTINE INIT MOD13700 CHARACTER * 5 ATAB MOD13710 CHARACTER * 4 NAME,MH MOD13720 CHARACTER * 1 IR,TITL,FMT,IBL MOD13730 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD13740 X ,L15 MOD13750 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD13760 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD13770 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000),NBP MOD13780 DATA IBL/' '/ MOD13790 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD13800 X ATAB(30,10),LSEQ(10) MOD13810 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20) MOD13820 COMMON/BROLLP/INPBRL,NB(2,20),NB1(2,20),NB2(2,20) MOD13830 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500) MOD13840 NATOM=0 MOD13850 ICORL=0 MOD13860 IFLAGP=0 MOD13870 IFPUN=0 MOD13880 NPMAX=0 MOD13890 NPMIN=0 MOD13900 INPHEL=0 MOD13910 INPBRL=0 MOD13920 INPCYL=0 MOD13930 INPTOR=0 MOD13940 IHELIX=0 MOD13950 IBROLL=0 MOD13960 ICYLIN=0 MOD13970 ITORNG=0 MOD13980 DO 10 I=1,72 MOD13990 FMT(I)=IBL MOD14000 10 TITL(I)=IBL MOD14010 NBP=0 MOD14020 DO 20 JJ=1,10 MOD14030 DO 20 I=1,30 MOD14040 20 ATAB(I,JJ)=' ' MOD14050 DO 30 I=1,2 MOD14060 DO 30 J=1,500 MOD14070 30 NATO(I,J)=0 MOD14080 DO 40 I=1,2 MOD14090 DO 40 J=1,100 MOD14100 DO 40 L=1,4 MOD14110 40 NCHI(I,J,L)=0 MOD14120 RETURN MOD14130 END MOD14140 C MOD14150 C------------------------- MOD14160 C SUBROUTINE LLSQ MOD14170 C------------------------- MOD14180 C MOD14190 SUBROUTINE LLSQ(NOBS,NPARM,NOD,NPD,G,A,P,SIGP,NSING,M,E,L1,L2) MOD14200 C MOD14210 C GENERAL LINEAR LEAST-SQUARES ROUTINE MOD14220 C MOD14230 DIMENSION G(NOD),A(NOD,NPD),P(NPD),SIGP(NPD) MOD14240 REAL M(NPARM,NPARM),E(NPARM),L1(NPARM),L2(NPARM) MOD14250 IF((NOBS.GT.NOD).OR.(NPARM.GT.NPD)) STOP 16 MOD14260 DO 10 I=1,NPARM MOD14270 E(I)=0.0 MOD14280 DO 10 J=1,NPARM MOD14290 M(I,J)=0.0 MOD14300 10 CONTINUE MOD14310 DO 20 I=1,NPARM MOD14320 DO 20 J=1,NOBS MOD14330 E(I)=E(I)+A(J,I)*G(J) MOD14340 DO 20 K=1,NPARM MOD14350 M(I,K)=M(I,K)+A(J,I)*A(J,K) MOD14360 20 CONTINUE MOD14370 CALL MINV(M,NPARM,DET,L1,L2) MOD14380 NSING=0 MOD14390 IF(DET.NE.0.0) GO TO 30 MOD14400 NSING=1 MOD14410 RETURN MOD14420 30 CONTINUE MOD14430 DO 40 I=1,NPARM MOD14440 P(I)=0.0 MOD14450 40 CONTINUE MOD14460 DO 50 I=1,NPARM MOD14470 DO 50 J=1,NPARM MOD14480 P(I)=P(I)+M(I,J)*E(J) MOD14490 50 CONTINUE MOD14500 SIGSQ=0.0 MOD14510 DO 70 I=1,NOBS MOD14520 DEL=G(I) MOD14530 DO 60 J=1,NPARM MOD14540 DEL=DEL-A(I,J)*P(J) MOD14550 60 CONTINUE MOD14560 SIGSQ=SIGSQ+DEL*DEL MOD14570 70 CONTINUE MOD14580 DO 80 I=1,NPARM MOD14590 SIGP(I)=SQRT(M(I,I)*SIGSQ) MOD14600 80 CONTINUE MOD14610 RETURN MOD14620 END MOD14630 C MOD14640 C------------------------- MOD14650 C SUBROUTINE MATMUL MOD14660 C------------------------- MOD14670 C MOD14680 SUBROUTINE MATMUL(PROD,XM,YM,WM,N,M,L) MOD14690 C MOD14700 C MATRIX MULTIPLICATION MOD14710 C MOD14720 DIMENSION XM(N,M),YM(M,L),PROD(N,L),WM(N,L) MOD14730 DO 10 I=1,N MOD14740 DO 10 J=1,L MOD14750 WM(I,J)=0.0 MOD14760 10 CONTINUE MOD14770 DO 20 I=1,N MOD14780 DO 20 K=1,L MOD14790 DO 20 J=1,M MOD14800 WM(I,K)=WM(I,K)+XM(I,J)*YM(J,K) MOD14810 20 CONTINUE MOD14820 DO 30 I=1,N MOD14830 DO 30 J=1,L MOD14840 PROD(I,J)=WM(I,J) MOD14850 30 CONTINUE MOD14860 RETURN MOD14870 END MOD14880 C MOD14890 C------------------------- MOD14900 C SUBROUTINE MATRIX MOD14910 C------------------------- MOD14920 C MOD14930 SUBROUTINE MATRIX(XMIN,A,NPL) MOD14940 C MOD14950 C BUILT THE A MATRIX FROM A LIST OF ATOM COORDINATES MOD14960 C MOD14970 DIMENSION XMIN(30,3),A(3,3) MOD14980 DIMENSION XMAJ(30,3),XAV(3) MOD14990 C MOD15000 DO 1 J=1,3 MOD15010 XAV(J)=0.0 MOD15020 1 CONTINUE MOD15030 DO 2 K=1,NPL MOD15040 DO 2 J=1,3 MOD15050 XAV(J)=XAV(J)+XMIN(K,J) MOD15060 2 CONTINUE MOD15070 DO 3 J=1,3 MOD15080 XAV(J)=XAV(J)/NPL MOD15090 3 CONTINUE MOD15100 DO 4 K=1,NPL MOD15110 DO 4 J=1,3 MOD15120 XMAJ(K,J)=XMIN(K,J)-XAV(J) MOD15130 4 CONTINUE MOD15140 DO 5 I=1,3 MOD15150 DO 5 J=1,3 MOD15160 A(I,J)=0.0 MOD15170 5 CONTINUE MOD15180 DO 6 K=1,NPL MOD15190 DO 6 I=1,3 MOD15200 DO 6 J=1,3 MOD15210 A(I,J)=A(I,J)+XMIN(K,I)*XMAJ(K,J) MOD15220 6 CONTINUE MOD15230 RETURN MOD15240 END MOD15250 C MOD15260 C------------------------- MOD15270 C SUBROUTINE MINV MOD15280 C------------------------- MOD15290 C MOD15300 SUBROUTINE MINV(A,N,D,L,M) MOD15310 C MOD15320 C INVERT A MATRIX MOD15330 C MOD15340 DIMENSION A(1),L(1),M(1) MOD15350 D=1.0 MOD15360 NK=-N MOD15370 DO 80 K=1,N MOD15380 NK=NK+N MOD15390 L(K)=K MOD15400 M(K)=K MOD15410 KK=NK+K MOD15420 BIGA=A(KK) MOD15430 DO 20 J=K,N MOD15440 IZ=N*(J-1) MOD15450 DO 20 I=K,N MOD15460 IJ=IZ+I MOD15470 10 IF(ABS(BIGA)-ABS(A(IJ))) 15,20,20 MOD15480 15 BIGA=A(IJ) MOD15490 L(K)=I MOD15500 M(K)=J MOD15510 20 CONTINUE MOD15520 J=L(K) MOD15530 IF(J-K) 35,35,25 MOD15540 25 KI=K-N MOD15550 DO 30 I=1,N MOD15560 KI=KI+N MOD15570 HOLD=-A(KI) MOD15580 JI=KI-K+J MOD15590 A(KI)=A(JI) MOD15600 30 A(JI)=HOLD MOD15610 35 I=M(K) MOD15620 IF(I-K) 45,45,38 MOD15630 38 JP=N*(I-1) MOD15640 DO 40 J=1,N MOD15650 JK=NK+J MOD15660 JI=JP+J MOD15670 HOLD=-A(JK) MOD15680 A(JK)=A(JI) MOD15690 40 A(JI)=HOLD MOD15700 45 IF(BIGA) 48,46,48 MOD15710 46 D=0.0 MOD15720 RETURN MOD15730 48 DO 55 I=1,N MOD15740 IF(I-K) 50,55,50 MOD15750 50 IK=NK+I MOD15760 A(IK)=A(IK)/(-BIGA) MOD15770 55 CONTINUE MOD15780 DO 65 I=1,N MOD15790 IK=NK+I MOD15800 HOLD=A(IK) MOD15810 IJ=I-N MOD15820 DO 65 J=1,N MOD15830 IJ=IJ+N MOD15840 IF(I-K) 60,65,60 MOD15850 60 IF(J-K) 62,65,62 MOD15860 62 KJ=IJ-I+K MOD15870 A(IJ)=HOLD*A(KJ)+A(IJ) MOD15880 65 CONTINUE MOD15890 KJ=K-N MOD15900 DO 75 J=1,N MOD15910 KJ=KJ+N MOD15920 IF(J-K) 70,75,70 MOD15930 70 A(KJ)=A(KJ)/BIGA MOD15940 75 CONTINUE MOD15950 D=D*BIGA MOD15960 A(KK)=1.0/BIGA MOD15970 80 CONTINUE MOD15980 K=N MOD15990 100 K=(K-1) MOD16000 IF(K) 150,150,105 MOD16010 105 I=L(K) MOD16020 IF(I-K) 120,120,108 MOD16030 108 JQ=N*(K-1) MOD16040 JR=N*(I-1) MOD16050 DO 110 J=1,N MOD16060 JK=JQ+J MOD16070 HOLD=A(JK) MOD16080 JI=JR+J MOD16090 A(JK)=-A(JI) MOD16100 110 A(JI)=HOLD MOD16110 120 J=M(K) MOD16120 IF(J-K) 100,100,125 MOD16130 125 KI=K-N MOD16140 DO 130 I=1,N MOD16150 KI=KI+N MOD16160 HOLD=A(KI) MOD16170 JI=KI-K+J MOD16180 A(KI)=-A(JI) MOD16190 130 A(JI)=HOLD MOD16200 GO TO 100 MOD16210 150 RETURN MOD16220 END MOD16230 C MOD16240 C------------------------- MOD16250 C SUBROUTINE MLSP MOD16260 C------------------------- MOD16270 C MOD16280 SUBROUTINE MLSP(NPOINT,X,U,D,SIG) MOD16290 C MOD16300 C GENERAL LEAST-SQUARES PLANE ROUTINE MOD16310 C MOD16320 DIMENSION X(3,NPOINT),U(3),XAV(3),XM(3,3),R(3,3),YM(3,3),ZM(9) MOD16330 EQUIVALENCE (XM(1,1),ZM(1)) MOD16340 IF(NPOINT.LT.3) STOP 16 MOD16350 DO 10 I=1,3 MOD16360 XAV(I)=0.0 MOD16370 10 CONTINUE MOD16380 DO 20 I=1,3 MOD16390 DO 20 J=1,NPOINT MOD16400 XAV(I)=XAV(I)+X(I,J) MOD16410 20 CONTINUE MOD16420 DO 30 I=1,3 MOD16430 XAV(I)=XAV(I)/FLOAT(NPOINT) MOD16440 30 CONTINUE MOD16450 DO 40 I=1,3 MOD16460 DO 40 J=1,3 MOD16470 XM(I,J)=0.0 MOD16480 YM(I,J)=0.0 MOD16490 40 CONTINUE MOD16500 DO 50 I=1,3 MOD16510 DO 50 J=1,3 MOD16520 DO 50 K=1,NPOINT MOD16530 YM(I,J)=YM(I,J)+(X(I,K)-XAV(I))*(X(J,K)-XAV(J)) MOD16540 50 CONTINUE MOD16550 ZM(1)=YM(1,1) MOD16560 ZM(2)=YM(1,2) MOD16570 ZM(3)=YM(2,2) MOD16580 ZM(4)=YM(1,3) MOD16590 ZM(5)=YM(2,3) MOD16600 ZM(6)=YM(3,3) MOD16610 CALL EIGEN1(XM,R,3,0) MOD16620 EVAL=ZM(6) MOD16630 SIG=0.0 MOD16640 IF(NPOINT.LE.3) GO TO 60 MOD16650 IF(EVAL.LT.0.0) GO TO 60 MOD16660 SIG=SQRT(EVAL/FLOAT(NPOINT-3)) MOD16670 60 CONTINUE MOD16680 DO 70 I=1,3 MOD16690 U(I)=R(I,3) MOD16700 70 CONTINUE MOD16710 UMAG=DOTP(U,U) MOD16720 DO 80 I=1,3 MOD16730 U(I)=U(I)/UMAG MOD16740 80 CONTINUE MOD16750 D=0.0 MOD16760 DO 90 I=1,3 MOD16770 D=D+U(I)*XAV(I) MOD16780 90 CONTINUE MOD16790 RETURN MOD16800 END MOD16810 C MOD16820 C------------------------- MOD16830 C SUBROUTINE POLAR MOD16840 C------------------------- MOD16850 C MOD16860 SUBROUTINE POLAR(V) MOD16870 C MOD16880 C CONVERT A CARTESIAN VECTOR V INTO CYLINDRICAL POLAR MOD16890 C MOD16900 DIMENSION V(3) MOD16910 X=V(1) MOD16920 Y=V(2) MOD16930 V(1)=SQRT(X*X+Y*Y) MOD16940 V(2)= ACOS(X/V(1)) MOD16950 IF(Y.LT.0.0) V(2)=-V(2) MOD16960 RETURN MOD16970 END MOD16980 C MOD16990 C------------------------- MOD17000 C FUNCTION PRIANG MOD17010 C------------------------- MOD17020 C MOD17030 FUNCTION PRIANG(ANGLE) MOD17040 C MOD17050 C SET ANGLE T TO BETWEEN 0.0 AND 360.0 MOD17060 C MOD17070 T=ANGLE MOD17080 30 IF(T.LT.360.0) GO TO 40 MOD17090 T=T-360.0 MOD17100 GO TO 30 MOD17110 40 IF(T.GE.0.0) GO TO 50 MOD17120 T=T+360.0 MOD17130 GO TO 40 MOD17140 50 CONTINUE MOD17150 PRIANG=T MOD17160 RETURN MOD17170 END MOD17180 C MOD17190 C------------------------- MOD17200 C SUBROUTINE PUTATM MOD17210 C------------------------- MOD17220 C MOD17230 SUBROUTINE PUTATM(ANG,DZ,ICHSGN) MOD17240 C MOD17250 C OUTPUT ATOMIC POSITIONS FOR VARIOUS POWERS OF THE HELIX OPERATOR MOD17260 C MOD17270 CHARACTER * 4 NAME,MH MOD17280 CHARACTER * 1 IR,TITL,FMT MOD17290 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD17300 X ,L15 MOD17310 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD17320 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD17330 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD17340 DIMENSION XA(3) MOD17350 DO 5 I=1,NAT MOD17360 CALL POLAR(ATM(1,I)) MOD17370 5 CONTINUE MOD17380 1000 FORMAT(3I5) MOD17390 NPMAX=NPMAX-NPMIN+1 MOD17400 IF (NPMAX.LE.0) NPMAX=1 MOD17410 C MOD17420 C OUTPUT ON 'IPR' ALL POWERS OF THE HELIX OPERATOR, BOTH ODD AND EVEMOD17430 C MOD17440 DO 10 I=1,NPMAX MOD17450 POWER=FLOAT(I+NPMIN-1) MOD17460 IP=I+NPMIN-1 MOD17470 AD=ANG*POWER MOD17480 ZD=DZ*POWER MOD17490 WRITE(LUW,2444) MOD17500 2444 FORMAT(' *****************************************************'/) MOD17510 IF (IFLAGP.EQ.0) GO TO 30 MOD17520 WRITE(LUW,2000) TITL,IP MOD17530 2000 FORMAT(/,1X,72A1/' NO.',5X,' R',6X,'THETA',7X,'Z',5X, MOD17540 * 'NAME ',4X,'X',8X,'Y',8X,'Z',8X,'POWER = ',I3/) MOD17550 MOD17560 DO 10 J=1,NAT MOD17570 R=ATM(1,J) MOD17580 T=ATM(2,J)+AD MOD17590 Z=ATM(3,J)+ZD MOD17600 XC=R*COS(T) MOD17610 Y=R*SIN(T) MOD17620 T=PRIANG(T/PIFAC) MOD17630 WRITE(LUW,2010) J,R,T,Z,(NAME(K,J),K=1,2),XC,Y,Z MOD17640 2010 FORMAT(1X,I5,5X,3(F8.3,1X),1X,2A4,2X,3(F8.3,1X)) MOD17650 10 CONTINUE MOD17660 C MOD17670 C OUTPUT ON UNIT 'IPU':ONLY EVEN POWERS OF THE HELIX OPERATOR IN MOD17680 C *DIAMOND LIST FORMAT(RECORD LENGTH=132) MOD17690 C MOD17700 30 IF(IFPUN.EQ.0) GO TO 70 MOD17710 NOUT=0 MOD17720 REWIND L12 MOD17730 WRITE(LUW,2666) L12 MOD17740 2666 FORMAT(' THE FOLLOWING DIAMOND LIST HAS BEEN OUTPUT ON UNIT:',I3) MOD17750 WRITE(LUW,2555)TITL MOD17760 2555 FORMAT(/, 72A1,/) MOD17770 DO 20 I=1,NPMAX MOD17780 POWER=FLOAT(I+NPMIN-1) MOD17790 IP=I+NPMIN-1 MOD17800 IPMOD=MOD(IP,2) MOD17810 IF(IPMOD.NE.0) GO TO 20 MOD17820 AD=ANG*POWER MOD17830 ZD=DZ*POWER MOD17840 DO 299 J=1,NATOM MOD17850 R=ATM(1,J) MOD17860 T=ATM(2,J)+AD MOD17870 Z=ATM(3,J)+ZD MOD17880 XC=R*COS(T) MOD17890 Y=R*SIN(T) MOD17900 T=PRIANG(T/PIFAC) MOD17910 NOUT=NOUT+1 MOD17920 IF (ICHSGN.NE.0) GO TO 40 MOD17930 Y=-Y MOD17940 Z=-Z MOD17950 40 IF (IFLAGP.NE.0) WRITE(LUW,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT MOD17960 WRITE(L12,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT MOD17970 WRITE (L15,2021) J,(NAME(K,J),K=1,2),XC,Y,Z MOD17980 2021 FORMAT (I5,T9,2A4,T18,'1',3F10.5,' 20.00 1.0') MOD17990 2020 FORMAT (3F10.5,11X,2A4,5X,I5) MOD18000 299 CONTINUE MOD18010 20 CONTINUE MOD18020 70 CONTINUE MOD18030 ENDFILE L12 MOD18040 ENDFILE L15 MOD18050 RETURN MOD18060 END MOD18070 C MOD18080 C------------------------- MOD18090 C SUBROUTINE READAT MOD18100 C------------------------- MOD18110 C MOD18120 SUBROUTINE READAT MOD18130 CHARACTER * 4 MH,NAME,TBRF MOD18140 CHARACTER * 3 CHECK,O1 MOD18150 CHARACTER * 1 IR,TITL,FMT,TNAME(6),IBL,FOUR,ZER,IST MOD18160 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD MOD18170 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD18180 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD18190 COMMON/BROOK/IBARF DATA NMAX/996/,IBL/' '/,ZER/'0'/,O1/'O1'''/,FOUR/'4'/ MOD18200 DATA IST/'*'/ MOD18210 MAX=NMAX MOD18220 IF (NATOM.NE.0) MAX=NATOM MOD18230 I=0 MOD18240 10 CONTINUE MOD18250 I=I+1 MOD18260 C MOD18270 C >>>>>>>>SET MAX. NO. OF ATOMS=ARRAY SIZE-4<<<<<<<<<<<<<<<<< MOD18280 IF (I.GT.MAX) GO TO 50 MOD18290 IF(I.LE.NMAX) GO TO 100 MOD18300 C MOD18310 15 WRITE(LUW,500) MOD18320 500 FORMAT(' THAT EXCEEDS THE ATM(I,J),NAME(I),AND OATM(I,J) ARRAYS') MOD18330 STOP 16 MOD18340 100 CONTINUE MOD18350 IF (IREAD.EQ.0) GO TO 120 MOD18360 888 CONTINUE READ(L11,FMT,END=50,ERR=888) TBRF,(ATM(J,I),J=1,3),TNAME IF(IBARF-2)880,881,880 881 IF(TBRF.NE.'ATOM')GO TO 888 880 CONTINUE CHECK=TNAME(4)//TNAME(5)//TNAME(6) MOD18380 IF (CHECK.EQ.O1) TNAME(5)=FOUR MOD18390 IF (TNAME(2).EQ.IBL) TNAME(2)=ZER MOD18400 IF (TNAME(6).EQ.IST) TNAME(6)='''' MOD18410 NAME(1,I)=TNAME(1)//TNAME(2)//TNAME(3)//TNAME(4) MOD18420 NAME(2,I)=TNAME(5)//TNAME(6)//IBL//IBL MOD18430 30 IF(IFLAGP.NE.1) GO TO 10 MOD18440 WRITE(LUW,501) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) MOD18450 501 FORMAT(1X,I5,5X,3(F9.4,1X),1X,2A4) MOD18460 GO TO 10 MOD18470 50 NATOM=I-1 MOD18480 RETURN MOD18490 120 WRITE (LUW,505) MOD18500 505 FORMAT (' **** FORMAT FOR READING ATOMS NOT SPECIFIED, USE *KONN* MOD18510 1, *CORL*, *BRKH* OR *FFMT*',/) MOD18520 STOP MOD18530 END MOD18540 C MOD18550 C------------------------- MOD18560 C SUBROUTINE ROTATE MOD18570 C------------------------- MOD18580 C MOD18590 SUBROUTINE ROTATE(ROTOR,VECTOR) MOD18600 C MOD18610 C ROTATE A VECTOR VIA THE MATRIX ROTOR MOD18620 C MOD18630 DIMENSION ROTOR(3,3),VECTOR(3),WORK(3) MOD18640 DO 10 I=1,3 MOD18650 WORK(I)=0.0 MOD18660 10 CONTINUE MOD18670 DO 20 I=1,3 MOD18680 DO 20 J=1,3 MOD18690 WORK(I)=WORK(I)+ROTOR(I,J)*VECTOR(J) MOD18700 20 CONTINUE MOD18710 DO 30 I=1,3 MOD18720 VECTOR(I)=WORK(I) MOD18730 30 CONTINUE MOD18740 RETURN MOD18750 END MOD18760 C MOD18770 C------------------------- MOD18780 C SUBROUTINE SETBRL MOD18790 C------------------------- MOD18800 C MOD18810 SUBROUTINE SETBRL MOD18820 CHARACTER * 4 MH MOD18830 CHARACTER * 1 IR,TITL,NTP,NAT,A,G,T,C,P,D MOD18840 INTEGER * 2 IRES MOD18850 CHARACTER * 3 C6,C8,FF,FC,FD MOD18860 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD18870 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD18880 COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) MOD18890 DIMENSION IGR(2,200),IGN(200),IDUM(200) MOD18900 DATA A/'A'/,G/'G'/,T/'T'/,C/'C'/,P/'P'/,D/''''/ MOD18910 DATA C6/'C6 '/,C8/'C8 '/ MOD18920 IRN=1 MOD18930 IGR(1,1)=1 MOD18940 IGN(1)=IRES(1) MOD18950 DO 10 I=2,NATM MOD18960 IF (IRES(I-1).EQ.IRES(I)) GO TO 10 MOD18970 IGR(2,IRN)=I-1 MOD18980 IRN=IRN+1 MOD18990 IGR(1,IRN)=I MOD19000 IGN(IRN)=IRES(I) MOD19010 10 CONTINUE MOD19020 IGR(2,IRN)=NATM MOD19030 IRNH=IRN/2 MOD19040 DO 100 L=1,IRNH MOD19050 IS=IGR(1,L) MOD19060 IF=IGR(2,L) MOD19070 FF=C8 MOD19080 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 20 MOD19100 FF=C6 MOD19110 20 DO 30 I=IS,IF MOD19130 FC=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD19140 IF (FC.NE.FF) GO TO 30 MOD19150 NC(1,L)=I MOD19160 30 CONTINUE MOD19170 M=0 MOD19180 DO 50 I=IS,IF MOD19190 DO 40 J=1,5 MOD19200 IF (NAT(I,J).EQ.D.OR.NAT(I,J).EQ.P) GO TO 50 MOD19210 40 CONTINUE MOD19220 M=M+1 MOD19230 IDUM(M)=I MOD19240 50 CONTINUE MOD19250 NB1(1,L)=IDUM(1) MOD19260 NB1(2,L)=IDUM(M) MOD19270 IS=IGR(1,IRN-L+1) MOD19280 IF=IGR(2,IRN-L+1) MOD19290 FD=C8 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 200 FD=C6 200 DO 60 I=IS,IF MOD19300 FC=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD19310 IF (FC.NE.FD) GO TO 60 MOD19320 NC(2,L)=I MOD19330 60 CONTINUE MOD19340 M=0 MOD19350 DO 80 I=IS,IF MOD19360 DO 70 J=1,5 MOD19370 IF (NAT(I,J).EQ.D.OR.NAT(I,J).EQ.P) GO TO 80 MOD19380 70 CONTINUE MOD19390 M=M+1 MOD19400 IDUM(M)=I MOD19410 80 CONTINUE MOD19420 NB2(1,L)=IDUM(1) MOD19430 NB2(2,L)=IDUM(M) MOD19440 100 CONTINUE MOD19450 RETURN MOD19460 END MOD19470 C MOD19480 C------------------------- MOD19490 C SUBROUTINE SETTOR MOD19500 C------------------------- MOD19510 C MOD19520 SUBROUTINE SETTOR MOD19530 CHARACTER * 4 MH MOD19540 CHARACTER * 1 IR,TITL,NTP,NAT,A,G MOD19550 INTEGER * 2 IRES MOD19560 CHARACTER * 3 FF(6),FC(4),FD(4),ATAB1(6),ATAB2(4),ATAB3(4),CHECK MOD19570 X ,ATAB4(5),FR(5) MOD19580 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD19590 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD19600 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) MOD19610 DIMENSION IGR(2,200),IGN(200),IDUM(200) MOD19620 DATA ATAB1/'P ','O5''','C5''','C4''','C3''','O3'''/ MOD19630 DATA ATAB4/'C4''','O4''','C1''','C2''','C3'''/ MOD19640 DATA ATAB2/'C4 ','N9 ','C1''','O4'''/ MOD19650 DATA ATAB3/'C2 ','N1 ','C1''','O4'''/ MOD19660 MOD19670 DATA A/'A'/,G/'G'/ MOD19680 IRN=1 MOD19690 IGR(1,1)=1 MOD19700 IGN(1)=IRES(1) MOD19710 DO 10 I=2,NATM MOD19720 IF (IRES(I-1).EQ.IRES(I)) GO TO 10 MOD19730 IGR(2,IRN)=I-1 MOD19740 IRN=IRN+1 MOD19750 IGR(1,IRN)=I MOD19760 IGN(IRN)=IRES(I) MOD19770 10 CONTINUE MOD19780 IGR(2,IRN)=NATM MOD19790 IRNH=IRN/2 MOD19800 C C C GENERATE ATOM NUMBERS FOR 1ST AND 2ND STRANDS C DO 200 M=1,2 NUP=0 MOD19810 DO 110 K=1,IRNH MOD19820 L=K+(M-1)*IRNH N=0 MOD19830 NNR=0 MOD19840 IS=IGR(1,L) MOD19850 IF=IGR(2,L) MOD19860 DO 20 J=1,4 MOD19870 20 FD(J)=ATAB2(J) MOD19880 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 40 MOD19890 DO 30 J=1,4 MOD19900 30 FD(J)=ATAB3(J) MOD19910 40 DO 60 J=1,6 MOD19920 DO 50 I=IS,IF MOD19930 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD19940 IF (CHECK.NE.ATAB1(J)) GO TO 50 MOD19950 NUP=NUP+1 MOD19960 IF (NUP.GT.500) GO TO 160 MOD19970 NATO(M,NUP)=I MOD19980 GO TO 60 MOD19990 50 CONTINUE MOD20000 60 CONTINUE MOD20010 DO 80 J=1,4 MOD20020 DO 70 I=IS,IF MOD20030 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD20040 IF (CHECK.NE.FD(J)) GO TO 70 MOD20050 N=N+1 MOD20060 IF (N.GT.4) GO TO 150 MOD20070 NCHI(M,K,N)=I MOD20080 GO TO 80 MOD20090 70 CONTINUE MOD20100 80 CONTINUE MOD20110 DO 100 J=1,5 MOD20120 DO 90 I=IS,IF MOD20130 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD20140 IF (CHECK.NE.ATAB4(J)) GO TO 90 MOD20150 NNR=NNR+1 MOD20160 IF (NNR.GT.5) GO TO 170 MOD20170 NRNG(M,K,NNR)=I MOD20180 GO TO 90 MOD20190 90 CONTINUE MOD20200 100 CONTINUE MOD20210 110 CONTINUE MOD20220 200 CONTINUE RETURN MOD20230 150 WRITE (LUW,500) FD,L MOD20240 500 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD20250 X 4(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 4') MOD20260 STOP MOD20270 160 WRITE (LUW,501) ATAB1 MOD20280 501 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD20290 X 6(2X,A3,','),' EXCEEDS 500') MOD20300 STOP MOD20310 170 WRITE (LUW,502) ATAB4,L MOD20320 502 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD20330 X 5(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 5') MOD20340 STOP MOD20350 END MOD20360 C MOD20370 C------------------------- MOD20380 C SUBROUTINE TORANG MOD20390 C------------------------- MOD20400 C MOD20410 SUBROUTINE TORANG MOD20420 CHARACTER * 4 MH MOD20430 CHARACTER * 8 NNAME(2,100,5) MOD20440 CHARACTER * 1 IR,TITL,NTP,NATT,SLASH MOD20450 CHARACTER * 2 BTM(3) MOD20460 INTEGER * 2 IRES MOD20470 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD20480 COMMON/ATOM/NAT,ATM(3,1000),NTP(1000),IRES(1000),NATT(1000,5),NBP MOD20490 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) MOD20500 DIMENSION NA(4),ANG(300),ACHI(100),ANSW(200,14),ARG(100,5) MOD20510 X ,SIG(14),SSQ(14),ANGL(2,200,5),AV(14),SD(14) MOD20520 Y ,AVV(2,100),THAU(2,100),FAN(200),ANSX(200) MOD20530 DATA SLASH/'-'/ MOD20540 500 FORMAT(9F8.1) MOD20550 501 FORMAT(//,' STRAND',I5,/) MOD20560 502 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHIMOD20570 1 DEL EP-ZE',/) MOD20580 503 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHIMOD20590 1 MEAN EP-ZE',/) MOD20600 504 FORMAT(//,' V0 V1 V2 V3 V4 Pseud. Delt 1a',/) MOD20610 505 FORMAT(I5,' ATOMS AND',I5,' BASE PAIRS') MOD20620 506 FORMAT(1X,' MAIN CHAIN AND GLYCOSYL TORSION ANGLE CALCULATION') MOD20630 507 FORMAT (/,1X,72A1,/) MOD20640 508 FORMAT(/,8(2X,'______'),/) MOD20650 509 FORMAT(7F8.2,8X,' AV.',/) MOD20660 510 FORMAT(7F8.2,8X,' S.D.',///) MOD20670 511 FORMAT(2(5X,'-',2X),7F8.1) MOD20680 512 FORMAT (4F8.1,2(5X,'-',2X),3F8.1) MOD20690 513 FORMAT(/,6(2X,'______'),/) MOD20700 514 FORMAT(6F8.2,' AV.',/) MOD20710 515 FORMAT(6F8.2,' S.D.',///) MOD20720 516 FORMAT (///,' SUGAR ANGLES',//,2X,5(A8,2X),' AVERAGE THAU(M)'MOD20730 * ,/) MOD20740 517 FORMAT (6F10.1,F12.4) MOD20750 518 FORMAT(6F8.1,'(',F5.1,')') MOD20760 519 FORMAT (1X,'PSEUDOROTATION PARAMETERS FOR SUGAR RINGS') MOD20770 555 FORMAT(1H1) C MOD20780 C READ STARTING PARAMETERS MOD20790 C MOD20800 RAD=0.0174533 MOD20810 DANG=SIN(36*RAD)+SIN(72*RAD) MOD20820 WRITE(LUW,555) WRITE(LUW,506) MOD20830 WRITE(LUW,507)TITL MOD20840 WRITE(LUW,505)NAT,NBP MOD20850 C MOD20860 C READ ATOM COORDINATES MOD21090 C MOD20880 2020 FORMAT(3F10.5,11X,A1,I2,5A1) MOD20890 REWIND L12 MOD20900 DO 10 I=1,NAT MOD20910 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NATT(I,J),J=1,5) MOD20920 C C GET MAIN CHAIN AND CHI ATOM NUMBERS MOD20870 C IF (INPTOR.EQ.0) CALL SETTOR MOD20930 C MOD21030 50 CONTINUE MOD21070 C MOD21080 DO 60 JC=1,14 MOD21120 SIG(JC)=0. MOD21130 SSQ(JC)=0. MOD21140 DO 60 IC=1,50 MOD21150 60 ANSW(IC,JC)=0. MOD21160 N1=0 MOD21170 DO 65 M=1,2 MOD21180 DO 65 I=1,100 MOD21190 65 AVV(M,I)=0. MOD21200 C MOD21210 DO 200 M=1,2 MOD21220 C MOD21230 C CALCULATE MAIN CHAIN TORSION ANGLES MOD21240 C MOD21250 ANG(1)=0.0 MOD21260 ANG(2)=0.0 MOD21270 NMA=6*NBP-4 MOD21280 DO 80 I=1,NMA MOD21290 DO 70 J=1,4 MOD21300 IU=I+J-1 MOD21310 70 NA(J)=NATO(M,IU) MOD21320 CALL TORSON(NA,TE,ATM) MOD21330 I2=I+2 MOD21340 80 ANG(I2)=TE MOD21350 NMB=NMA+3 MOD21360 NMC=NMA+4 MOD21370 ANG(NMB)=0.0 MOD21380 ANG(NMC)=0.0 MOD21390 DO 120 I=1,NBP MOD21400 DO 110 K=1,5 MOD21410 DO 90 J=1,4 MOD21420 IU=K+J-1 MOD21430 IF (IU.GT.5) IU=IU-IU/5*5 MOD21440 NN=NRNG(M,I,IU) MOD21450 90 NA(J)=NRNG(M,I,IU) MOD21460 CALL TORSON(NA,TE,ATM) MOD21470 IF(TE-180.)669,669,670 670 TE=TE-360. 669 CONTINUE ARG(I,K)=TE MOD21480 DO 100 J=1,3 MOD21490 IU=K+J-1 MOD21500 NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) MOD21510 IF (IU.GT.5) IU=IU-IU/5*5 MOD21520 NN=NRNG(M,I,IU) MOD21530 BTM(J)=NATT(NN,1)//NATT(NN,2) MOD21540 100 NA(J)=NN MOD21550 CALL ANGLE (NA,TE,ATM) MOD21560 ANGL(M,I,K) = TE/RAD MOD21570 NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) MOD21580 AVV(M,I)=AVV(M,I)+ANGL(M,I,K) MOD21590 110 CONTINUE MOD21600 120 CONTINUE MOD21610 C MOD21620 C CALCULATE GLYCOSYL CHI ANGLES MOD21630 C MOD21640 DO 140 I=1,NBP MOD21650 DO 130 J=1,4 MOD21660 130 NA(J)=NCHI(M,I,J) MOD21670 CALL TORSON(NA,TE,ATM) MOD21680 140 ACHI(I)=TE MOD21690 C MOD21700 C REARRANGE ANGLES AND PRINT OUT MOD21710 C MOD21720 DO 180 I=1,NBP MOD21730 N1=N1+1 MOD21740 IM=NBP*(M-1)+I MOD21750 DO 150 J=1,6 MOD21760 NO=6*I-6+J MOD21770 150 ANSW(IM,J)=ANG(NO) MOD21780 ANSW(IM,7)=ACHI(I) MOD21810 DO 160 J=1,5 MOD21820 160 ANSW(IM,8+J)=ARG(I,J) MOD21830 ANSW(IM,14)=(ATAN(((ARG(I,5)+ARG(I,2))-(ARG(I,4)+ARG(I,1)))/ MOD21840 X (2.*ARG(I,3)*DANG)))/RAD MOD21850 IF(ARG(I,3))671,672,672 671 ANSW(IM,14)=ANSW(IM,14)+180. 672 CONTINUE FAN(IM)=ANSW(IM,14) MOD21860 IF (FAN(IM).LT.0.) FAN(IM)=360.+ANSW(IM,14) MOD21870 180 CONTINUE MOD21880 200 CONTINUE MOD21890 M=1 MOD21900 WRITE(LUW,501)M MOD21910 WRITE(LUW,502) MOD21920 DO 210 I=1,NBP MOD21930 IM=NBP*2-I+1 MOD21940 DEL=ANSW(I,4)-ANSW(IM,4) MOD21950 ANSW(I,8)=DEL MOD21960 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) MOD21970 IF(I.EQ.1) WRITE(LUW,511)(ANSW(I,J),J=3,8),ANSX(I) MOD21980 IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(I,J),J=1,4),(ANSW(I,J),J=7,8),ANSMOD21990 *X(I) 210 CONTINUE MOD22000 C MOD22010 M=2 MOD22020 WRITE(LUW,501)M MOD22030 WRITE(LUW,503) MOD22040 DO 220 I=1,NBP MOD22050 IM=I+NBP MOD22060 IN=NBP-I+1 MOD22070 FMEAN=0.5*(ANSW(IM,4)+ANSW(IN,4)) MOD22080 ANSW(IM,8)=FMEAN MOD22090 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) MOD22100 IF(I.EQ.1) WRITE(LUW,511)(ANSW(IM,J),J=3,8),ANSX(IM) MOD22110 IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(IM,J),J=1,4),(ANSW(IM,J),J=7,8),AMOD22120 *NSX(IM) 220 CONTINUE MOD22130 DO 230 M=1,2 MOD22140 DO 230 I=1,NBP MOD22150 IM=NBP*(M-1)+I MOD22160 DO 230 J=1,14 MOD22170 SIG(J) = SIG(J) + ANSW(IM,J) MOD22180 230 SSQ(J) = SSQ(J) + ANSW(IM,J)*ANSW(IM,J) MOD22190 DO 240 I=1,14 MOD22200 NN = N1 MOD22210 IF (I.LT.3.OR.(I.GT.4.AND.I.LT.7)) NN=N1-2 MOD22220 AV(I)=SIG(I)/NN MOD22230 SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) MOD22240 IF (SDZ.LE.0.0001) SDZ=0. MOD22250 SD(I) = SQRT(SDZ) MOD22260 240 CONTINUE MOD22270 WRITE (LUW,508) MOD22280 WRITE (LUW,509) (AV(J),J=1,7) MOD22290 WRITE (LUW,510) (SD(J),J=1,7) MOD22300 WRITE(LUW,555) WRITE (LUW,519) MOD22310 WRITE(LUW,507)TITL DO 260 M=1,2 MOD22320 WRITE(LUW,501)M MOD22330 WRITE (LUW,504) MOD22340 DO 250 K=1,NBP MOD22350 I = (M-1)*NBP + K MOD22360 WRITE (LUW,500) (ANSW(I,J),J=9,14),ANSW(I,4) MOD22380 250 CONTINUE MOD22390 260 CONTINUE MOD22400 WRITE (LUW,513) MOD22410 WRITE (LUW,514) (AV(J),J=9,14) MOD22420 WRITE (LUW,515) (SD(J),J=9,14) MOD22430 WRITE(LUW,555) WRITE(LUW,507)TITL DO 280 M=1,2 MOD22440 WRITE(LUW,501)M MOD22450 WRITE (LUW,516) (NNAME(M,1,J),J=1,5) MOD22460 DO 270 K=1,NBP MOD22470 AVV(M,K)=AVV(M,K)/5 MOD22480 THAU(M,K)=SQRT((108.-AVV(M,K))/0.00186) MOD22490 WRITE (LUW,517) (ANGL(M,K,J),J=1,5),AVV(M,K),THAU(M,K) MOD22500 270 CONTINUE MOD22510 280 CONTINUE MOD22520 RETURN MOD22530 END MOD22540 C MOD22550 C------------------------- MOD22560 C SUBROUTINE TORSON MOD22570 C------------------------- MOD22580 C MOD22590 C MOD22600 C TORSION ANGLE CALCULATING SUBROUTINE MOD22610 C MOD22620 SUBROUTINE TORSON(NA,TE,ATM) MOD22630 DIMENSION ATM(3,1000),NA(4) MOD22640 DIMENSION AV(3),BV(3),CV(3),S(3),T(3) MOD22650 DO 1 J=1,3 MOD22660 J1=J+1 MOD22670 NS=NA(J) MOD22680 NE=NA(J1) MOD22690 AV(J)=ATM(1,NE)-ATM(1,NS) MOD22700 BV(J)=ATM(2,NE)-ATM(2,NS) MOD22710 1 CV(J)=ATM(3,NE)-ATM(3,NS) MOD22720 S(1)=BV(1)*CV(2)-BV(2)*CV(1) MOD22730 S(2)=CV(1)*AV(2)-CV(2)*AV(1) MOD22740 S(3)=AV(1)*BV(2)-AV(2)*BV(1) MOD22750 T(1)=BV(2)*CV(3)-BV(3)*CV(2) MOD22760 T(2)=CV(2)*AV(3)-CV(3)*AV(2) MOD22770 T(3)=AV(2)*BV(3)-AV(3)*BV(2) MOD22780 C MOD22790 RM=SQRT(AV(2)**2+BV(2)**2+CV(2)**2) MOD22800 SM=SQRT(S(1)**2+S(2)**2+S(3)**2) MOD22810 TM=SQRT(T(1)**2+T(2)**2+T(3)**2) MOD22820 TOP=AV(1)*(BV(2)*CV(3)-BV(3)*CV(2))+ MOD22830 *AV(2)*(BV(3)*CV(1)-BV(1)*CV(3))+ MOD22840 *AV(3)*(BV(1)*CV(2)-BV(2)*CV(1)) MOD22850 SAL=(RM*TOP)/(SM*TM) MOD22860 CAL=(S(1)*T(1)+S(2)*T(2)+S(3)*T(3))/(SM*TM) MOD22870 TE=57.29578*ATAN2(SAL,CAL) MOD22880 IF(TE)667,668,668 667 TE=TE+360. 668 CONTINUE RETURN MOD22890 END MOD22900 C MOD22910 C------------------------- MOD22920 C SUBROUTINE XDRED MOD22930 C------------------------- MOD22940 C MOD22950 SUBROUTINE XDRED MOD22960 CHARACTER * 5 ATAB MOD22970 CHARACTER* 4 MH,I,M,JZ,NAME MOD22980 CHARACTER*1 TITL,IR,FMT,FMKONN(72),FMCORL(72),IBLNK,M1,FMBRKH(72) MOD22990 CHARACTER * 1 AIR(4,30,10) MOD23000 COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000),NBP MOD23010 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD MOD23020 DIMENSION AA(200) MOD23030 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD23040 X ATAB(30,10),KSEQ(10) MOD23050 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD23060 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD23070 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20) MOD23080 COMMON/BROLLP/INPBRL,NBB(2,20),NB1(2,20),NB2(2,20) MOD23090 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,500) MOD23100 COMMON/BROOK/IBARF DATA FMKONN/'(','A','4',',','T','1','9',',','3','F','1','0','.', MOD23110 X '5',',','T','9',',','6','A','1',')',50*' '/ MOD23120 DATA FMCORL/'(','A','4',',','T','1','6',',','3','F','1','0','.', MOD23130 X '5',',','T','4',',','A','1',',','T','1','0',',', MOD23140 Y '5','A','1',')',43*' '/ MOD23150 DATA FMBRKH/'(','A','4',',','T','3','1',',','3','F','8','.','3', MOD23160 X ',','T','2','0',',','A','1',',','T','2','5',',','2', MOD23170 Y 'A','1',',','T','1','4',',','3','A','1',')',35*' '/ MOD23180 DATA JZ/' '/,IBLNK/' '/ MOD23190 NA=0 MOD23200 10 FORMAT(A4,72A1) MOD23210 20 FORMAT(1H ,A4,72A1) MOD23220 C MOD23230 C READ IN FREE FORMAT MOD23240 C MOD23250 IBARF=0 30 READ(LUR,10,END=820)I,IR MOD23260 NA=0 MOD23270 NB=0 MOD23280 IF(I.NE.JZ)GO TO 35 MOD23290 WRITE (LUW,20) I,IR MOD23300 GO TO 30 MOD23310 35 N=0 MOD23320 NK=37 MOD23330 40 IF(I.EQ.MH(NK)) GOTO 50 MOD23340 NK=NK-1 MOD23350 IF(18-NK)40,50,50 MOD23360 50 NK=NK-17 MOD23370 GO TO 180 MOD23380 60 W=1. MOD23390 70 V=0. MOD23400 NB=0 MOD23410 Y=1. MOD23420 U=10. MOD23430 Z=1. MOD23440 GOTO 100 MOD23450 80 Z=Y*Z MOD23460 V=U*ABS(V)+Z*XX MOD23470 NB=1 MOD23480 IF(V)90,100,90 MOD23490 90 V=SIGN(V,W) MOD23500 W=V MOD23510 100 N=N+1 MOD23520 K=10 MOD23530 IF(72-N)240,110,110 MOD23540 110 XX=0. MOD23550 DO 120 MM=1,10 MOD23560 M1=MH(MM)(1:1) MOD23570 IF(IR(N).EQ.MH(MM)) GOTO 80 MOD23580 120 XX=XX+1. MOD23590 GOTO 140 MOD23600 130 M1=MH(K+9)(1:1) MOD23610 IF(IR(N).EQ.M1) GOTO 240 MOD23620 140 K=K-1 MOD23630 IF(K-2)240,130,130 MOD23640 150 U=1. MOD23650 Y=0.1 MOD23660 GOTO 100 MOD23670 160 READ(LUR,10,END=820)M,IR MOD23680 WRITE(LUW,20)M,IR MOD23690 N=0 MOD23700 IF(JZ.EQ.M)GOTO 60 MOD23710 170 WRITE (LUW,5000) MOD23720 5000 FORMAT (/,' **************** INPUT ERROR') MOD23730 GOTO 830 MOD23740 180 CONTINUE MOD23750 220 DO 230 J=1,200 MOD23760 230 AA(J)=0. MOD23770 NA=0 MOD23780 WRITE(LUW,20)I,IR MOD23790 GOTO 60 MOD23800 240 IF(K-2) 250,150,250 MOD23810 250 NA=NA+NB MOD23820 IF(200-NA)170,260,260 MOD23830 260 IF(-NA)270,280,280 MOD23840 270 AA(NA)=V+AA(NA) MOD23850 280 IF(K-9)290,160,350 MOD23860 290 IF(K-3)60,300,60 MOD23870 300 W=-1. MOD23880 GOTO 70 MOD23890 350 GOTO(490,400,410,420,430,440,450,460,470,480,500,510,520,530,540 MOD23900 X,550,560,570,580,820) , NK MOD23910 C MOD23920 C UNITCELL MOD23930 C MOD23940 400 CONTINUE MOD23950 IF (NA.LT.6) GO TO 170 MOD23960 DO 402 J=1,6 MOD23970 402 CELL(J)=AA(J) MOD23980 GO TO 30 MOD23990 C MOD24000 C FPUN MOD24010 C MOD24020 410 CONTINUE MOD24030 IFPUN=1 MOD24040 GO TO 30 MOD24050 C MOD24060 C PMIN MOD24070 C MOD24080 420 CONTINUE MOD24090 NPMIN=AA(1) MOD24100 GO TO 30 MOD24110 C MOD24120 C PMAX MOD24130 C MOD24140 430 CONTINUE MOD24150 NPMAX=AA(1) MOD24160 GO TO 30 MOD24170 C MOD24180 C KONN MOD24190 C MOD24200 440 CONTINUE MOD24210 DO 441 J=1,72 MOD24220 441 FMT(J)=FMKONN(J) MOD24230 IREAD=1 MOD24240 GO TO 30 MOD24250 C MOD24260 C CORL MOD24270 C MOD24280 450 CONTINUE MOD24290 IREAD=2 MOD24300 DO 451 J=1,72 MOD24310 451 FMT(J)=FMCORL(J) MOD24320 GO TO 30 MOD24330 C MOD24340 C FFMT MOD24350 C MOD24360 460 CONTINUE MOD24370 DO 461 J=1,72 MOD24380 461 FMT(J)=IR(J) MOD24390 IREAD=2 MOD24400 GO TO 30 MOD24410 C MOD24420 C HELX MOD24430 C MOD24440 470 CONTINUE MOD24450 IHELIX=IHELIX+1 MOD24460 NNUMBR=0 MOD24470 J=0 MOD24480 471 CONTINUE MOD24490 J=J+1 MOD24500 IF (J.GT.72) GO TO 474 MOD24510 IF (IR(J).EQ.IBLNK) GOTO 471 MOD24520 NNUMBR=NNUMBR+1 MOD24530 AIR(1,NNUMBR,IHELIX)=IR(J) MOD24540 AIR(2,NNUMBR,IHELIX)=IR(J+1) MOD24550 AIR(3,NNUMBR,IHELIX)=IR(J+2) MOD24560 AIR(4,NNUMBR,IHELIX)=IR(J+3) MOD24570 J=J+3 MOD24580 GO TO 471 MOD24590 474 KSEQ(IHELIX)=NNUMBR MOD24600 GO TO 30 MOD24610 C MOD24620 C NATM MOD24630 C MOD24640 480 CONTINUE MOD24650 IF (AA(1).NE.0) NATM=AA(1) MOD24660 GO TO 30 MOD24670 C MOD24680 C DUMM MOD24690 C MOD24700 490 CONTINUE MOD24710 GO TO 30 MOD24720 C MOD24730 C TITL MOD24740 C MOD24750 500 DO 501 J=1,72 MOD24760 501 TITL(J)=IR(J) MOD24770 GO TO 30 MOD24780 C MOD24790 C FLGP MOD24800 C MOD24810 510 CONTINUE MOD24820 IFLAGP=1 MOD24830 GO TO 30 MOD24840 C MOD24850 C BASE MOD24860 C MOD24870 520 CONTINUE MOD24880 NBP=AA(1) MOD24890 GO TO 30 MOD24900 C MOD24910 C BROL MOD24920 C MOD24930 530 CONTINUE MOD24940 IBROLL=1 MOD24950 IF (NA.EQ.0) GO TO 30 MOD24960 INPBRL=1 MOD24970 IF (NBP*6.EQ.NA) GO TO 531 MOD24980 WRITE (LUW,5004) MOD24990 5004 FORMAT (/,' ****** INPUT ERROR, NUMBER OF INPUT PARAMETERS DOES NOMOD25000 XT MATCH, CHECK NUMBER OF BASE PAIRS') MOD25010 STOP MOD25020 531 JJ=0 MOD25030 DO 532 J=1,NBP MOD25040 JJ=JJ+1 MOD25050 NBB(1,J)=AA(JJ) MOD25060 NBB(2,J)=AA(JJ+1) MOD25070 NB1(1,J)=AA(JJ+2) MOD25080 NB1(2,J)=AA(JJ+3) MOD25090 NB2(1,J)=AA(JJ+4) MOD25100 NB2(2,J)=AA(JJ+5) MOD25110 JJ=JJ+5 MOD25120 532 CONTINUE MOD25130 GO TO 30 MOD25140 C MOD25150 C CYLN MOD25160 C MOD25170 540 CONTINUE MOD25180 ICYLIN=1 MOD25190 IF (NA.EQ.0) GO TO 30 MOD25200 INPCYL=1 MOD25210 NBPM=NBP-1 MOD25220 IF ((2*NBPM+2*NBP).EQ.NA) GO TO 541 MOD25230 WRITE (LUW,5004) MOD25240 STOP MOD25250 541 DO 543 J=1,NBP MOD25260 JJ=NBPM+J MOD25270 IF (J.EQ.NBP) GO TO 542 MOD25280 NP(1,J)=AA(J) MOD25290 NP(2,J)=AA(JJ) MOD25300 542 JJ=JJ+NBPM MOD25310 NC(1,J)=AA(JJ) MOD25320 JJ=JJ+NBP MOD25330 NC(2,J)=AA(JJ) MOD25340 543 CONTINUE MOD25350 GO TO 30 MOD25360 C MOD25370 C TRNG MOD25380 C MOD25390 550 CONTINUE MOD25400 ITORNG=1 MOD25410 IF (NA.EQ.0) GO TO 30 MOD25420 INPTOR=1 MOD25430 KK=NBP*6 MOD25440 LL=NBP*4 MOD25450 IF ((KK+LL).EQ.NA) GO TO 551 MOD25460 WRITE (LUW,5004) MOD25470 STOP MOD25480 551 DO 552 J=1,KK MOD25490 552 NATO(1,J)=AA(J) MOD25500 DO 553 J=1,NBP MOD25510 DO 553 JJ=1,4 MOD25520 553 NCHI(1,J,JJ)=AA(KK+(J-1)*4+JJ) MOD25530 GO TO 30 MOD25540 C MOD25550 C HLX2 MOD25560 C MOD25570 560 CONTINUE MOD25580 IHELIX=1 MOD25590 IF (NA.EQ.0) GO TO 30 MOD25600 INPHEL=1 MOD25610 NVEC=NA/2 MOD25620 DO 561 J=1,NVEC MOD25630 JJ=(J-1)*2 MOD25640 NN1(J)=AA(JJ+1) MOD25650 NN2(J)=AA(JJ+2) MOD25660 561 CONTINUE MOD25670 GO TO 30 MOD25680 C MOD25690 C BRKH MOD25700 C MOD25710 570 CONTINUE MOD25720 IBARF=2 IREAD=2 MOD25730 DO 571 J=1,72 MOD25740 571 FMT(J)=FMBRKH(J) MOD25750 GO TO 30 MOD25760 C MOD25770 C AD14 MOD25780 C MOD25790 580 CONTINUE MOD25800 GO TO 30 MOD25810 C MOD25820 C END MOD25830 C MOD25840 820 CONTINUE MOD25850 DO 828 JJ=1,IHELIX MOD25860 NUMBR=KSEQ(JJ) MOD25870 IF (NUMBR.LE.0) GO TO 827 MOD25880 DO 826 J=1,NUMBR MOD25890 ATAB(J,JJ)=AIR(1,J,JJ)//AIR(2,J,JJ)//AIR(3,J,JJ)//AIR(4,J,JJ) MOD25900 826 CONTINUE MOD25910 GO TO 828 MOD25920 827 KSEQ(JJ)=1 MOD25930 ATAB(1,JJ)='C1'' ' MOD25940 828 CONTINUE MOD25950 RETURN MOD25960 830 STOP MOD25970 END MOD25980 C MOD25990 C------------------------- MOD26000 C BLOCK DATA MOD26010 C------------------------- MOD26020 C MOD26030 BLOCK DATA MOD26040 CHARACTER* 4 MH MOD26050 CHARACTER* 1 IR,TITL MOD26060 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD26070 X ,L15 MOD26080 DATA MH(1)/'0'/,MH(2)/'1'/,MH(3)/'2'/,MH(4)/'3'/,MH(5)/'4'/ MOD26090 DATA MH(6)/'5'/,MH(7)/'6'/,MH(8)/'7'/,MH(9)/'8'/,MH(10)/'9'/ MOD26100 DATA MH(11)/'.'/,MH(12)/'-'/,MH(13)/'+'/,MH(14)/'X'/,MH(15)/'Y'/ MOD26110 DATA MH(16)/'Z'/,MH(17)/','/,MH(18)/'='/,MH(19)/'CELL'/ MOD26120 DATA MH(20)/'FPUN'/,MH(21)/'PMIN'/,MH(22)/'PMAX'/,MH(23)/'KONN'/ MOD26130 DATA MH(24)/'CORL'/,MH(25)/'FFMT'/,MH(26)/'HELX'/,MH(27)/'NATM'/ MOD26140 DATA MH(28)/'TITL'/,MH(29)/'FLGP'/,MH(30)/'BASE'/,MH(31)/'BROL'/ MOD26150 DATA MH(32)/'CYLN'/,MH(33)/'TRNG'/,MH(34)/'HLX2'/,MH(35)/'BRKH'/ MOD26160 DATA MH(36)/'AD14'/,MH(37)/'END '/ MOD26170 DATA LUR/5/,LUW/6/,L11/11/,L12/12/,L13/13/,L14/14/,L15/15/ MOD26180 END MOD26190