C **************************************************************************** C To: Past and present NEWHELIX users 9 April 1991 C From: Richard E. Dickerson, MBI, UCLAC C C The following file contains the latest version of the NEWHEL91 library C for calculating helix parameters, with improved definitions of Roll and Tilt C that are not sensitive to Twist values, and with the correct sign for C Propeller in every case. Instructions for NEWHEL91 are incorporated C as an extended set of comment cards, so the file becomes self-contained and C no instruction manual is necessary. A sample of the NEWHEL91.COM command C file that sets the program in motion is included in the comment card section. C For first-time users of the programs, sample TEST.INP input and TEST.OUT C output files are available from R.E.D. at the address given below. NEWHEL91 C also has been deposited with the Brookhaven Protein Data Bank for general C distribution. C C Note to previous users of NEWHEL90: NEWHEL91 eliminates the need C to begin an atom input format card with: (A4, ....). Instead, simply begin C the card with a designation of where to find the X coordinate. Examples: C Old format: FFMT (A4,T31,3F8.3,T19,A1,T25,2A1,T14,3A1) C New format: FFMT (T31,3F8.3,T19,A1,T25,2A1,T14,3A1) C C ############### IMPORTANT NOTICE TO RECIPIENTS OF THIS FILE!! ############### C PLEASE SEND ME AN EMAIL MESSAGE CONFIRMING RECEIPT OF THIS FILE. EMAIL CAN C BE A BOTTOMLESS PIT, WITH THE SENDER NEVER KNOWING WHETHER THE MESSAGE WENT C THROUGH. HENCE UNLESS I RECEIVE A CONFORMATION, I AM FORCED TO ASSUME THAT C THE TRANSMISSION WAS UNSUCCESSFUL, AND WILL KEEP TRYING TO GET IT TO YOU. C ALSO PLEASE LET ME KNOW IF THIS IS NOT YOUR OPTIMUM EMAIL ADDRESS. C THANKS, RED C ***************************************************************************** C NEWHEL91 C ***************************************************************************** C Richard E. Dickerson NEWHEL91 version of 2 April 1991 C Molecular Biology Institute Updates of old NEWHELIX version: C University of California a. Y DSP sign corrected 8.5.89 C Los Angeles CA 90024, USA b. Q(C1") = Dxy added 20.6.89 C Tel: 213-825-5864 c. Epsilon - Zeta added 22.6.89 C FAX: 213-825-0982 d. CUP added 26.1.90 C Bitnet: RED@UCLAUE.BITNET e. D(Cl") = Dxyz added 26.1.90 C Arpanet: f. O4"-O4" distances added 5.3.90 C RED%UCLAUE.SPAN@STAR.STANFORD.EDU g. A4 input format eliminated 29.4.90 C h. Minor format improvements 20.12.90 C i. Roll and Tilt corrected (minor twist dependence removed) 4.1.91 C j. Set SGTHET=0 if negative (minor roundoff error with ideal coords) 15.1.91 C k. Prints NBP for use by supplemental data extraction program SELECT 10.2.91 C l. Roll and Tilt code rechecked for correctness and explained 26.3.91 C m. Proper sign control added for Propeller (had always been negative) 2.4.91 C C NEWHEL91 is a complete library of helix parameter calculating programs C for DNA and RNA helices. It derived originally from the HELIB library of C programs that included HELIX by J. M. Rosenberg, and BROLL, CYLIN and DTORAN C by R. E. Dickerson. Dov Rabinovich, Klara Reich and Zippora Shakked later C combined these into one MODHELIX master program with a greatly improved C input. Whereas the HELIB routines had required the input of long lists of C sequential numbers to identify atoms needed in the calculations, MODHELIX C read a six-character atom identifier code along with x, y and z coordinates, C and used this code to find the needed atoms from the input list. This code C is of the form: abbccc, where a = type of base (A,C,G,T), bb = base C sequence number, and ccc = type of atom (C4', N7, P, O1P, etc.). NEWHELIX C converted MODHELIX to the l989 Cambridge nomenclature conventions, as C reported in: EMBO Journal 8:1-4; J. Biomol. Str. Dynam. 6:627-634; Nucl. C Acids Res. 17:1797-1803; and J. Mol. Biol. 205:787-791. Several corrections C and format improvements followed, and NEWHELIX was gradually augmented by C the calculation of several useful new functions as noted above. NEWHEL91 C is the current version of NEWHELIX, incorporating a better algorithm C for Roll and Tilt by Peter Schultze at UCLA. C C In NEWHELIX, once subroutine HELIX has been used to generate a C coordinate set with the helix axis ascending along z, the other principal C subroutines BROLL, CYLIN and TORANG can be run separately or in any C combination. Quantities calculated by NEWHELIX are defined in the C abovementioned Cambridge nomenclature convention sources, plus Fratini C et al.(1982) J. Biol. Chem. 257:14686-14707 and the Appendix to Jurnak C and McPherson (eds) (1985) Biological Macromolecules and Assemblies: Vol. 2, C Nucleic Acids and Interactive Proteins, Wylie, New York, pp. 471-494. C See also Prive et al.(1991) J. Mol. Biol. 217:177-199. C C An input NEWHEL91.COM file on FOR005 provides user names for the other C input/output files, and also supplies data for a particular run, as listed C below under 'Instruction Cards'. Files used are: C Typical File Names: C FOR005 Command File with file names and data for run NEWHEL91.COM C FOR011 Input atomic coordinate list NAME.INP C FOR006 Output of helix analysis tables NAME.OUT C FOR007 Extra output of P-P and O-O tables NAME.TAB C FOR012 Output coordinates: Diamond list format NAME.DIA C FORMAT(3F10.5,11X,2A4,5X,I5) C FOR015 Output coordinates, Konnert-Hendrickson format NAME.KHF C FOR016 Output coordinates, Brookhaven format NAME.BRK C C INSTRUCTION CARDS C C These cards, incorporated into the NEWHEL91.COM file, supply the C program with information about unit cell dimensions, atom list format, etc., C and designate which calculations are to be carried out. The first four C characters on each card define the type of instruction. If the program C fails to recognize them, or if those four characters are blank, the contents C of the card are ignored. Such a card hence can be used as a comment card. C Alternatively, one can have several cards of the same type (e.g., for C different input formats), activating one by moving it flush left, and C inactivating the others by shifting them four or more places to the right. C Following the first four spaces, the remaining 72 spaces on a card are used C to convey numerical information. Characters '0' to '9', '-' and '.' are C always assumed to be part of a number. Any other characters except '=' C may be used to separate two numbers, providing that the instruction does C not include alphabetic information (e.g. card HELX). Thus the following C two cards are exactly equivalent in action: C C CELL 7.64 8.39 13.00 90.0 103.7 90.0 C CELL a 7.64, b 8.39, c 13, ALPHA90BETA103.7GAMMA90 C C But NEVER use 'a=7.64', as '=' has a special function. To continue a line C onto the next card, end the line with '=', and indent the subsequent card C by four blank spaces. The '=' at the end of the first card causes the C next card to be interpreted as a continuation card, instead of being C ignored because of the four blank spaces. If the input coordinates already C are an orthogonal set in Angstroms, use CELL 1. 1. 1. 90. 90. 90. C C Note that if an expected number is not found, it will either be given C a default setting (not necessarily zero), or if no default setting exists, C will be treated as an error. In the description below, '*' marks cards C which, if present, must appear in the sequence given below. All other cards C may appear in any order, except that the last card must be 'END'. The C obligatory minimum set of cards is 'TITL, 'CELL', one of the cards speci- C fying which of the subroutines are to be executed, one card for atom input C format ('FFMT', 'CORL', 'KONN' or 'BRKH'), and 'END'. C C *TITL (followed by a title of up to 72 characters) C C *CELL a, b, c, alpha, beta, gamma (In Angstroms and in degrees or C alternatively in cosines of the angles.) C C *Atom input coordinate format card C Four options are available, reading from input unit 11: C C Option (1): FFMT (+72 characters specifying format of input file) C Parameters are read in the following sequence: C X, Y, Z coordinates. C Atom identification code: a bb ccc, where: C a = Base type: A, C, G, T, (read with A1) C bb = Base sequence number (read with 2A1) C ccc = Atom identification, such as C1', O2P, N9, etc. (read with C 3A1). Warning: Phosphate oxygens must be labeled O1P and O2P, C not OL and OR or some other designation. C The T format is extremely useful in building the FFMT statement. 'Tn' means C "position the index pointer to column 'n' for subsequent action." If the C input file is of the form: C C XXXX.XXXYYYY.YYYZZZZ.ZZZ......a.....bb...ccc C C it can be read by: FFMT (3F8.3,6X,A1,5X,2A1,3X,3A1), or by: C FFMT (3F8.3,T31,A1,T37,2A1,T42,3A1). But a different order of data: C C bb....XXXX.XXXYYYY.YYYZZZZ.ZZZ...ccc..a C C can only be read with the aid of the T format: C FFMT (T7,3F8.3,T39,A1,T1,2A1,T34,3A1). C C Option (2): KONN (72 blanks). Causes atom coordinates to be read in the C Konnert-Hendrickson format used in NUCLSQ (not the PROLSQ format)--i.e.-- C (T19,3F10.5,T9,6A1). C C Option (3): CORL (72 blanks). Causes coordinates to be read in Corels C format: (T16,3F10.5,T4,A1,T10,5A1). C C Option (4): BRKH (72 blanks). Causes coordinates to be read in Brookhaven C Data Bank format: (T31,3F8.3,T20,A1,T25,2A1,T14,3A1). Ignores all data C cards that do not begin with ATOM in columns 1-4. C C FLGP (default 0). If a FLGP card is present, Cartesian and cylindrical C coordinates are listed on logical output file 6 (FOR006) before the C output tables. If FLGP is not present (or if the card is shifted 4 or C more spaces to the right), only the output tables appear. C C FPUN (default 0). If present, causes coordinates to be written on logical C output units 12, 15 and 16 in Diamond list, Konnert-Hendrickson, and C Brookhaven formats respectively. THIS CARD IS NECESSARY IF BROLL, CYLIN C OR TORANG SUBROUTINES ARE TO BE RUN, BECAUSE THEY USE THE FOR012 COORDINATE C LIST. Files 12, 15 and/or 16 can be deleted at the very end if desired, C by a $ DEL command in the command file. C C As presently written in the 'PUTATM' routine, the HELIX subroutine C writes onto logical unit 12 (FOR012) the Cartesian coordinates for all even C powers of the helix operator as specified by PMIN and PMAX. For example, C in order to create coordinates of a continuous helix based on input C coordinates of a dodecamer, one may use the powers 0, 12, 24, etc. For an C octamer the corresponding powers are 0, 8, 16, etc. C C PMIN n (default 0). Number n is the minimum even power of the helix C operator. (Applies only to options HELX or HLX2.) C C PMAX n (default 0). Number n is the maximum even power of the helix C operator. (Applies only to options HELX or HLX2.) C C NATM n (default: All atoms read in). Number n limits the atom coordinate C read-in to the first n atoms in the list. When BRKH rejects a card because C it does not begin with ATOM, it also does not count it toward this total C of n atoms. The present array limits allow 996 input atoms and 200 helix C vectors. C C BASE n Number n is the number of base pairs in the double helix. C C HELX cards Construct the best helix using: C HELX (72 blanks) C1' atoms only C HELX C1' C1' C1' atoms C HELX RN9 YN1 Purine N9, pyrimidine N1 atoms C HELX (any atom names) The specified atoms C Note: Several consecutive HELX cards can be used to combine sets of the C above atoms. In particular, the pair: HELX C1' C1', followed by: C HELX RN9 YN1, will cause a helix axis to be generated using C1' and C N9 of purines, and C1' and N1 of pyrimidines, which probably is the C most generally useful combination. More precision can be gained by C using the HLX2 card instead of HELX: C C HLX2 a,b,c,d,e,f,g,h,...(where a through h are atom numbers) C This causes the helix to be defined by vectors from atoms a to b, C c to d, e to f, g to h, etc. Stepping along a row of sequential atoms C down the helix is achieved by repeating atom numbers. If successive C atom numbers along the helix are a, b, c, d, e, f, etc., the proper card C is: HLX2 a, b, b, c, c, d, d, e, e, f,.... Commas are optional in a C HLX2 card; a blank between numbers is sufficient. C The easiest way to obtain numbers of the atoms is to run the program first C with cards: HELX C1'C1' and: HELX RN9 YN1. The output from this run C will list all of the atom-atom vectors by numbers, and certain of these C pairs then can be selected for the second run. You can use a C combination of any number of HELIX cards, but either zero or one HLX2 C cards only. HELX then involves all atoms of the types specified, and C HLX2 supplements these with other specific atoms. If you need more C room than one line of the HLX2 card provides, extend it via '=' C continuation. C C BROL (Runs the BROLL program, as described below.) C C CYLN (Runs the CYLIN program, as described below.) C C TRNG (Runs the TORANG program, as described below.) C C *END (Closes the COMmand file.) C C (Note that asterisks * in the above list are NOT typed in the COMmand file, C but merely serve to indicate those cards with obligatory order.) C C C SAMPLE COMMAND FILE: NEWHEL91.COM {Curly brackets merely C enclose explanatory comments.} C $ SET DEFAULT [RED.BROOK] C $ ASSIGN 1BNA.INP FOR011 {Input coordinate file.} C $ ASSIGN 1BNA.OUT FOR006 {Output parameter tables.} C $ ASSIGN 1BNA.TAB FOR007 {Duplicate P-P, O-O tables} C $ ASSIGN 1BNA.DIA FOR012 {Optional Diamond list coordinates} C $ ASSIGN 1BNA.KHF FOR015 {Optional K-H coordinates} C $ ASSIGN 1BNA.BRK FOR016 (Optional Brookhaven coordinates} C $ RUN [RED.BROOK]NEWHEL91 {Run program with following data:} C TITL Drew Native UCLA 1BNA {Title card} C CELL 1., 1., 1., 90., 90., 90. {Coordinates already in Angstroms} C BRKH {Inactivated Brookhaven format} C FFMT (3F10.3,T68,1A1,T71,2A1,T76,3A1) {Activated format} C FFMT (T7,3F8.3,T41,6A1) {Another inactivated format) C FLGP 0 {No coords listed on FOR006} C FPUN 0 {Coords listed on FOR012, 015 and 016} C PMIN 0 {Do not generate C PMAX 0 successive helices up the axis.} C NATM 486 {486 atoms read in} C BASE 12 {12 base pairs} C HELX RC1' YC1' {Use only C1' atoms to define helix.} C HELX RN9 YN1 {Pur N9 and Pyr N1 atoms inactivated.} C BROL {Run BROLL program.} C CYLN {Run CYLIN program.} C TRNG {Run TORANG program.} C END C $ DEL FOR012.DAT;*, FOR015.DAT;* {Delete unwanted output coord files C $ EXIT on FOR012 and 015} C C C COMMENTS ON INDIVIDUAL SUBROUTINES C C NEWHELIX no longer requires that the sequences of strands 1 and 2 of a C double helix be identical, as MODHELIX and DTORAN had done. The only C requirement now is that the two strands have the same number of bases. C Hence NEWHELIX can be used with non-selfcomplementary helices. C C NEWHELIX now can handle purine-purine and pyrimidine-pyrimidine C mispairs. The BROLL program in MODHELIX assumed that, if the base on one C strand was a purine, that on the other strand was a pyrimidine. This C restriction has now been removed. C C I. HELIX: This is the helix-generating program by J. M. Rosenberg, C as revised by H. R. Drew in 1980. It uses vectors defined by you, to C generate a helix axis, and then emits Cartesian and radial coordinates with C the helix axis along Z. As incorporated in NEWHELIX, HELIX always generates C coordinates with strand 1 rising up the Z axis toward greater numerical C values, and strand 2 descending the Z axis, no matter what the orientation of C the input coordinates had been. This convention is essential if all of the C signs of parameters calculated are to be consistent. The choice of vectors C with which to define the helix axis is up to the user, but at least three C vectors are required. The most common choice is all vectors between C1' C atoms on successive bases along the same strand of the helix, and between C purine N9 and/or pyrimidine N1 atoms along the strand. In this maximal case, C a helix with M base pairs would use 4M - 4 helix-defining vectors. It is C equally possible to define an overall helix axis using only C and N vectors C between the first and last base pair of a helix, or at a limited number C of steps at one end of a helix. Present array limits allow 996 input C atoms and 200 helix vectors. C C II. BROLL: This program, by R. E. Dickerson, uses the output coordi- C nate listings from HELIX, on logical unit 12, to calculate direction cosines C and corresponding angles for the normals to all base planes, and to the best C plane through both bases of a pair. It then calculates helix parameters that C depend on base plane normals, or on the orientation of the base pair long C axes, as defined by the line connecting the C6 of a pyrimidine and the C8 of C a purine. Parameters calculated include (See Figs. 7 and 8 of the 1989 C Cambridge nomenclature convention report): C C 1. TIP and INCLination angles for individual bases and for base pairs. C TIP is positive for right-hand rotation about a C6-C8 vector along the base C pair long axis from strand 2 to strand 1 (the +y axis). INCL is positive C for right-hand rotation about a vector from the helix axis toward the major C groove (the +x axis), and is positive for A-DNA. C C 2. ROLL and TILT angles between adjacent bases and between adjacent C base pairs along the helix. ROLL is positive if the roll angle between base C or base pair planes opens toward the minor groove. TILT is positive if the C tilt angle between bases or base pairs opens toward strand 1. The code for C calculating ROLL and TILT was changed between NEWHEL90 and NEWHEL91 to C remove the perturbing effect of twist angle. Now the two base pairs are C rotated until their long axes coincide in projection on the XY plane, before C ROLL and TILT are calculated. It now is a very good approximation that C ROLL(n) = TIP(n+1) - TIP(n), and TILT(n) = INCL(n+1) - INCL(n), where n is C the base pair number. C C 3. Propeller (PROP) between bases of a pair. PROP is NEGATIVE for C clockwise rotation of the nearer base in a view down the long axis. This C is a reversal of the traditional sign choice, but has been made in the C Cambridge nomenclature conventions because it now becomes consistent with the C standard IUPAC right-hand rule for torsion angle signs. If TIP1 and TIP2 C are values for individual base tip on strands 1 and 2 of a base pair, then C it is approximately true that: PROP = TIP1 - TIP2. The sign of PROP now C is calculated properly. In NEWHEL90 the sign had always been negative. C C 4. BUCKLE, which is the dihedral angle between bases along their short C axis, after propeller has been rotated back to zero. BUCKLE is positive if C the base pair has a convex dome in the 5'-to-3' chain direction of strand 1 C of the helix. If INCL1 and INCL2 are values for individual base inclinations C on strands 1 and 2 of a pair, it is approximately true that: C BUCKLE = INCL2 - INCL1. C C 5. CUP, or the change in BUCKLE from one base pair to the next. In a C 5'-to-3' direction along strand 1, CUP(n) = BUCKLE(n+1) - BUCKLE(n). (This C is not an approximation; it is the definition of CUP.) Positive CUP means C that the base pairs have their concave BUCKLE sides facing one another like C two cupped hands. See Fig. 5 of Yanagi et al.(1991) J. Mol. Biol. 217:201. C C 6. SLIDE, the relative displacements of midpoints of the C6-C8 line for C two adjacent base pairs, viewed in projection on a plane midway between the C two pairs. It measures relative lateral displacement from one base pair to C the next, and is independent of choice of helix axis. An analytical C expression for SLIDE is given in the appendix to Jurnak and McPherson. C SLIDE is positive if the second base pair is shifted more toward strand 1 C than was the first base pair. C C 7. X and Y displacement (X DSP and Y DSP). These measure the absolute C displacement of the midpoint of the C6-C8 line relative to the helix axis, C in directions perpendicular and parallel to the C6-C8 line, respectively. C X DSP is positive if the base pair moves away from the helix axis in the C direction of the major groove, so that the helix axis runs down the minor C groove. Hence X DSP is positive for Z-DNA, nearly zero for B-DNA, and C negative for A-DNA. Y DSP is positive if the base pair slides along its C long axis toward strand 1 of the helix. C C 8. C6/C8 is the distance between pyrimidine C6 and purine C8 atoms, C viewed in projection down the helix axis. C C SPECIAL WARNING FOR Z-DNA: The left-handed helix sense means that the C printed signs for INCL and X DSP must be REVERSED. The sign of Y DSP and C all other signs are correct as printed in the output tables. C C III. CYLIN: This program uses output from HELIX to calculate various C helix parameters that depend on cylindrical coordinates of phosphate P atoms, C or C1' and O4' atoms of sugars. Parameters calculated include: C C 1. R, PHI and Z: Polar coordinates of the phosphorus atoms. As C mentioned earlier, Z always increases along strand 1, and decreases along C strand 2. C C 2. D = Distance between successive P along one strand. C Q = Component of D in a plane normal to the helix axis. C H = Component of D along the helix axis. C PI = Local pitch angle = arcsin(H/D). C C 3. Single-strand rotations and rise relative to the chosen helix axis, C as measured by C1' and P atom positions only: C C S5" = Helical rotation semi-angle from P past O5' to C1' in a C 5'-to-3' direction. C S3" = Helical rotation semi-angle from C1' past O3' to P. C [R(P) = Helical rotation from one P to the next = S5" + S3". Note: C This quantity had little use, and has been replaced by Q(C1").] C D(C1") = Dxyz = Distance from one C1' atom to next along one strand. C Q(C1") = Dxy = Projection of Dxyz on plane normal to helix axis. C This quantity measures the degree of base unstacking. C H(C1") = Dz = Projection of Dxyz onto helix axis = Vertical rise C along axis from one C1' atom to the next. C Note that: (Dxyz)**2 = (Dxy)**2 + (Dz)**2 C T(C1") = Helix twist angle from one C1' to the next along one C strand = S3" + following S5", measured around the helix axis. C C 4. Global TWIST and RISE: C TWIST = Angle between C1'--C1' vectors of two successive base pairs, C viewed in projection down the helix axis. C RISE = Mean of the H(C1") values at two ends of the base pairs. C Note that TWIST and RISE are properties of the double helix, C whereas all previous quantities have been properties of one C one individual strand or the other. C C 5. SLIDE, X DSP and Y DSP. These are defined as in the BROLL program, C but now use C1' positions rather than C6 and C8. As with the BROLL routine, C for Z-DNA the sign of X DSP must be reversed. C C 6. LAMBDA, the angles between C1'--N1 or C1'--N9 glycosidic bonds and C the base pair C1'--C1' line. This quantity has been used by Kennard and C coworkers in the study of mispaired bases. C C 7. Table of all reduced P--P distances in the double helix. These are C the true P--P distances decreased by 5.8 Angstroms to approximate two van der C Walls phosphate group radii, and are of particular utility in examining the C effective width of the openings in major and minor grooves. For a M-base C pair double helix, phosphorus P2 to PM of strand 1 run down the table, and C P(M+2) to P(2M) run from left to right across the table. C C 8. Table of all reduced O4'--O4' sugar ring atom distances. These are C the true O4'--O4' distances decreased by 2.8 Angstroms to approximate two C van der Waals oxygen radii, and again are most useful in evaluating widths C of grooves. The P--P and O4'--O4' tables are emitted along with other tables C on output file 6, and are duplicated on output file 7 so they can be printed C in horizontal page format on a laser printer, if they become too wide for C a normal printed page (e.g.--if two stacked helices are being examined). C C IV. TORANG: This program calculates main chain torsion angles, C glycosyl angles, sugar ring angles and pseudorotation angles. It uses C output coordinates from HELIX. Angles are named according to IUB/IUPAC C recommendations: C C P-----O5'-----C5'-----C4'-----C3'-----O3'-----P C alpha beta gamma delta epsilon zeta C C Chi is defined by: Pyrimidines: O4'--C1'--N1--C2 C Purines: O4'--C1'--N9--C4 C C All main chain and glycosyl torsion angles are printed in the range of 0 to C 360 degrees, rather than -180 to +180, to avoid an inconvenient discontinuity C in the middle of the TRANS torsion angle range. Torsion angles are listed in C a 5'-to-3' direction along each of the two strands. Hence the FIRST base in C the strand 1 listing is paired with the LAST base in the strand 2 listing C and so forth. At the right of the strand 1 listing, DIF is the difference C between delta values at the two ends of that particular base pair. At the C right of the strand 2 listing, MEAN is the average of deltas at the two ends C of the base pair. Note that, for the first base pair of a helix as measured C along strand 1, the DIF value will be at the top of the strand 1 column and C the MEAN value will be at the bottom of the strand 2 column. EP-ZE is the C difference between torsion angles epsilon and zeta, and is useful in C identifying BII phosphate conformations. C C In both of the earlier programs DTORAN and MODHELIX, the order of atoms C was required to be identical in strands 1 and 2, since locations of strand C 2 atoms were found simply by adding a constant (the number of atoms in one C strand) to locations in strand 1. This computational shortcut meant that C if sequences of the two strands were not identical, erroneous torsion angles C would result along strand 2. This limitation has been removed in NEWHELIX. C The only requirement is that both strands have the same number of bases (not C atoms). Hence NEWHELIX can be used with non-selfcomplementary helices such C as C-G-C-A-A-A-A-A-A-G-C-G/C-G-C-T-T-T-T-T-T-G-C-G. C C Sugar ring pseudorotation angles V0 through V4 and the phase angle P C (tabulated under 'Pseud.') are calculated as given in Altona and Sundara- C lingam (1972), JACS 94:8205-8212, or p. 20 of Saenger's "Principles of C Nucleic Acid Structure", Springer-Verlag, 1983. Torsion angle delta is C repeated alongside P for ease in making comparisons. P and delta are C related theoretically by: C C Delta = 40 cos(P + 144) + 120 degrees. C C P is centered around 0 degrees for C2'-exo/C3'-endo conformations, and around C 180 degrees for C2'-endo/C3'exo conformations. Sugar ring internal angles C are listed in a 5'-to-3' direction for each strand. C C *********************************************************************MOD00010 C THE NEWHEL90 PROGRAM BEGINS HERE: MOD00020 C *********************************************************************MOD00030 CHARACTER * 4 NAME,MH MOD00060 CHARACTER * 1 IR,TITL,FMT MOD00070 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD00080 X ,L15 MOD00090 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD00100 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD00110 COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000),NBP MOD00120 COMMON/BROOK/IBARF MOD00130 CALL INIT MOD00140 CALL XDRED MOD00150 IF (IHELIX.NE.0) CALL HELIX MOD00160 IF (IBROLL.NE.0) CALL BROLL MOD00170 IF (ICYLIN.NE.0) CALL CYLIN MOD00180 IF (ITORNG.NE.0) CALL TORANG MOD00190 c RETURN MOD00200 END MOD00210 C MOD00220 C------------------------- MOD00230 C SUBROUTINE ANGLE MOD00240 C------------------------- MOD00250 C SUGAR BOND ANGLES CALCULATING SUBROUTINE MOD00280 SUBROUTINE ANGLE (NA,TE,ATM) MOD00300 DIMENSION ATM(3,1000),NA(3) MOD00310 DIMENSION AV(3),BV(3),CV(3),AA(3) MOD00320 DO 10 J=1,3 MOD00330 J1=J+1 MOD00340 IF (J1.GT.3) J1=1 MOD00350 NS=NA(J) MOD00360 NE=NA(J1) MOD00370 AV(J)=ATM(1,NE)-ATM(1,NS) MOD00380 BV(J)=ATM(2,NE)-ATM(2,NS) MOD00390 CV(J)=ATM(3,NE)-ATM(3,NS) MOD00400 10 CONTINUE MOD00410 DO 20 I=1,3 MOD00430 AA(I)=AV(I)**2+BV(I)**2+CV(I)**2 MOD00440 20 CONTINUE MOD00450 TE= ACOS((AA(1)+AA(2)-AA(3))/(2.*SQRT(AA(1)*AA(2)))) MOD00460 RETURN MOD00470 END MOD00480 C MOD00490 C------------------------- MOD00500 C SUBROUTINE BROLL MOD00510 C------------------------- MOD00520 SUBROUTINE BROLL MOD00540 CHARACTER * 4 MH MOD00550 CHARACTER * 1 IR,TITL,NTP,NAT MOD00560 INTEGER * 2 IRES MOD00570 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 MOD00580 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD00590 COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) MOD00600 DIMENSION A(3,3),EIG(20,3),NA1(15),PHI(20,3,2),THE(20,3,2),TIL(20)MOD00610 * ,NA2(15),XMIN(30,3),XMAJ(30,3),PLA(20,3,3),ANG(3),SV(3),RV(2,3) MOD00620 * ,PV(2,3),PM(2),PTW(20),ALB(2),BKL(20),SLI(20),DIS(20),HYP(20) MOD00630 * ,ROT12(20),AM(3),BM(3),SLJ(20),SIG(11),SSQ(11),SD(11),AV(11) MOD00640 * ,TV(2,3),TV2(2) 500 FORMAT(1X,' ROLL+TILT OUTPUT, NEWHEL91, CORRECT PROPELLER SIGN') MOD00650 501 FORMAT(/,I5,' ATOMS AND ',I5,' BASE PAIRS',I5) MOD00660 502 FORMAT (/,' ',72A1) MOD00670 503 FORMAT(//,' BASE PAIR',I5,/) MOD00680 504 FORMAT(2I5) MOD00690 505 FORMAT(15I5) MOD00700 506 FORMAT(1H1) MOD00710 507 FORMAT(//,' STRAND',I4,' BASE NORMAL COSINES AND ANGLES',/) MOD00720 508 FORMAT(3F10.5,5X,3F10.2) MOD00730 509 FORMAT(//,' STRAND 1 ROLL AND TILT ANGLES STRAND 2 ROLL AND TMOD00740 *ILT ANGLES') MOD00750 510 FORMAT(' TIP INCL ROLL TILT TIP INCL ROLL MOD00760 * TILT') MOD00770 511 FORMAT(//,' BEST PLANE THROUGH BOTH BASES') MOD00780 512 FORMAT(' TIP INCL ROLL TILT CUP PROP BUCKLE SLIDE MOD00790 *X DSP Y DSP C6/C8') MOD00800 513 FORMAT(4F7.2,7X,4F7.2) MOD00810 514 FORMAT(11F7.2) MOD00820 516 FORMAT(1H ) MOD00830 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.') 521 FORMAT(2F7.2,3(4X,'-',2X),2F7.2,4X,'-',2X,3F7.2) MOD00920 522 FORMAT (11(2X,'_____'),/) MOD00930 523 FORMAT(11F7.2,' AV') MOD00940 524 FORMAT(11F7.2,' SD') MOD00950 555 FORMAT(//,' BASE PAIR NORMAL COSINES AND ANGLES',/) MOD00960 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) MOD00970 C WRITE(LUW,500) MOD00980 C WRITE(LUW,502)TITL MOD00990 C WRITE(LUW,501) NATM,NPLA MOD01000 REWIND L12 MOD01010 2020 FORMAT(3F10.5,11X,A1,I2,5A1) MOD01020 DO 10 I=1,NATM MOD01030 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NAT(I,J),J=1,5) MOD01040 DO 20 I=1,20 MOD01050 DO 20 J=1,3 MOD01060 DO 20 K=1,2 MOD01070 20 THE(I,J,K)=0.0 MOD01080 IF (INPBRL.EQ.0) CALL SETBRL MOD01090 DO 220 M=1,NPLA MOD01100 C WRITE(LUW,503) M MOD01110 C WRITE(LUW,504) NC(1,M),NC(2,M) MOD01120 NA11=NB1(1,M) MOD01130 NA12=NB1(2,M) MOD01140 NA21=NB2(1,M) MOD01150 NA22=NB2(2,M) MOD01160 C WRITE(LUW,505) NA11,NA12 MOD01170 C WRITE(LUW,505) NA21,NA22 MOD01180 L=0 MOD01190 DO 30 IDR=NA11,NA12 MOD01200 L=L+1 MOD01210 NA1(L)=IDR MOD01220 30 CONTINUE MOD01230 NA1(L+1)=0 MOD01240 C WRITE(LUW,505) (NA1(J),J=1,L) MOD01250 L=0 MOD01260 DO 40 IDR=NA21,NA22 MOD01270 L=L+1 MOD01280 NA2(L)=IDR MOD01290 40 CONTINUE MOD01300 NA2(L+1)=0 MOD01310 C WRITE(LUW,505) (NA2(J),J=1,L) MOD01320 DO 70 K=1,15 MOD01330 NTEST=NA1(K) MOD01340 IF(NTEST) 80,80,50 MOD01350 50 DO 60 J=1,3 MOD01360 XMIN(K,J)=ATM(J,NTEST) MOD01370 60 CONTINUE MOD01380 70 CONTINUE MOD01390 K=K+1 MOD01400 80 NPL=K-1 MOD01410 CALL MATRIX(XMIN,A,NPL) MOD01420 CALL EIGEN2(A,EIG) MOD01430 DO 90 J=1,3 MOD01440 PLA(M,1,J)=EIG(20,J) MOD01450 90 CONTINUE MOD01460 DO 120 K=1,15 MOD01480 NTEST=NA2(K) MOD01490 IF(NTEST) 130,130,100 MOD01500 100 DO 110 J=1,3 MOD01510 XMIN(K,J)=ATM(J,NTEST) MOD01520 110 CONTINUE MOD01530 120 CONTINUE MOD01540 K=K+1 MOD01550 130 NPL=K-1 MOD01560 CALL MATRIX(XMIN,A,NPL) MOD01570 CALL EIGEN2(A,EIG) MOD01580 DO 140 J=1,3 MOD01590 PLA(M,2,J)=EIG(20,J) MOD01600 140 CONTINUE MOD01610 DO 160 K=1,15 MOD01630 NTEST=NA1(K) MOD01640 IF(NTEST.LE.0) GO TO 170 MOD01650 DO 150 J=1,3 MOD01660 XMIN(K,J)=ATM(J,NTEST) MOD01670 150 CONTINUE MOD01680 160 CONTINUE MOD01690 K=K+1 MOD01700 170 K=K-1 MOD01710 DO 190 L=1,15 MOD01720 NTEST=NA2(L) MOD01730 IF(NTEST.LE.0) GO TO 200 MOD01740 DO 180 J=1,3 MOD01750 LI=K+L MOD01760 XMIN(LI,J)=ATM(J,NTEST) MOD01770 180 CONTINUE MOD01780 190 CONTINUE MOD01790 L=L+1 MOD01800 200 NPL=K+L-1 MOD01810 CALL MATRIX(XMIN,A,NPL) MOD01820 CALL EIGEN2(A,EIG) MOD01830 DO 210 J=1,3 MOD01840 PLA(M,3,J)=EIG(20,J) MOD01850 210 CONTINUE MOD01860 220 CONTINUE MOD01870 WRITE(LUW,506) MOD01880 WRITE(LUW,500) MOD01890 WRITE(LUW,502)TITL MOD01900 DO 250 J=1,3 MOD01910 IF(J-3)600,601,600 MOD01920 601 WRITE(LUW,555) MOD01930 WRITE(LUW,556) GO TO 602 MOD01940 600 CONTINUE MOD01950 WRITE(LUW,507) J MOD01960 WRITE(LUW,556) 602 CONTINUE MOD01970 DO 240 M=1,NPLA MOD01980 DO 230 K=1,3 MOD01990 CSN=PLA(M,J,K) MOD02000 ANG(K)=57.29578* ACOS(CSN) MOD02010 230 CONTINUE MOD02020 WRITE(LUW,508) (PLA(M,J,K),K=1,3),(ANG(K),K=1,3) MOD02030 240 CONTINUE MOD02040 250 CONTINUE MOD02050 C MOD02060 C CALCULATE AND STORE TIP AND INCLINATION MOD02070 DO 300 I=1,NPLA MOD02090 NC1=NC(1,I) MOD02100 NC2=NC(2,I) MOD02110 DELX=ATM(1,NC1)-ATM(1,NC2) MOD02120 DELY=ATM(2,NC1)-ATM(2,NC2) MOD02130 DENO=SQRT(DELX**2+DELY**2) MOD02140 SUMX=(ATM(1,NC1)+ATM(1,NC2))*0.5 MOD02150 SUMY=(ATM(2,NC1)+ATM(2,NC2))*0.5 MOD02160 HVEC=SQRT(SUMX**2+SUMY**2) MOD02170 SLI(I)=(DELX*SUMX+DELY*SUMY)/DENO MOD02180 DIS(I)=(SUMX*DELY-DELX*SUMY)/DENO MOD02190 HYP(I)=HVEC MOD02200 ROT12(I)=DENO MOD02210 DELZ=ATM(3,NC1)-ATM(3,NC2) MOD02220 SV(1)=DELX MOD02230 SV(2)=DELY MOD02240 SV(3)=DELZ MOD02250 DO 260 K=1,3 MOD02260 RV(1,K)=PLA(I,1,K) MOD02270 RV(2,K)=PLA(I,2,K) MOD02280 260 CONTINUE MOD02290 SV2=SV(1)**2+SV(2)**2+SV(3)**2 MOD02300 DO 280 J=1,2 MOD02310 RDS=RV(J,1)*SV(1)+RV(J,2)*SV(2)+RV(J,3)*SV(3) MOD02320 AKO=RDS/SV2 MOD02330 CALB=AKO*SQRT(SV2) MOD02340 ALB(J)=57.29578* ACOS(CALB) MOD02350 DO 270 K=1,3 MOD02360 PV(J,K)=RV(J,K)-AKO*SV(K) MOD02370 270 CONTINUE MOD02380 PM(J)=SQRT(PV(J,1)**2+PV(J,2)**2+PV(J,3)**2) MOD02390 280 CONTINUE MOD02400 BKL(I)=ALB(2) - ALB(1) MOD02410 COPT=PV(1,1)*PV(2,1)+PV(1,2)*PV(2,2)+PV(1,3)*PV(2,3) MOD02420 COPU=COPT/(PM(1)*PM(2)) MOD02430 ANSUP=57.29578* ACOS(COPU) MOD02440 PTW(I)=-ANSUP MOD02450 C 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) MOD02460 DO 290 J=1,3 MOD02470 SINR=(PLA(I,J,1)*DELY-PLA(I,J,2)*DELX)/DENO MOD02480 PHI(I,J,1)=57.29578* ASIN(SINR) MOD02490 SINT=(PLA(I,J,1)*DELX+PLA(I,J,2)*DELY)/DENO MOD02500 PHI(I,J,2)=-57.29578* ASIN(SINT) MOD02510 290 CONTINUE MOD02520 300 CONTINUE MOD02530 C MOD02540 C REPLACE TIL(I) AS JUST CALCULATED BY DIFFERENCE IN BUCKLE MOD02550 NST=NPLA-1 MOD02570 DO 610 I=1,NST MOD02580 I1 = I+1 MOD02590 TIL(I)=BKL(I1)-BKL(I) MOD02600 610 CONTINUE MOD02610 C MOD02620 C CALCULATE AND STORE ROLL AND TILT MOD02630 NST=NPLA-1 MOD02650 DO 330 I=1,NST MOD02660 I1=I+1 MOD02670 C NC2 is complementary to NC1 in base pair C, and ND2 to ND1 in base pair D. NC1=NC(1,I) MOD02680 NC2=NC(2,I) MOD02690 ND1=NC(1,I1) MOD02700 ND2=NC(2,I1) MOD02710 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. Tilt then is simply the angle between the two C normal vectors, projected onto the XZ plane. Roll is the angle C between the same two vectors, projected onto the YZ plane. C Roll: THE(I,J,1)=57.29578* ATAN2(B1R*C2-B2R*C1, B1R*B2R+C1*C2) C Tilt: THE(I,J,2)=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 MOD02860 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. MOD02870 BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. MOD02880 310 CONTINUE MOD02890 AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) MOD02900 ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) MOD02910 SLJ(I)=-ADB/AMAG MOD02920 SLJ(I1)=0.0 MOD02930 320 CONTINUE MOD02960 330 CONTINUE MOD02970 C MOD02980 C PRINT OUT ROLL AND TILT ANGLES MOD02990 WRITE(LUW,506) MOD03010 WRITE(LUW,500) MOD03020 WRITE(LUW,502)TITL MOD03030 DO 335 L=1,11 MOD03040 SSQ(L)=0. MOD03050 335 SIG(L)=0. MOD03060 N1=0 MOD03070 DO 420 J=2,3 MOD03080 IF(J-2)340,340,350 MOD03090 340 WRITE(LUW,509) MOD03100 WRITE(LUW,516) MOD03110 WRITE(LUW,510) MOD03120 WRITE(LUW,516) MOD03130 GO TO 360 MOD03140 350 WRITE(LUW,511) MOD03150 WRITE(LUW,516) MOD03160 WRITE(LUW,512) MOD03170 WRITE(LUW,516) MOD03180 360 DO 410 M=1,NPLA MOD03190 IF(J-2)370,370,380 MOD03200 370 K=J-1 MOD03210 WRITE(LUW,513)PHI(M,K,1),PHI(M,K,2),THE(M,K,1),THE(M,K,2), MOD03220 *PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2) MOD03230 GO TO 400 MOD03240 380 N1=N1+1 MOD03250 SIG(1) = SIG(1) + PHI(M,J,1) MOD03260 SSQ(1) = SSQ(1) + PHI(M,J,1)*PHI(M,J,1) MOD03270 SIG(2) = SIG(2) + PHI(M,J,2) MOD03280 SSQ(2) = SSQ(2) + PHI(M,J,2)*PHI(M,J,2) MOD03290 SIG(6) = SIG(6) + PTW(M) MOD03300 SSQ(6) = SSQ(6) + PTW(M)*PTW(M) MOD03310 SIG(7) = SIG(7) + BKL(M) MOD03320 SSQ(7) = SSQ(7) + BKL(M)*BKL(M) MOD03330 SIG(9) = SIG(9) + DIS(M) MOD03340 SSQ(9) = SSQ(9) + DIS(M)*DIS(M) MOD03350 SIG(10) = SIG(10) + SLI(M) MOD03360 SSQ(10) = SSQ(10) + SLI(M)*SLI(M) MOD03370 SIG(11) = SIG(11) + ROT12(M) MOD03380 SSQ(11) = SSQ(11) + ROT12(M)*ROT12(M) MOD03390 IF (M.NE.NPLA) GO TO 390 MOD03400 WRITE(LUW,521)PHI(M,J,1),PHI(M,J,2),PTW(M),BKL(M), MOD03410 * DIS(M),SLI(M),ROT12(M) MOD03420 GO TO 400 MOD03430 390 SIG(3) = SIG(3) + THE(M,J,1) MOD03440 SSQ(3) = SSQ(3) + THE(M,J,1)*THE(M,J,1) MOD03450 SIG(4) = SIG(4) + THE(M,J,2) MOD03460 SSQ(4) = SSQ(4) + THE(M,J,2)*THE(M,J,2) MOD03470 SIG(5) = SIG(5) + TIL(M) MOD03480 SSQ(5) = SSQ(5) + TIL(M)*TIL(M) MOD03490 SIG(8) = SIG(8) + SLJ(M) MOD03500 SSQ(8) = SSQ(8) + SLJ(M)*SLJ(M) MOD03510 WRITE(LUW,514)PHI(M,J,1),PHI(M,J,2),THE(M,J,1),THE(M,J,2),TIL(M),PMOD03520 *TW(M),BKL(M),SLJ(M),DIS(M),SLI(M),ROT12(M) MOD03530 400 CONTINUE MOD03540 410 CONTINUE MOD03550 420 CONTINUE MOD03560 WRITE(LUW,522) MOD03570 DO 440 I=1,11 MOD03580 NN = N1 MOD03590 IF (I.EQ.3.OR.I.EQ.4.OR.I.EQ.8) NN=N1-1 MOD03600 AV(I)=SIG(I)/NN MOD03610 SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) MOD03620 IF (SDZ.LE.0.0001) SDZ=0. MOD03630 SD(I) = SQRT(SDZ) MOD03640 440 CONTINUE MOD03650 WRITE (LUW,523) (AV(I),I=1,11) MOD03660 WRITE(LUW,516) MOD03670 WRITE (LUW,524) (SD(I),I=1,11) MOD03680 WRITE(LUW,516) MOD03690 WRITE(LUW,517) MOD03700 WRITE(LUW,518) MOD03710 WRITE(LUW,519) MOD03720 WRITE(LUW,520) MOD03730 RETURN MOD03740 END MOD03750 C MOD03760 C------------------------- MOD03770 C SUBROUTINE CHSIGN MOD03780 C------------------------- MOD03790 SUBROUTINE CHSIGN (ICHSGN) MOD03810 CHARACTER * 8 ABUF MOD03820 CHARACTER * 4 MH,NAME MOD03830 CHARACTER * 1 IR,TITL MOD03840 CHARACTER * 2 KRES1,KRES2 MOD03850 CHARACTER * 3 ANAM1,ANAM2 MOD03860 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD03870 X ,L15 MOD03880 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000),IDUM MOD03890 I=0 MOD03900 10 CONTINUE MOD03910 I=I+1 MOD03920 IF (I.EQ.NATOM) GO TO 100 MOD03930 J=I MOD03940 KRES1=NAME(1,I)(2:3) MOD03950 ANAM1=NAME(1,I)(4:4)//NAME(2,I)(1:2) MOD03960 20 CONTINUE MOD03970 J=J+1 MOD03980 IF (J.GT.NATOM) GO TO 10 MOD03990 KRES2=NAME(1,J)(2:3) MOD04000 IF (KRES1.EQ.KRES2) GO TO 20 MOD04010 ANAM2=NAME(1,J)(4:4)//NAME(2,J)(1:2) MOD04020 IF (ANAM1.NE.ANAM2) GO TO 20 MOD04030 IF (ATM(3,I).EQ.ATM(3,J)) GO TO 20 MOD04040 IF (ATM(3,I).GT.ATM(3,J)) RETURN MOD04050 ICHSGN=1 MOD04060 RETURN MOD04070 100 WRITE (LUW,500) MOD04080 500 FORMAT (//,' ***** NO MATCHING ATOMS BETWEEN RESIDUES *****',//) MOD04090 RETURN MOD04100 END MOD04110 C MOD04120 C------------------------- MOD04130 C SUBROUTINE CYLIN MOD04140 C------------------------- MOD04150 SUBROUTINE CYLIN MOD04170 CHARACTER * 4 MH,NAME MOD04180 CHARACTER * 7 NNAME(20) MOD04190 CHARACTER * 3 PBL,C1P,FFC,LN1,LN9,N1N9,NTP,O4P,O1P MOD04200 CHARACTER * 1 IR,TITL,L1,L2,L3,NAT,CC,TT,DOT,CHECK MOD04210 CHARACTER * 2 IRES MOD04220 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD04230 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),NAT(1000,5),NPLA MOD04240 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,20) MOD04250 DIMENSION PS(2,20,5),CS(2,20,5),DQHP(2,20,4),STR(2,20,11),NK(4), MOD04260 1 D1(3),D2(3),HOL(20),PDIT(20,20),AM(3),BM(3),NA(3),NB(3), MOD04270 2 SIG1(7),SSQ1(7),AV1(7),SD1(7),SIG2(11),SSQ2(11),AV2(11),SD2(11) MOD04280 3 ,ND(2,20),ALAMD1(20),ALAMD2(20),O4S(2,21,5),O4DIT(21,21) MOD04290 DATA PBL/'P '/,C1P/'C1'''/,LN1/'N1 '/,LN9/'N9 '/ MOD04300 DATA CC/'C'/,TT/'T'/,DOT/'.'/,O4P/'O4'''/,O1P/'O1'''/ MOD04310 500 FORMAT(1X,' CYLINDRICAL PARAMETERS, NEWHEL91') MOD04330 501 FORMAT(/,I5,' ATOMS AND ',I5,' BASE PAIRS') MOD04340 502 FORMAT(/,1X,72A1,/) MOD04350 503 FORMAT(2I5) MOD04360 504 FORMAT(/,' PHOSPHATE BACKBONE TABLE, 5" TO 3" DIRECTION IN EACH STMOD04370 *RAND',/) MOD04380 505 FORMAT(' R PHI Z D Q H PI') MOD04390 506 FORMAT(/,' STRAND ',I4,/) MOD04400 507 FORMAT(7F8.2) MOD04410 508 FORMAT(20I5) MOD04420 509 FORMAT(/,2X,' ROTATION AND RISE TABLE, 5" TO 3" DIRECTION',/) MOD04430 510 FORMAT(' S5" S3" Q(C1") T(C1") TWIST H(C1") RISE SLIDE MOD04440 *X DSP Y DSP D(C1")') MOD04450 511 FORMAT(/,' STRAND ',I4,/) MOD04460 512 FORMAT(5F7.2,2F7.3,4F7.2) MOD04470 513 FORMAT(' Twist, Rise, D(C1") and Q(C1") are magnitudes. All other * quantities have') 514 FORMAT(' opposite signs for ascending and descending strands.') 515 FORMAT(1H1) MOD04520 516 FORMAT(' PHOSPHORUS-PHOSPHORUS DISTANCES LESS 5.8 A',/) MOD04530 536 FORMAT(' SUGAR O4"--O4" DISTANCES LESS 2.8 A',/) MOD04540 517 FORMAT(' STRAND 1 DOWN, STRAND 2 ACROSS, 5" TO 3" DIRECTION') MOD04550 555 FORMAT(1H ) MOD04560 518 FORMAT(1X,20F6.2) MOD04570 519 FORMAT(3F8.2,4(5X,'-',2X)) MOD04580 520 FORMAT(7(2X,'______'),/) MOD04590 521 FORMAT(7F8.2,' AV',/) MOD04600 522 FORMAT(7F8.2,' SD',/) MOD04610 523 FORMAT(F7.2,7(4X,'-',2X),3F7.2) MOD04620 524 FORMAT(11(2X,'_____'),/) MOD04630 525 FORMAT(11F7.2,' AV') MOD04640 526 FORMAT(11F7.2,' SD',/) MOD04650 527 FORMAT(4X,'-',2X,4F7.2,2F7.3,4F7.2) MOD04660 528 FORMAT (//,2X,'RESIDUE LAMBDA(1) LAMBDA(2)',/) MOD04670 529 FORMAT (2X,A7,2F10.2) MOD04680 530 FORMAT (/,2X,'ANGLES BETWEEN GLYCOSIDIC BONDS AND C1'' - C1'' BASEMOD04690 X - PAIR VECTORS') MOD04700 RAD=0.0174533 MOD04710 WRITE(LUW,515) MOD04720 WRITE (LUW,500) MOD04730 WRITE(LUW,502)TITL MOD04740 WRITE(LUW,501) NATM,NPLA MOD04750 REWIND L12 MOD04760 2020 FORMAT(3F10.5,11X,A3,5A1) MOD04770 DO 10 I=1,NATM MOD04780 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),(NAT(I,J),J=1,5) MOD04790 C MOD04800 NPHO=NPLA-1 MOD04810 DO 40 I=1,2 MOD04840 DO 30 J=1,NPHO MOD04850 DO 20 K=1,4 MOD04860 DQHP(I,J,K)=0.0 MOD04870 20 CONTINUE MOD04880 30 CONTINUE MOD04890 40 CONTINUE MOD04900 C MOD04910 DO 70 I=1,2 MOD04920 DO 60 J=1,NPLA MOD04930 DO 50 K=1,11 MOD04940 STR(I,J,K)=0.0 MOD04950 50 CONTINUE MOD04960 60 CONTINUE MOD04970 70 CONTINUE MOD04980 IF (INPCYL.NE.0) GO TO 110 MOD05000 NHALF=NATM/2 MOD05010 DO 100 KK=1,2 MOD05020 J=0 MOD05030 L=0 MOD05040 N=0 MOD05050 LO=0 MOD05060 DO 100 M=1,NHALF MOD05070 I=(KK-1)*NHALF+M MOD05080 N1N9=LN9 MOD05090 CHECK=NTP(I)(1:1) MOD05100 IF (CHECK.EQ.CC.OR.CHECK.EQ.TT) N1N9=LN1 MOD05110 L1=NAT(I,1) MOD05120 L2=NAT(I,2) MOD05130 L3=NAT(I,3) MOD05140 FFC=L1//L2//L3 MOD05150 80 IF (FFC.EQ.PBL) GO TO 90 MOD05160 IF (FFC.EQ.O4P) GO TO 701 MOD05170 IF (FFC.EQ.O4P) GO TO 701 MOD05180 702 IF (FFC.NE.C1P) GO TO 95 MOD05190 L=L+1 MOD05200 NC(KK,L)=I MOD05210 GO TO 100 MOD05220 90 J=J+1 MOD05230 NP(KK,J)=I MOD05240 GO TO 100 MOD05250 701 LO=LO+1 MOD05260 NO(KK,LO)=I MOD05270 GO TO 702 MOD05280 95 IF (FFC.NE.N1N9) GO TO 100 MOD05290 N=N+1 MOD05300 ND(KK,N)=I MOD05310 100 CONTINUE MOD05320 110 DO 140 I=1,2 MOD05340 DO 130 J=1,NPHO MOD05350 NPH=NP(I,J) MOD05360 DO 120 K=1,3 MOD05370 PS(I,J,K)=ATM(K,NPH) MOD05380 120 CONTINUE MOD05390 X=PS(I,J,1) MOD05400 Y=PS(I,J,2) MOD05410 R=SQRT(X**2+Y**2) MOD05420 PHI=57.29578*ATAN2(Y,X) MOD05430 PS(I,J,4)=R MOD05440 IF (PHI.LT.0.) PHI=360.+PHI MOD05450 PS(I,J,5)=PHI MOD05460 130 CONTINUE MOD05470 140 CONTINUE MOD05480 DO 141 I=1,2 MOD05500 DO 131 J=1,NPLA MOD05510 NO4=NO(I,J) MOD05520 DO 121 K=1,3 MOD05530 O4S(I,J,K)=ATM(K,NO4) MOD05540 121 CONTINUE MOD05550 131 CONTINUE MOD05560 141 CONTINUE MOD05570 DO 160 I=1,2 MOD05590 DO 150 J=1,NPLA MOD05600 NCA=NC(I,J) MOD05610 CS(I,J,1)=ATM(1,NCA) MOD05620 CS(I,J,2)=ATM(2,NCA) MOD05630 CS(I,J,3)=ATM(3,NCA) MOD05640 X=CS(I,J,1) MOD05650 Y=CS(I,J,2) MOD05660 R=SQRT(X**2+Y**2) MOD05670 PHI=57.29578*ATAN2(Y,X) MOD05680 CS(I,J,4)=R MOD05690 CS(I,J,5)=PHI MOD05700 150 CONTINUE MOD05710 160 CONTINUE MOD05720 NPS=NPHO-1 MOD05740 DO 180 I=1,2 MOD05750 DO 170 J=1,NPS MOD05760 J1=J+1 MOD05770 DX=PS(I,J1,1)-PS(I,J,1) MOD05780 DY=PS(I,J1,2)-PS(I,J,2) MOD05790 DZ=PS(I,J1,3)-PS(I,J,3) MOD05800 D=SQRT(DX**2+DY**2+DZ**2) MOD05810 Q=SQRT(DX**2+DY**2) MOD05820 H=DZ MOD05830 SINP=H/D MOD05840 PIT=57.29578* ASIN(SINP) MOD05850 DQHP(I,J,1)=D MOD05860 DQHP(I,J,2)=Q MOD05870 DQHP(I,J,3)=H MOD05880 DQHP(I,J,4)=PIT MOD05890 170 CONTINUE MOD05900 180 CONTINUE MOD05910 WRITE(LUW,504) MOD05930 WRITE(LUW,505) MOD05940 DO 190 I=1,7 MOD05950 SSQ1(I)=0. MOD05960 190 SIG1(I)=0. MOD05970 N1=0 MOD05980 DO 230 I=1,2 MOD05990 WRITE(LUW,506)I MOD06000 DO 220 J=1,NPHO MOD06010 N1=N1+1 MOD06020 SIG1(1) = SIG1(1) + PS(I,J,4) MOD06030 SSQ1(1) = SSQ1(1) + PS(I,J,4)*PS(I,J,4) MOD06040 SIG1(2) = SIG1(2) + PS(I,J,5) MOD06050 SSQ1(2) = SSQ1(2) + PS(I,J,5)*PS(I,J,5) MOD06060 SIG1(3) = SIG1(3) + PS(I,J,3) MOD06070 SSQ1(3) = SSQ1(3) + PS(I,J,3)*PS(I,J,3) MOD06080 IF (J.NE.NPHO) GO TO 200 MOD06090 WRITE(LUW,519) PS(I,J,4),PS(I,J,5),PS(I,J,3) MOD06100 GO TO 220 MOD06110 200 DO 210 K=1,4 MOD06120 SIG1(3+K) = SIG1(3+K) + DQHP(I,J,K) MOD06130 210 SSQ1(3+K) = SSQ1(3+K) + DQHP(I,J,K)*DQHP(I,J,K) MOD06140 WRITE(LUW,507)PS(I,J,4),PS(I,J,5),PS(I,J,3),(DQHP(I,J,K),K=1,4) MOD06150 220 CONTINUE MOD06160 230 CONTINUE MOD06170 DO 240 I=1,7 MOD06180 NN = N1 MOD06190 IF (I.GT.3) NN=N1-2 MOD06200 AV1(I)=SIG1(I)/NN MOD06210 SDZ = (NN*SSQ1(I) - SIG1(I)*SIG1(I))/(NN*(NN-1)) MOD06220 IF (SDZ.LE.0.0001) SDZ=0. MOD06230 SD1(I) = SQRT(SDZ) MOD06240 240 CONTINUE MOD06250 WRITE (LUW,520) MOD06260 WRITE (LUW,521) (AV1(I),I=1,7) MOD06270 WRITE (LUW,522) (SD1(I),I=1,7) MOD06280 DO 390 I=1,2 MOD06290 ANUL=0.000 MOD06300 STR(I,1,1)=ANUL MOD06310 STR(I,1,3)=ANUL MOD06320 DO 250 L=2,7 MOD06330 STR(I,NPLA,K)=ANUL MOD06340 250 CONTINUE MOD06350 DO 380 J=1,NPHO MOD06370 J1=J+1 MOD06380 IJ=NPLA-J+1 MOD06390 IJ1=NPLA-J MOD06400 C MOD06410 C CALCULATE S5' MOD06420 DIF=CS(I,J1,5)-PS(I,J,5) MOD06440 260 IF(DIF-180.) 280,280,270 MOD06450 270 DIF=DIF-360. MOD06460 GO TO 260 MOD06470 280 IF(DIF+180.) 290,290,300 MOD06480 290 DIF=DIF+360. MOD06490 GO TO 280 MOD06500 300 STR(I,J1,1)=DIF MOD06510 C MOD06520 C CALCULATE S3' MOD06530 DIF=PS(I,J,5)-CS(I,J,5) MOD06550 310 IF(DIF-180.) 330,330,320 MOD06560 320 DIF=DIF-360. MOD06570 GO TO 310 MOD06580 330 IF(DIF+180.) 340,340,350 MOD06590 340 DIF=DIF+360. MOD06600 GO TO 330 MOD06610 350 STR(I,J,2)=DIF MOD06620 C MOD06630 C CALCULATE Q(C1") AND T MOD06640 DX=CS(I,J,1)-CS(I,J1,1) MOD06660 DY=CS(I,J,2)-CS(I,J1,2) MOD06670 STR(I,J,3)=SQRT(DX**2+DY**2) MOD06680 370 STR(I,J,4)=STR(I,J1,1)+STR(I,J,2) MOD06690 C MOD06700 C CALCULATE TGLOBAL MOD06710 DX1=CS(1,J,1)-CS(2,IJ,1) MOD06730 DX2=CS(1,J1,1)-CS(2,IJ1,1) MOD06740 DY1=CS(1,J,2)-CS(2,IJ,2) MOD06750 DY2=CS(1,J1,2)-CS(2,IJ1,2) MOD06760 R1=SQRT(DX1**2+DY1**2) MOD06770 R2=SQRT(DX2**2+DY2**2) MOD06780 R12=DX1*DX2+DY1*DY2 MOD06790 COA=R12/(R1*R2) MOD06800 STR(I,J,5)=57.29578* ACOS(COA) MOD06810 C MOD06820 C CALCULATE H AND HGLOBAL MOD06830 STR(I,J,6)=CS(I,J1,3)-CS(I,J,3) MOD06850 STR(I,J,7)=ABS(CS(1,J1,3)-CS(1,J,3)+CS(2,IJ1,3)-CS(2,IJ,3))/2. MOD06860 380 CONTINUE MOD06880 390 CONTINUE MOD06890 C MOD06900 C PRINT ANGLE TABLE MOD06910 DO 420 K=5,7,2 MOD06930 DO 400 J=1,NPHO MOD06940 IJ=NPHO-J+1 MOD06950 HOL(J)=STR(2,IJ,K) MOD06960 400 CONTINUE MOD06970 DO 410 J=1,NPHO MOD06980 STR(2,J,K)=HOL(J) MOD06990 410 CONTINUE MOD07000 420 CONTINUE MOD07010 WRITE(LUW,515) MOD07020 WRITE(LUW,500) MOD07030 WRITE(LUW,502)TITL MOD07040 WRITE(LUW,509) MOD07050 WRITE(LUW,510) MOD07060 DO 430 I=1,NPLA MOD07070 N1=NC(1,I) MOD07080 NK(2)=N1 MOD07090 NK(1)=ND(1,I) MOD07100 I2=NPLA-I+1 MOD07110 N2=NC(2,I2) MOD07120 NK(3)=N2 MOD07130 NK(4)=ND(2,I2) MOD07140 DO 425 K=1,3 MOD07150 NA(K)=NK(K) MOD07160 NB(K)=NK(4-K+1) MOD07170 425 CONTINUE MOD07180 CALL ANGLE (NA,TE,ATM) MOD07190 ALAMD1(I)=TE/RAD MOD07200 CALL ANGLE (NB,TE,ATM) MOD07210 ALAMD2(I)=TE/RAD MOD07220 NNAME(I)=NTP(NK(1))//DOT//NTP(NK(3)) MOD07230 DX=ATM(1,N1)-ATM(1,N2) MOD07240 DY=ATM(2,N1)-ATM(2,N2) MOD07250 SX=(ATM(1,N1)+ATM(1,N2))/2. MOD07260 SY=(ATM(2,N1)+ATM(2,N2))/2. MOD07270 HM=SQRT(SX**2+SY**2) MOD07280 RM=SQRT(DX**2+DY**2) MOD07290 SL=(SX*DX+SY*DY)/RM MOD07300 DS=(SX*DY-SY*DX)/RM MOD07310 STR(1,I,10)=SL MOD07320 STR(1,I,9)=DS MOD07330 STR(1,I,11)=RM MOD07340 C MOD07350 C REPLACE C1/C1 BY D(C1") MOD07360 DCSQ=STR(1,I,3)**2+STR(1,I,6)**2 MOD07380 STR(1,I,11)=SQRT(DCSQ) MOD07390 DCSQ=STR(2,I,3)**2+STR(2,I,6)**2 MOD07400 STR(2,I,11)=SQRT(DCSQ) MOD07410 430 CONTINUE MOD07440 NST=NPLA-1 MOD07460 DO 450 I=1,NST MOD07470 I1=I+1 MOD07480 I2=NPLA-I+1 MOD07490 I3=NPLA-I MOD07500 NC1=NC(1,I) MOD07510 NC2=NC(2,I2) MOD07520 ND1=NC(1,I1) MOD07530 ND2=NC(2,I3) MOD07540 DO 440 K=1,3 MOD07550 AM(K)=(ATM(K,NC1)-ATM(K,NC2)+ATM(K,ND1)-ATM(K,ND2))/2. MOD07560 BM(K)=(ATM(K,NC1)+ATM(K,NC2)-ATM(K,ND1)-ATM(K,ND2))/2. MOD07570 440 CONTINUE MOD07580 AMAG=SQRT(AM(1)**2+AM(2)**2+AM(3)**2) MOD07590 ADB=AM(1)*BM(1)+AM(2)*BM(2)+AM(3)*BM(3) MOD07600 STR(1,I,8)=-ADB/AMAG MOD07610 STR(1,I1,8)=0.00 MOD07620 450 CONTINUE MOD07630 DO 460 I=1,11 MOD07640 SSQ2(I)=0. MOD07650 460 SIG2(I)=0. MOD07660 N1=0 MOD07670 DO 620 J=1,NPLA MOD07690 N1=N1+1 MOD07700 DO 470 K=9,11 MOD07710 SIG2(K) = SIG2(K) + STR(1,J,K) MOD07720 470 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) MOD07730 KK=2 MOD07740 IF (J.GT.1) GO TO 480 MOD07750 KK=4 MOD07760 SIG2(2) = SIG2(2) + STR(1,J,2) MOD07770 SSQ2(2) = SSQ2(2) + STR(1,J,2)*STR(1,J,2) MOD07780 GO TO 600 MOD07790 480 SIG2(1) = SIG2(1) + STR(1,J,1) MOD07800 SSQ2(1) = SSQ2(1) + STR(1,J,1)*STR(1,J,1) MOD07810 IF (J.EQ.NPLA) GO TO 620 MOD07820 600 DO 610 K=KK,8 MOD07830 SIG2(K) = SIG2(K) + STR(1,J,K) MOD07840 610 SSQ2(K) = SSQ2(K) + STR(1,J,K)*STR(1,J,K) MOD07850 620 CONTINUE MOD07860 DO 630 I=1,11 MOD07870 NN = N1 MOD07880 IF (I.LT.3.OR.(I.GT.3.AND.I.LT.9)) NN=N1-1 MOD07890 IF (I.EQ.3) NN=N1-2 MOD07900 AV2(I)=SIG2(I)/NN MOD07910 SDZ = (NN*SSQ2(I) - SIG2(I)*SIG2(I))/(NN*(NN-1)) MOD07920 IF (SDZ.LE.0.0001) SDZ=0. MOD07930 SD2(I) = SQRT(SDZ) MOD07940 630 CONTINUE MOD07950 DO 650 I=1,2 MOD07960 WRITE(LUW,511)I MOD07970 DO 640 J=1,NPLA MOD07980 IF (I.NE.1.OR.(J.NE.NPLA.AND.J.NE.1)) WRITE(LUW,512) MOD07990 * (STR(I,J,K),K=1,11) MOD08000 IF (I.EQ.1.AND.J.EQ.NPLA) WRITE (LUW,523) STR(I,J,1), MOD08010 * (STR(I,J,K),K=9,11) MOD08020 IF (I.EQ.1.AND.J.EQ.1) WRITE (LUW,527) STR(I,J,2), MOD08030 * (STR(I,J,K),K=3,11) MOD08040 640 CONTINUE MOD08050 IF (I.GT.1) GO TO 650 MOD08060 WRITE(LUW,524) MOD08070 WRITE (LUW,525) (AV2(K),K=1,11) MOD08080 WRITE(LUW,508) MOD08090 WRITE (LUW,526) (SD2(K),K=1,11) MOD08100 650 CONTINUE MOD08110 WRITE(LUW,555) MOD08120 WRITE(LUW,513) MOD08130 WRITE(LUW,514) MOD08140 WRITE(LUW,515) MOD08150 WRITE(LUW,500) MOD08160 WRITE(LUW,502)TITL MOD08170 WRITE(LUW,530) MOD08180 WRITE(LUW,528) MOD08190 WRITE (LUW,529) (NNAME(I),ALAMD1(I),ALAMD2(I),I=1,NPLA) MOD08200 C MOD08210 C CALCULATE AND PRINT ALL P-P DISTANCES BETWEEN STRANDS MOD08220 WRITE(LUW,515) MOD08240 WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(LUW,500) MOD08250 WRITE(7,500) MOD08260 WRITE(LUW,502)TITL MOD08270 WRITE(7,502)TITL MOD08280 DO 670 I=1,NPHO MOD08290 DO 670 J=1,NPHO MOD08300 SUMMA=0.0 MOD08310 DO 660 K=1,3 MOD08320 660 SUMMA=SUMMA+(PS(1,I,K)-PS(2,J,K))**2 MOD08330 PDIT(I,J)=SQRT(SUMMA)-5.8 MOD08340 670 CONTINUE MOD08350 WRITE(LUW,516) MOD08360 WRITE(7,516) MOD08370 WRITE(LUW,517) MOD08380 WRITE(7,517) MOD08390 DO 680 I=1,NPHO MOD08400 WRITE(LUW,555) MOD08410 WRITE(7,555) MOD08420 WRITE(LUW,518)(PDIT(I,J),J=1,NPHO) MOD08430 WRITE(7,518)(PDIT(I,J),J=1,NPHO) MOD08440 680 CONTINUE MOD08450 C MOD08460 C CALCULATE AND PRINT ALL O4"-O4" DISTANCES BETWEEN STRANDS MOD08470 WRITE(LUW,515) MOD08490 WRITE(7,515) MOD08500 WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(7,555) WRITE(LUW,500) MOD08510 WRITE(7,500) MOD08520 WRITE(LUW,502) TITL MOD08530 WRITE(7,502) TITL MOD08540 NO4=NPHO+1 MOD08550 DO 770 I=1,NO4 MOD08560 DO 770 J=1,NO4 MOD08570 SUMMO=0.0 MOD08580 DO 760 K=1,3 MOD08590 760 SUMMO=SUMMO+(O4S(1,I,K)-O4S(2,J,K))**2 MOD08600 O4DIT(I,J)=SQRT(SUMMO)-2.8 MOD08610 770 CONTINUE MOD08620 WRITE(LUW,536) MOD08630 WRITE(7,536) MOD08640 WRITE(LUW,517) MOD08650 WRITE(7,517) MOD08660 DO 780 I=1,NO4 MOD08670 WRITE(LUW,555) MOD08680 WRITE(7,555) MOD08690 WRITE(LUW,518)(O4DIT(I,J),J=1,NO4) MOD08700 WRITE(7,518)(O4DIT(I,J),J=1,NO4) MOD08710 780 CONTINUE MOD08720 RETURN MOD08740 END MOD08750 C MOD08760 C------------------------- MOD08770 C SUBROUTINE DEFROT MOD08780 C------------------------- MOD08790 SUBROUTINE DEFROT(VECTOR,ANGLE,ROTOR) MOD08810 C DEFINE A GENERAL ROTATION MATRIX MOD08830 DIMENSION VECTOR(3),DIRCOS(3),ROTOR(3,3) MOD08850 DO 10 I=1,3 MOD08860 DO 10 J=1,3 MOD08870 10 ROTOR(I,J)=0.0 MOD08880 C=COS(ANGLE) MOD08890 S=SIN(ANGLE) MOD08900 VMAG=SQRT(DOTP(VECTOR,VECTOR)) MOD08910 DO 20 I=1,3 MOD08920 20 DIRCOS(I)=VECTOR(I)/VMAG MOD08930 ROTOR(1,2)=DIRCOS(3)*S MOD08940 ROTOR(2,1)=-ROTOR(1,2) MOD08950 ROTOR(3,1)=DIRCOS(2)*S MOD08960 ROTOR(1,3)=-ROTOR(3,1) MOD08970 ROTOR(2,3)=DIRCOS(1)*S MOD08980 ROTOR(3,2)=-ROTOR(2,3) MOD08990 DO 30 I=1,3 MOD09000 DO 30 J=1,3 MOD09010 30 ROTOR(I,J)=ROTOR(I,J)+DIRCOS(I)*DIRCOS(J)*(1.0-C) MOD09020 DO 40 I=1,3 MOD09030 40 ROTOR(I,I)=ROTOR(I,I)+C MOD09040 RETURN MOD09050 END MOD09060 C MOD09070 C------------------------- MOD09080 C FUNCTION DOTP MOD09090 C------------------------- MOD09100 FUNCTION DOTP(X,Y) MOD09120 C TAKE THE DOT PRODUCT OF TWO CARTESIAN VECTORS MOD09140 DIMENSION X(3),Y(3) MOD09160 DOTP=0.0 MOD09170 DO 10 I=1,3 MOD09180 DOTP=DOTP+X(I)*Y(I) MOD09190 10 CONTINUE MOD09200 RETURN MOD09210 END MOD09220 C MOD09230 C------------------------- MOD09240 C SUBROUTINE EIGEN1 MOD09250 C------------------------- MOD09260 SUBROUTINE EIGEN1(A,R,N,MV) MOD09280 C COMPUTE EIGENVALUES AND EIGENVECTORS OF A REAL SYMMETRIC MATRIX MOD09300 DIMENSION A(1),R(1) MOD09320 RANGE=1.0E-6 MOD09330 IF(MV-1) 10,25,10 MOD09340 10 IQ=-N MOD09350 DO 20 J=1,N MOD09360 IQ=IQ+N MOD09370 DO 20 I=1,N MOD09380 IJ=IQ+I MOD09390 R(IJ)=0.0 MOD09400 IF(I-J) 20,15,20 MOD09410 15 R(IJ)=1.0 MOD09420 20 CONTINUE MOD09430 25 ANORM=0.0 MOD09440 DO 35 I=1,N MOD09450 DO 35 J=I,N MOD09460 IF(I-J) 30,35,30 MOD09470 30 IA=I+(J*J-J)/2 MOD09480 ANORM=ANORM+A(IA)*A(IA) MOD09490 35 CONTINUE MOD09500 IF(ANORM) 165,165,40 MOD09510 40 ANORM=1.414*SQRT(ANORM) MOD09520 ANRMX=ANORM*RANGE/FLOAT(N) MOD09530 IND=0 MOD09540 THR=ANORM MOD09550 45 THR=THR/FLOAT(N) MOD09560 50 L=1 MOD09570 55 M=L+1 MOD09580 60 MQ=(M*M-M)/2 MOD09590 LQ=(L*L-L)/2 MOD09600 LM=L+MQ MOD09610 62 IF(ABS(A(LM))-THR) 130,65,65 MOD09620 65 IND=1 MOD09630 LL=L+LQ MOD09640 MM=M+MQ MOD09650 X=0.5*(A(LL)-A(MM)) MOD09660 68 Y=-A(LM)/SQRT(A(LM)*A(LM)+X*X) MOD09670 IF(X) 70,75,75 MOD09680 70 Y=-Y MOD09690 75 SINX=Y/SQRT(2.0*(1.0+(SQRT(1.0-Y*Y)))) MOD09700 SINX2=SINX*SINX MOD09710 78 COSX=SQRT(1.0-SINX2) MOD09720 COSX2=COSX*COSX MOD09730 SINCS=SINX*COSX MOD09740 ILQ=N*(L-1) MOD09750 IMQ=N*(M-1) MOD09760 DO 125 I=1,N MOD09770 IQ=(I*I-I)/2 MOD09780 IF(I-L) 80,115,80 MOD09790 80 IF(I-M) 85,115,90 MOD09800 85 IM=I+MQ MOD09810 GO TO 95 MOD09820 90 IM=M+IQ MOD09830 95 IF(I-L) 100,105,105 MOD09840 100 IL=I+LQ MOD09850 GO TO 110 MOD09860 105 IL=L+IQ MOD09870 110 X=A(IL)*COSX-A(IM)*SINX MOD09880 A(IM)=A(IL)*SINX+A(IM)*COSX MOD09890 A(IL)=X MOD09900 115 IF(MV-1) 120,125,120 MOD09910 120 ILR=ILQ+I MOD09920 IMR=IMQ+I MOD09930 X=R(ILR)*COSX-R(IMR)*SINX MOD09940 R(IMR)=R(ILR)*SINX+R(IMR)*COSX MOD09950 R(ILR)=X MOD09960 125 CONTINUE MOD09970 X=2.0*A(LM)*SINCS MOD09980 Y=A(LL)*COSX2+A(MM)*SINX2-X MOD09990 X=A(LL)*SINX2+A(MM)*COSX2+X MOD10000 A(LM)=(A(LL)-A(MM))*SINCS+A(LM)*(COSX2-SINX2) MOD10010 A(LL)=Y MOD10020 A(MM)=X MOD10030 130 IF(M-N) 135,140,135 MOD10040 135 M=M+1 MOD10050 GO TO 60 MOD10060 140 IF(L-(N-1)) 145,150,145 MOD10070 145 L=L+1 MOD10080 GO TO 55 MOD10090 150 IF(IND-1) 160,155,160 MOD10100 155 IND=0 MOD10110 GO TO 50 MOD10120 160 IF(THR-ANRMX) 165,165,45 MOD10130 165 IQ=-N MOD10140 DO 185 I=1,N MOD10150 IQ=IQ+N MOD10160 LL=I+(I*I-I)/2 MOD10170 JQ=N*(I-2) MOD10180 DO 185 J=I,N MOD10190 JQ=JQ+N MOD10200 MM=J+(J*J-J)/2 MOD10210 IF(A(LL)-A(MM)) 170,185,185 MOD10220 170 X=A(LL) MOD10230 A(LL)=A(MM) MOD10240 A(MM)=X MOD10250 IF(MV-1) 175,185,175 MOD10260 175 DO 180 K=1,N MOD10270 ILR=IQ+K MOD10280 IMR=JQ+K MOD10290 X=R(ILR) MOD10300 R(ILR)=R(IMR) MOD10310 180 R(IMR)=X MOD10320 185 CONTINUE MOD10330 RETURN MOD10340 END MOD10350 C MOD10360 C------------------------- MOD10370 C SUBROUTINE EIGEN2 MOD10380 C------------------------- MOD10390 SUBROUTINE EIGEN2(A,EIG) MOD10410 CHARACTER * 1 IR,TITL MOD10420 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD10430 DIMENSION A(3,3),EIG(20,3) MOD10440 DIMENSION AX(6,6),B(3,3) MOD10450 C FIND THE LEAST EIGENVECTOR OF EQUATION AE=LE, WHERE A IS A 3X3 MOD10470 C MATRIX, L IS THE EIGENVALUE, AND E IS THE EIGENVECTOR. START MOD10480 C WITH E OR EIG=(0,0,1) AND ITERATE BY THE SWMB METHOD MOD10490 C (ACTA CRYST 14:185,1959) BY MULTIPLYING EIG BY B, WHERE MOD10500 C IS THE ADJOINT MATRIX OF A. HALT WHEN EIG CONVERGES (LESS THAN MOD10510 C 0.1% CHANGE BETWEEN CYCLES), OR AFTER 20 ITERATIONS. WRITE OUT MOD10520 C EACH EIGENVECTOR FOR INSPECTION. MOD10530 DO 1 I=1,3 MOD10550 DO 1 J=1,3 MOD10560 I3=I+3 MOD10570 J3=J+3 MOD10580 AX(I,J)=A(I,J) MOD10590 AX(I3,J)=A(I,J) MOD10600 AX(I,J3)=A(I,J) MOD10610 AX(I3,J3)=A(I,J) MOD10620 1 CONTINUE MOD10630 DO 2 I=1,3 MOD10650 DO 2 J=1,3 MOD10660 I1=I+1 MOD10670 I2=I+2 MOD10680 J1=J+1 MOD10690 J2=J+2 MOD10700 B(J,I)=AX(I1,J1)*AX(I2,J2)-AX(I1,J2)*AX(I2,J1) MOD10710 2 CONTINUE MOD10720 DO 3 I=2,20 MOD10740 DO 3 J=1,3 MOD10750 EIG(I,J)=0.0 MOD10760 3 CONTINUE MOD10770 EIG(1,1)=0.0 MOD10780 EIG(1,2)=0.0 MOD10790 EIG(1,3)=1.0 MOD10800 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) MOD10810 C5 FORMAT(' EIGENVECTOR=',3F10.5) MOD10820 DO 4 K=1,19 MOD10830 K1=K+1 MOD10840 EX=B(1,1)*EIG(K,1)+B(1,2)*EIG(K,2)+B(1,3)*EIG(K,3) MOD10850 EY=B(2,1)*EIG(K,1)+B(2,2)*EIG(K,2)+B(2,3)*EIG(K,3) MOD10860 EZ=B(3,1)*EIG(K,1)+B(3,2)*EIG(K,2)+B(3,3)*EIG(K,3) MOD10870 EN=SQRT(EX**2+EY**2+EZ**2) MOD10880 EIG(K1,1)=EX/EN MOD10890 EIG(K1,2)=EY/EN MOD10900 EIG(K1,3)=EZ/EN MOD10910 C WRITE(LUW,5)(EIG(K1,J),J=1,3) MOD10920 DO 6 J=1,3 MOD10930 DIF=ABS(EIG(K1,J)-EIG(K,J)) MOD10940 ARR=DIF/EIG(K1,J) MOD10950 ERR=ABS(ARR) MOD10960 IF(ERR-0.001)6,6,4 MOD10970 6 CONTINUE MOD10980 EIGZ=EIG(K1,3) MOD10990 SIGN=EIGZ/ABS(EIGZ) MOD11000 DO 8 J=1,3 MOD11010 EIG(20,J)=EIG(K1,J)*SIGN MOD11020 8 CONTINUE MOD11030 GO TO 9 MOD11040 4 CONTINUE MOD11050 C MOD11060 C TEST THE EIGENVECTOR BY CARRYING OUT AE=LE AND EXAMINING L MOD11070 9 EX=A(1,1)*EIG(20,1)+A(1,2)*EIG(20,2)+A(1,3)*EIG(20,3) MOD11090 EY=A(2,1)*EIG(20,1)+A(2,2)*EIG(20,2)+A(2,3)*EIG(20,3) MOD11100 EZ=A(3,1)*EIG(20,1)+A(3,2)*EIG(20,2)+A(3,3)*EIG(20,3) MOD11110 ELAMX=EX/EIG(20,1) MOD11120 ELAMY=EY/EIG(20,2) MOD11130 ELAMZ=EZ/EIG(20,3) MOD11140 C WRITE(LUW,10)ELAMX,ELAMY,ELAMZ MOD11150 C10 FORMAT(' LEAST EIGENVALUES= ',3F12.8) MOD11160 RETURN MOD11170 END MOD11180 C MOD11190 C------------------------- MOD11200 C SUBROUTINE GETATM MOD11210 C------------------------- MOD11220 SUBROUTINE GETATM(OMAT) MOD11240 CHARACTER * 5 ATAB MOD11250 CHARACTER * 4 MH,NORIG,NAME,NOX,NOY,NOZ,IBLNK MOD11260 CHARACTER * 1 IR,TITL,FMT,Y,R,A,T,G,C,L1,L4,L5,L6,L7, MOD11270 X P1,P2,P3,P4,P5 MOD11280 CHARACTER * 4 CC,EC MOD11290 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD11300 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD11310 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD11320 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD11330 X ATAB(30,10),LSEQ(10) MOD11340 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD11350 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD11360 DIMENSION W1(3),W2(3),OMAT(3,3),OATM(3,1000),DDUM(3) MOD11370 DATA NORIG/'ORGN'/,NOX/'A AX'/,NOY/'B AX'/,NOZ/'C AX'/ MOD11380 DATA IBLNK/' '/,Y/'Y'/,R/'R'/,T/'T'/,A/'A'/,G/'G'/,C/'C'/ MOD11390 1000 FORMAT(72A1) MOD11400 WRITE(LUW,2000) TITL MOD11410 2000 FORMAT(1H1,1X,72A1,/) MOD11420 WRITE(LUW,2222) MOD11430 2222 FORMAT(' INPUT FRAC.COORDS. X,Y,Z AND ATOM NAME IN FORMAT:') MOD11440 WRITE(LUW,2986)FMT MOD11450 2986 FORMAT(1X,72A1,/) 1010 FORMAT(2I5) MOD11460 IF (INPHEL.NE.0) GO TO 100 MOD11470 DO 90 JJ=1,IHELIX MOD11480 NNH=0 MOD11490 DO 80 I=1,NATOM MOD11500 L1=NAME(1,I)(1:1) MOD11510 L4=NAME(1,I)(4:4) MOD11520 L5=NAME(2,I)(1:1) MOD11530 L6=NAME(2,I)(2:2) MOD11540 L7=NAME(2,I)(3:3) MOD11550 CC=L4//L5//L6//L7 MOD11560 NUMBR=LSEQ(JJ) MOD11570 DO 60 J=1,NUMBR MOD11580 P1=ATAB(J,JJ)(1:1) MOD11590 P2=ATAB(J,JJ)(2:2) MOD11600 P3=ATAB(J,JJ)(3:3) MOD11610 P4=ATAB(J,JJ)(4:4) MOD11620 P5=ATAB(J,JJ)(5:5) MOD11630 EC=P2//P3//P4//P5 MOD11640 IF (P1.NE.R.AND.P1.NE.Y) EC=P1//P2//P3//P4 MOD11650 IF (P1.EQ.R) GO TO 40 MOD11660 IF (P1.EQ.Y) GO TO 50 MOD11670 30 IF (CC.EQ.EC) GO TO 70 MOD11680 GO TO 60 MOD11690 40 IF (L1.EQ.G.OR.L1.EQ.A) GO TO 30 MOD11700 GO TO 60 MOD11710 50 IF (L1.EQ.T.OR.L1.EQ.C) GO TO 30 MOD11720 60 CONTINUE MOD11730 GO TO 80 MOD11740 70 NNH=NNH+1 MOD11750 NSEQ(NNH,JJ)=I MOD11760 80 CONTINUE MOD11770 MMH(JJ)=NNH MOD11780 90 CONTINUE MOD11790 100 WRITE(LUW,2010) NATOM,IFLAGP MOD11800 2010 FORMAT(' WILL READ ',I5,' ATOMS: PRINT FLAG=',I5/) MOD11810 NAT=NATOM MOD11820 ATM(1,NAT+1)=0.0 MOD11830 ATM(2,NAT+1)=0.0 MOD11840 ATM(3,NAT+1)=0.0 MOD11850 ATM(1,NAT+2)=1.0 MOD11860 ATM(2,NAT+2)=0.0 MOD11870 ATM(3,NAT+2)=0.0 MOD11880 ATM(1,NAT+3)=0.0 MOD11890 ATM(2,NAT+3)=1.0 MOD11900 ATM(3,NAT+3)=0.0 MOD11910 ATM(1,NAT+4)=0.0 MOD11920 ATM(2,NAT+4)=0.0 MOD11930 ATM(3,NAT+4)=1.0 MOD11940 NAME(1,NAT+1)=NORIG MOD11950 NAME(1,NAT+2)=NOX MOD11960 NAME(1,NAT+3)=NOY MOD11970 NAME(1,NAT+4)=NOZ MOD11980 NAME(2,NAT+1)=IBLNK MOD11990 NAME(2,NAT+2)=IBLNK MOD12000 NAME(2,NAT+3)=IBLNK MOD12010 NAME(2,NAT+4)=IBLNK MOD12020 NAT=NAT+4 MOD12030 1020 FORMAT(6F10.5) MOD12040 WRITE(LUW,2333) MOD12050 2333 FORMAT(/' CELL CONSTANTS A,B,C,ALPHA,BETA,GAMMA ARE:') MOD12060 WRITE(LUW,2020) CELL MOD12070 2020 FORMAT(1X,6(F7.3,1X)/) MOD12080 CALL GETMAT(OMAT,CELL) MOD12090 WRITE(LUW,2025) IFLAGP MOD12100 2025 FORMAT(' COORDINATES IN ORTHONORMAL SYSTEM: PRINT FLAG=',I5/) MOD12110 DO 120 I=1,NAT MOD12120 DO 111 J=1,3 MOD12130 111 DDUM(J)=ATM(J,I) MOD12140 CALL ROTATE(OMAT,DDUM) MOD12150 DO 112 J=1,3 MOD12160 112 ATM(J,I)=DDUM(J) MOD12170 IF(IFLAGP.NE.1) GO TO 110 MOD12180 WRITE(LUW,2015) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) MOD12190 110 CONTINUE MOD12200 2015 FORMAT (1X,I5,5X,3(F9.4,1X),1X,2A4) MOD12210 DO 120 J=1,3 MOD12220 OATM(J,I)=ATM(J,I) MOD12230 120 CONTINUE MOD12240 CALL MINV(OMAT,3,DETOMT,W1,W2) MOD12250 RETURN MOD12260 END MOD12270 C MOD12280 C------------------------- MOD12290 C SUBROUTINE GETHVC MOD12300 C------------------------- MOD12310 SUBROUTINE GETHVC MOD12330 C GET VECTORS RELATING EQUIVALENT ATOMS MOD12350 CHARACTER * 5 ATAB MOD12370 CHARACTER * 4 NAME MOD12380 CHARACTER * 1 IR,TITL,FMT MOD12390 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD12400 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD12410 X ATAB(30,10),LNUMB(10) MOD12420 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD12430 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD12440 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD12450 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD12460 DIMENSION FIELD(15) MOD12470 WRITE(LUW,2444) MOD12480 2444 FORMAT(' **************************************'/) MOD12490 WRITE(LUW,2000) MOD12500 2000 FORMAT(' ATOM PAIRS USED TO DETERMINE THE HELIX AXIS ARE:') MOD12510 IF (INPHEL.NE.0) GO TO 40 MOD12520 NVEC=0 MOD12530 DO 30 JJ=1,IHELIX MOD12540 NNH=MMH(JJ) MOD12550 KH=NNH/2 MOD12560 NMH=NNH-1 MOD12570 DO 20 K=1,NMH MOD12580 IF (K.EQ.KH) GO TO 20 MOD12590 IF (K.GT.KH) GO TO 10 MOD12600 NVEC=NVEC+1 MOD12610 IF(NVEC.GT.200) GO TO 120 MOD12620 NN1(NVEC)=NSEQ(K,JJ) MOD12630 NN2(NVEC)=NSEQ(K+1,JJ) MOD12640 GO TO 20 MOD12650 10 NVEC=NVEC+1 MOD12660 IF(NVEC.GT.200) GO TO 120 MOD12670 NN2(NVEC)=NSEQ(K,JJ) MOD12680 NN1(NVEC)=NSEQ(K+1,JJ) MOD12690 20 CONTINUE MOD12700 30 CONTINUE MOD12710 40 DO 60 N=1,NVEC MOD12720 N2=NN2(N) MOD12730 N1=NN1(N) MOD12740 WRITE(LUW,2010) N1,(NAME(J,N1),J=1,2),N2,(NAME(J,N2),J=1,2) MOD12750 2010 FORMAT(1X,2(I3,1X,2A4,8X),15A4) MOD12760 DO 50 I=1,3 MOD12770 X(I,N)=ATM(I,N1) MOD12780 VEC(I,N)=ATM(I,N2)-ATM(I,N1) MOD12790 50 CONTINUE MOD12800 60 CONTINUE MOD12810 WRITE(LUW,2444) MOD12820 IF(NVEC.GE.3) RETURN MOD12830 WRITE(LUW,2030) MOD12840 2030 FORMAT(' LESS THAN 3 VECTORS: HELIX AXIS CANNOT BE DETERMINED') MOD12850 STOP 16 MOD12860 120 WRITE(LUW,2020) MOD12870 2020 FORMAT(' ARRAYS EXCEEDED BY INPUT OF GT.200 VECTORS') MOD12880 STOP 16 MOD12890 END MOD12900 C MOD12910 C------------------------- MOD12920 C SUBROUTINE GETMAT MOD12930 C------------------------- MOD12940 SUBROUTINE GETMAT(BMAT,CELCON) MOD12960 C GET THE MATRIX TO TRANSFORM INTO CARTESIAN COORDINATES MOD12980 REAL BMAT(3,3),CELCON(6),ANG(3) MOD13000 ANG(1)=CELCON(4) MOD13010 ANG(2)=CELCON(5) MOD13020 ANG(3)=CELCON(6) MOD13030 PIFAZE=3.1415926/180.0 MOD13040 DO 10 I=1,3 MOD13050 10 ANG(I)=ANG(I)*PIFAZE MOD13060 A1=CELCON(1) MOD13070 A2=CELCON(2) MOD13080 A3=CELCON(3) MOD13090 TEMP1=(COS(ANG(2))-COS(ANG(1))*COS(ANG(3))) MOD13100 TEMP2=SIN(ANG(1))*SIN(ANG(3)) MOD13110 OMG= ACOS(TEMP1/TEMP2) MOD13120 BMAT(1,1)=A1*SIN(ANG(3))*SIN(OMG) MOD13130 BMAT(1,2)=0.0 MOD13140 BMAT(1,3)=0.0 MOD13150 BMAT(2,1)=A1*COS(ANG(3)) MOD13160 BMAT(2,2)=A2 MOD13170 BMAT(2,3)=A3*COS(ANG(1)) MOD13180 BMAT(3,1)=A1*SIN(ANG(3))*COS(OMG) MOD13190 BMAT(3,2)=0.0 MOD13200 BMAT(3,3)=A3*SIN(ANG(1)) MOD13210 RETURN MOD13220 END MOD13230 C MOD13240 C------------------------- MOD13250 C SUBROUTINE HELIX MOD13260 C------------------------- MOD13270 SUBROUTINE HELIX MOD13290 CHARACTER * 5 ATAB MOD13300 CHARACTER * 4 NAME,MH MOD13310 CHARACTER * 1 IR,TITL,FMT MOD13320 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD13330 X ATAB(30,10) MOD13340 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD13350 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD13360 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000),NPLA MOD13370 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD13380 INTEGER LS1(200),LS2(200) MOD13390 REAL ROT(3,3),A(200,2),G(200),XYC(2),SGXYC(2),XYZC(3) MOD13400 REAL ROTOT(3,3),WORK(3,3),OMAT(3,3),OUHV(3) MOD13410 REAL X1(3),X2(3),UHV(3),XLS(200,200),ELS(200),UXYZ(3,3) MOD13420 DATA UXYZ/1.0, 3*0.0, 1.0, 3*0.0, 1.0/ MOD13430 PIFAC=3.1415926/180.0 MOD13440 C MOD13450 C I/O UNIT ASSIGNMENTS:CARD READ,PRINTER,AND IFPUN.NE.0 MOD13460 CALL READAT MOD13490 CALL GETATM(OMAT) MOD13500 CALL GETHVC MOD13510 CALL MLSP(NVEC,VEC,UHV,DZ,SIGPL) MOD13520 TOL=1.0E-5 MOD13530 IF((ABS(UHV(1)).LE.TOL).AND.(ABS(UHV(2)).LE.TOL)) GO TO 200 MOD13540 ANG= ACOS(UHV(1)/SQRT(UHV(1)**2+UHV(2)**2)) MOD13550 IF(UHV(2).LE.0.0) ANG=-ANG MOD13560 CALL DEFROT(UXYZ(1,3),ANG,ROT) MOD13570 CALL MATMUL(ROTOT,ROT,UXYZ,WORK,3,3,3) MOD13580 DO 100 I=1,NAT MOD13590 CALL ROTATE(ROT,ATM(1,I)) MOD13600 100 CONTINUE MOD13610 DO 110 I=1,NVEC MOD13620 CALL ROTATE(ROT,X(1,I)) MOD13630 CALL ROTATE(ROT,VEC(1,I)) MOD13640 110 CONTINUE MOD13650 200 CONTINUE MOD13660 ANG= ACOS(UHV(3)) MOD13670 CALL DEFROT(UXYZ(1,2),ANG,ROT) MOD13680 CALL MATMUL(ROTOT,ROT,ROTOT,WORK,3,3,3) MOD13690 DO 120 I=1,NAT MOD13700 CALL ROTATE(ROT,ATM(1,I)) MOD13710 120 CONTINUE MOD13720 DO 130 I=1,NVEC MOD13730 CALL ROTATE(ROT,X(1,I)) MOD13740 CALL ROTATE(ROT,VEC(1,I)) MOD13750 130 CONTINUE MOD13760 DO 210 I=1,NVEC MOD13770 A(I,1)=VEC(1,I)*2.0 MOD13780 A(I,2)=VEC(2,I)*2.0 MOD13790 G(I)=(VEC(1,I) + X(1,I))**2 + (VEC(2,I) + X(2,I))**2 MOD13800 G(I)=G(I)-X(1,I)**2 -X(2,I)**2 MOD13810 210 CONTINUE MOD13820 CALL LLSQ(NVEC,2,200,2,G,A,XYC,SGXYC,NSING,XLS,ELS,LS1,LS2) MOD13830 IF(NSING.EQ.0) GO TO 220 MOD13840 WRITE(LUW,2200) MOD13850 2200 FORMAT(' >>>>>>>>>>> CENTER MATRIX SINGULAR') MOD13860 STOP 16 MOD13870 220 CONTINUE MOD13880 XYZC(1)=XYC(1) MOD13890 XYZC(2)=XYC(2) MOD13900 XYZC(3)=0.0 MOD13910 CALL MATMUL(XYZC,XYZC,ROTOT,WORK,1,3,3) MOD13920 WRITE(LUW,2220) MOD13930 2220 FORMAT(' IN ORTHONORMAL COORDINATES, ') MOD13940 WRITE(LUW,2210) (UHV(JI),XYZC(JI),JI =1,3) MOD13950 2210 FORMAT(' HELIX AXIS IN PARAMETRIC FORM:'/' X = ',F12.5,'*S + ', MOD13960 *F12.5/' Y = ',F12.5,'*S + ',F12.5/' Z = ',F12.5, '*S + ',F12.5/) MOD13970 CALL MATMUL(XYZC,OMAT,XYZC,WORK,3,3,1) MOD13980 CALL MATMUL(OUHV,OMAT,UHV,WORK,3,3,1) MOD13990 WRITE(LUW,2230) MOD14000 2230 FORMAT(' IN ORIGINAL CRYSTAL COORDINATES,') MOD14010 WRITE(LUW,2210) (OUHV(JI),XYZC(JI),JI=1,3) MOD14020 DO 250 I=1,2 MOD14030 DO 230 J=1,NAT MOD14040 ATM(I,J)=ATM(I,J)-XYC(I) MOD14050 230 CONTINUE MOD14060 DO 240 J=1,NVEC MOD14070 X(I,J)=X(I,J)-XYC(I) MOD14080 240 CONTINUE MOD14090 250 CONTINUE MOD14100 THETA=0.0 MOD14110 SGTHET=0.0 MOD14120 DO 310 I=1,NVEC MOD14130 DO 300 J=1,3 MOD14140 X1(J)=X(J,I) MOD14150 X2(J)=X(J,I)+VEC(J,I) MOD14160 300 CONTINUE MOD14170 CALL POLAR(X1) MOD14180 CALL POLAR(X2) MOD14190 T21=X2(2)-X1(2) MOD14200 T21P=T21+PIFAC*360.0 MOD14210 T21M=T21-PIFAC*360.0 MOD14220 IF(ABS(T21P).LT.ABS(T21)) T21=T21P MOD14230 IF(ABS(T21M).LT.ABS(T21)) T21=T21M MOD14240 THETA=THETA+T21 MOD14250 SGTHET=SGTHET+T21*T21 MOD14260 310 CONTINUE MOD14270 THETA=THETA/FLOAT(NVEC) MOD14280 SGTHET=(SGTHET-FLOAT(NVEC)*THETA*THETA)/FLOAT(NVEC-1) MOD14290 C 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 MOD14300 SIG=0.0 MOD14310 IF(NVEC.LE.3) GO TO 340 MOD14320 DO 330 I=1,NVEC MOD14330 DO 320 J=1,3 MOD14340 X1(J)=X(J,I) MOD14350 X2(J)=X(J,I)+VEC(J,I) MOD14360 320 CONTINUE MOD14370 CALL POLAR(X1) MOD14380 CALL POLAR(X2) MOD14390 SIG=SIG+(X1(3)+DZ-X2(3))**2 + X1(1)**2 + X2(1)**2 MOD14400 *-2.0*X1(1)*X2(1)*COS(X1(2)+THETA-X2(2)) MOD14410 330 CONTINUE MOD14420 SIG=SQRT(SIG/FLOAT(NVEC-3)) MOD14430 340 CONTINUE MOD14440 IF(DZ.LT.0.0) THETA=-THETA MOD14450 IF(DZ.LT.0.0) DZ=-DZ MOD14460 ANG=THETA/PIFAC MOD14470 WRITE(LUW,2300) ANG,DZ,SIG MOD14480 2300 FORMAT(' >>>>>> HELIX ROTATION: ',F8.3,5X,'DISPLACEMENT: ', MOD14490 *F8.4/' ',10X,'STATISTICS:'/' ',20X,'OVERALL STANDARD DEV.: ', MOD14500 *F8.4) MOD14510 WRITE(LUW,2310) SGXYC,SIGPL,SGTHET MOD14520 2310 FORMAT(21X,'SIGMA(X): ',F7.4,', SIGMA(Y): ',F7.4, MOD14530 *', SIGMA(Z)=SIGMA(DISPLACEMENT): ',F7.4,', SIGMA(ROTATION): ', MOD14540 *F7.3) MOD14550 PTURN=ABS(360.0/ANG) MOD14560 WRITE(LUW,2320)PTURN MOD14570 2320 FORMAT(11X,'THERE ARE ',F5.2,' RESIDUES PER TURN'/) MOD14580 ICHSGN=0 MOD14590 CALL CHSIGN (ICHSGN) MOD14600 CALL PUTATM(THETA,DZ,ICHSGN) MOD14610 WRITE(LUW,2400) MOD14620 2400 FORMAT(' NORMAL END OF JOB: YOU HAVE GIVEN BIRTH TO A HELIX') MOD14630 WRITE(LUW,2401) 2401 FORMAT(' NUMBER BASE PAIRS =') WRITE(LUW,2402)NPLA 2402 FORMAT(5X,I5) RETURN MOD14640 END MOD14650 C MOD14660 C------------------------- MOD14670 C SUBROUTINE INIT MOD14680 C------------------------- MOD14690 SUBROUTINE INIT MOD14710 CHARACTER * 5 ATAB MOD14720 CHARACTER * 4 NAME,MH MOD14730 CHARACTER * 1 IR,TITL,FMT,IBL MOD14740 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD14750 X ,L15 MOD14760 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD14770 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD14780 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000),NBP MOD14790 DATA IBL/' '/ MOD14800 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD14810 X ATAB(30,10),LSEQ(10) MOD14820 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,20) MOD14830 COMMON/BROLLP/INPBRL,NB(2,20),NB1(2,20),NB2(2,20) MOD14840 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500) MOD14850 NATOM=0 MOD14860 ICORL=0 MOD14870 IFLAGP=0 MOD14880 IFPUN=0 MOD14890 NPMAX=0 MOD14900 NPMIN=0 MOD14910 INPHEL=0 MOD14920 INPBRL=0 MOD14930 INPCYL=0 MOD14940 INPTOR=0 MOD14950 IHELIX=0 MOD14960 IBROLL=0 MOD14970 ICYLIN=0 MOD14980 ITORNG=0 MOD14990 DO 10 I=1,72 MOD15000 FMT(I)=IBL MOD15010 10 TITL(I)=IBL MOD15020 NBP=0 MOD15030 DO 20 JJ=1,10 MOD15040 DO 20 I=1,30 MOD15050 20 ATAB(I,JJ)=' ' MOD15060 DO 30 I=1,2 MOD15070 DO 30 J=1,500 MOD15080 30 NATO(I,J)=0 MOD15090 DO 40 I=1,2 MOD15100 DO 40 J=1,100 MOD15110 DO 40 L=1,4 MOD15120 40 NCHI(I,J,L)=0 MOD15130 RETURN MOD15140 END MOD15150 C MOD15160 C------------------------- MOD15170 C SUBROUTINE LLSQ MOD15180 C------------------------- MOD15190 SUBROUTINE LLSQ(NOBS,NPARM,NOD,NPD,G,A,P,SIGP,NSING,M,E,L1,L2) MOD15210 C GENERAL LINEAR LEAST-SQUARES ROUTINE MOD15230 DIMENSION G(NOD),A(NOD,NPD),P(NPD),SIGP(NPD) MOD15250 REAL M(NPARM,NPARM),E(NPARM),L1(NPARM),L2(NPARM) MOD15260 IF((NOBS.GT.NOD).OR.(NPARM.GT.NPD)) STOP 16 MOD15270 DO 10 I=1,NPARM MOD15280 E(I)=0.0 MOD15290 DO 10 J=1,NPARM MOD15300 M(I,J)=0.0 MOD15310 10 CONTINUE MOD15320 DO 20 I=1,NPARM MOD15330 DO 20 J=1,NOBS MOD15340 E(I)=E(I)+A(J,I)*G(J) MOD15350 DO 20 K=1,NPARM MOD15360 M(I,K)=M(I,K)+A(J,I)*A(J,K) MOD15370 20 CONTINUE MOD15380 CALL MINV(M,NPARM,DET,L1,L2) MOD15390 NSING=0 MOD15400 IF(DET.NE.0.0) GO TO 30 MOD15410 NSING=1 MOD15420 RETURN MOD15430 30 CONTINUE MOD15440 DO 40 I=1,NPARM MOD15450 P(I)=0.0 MOD15460 40 CONTINUE MOD15470 DO 50 I=1,NPARM MOD15480 DO 50 J=1,NPARM MOD15490 P(I)=P(I)+M(I,J)*E(J) MOD15500 50 CONTINUE MOD15510 SIGSQ=0.0 MOD15520 DO 70 I=1,NOBS MOD15530 DEL=G(I) MOD15540 DO 60 J=1,NPARM MOD15550 DEL=DEL-A(I,J)*P(J) MOD15560 60 CONTINUE MOD15570 SIGSQ=SIGSQ+DEL*DEL MOD15580 70 CONTINUE MOD15590 DO 80 I=1,NPARM MOD15600 SIGP(I)=SQRT(M(I,I)*SIGSQ) MOD15610 80 CONTINUE MOD15620 RETURN MOD15630 END MOD15640 C MOD15650 C------------------------- MOD15660 C SUBROUTINE MATMUL MOD15670 C------------------------- MOD15680 SUBROUTINE MATMUL(PROD,XM,YM,WM,N,M,L) MOD15700 C MATRIX MULTIPLICATION MOD15720 DIMENSION XM(N,M),YM(M,L),PROD(N,L),WM(N,L) MOD15740 DO 10 I=1,N MOD15750 DO 10 J=1,L MOD15760 WM(I,J)=0.0 MOD15770 10 CONTINUE MOD15780 DO 20 I=1,N MOD15790 DO 20 K=1,L MOD15800 DO 20 J=1,M MOD15810 WM(I,K)=WM(I,K)+XM(I,J)*YM(J,K) MOD15820 20 CONTINUE MOD15830 DO 30 I=1,N MOD15840 DO 30 J=1,L MOD15850 PROD(I,J)=WM(I,J) MOD15860 30 CONTINUE MOD15870 RETURN MOD15880 END MOD15890 C MOD15900 C------------------------- MOD15910 C SUBROUTINE MATRIX MOD15920 C------------------------- MOD15930 SUBROUTINE MATRIX(XMIN,A,NPL) MOD15950 C BUILT THE A MATRIX FROM A LIST OF ATOM COORDINATES MOD15970 DIMENSION XMIN(30,3),A(3,3) MOD15990 DIMENSION XMAJ(30,3),XAV(3) MOD16000 DO 1 J=1,3 MOD16020 XAV(J)=0.0 MOD16030 1 CONTINUE MOD16040 DO 2 K=1,NPL MOD16050 DO 2 J=1,3 MOD16060 XAV(J)=XAV(J)+XMIN(K,J) MOD16070 2 CONTINUE MOD16080 DO 3 J=1,3 MOD16090 XAV(J)=XAV(J)/NPL MOD16100 3 CONTINUE MOD16110 DO 4 K=1,NPL MOD16120 DO 4 J=1,3 MOD16130 XMAJ(K,J)=XMIN(K,J)-XAV(J) MOD16140 4 CONTINUE MOD16150 DO 5 I=1,3 MOD16160 DO 5 J=1,3 MOD16170 A(I,J)=0.0 MOD16180 5 CONTINUE MOD16190 DO 6 K=1,NPL MOD16200 DO 6 I=1,3 MOD16210 DO 6 J=1,3 MOD16220 A(I,J)=A(I,J)+XMIN(K,I)*XMAJ(K,J) MOD16230 6 CONTINUE MOD16240 RETURN MOD16250 END MOD16260 C MOD16270 C------------------------- MOD16280 C SUBROUTINE MINV MOD16290 C------------------------- MOD16300 SUBROUTINE MINV(A,N,D,L,M) MOD16320 C INVERT A MATRIX MOD16340 DIMENSION A(1),L(1),M(1) MOD16360 D=1.0 MOD16370 NK=-N MOD16380 DO 80 K=1,N MOD16390 NK=NK+N MOD16400 L(K)=K MOD16410 M(K)=K MOD16420 KK=NK+K MOD16430 BIGA=A(KK) MOD16440 DO 20 J=K,N MOD16450 IZ=N*(J-1) MOD16460 DO 20 I=K,N MOD16470 IJ=IZ+I MOD16480 10 IF(ABS(BIGA)-ABS(A(IJ))) 15,20,20 MOD16490 15 BIGA=A(IJ) MOD16500 L(K)=I MOD16510 M(K)=J MOD16520 20 CONTINUE MOD16530 J=L(K) MOD16540 IF(J-K) 35,35,25 MOD16550 25 KI=K-N MOD16560 DO 30 I=1,N MOD16570 KI=KI+N MOD16580 HOLD=-A(KI) MOD16590 JI=KI-K+J MOD16600 A(KI)=A(JI) MOD16610 30 A(JI)=HOLD MOD16620 35 I=M(K) MOD16630 IF(I-K) 45,45,38 MOD16640 38 JP=N*(I-1) MOD16650 DO 40 J=1,N MOD16660 JK=NK+J MOD16670 JI=JP+J MOD16680 HOLD=-A(JK) MOD16690 A(JK)=A(JI) MOD16700 40 A(JI)=HOLD MOD16710 45 IF(BIGA) 48,46,48 MOD16720 46 D=0.0 MOD16730 RETURN MOD16740 48 DO 55 I=1,N MOD16750 IF(I-K) 50,55,50 MOD16760 50 IK=NK+I MOD16770 A(IK)=A(IK)/(-BIGA) MOD16780 55 CONTINUE MOD16790 DO 65 I=1,N MOD16800 IK=NK+I MOD16810 HOLD=A(IK) MOD16820 IJ=I-N MOD16830 DO 65 J=1,N MOD16840 IJ=IJ+N MOD16850 IF(I-K) 60,65,60 MOD16860 60 IF(J-K) 62,65,62 MOD16870 62 KJ=IJ-I+K MOD16880 A(IJ)=HOLD*A(KJ)+A(IJ) MOD16890 65 CONTINUE MOD16900 KJ=K-N MOD16910 DO 75 J=1,N MOD16920 KJ=KJ+N MOD16930 IF(J-K) 70,75,70 MOD16940 70 A(KJ)=A(KJ)/BIGA MOD16950 75 CONTINUE MOD16960 D=D*BIGA MOD16970 A(KK)=1.0/BIGA MOD16980 80 CONTINUE MOD16990 K=N MOD17000 100 K=(K-1) MOD17010 IF(K) 150,150,105 MOD17020 105 I=L(K) MOD17030 IF(I-K) 120,120,108 MOD17040 108 JQ=N*(K-1) MOD17050 JR=N*(I-1) MOD17060 DO 110 J=1,N MOD17070 JK=JQ+J MOD17080 HOLD=A(JK) MOD17090 JI=JR+J MOD17100 A(JK)=-A(JI) MOD17110 110 A(JI)=HOLD MOD17120 120 J=M(K) MOD17130 IF(J-K) 100,100,125 MOD17140 125 KI=K-N MOD17150 DO 130 I=1,N MOD17160 KI=KI+N MOD17170 HOLD=A(KI) MOD17180 JI=KI-K+J MOD17190 A(KI)=-A(JI) MOD17200 130 A(JI)=HOLD MOD17210 GO TO 100 MOD17220 150 RETURN MOD17230 END MOD17240 C MOD17250 C------------------------- MOD17260 C SUBROUTINE MLSP MOD17270 C------------------------- MOD17280 SUBROUTINE MLSP(NPOINT,X,U,D,SIG) MOD17300 C GENERAL LEAST-SQUARES PLANE ROUTINE MOD17320 DIMENSION X(3,NPOINT),U(3),XAV(3),XM(3,3),R(3,3),YM(3,3),ZM(9) MOD17340 EQUIVALENCE (XM(1,1),ZM(1)) MOD17350 IF(NPOINT.LT.3) STOP 16 MOD17360 DO 10 I=1,3 MOD17370 XAV(I)=0.0 MOD17380 10 CONTINUE MOD17390 DO 20 I=1,3 MOD17400 DO 20 J=1,NPOINT MOD17410 XAV(I)=XAV(I)+X(I,J) MOD17420 20 CONTINUE MOD17430 DO 30 I=1,3 MOD17440 XAV(I)=XAV(I)/FLOAT(NPOINT) MOD17450 30 CONTINUE MOD17460 DO 40 I=1,3 MOD17470 DO 40 J=1,3 MOD17480 XM(I,J)=0.0 MOD17490 YM(I,J)=0.0 MOD17500 40 CONTINUE MOD17510 DO 50 I=1,3 MOD17520 DO 50 J=1,3 MOD17530 DO 50 K=1,NPOINT MOD17540 YM(I,J)=YM(I,J)+(X(I,K)-XAV(I))*(X(J,K)-XAV(J)) MOD17550 50 CONTINUE MOD17560 ZM(1)=YM(1,1) MOD17570 ZM(2)=YM(1,2) MOD17580 ZM(3)=YM(2,2) MOD17590 ZM(4)=YM(1,3) MOD17600 ZM(5)=YM(2,3) MOD17610 ZM(6)=YM(3,3) MOD17620 CALL EIGEN1(XM,R,3,0) MOD17630 EVAL=ZM(6) MOD17640 SIG=0.0 MOD17650 IF(NPOINT.LE.3) GO TO 60 MOD17660 IF(EVAL.LT.0.0) GO TO 60 MOD17670 SIG=SQRT(EVAL/FLOAT(NPOINT-3)) MOD17680 60 CONTINUE MOD17690 DO 70 I=1,3 MOD17700 U(I)=R(I,3) MOD17710 70 CONTINUE MOD17720 UMAG=DOTP(U,U) MOD17730 DO 80 I=1,3 MOD17740 U(I)=U(I)/UMAG MOD17750 80 CONTINUE MOD17760 D=0.0 MOD17770 DO 90 I=1,3 MOD17780 D=D+U(I)*XAV(I) MOD17790 90 CONTINUE MOD17800 RETURN MOD17810 END MOD17820 C 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 MOD17830 C------------------------- MOD17840 C SUBROUTINE POLAR MOD17850 C------------------------- MOD17860 SUBROUTINE POLAR(V) MOD17880 C CONVERT A CARTESIAN VECTOR V INTO CYLINDRICAL POLAR MOD17900 DIMENSION V(3) MOD17920 X=V(1) MOD17930 Y=V(2) MOD17940 V(1)=SQRT(X*X+Y*Y) MOD17950 V(2)= ACOS(X/V(1)) MOD17960 IF(Y.LT.0.0) V(2)=-V(2) MOD17970 RETURN MOD17980 END MOD17990 C MOD18000 C------------------------- MOD18010 C FUNCTION PRIANG MOD18020 C------------------------- MOD18030 FUNCTION PRIANG(ANGLE) MOD18050 C SET ANGLE T TO BETWEEN 0.0 AND 360.0 MOD18070 T=ANGLE MOD18090 30 IF(T.LT.360.0) GO TO 40 MOD18100 T=T-360.0 MOD18110 GO TO 30 MOD18120 40 IF(T.GE.0.0) GO TO 50 MOD18130 T=T+360.0 MOD18140 GO TO 40 MOD18150 50 CONTINUE MOD18160 PRIANG=T MOD18170 RETURN MOD18180 END MOD18190 C MOD18200 C------------------------- MOD18210 C SUBROUTINE PUTATM MOD18220 C------------------------- MOD18230 SUBROUTINE PUTATM(ANG,DZ,ICHSGN) MOD18250 C OUTPUT ATOMIC POSITIONS FOR VARIOUS POWERS OF THE HELIX OPERATOR MOD18270 CHARACTER * 4 NAME,MH MOD18290 CHARACTER * 1 IR,TITL,FMT MOD18300 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD18310 X ,L15 MOD18320 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD18330 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD18340 COMMON NAT,X(3,200),VEC(3,200),PIFAC MOD18350 DIMENSION XA(3) MOD18360 DO 5 I=1,NAT MOD18370 CALL POLAR(ATM(1,I)) MOD18380 5 CONTINUE MOD18390 1000 FORMAT(3I5) MOD18400 NPMAX=NPMAX-NPMIN+1 MOD18410 IF (NPMAX.LE.0) NPMAX=1 MOD18420 C MOD18430 C OUTPUT ON 'IPR' ALL POWERS OF THE HELIX OPERATOR, BOTH ODD AND EVEN MOD18440 DO 10 I=1,NPMAX MOD18460 POWER=FLOAT(I+NPMIN-1) MOD18470 IP=I+NPMIN-1 MOD18480 AD=ANG*POWER MOD18490 ZD=DZ*POWER MOD18500 WRITE(LUW,2444) MOD18510 2444 FORMAT(' *****************************************************'/) MOD18520 IF (IFLAGP.EQ.0) GO TO 30 MOD18530 WRITE(LUW,2000) TITL,IP MOD18540 2000 FORMAT(/,1X,72A1/' NO.',5X,' R',6X,'THETA',7X,'Z',5X, MOD18550 * 'NAME ',4X,'X',8X,'Y',8X,'Z',8X,'POWER = ',I3/) MOD18560 MOD18570 DO 10 J=1,NAT MOD18580 R=ATM(1,J) MOD18590 T=ATM(2,J)+AD MOD18600 Z=ATM(3,J)+ZD MOD18610 XC=R*COS(T) MOD18620 Y=R*SIN(T) MOD18630 T=PRIANG(T/PIFAC) MOD18640 WRITE(LUW,2010) J,R,T,Z,(NAME(K,J),K=1,2),XC,Y,Z MOD18650 2010 FORMAT(1X,I5,5X,3(F8.3,1X),1X,2A4,2X,3(F8.3,1X)) MOD18660 10 CONTINUE MOD18670 C MOD18680 C OUTPUT ON UNIT 'IPU':ONLY EVEN POWERS OF THE HELIX OPERATOR IN MOD18690 C DIAMOND LIST FORMAT(RECORD LENGTH=132) MOD18700 30 IF(IFPUN.EQ.0) GO TO 70 MOD18720 NOUT=0 MOD18730 REWIND L12 MOD18740 WRITE(LUW,2666) L12 MOD18750 2666 FORMAT(' THE FOLLOWING DIAMOND LIST HAS BEEN OUTPUT ON UNIT:',I3) MOD18760 WRITE(LUW,2555)TITL MOD18770 2555 FORMAT(/, 72A1,/) MOD18780 DO 20 I=1,NPMAX MOD18790 POWER=FLOAT(I+NPMIN-1) MOD18800 IP=I+NPMIN-1 MOD18810 IPMOD=MOD(IP,2) MOD18820 IF(IPMOD.NE.0) GO TO 20 MOD18830 AD=ANG*POWER MOD18840 ZD=DZ*POWER MOD18850 DO 299 J=1,NATOM MOD18860 R=ATM(1,J) MOD18870 T=ATM(2,J)+AD MOD18880 Z=ATM(3,J)+ZD MOD18890 XC=R*COS(T) MOD18900 Y=R*SIN(T) MOD18910 T=PRIANG(T/PIFAC) MOD18920 NOUT=NOUT+1 MOD18930 IF (ICHSGN.NE.0) GO TO 40 MOD18940 Y=-Y MOD18950 Z=-Z MOD18960 40 IF (IFLAGP.NE.0) WRITE(LUW,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT MOD18970 WRITE(L12,2020) XC,Y,Z,(NAME(K,J),K=1,2),NOUT MOD18980 WRITE (L15,2021) J,(NAME(K,J),K=1,2),XC,Y,Z MOD18990 C CALL PDBOUT (NAME(1,J),NAME(2,J),J,XC,Y,Z) C 2021 FORMAT (I5,T9,2A4,T18,'1',3F10.5,' 20.00 1.0') MOD19000 2020 FORMAT (3F10.5,11X,2A4,5X,I5) MOD19010 299 CONTINUE MOD19020 20 CONTINUE MOD19030 70 CONTINUE MOD19040 ENDFILE L12 MOD19050 ENDFILE L15 MOD19060 RETURN MOD19070 END MOD19080 C MOD19090 C------------------------- MOD19100 C SUBROUTINE READAT MOD19110 C------------------------- MOD19120 SUBROUTINE READAT MOD19140 CHARACTER * 80 BUF MOD19150 CHARACTER * 4 MH,NAME,TBRF MOD19160 CHARACTER * 3 CHECK,O1 MOD19170 CHARACTER * 1 IR,TITL,FMT,TNAME(6),IBL,FOUR,ZER,IST MOD19180 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD MOD19190 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD19200 COMMON/ATOM/NATOM,ATM(3,1000),NAME(2,1000) MOD19210 COMMON/BROOK/IBARF MOD19220 DATA NMAX/996/,IBL/' '/,ZER/'0'/,O1/'O1'''/,FOUR/'4'/ MOD19230 DATA IST/'*'/ MOD19240 OPEN(UNIT=L11,STATUS='OLD',READONLY) MAX=NMAX MOD19250 IF (NATOM.NE.0) MAX=NATOM MOD19260 I=0 MOD19270 10 CONTINUE MOD19280 I=I+1 MOD19290 C >>>>>>>>SET MAX. NO. OF ATOMS=ARRAY SIZE-4<<<<<<<<<<<<<<<<< MOD19310 IF (I.GT.MAX) GO TO 50 MOD19320 IF(I.LE.NMAX) GO TO 20 MOD19330 WRITE(LUW,500) MOD19350 500 FORMAT(' THAT EXCEEDS THE ATM(I,J),NAME(I),AND OATM(I,J) ARRAYS') MOD19360 STOP 16 MOD19370 20 CONTINUE MOD19380 IF (IREAD.EQ.0) GO TO 120 MOD19390 30 CONTINUE MOD19400 READ(L11,501,END=50,ERR=30) BUF MOD19410 501 FORMAT (A80) MOD19420 TBRF=BUF(1:4) MOD19430 IF(IBARF.EQ.2.AND.TBRF.NE.'ATOM') GO TO 30 MOD19440 READ(BUF,FMT) (ATM(J,I),J=1,3),TNAME MOD19450 CHECK=TNAME(4)//TNAME(5)//TNAME(6) MOD19460 IF (CHECK.EQ.O1) TNAME(5)=FOUR MOD19470 IF (TNAME(2).EQ.IBL) TNAME(2)=ZER MOD19480 IF (TNAME(6).EQ.IST) TNAME(6)='''' MOD19490 NAME(1,I)=TNAME(1)//TNAME(2)//TNAME(3)//TNAME(4) MOD19500 NAME(2,I)=TNAME(5)//TNAME(6)//IBL//IBL MOD19510 IF(IFLAGP.NE.1) GO TO 10 MOD19520 WRITE(LUW,502) I,(ATM(J,I),J=1,3),(NAME(J,I),J=1,2) MOD19530 502 FORMAT(1X,I5,5X,3(F9.4,1X),1X,2A4) MOD19540 GO TO 10 MOD19550 50 NATOM=I-1 MOD19560 RETURN MOD19570 120 WRITE (LUW,505) MOD19580 505 FORMAT (' **** FORMAT FOR READING ATOMS NOT SPECIFIED, USE *KONN* MOD19590 1, *CORL*, *BRKH* OR *FFMT*',/) MOD19600 STOP MOD19610 END MOD19620 C MOD19630 C------------------------- MOD19640 C SUBROUTINE ROTATE MOD19650 C------------------------- MOD19660 SUBROUTINE ROTATE(ROTOR,VECTOR) MOD19680 C ROTATE A VECTOR VIA THE MATRIX ROTOR MOD19700 DIMENSION ROTOR(3,3),VECTOR(3),WORK(3) MOD19720 DO 10 I=1,3 MOD19730 WORK(I)=0.0 MOD19740 10 CONTINUE MOD19750 DO 20 I=1,3 MOD19760 DO 20 J=1,3 MOD19770 WORK(I)=WORK(I)+ROTOR(I,J)*VECTOR(J) MOD19780 20 CONTINUE MOD19790 DO 30 I=1,3 MOD19800 VECTOR(I)=WORK(I) MOD19810 30 CONTINUE MOD19820 RETURN MOD19830 END MOD19840 C MOD19850 C------------------------- MOD19860 C SUBROUTINE SETBRL MOD19870 C------------------------- MOD19880 SUBROUTINE SETBRL MOD19900 CHARACTER * 4 MH MOD19910 CHARACTER * 1 IR,TITL,NTP,NAT,A,G,T,C,P,D MOD19920 INTEGER * 2 IRES MOD19930 CHARACTER * 3 C6,C8,FF,FC,FD MOD19940 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD19950 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD19960 COMMON/BROLLP/INPBRL,NC(2,20),NB1(2,20),NB2(2,20) MOD19970 DIMENSION IGR(2,200),IGN(200),IDUM(200) MOD19980 DATA A/'A'/,G/'G'/,T/'T'/,C/'C'/,P/'P'/,D/''''/ MOD19990 DATA C6/'C6 '/,C8/'C8 '/ MOD20000 IRN=1 MOD20010 IGR(1,1)=1 MOD20020 IGN(1)=IRES(1) MOD20030 DO 10 I=2,NATM MOD20040 IF (IRES(I-1).EQ.IRES(I)) GO TO 10 MOD20050 IGR(2,IRN)=I-1 MOD20060 IRN=IRN+1 MOD20070 IGR(1,IRN)=I MOD20080 IGN(IRN)=IRES(I) MOD20090 10 CONTINUE MOD20100 IGR(2,IRN)=NATM MOD20110 IRNH=IRN/2 MOD20120 DO 100 L=1,IRNH MOD20130 IS=IGR(1,L) MOD20140 IF=IGR(2,L) MOD20150 FF=C8 MOD20160 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 20 MOD20170 FF=C6 MOD20180 20 DO 30 I=IS,IF MOD20190 FC=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD20200 IF (FC.NE.FF) GO TO 30 MOD20210 NC(1,L)=I MOD20220 30 CONTINUE MOD20230 M=0 MOD20240 DO 50 I=IS,IF MOD20250 DO 40 J=1,5 MOD20260 IF (NAT(I,J).EQ.D.OR.NAT(I,J).EQ.P) GO TO 50 MOD20270 40 CONTINUE MOD20280 M=M+1 MOD20290 IDUM(M)=I MOD20300 50 CONTINUE MOD20310 NB1(1,L)=IDUM(1) MOD20320 NB1(2,L)=IDUM(M) MOD20330 IS=IGR(1,IRN-L+1) MOD20340 IF=IGR(2,IRN-L+1) MOD20350 FD=C8 MOD20360 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 200 MOD20370 FD=C6 MOD20380 200 DO 60 I=IS,IF MOD20390 FC=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD20400 IF (FC.NE.FD) GO TO 60 MOD20410 NC(2,L)=I MOD20420 60 CONTINUE MOD20430 M=0 MOD20440 DO 80 I=IS,IF MOD20450 DO 70 J=1,5 MOD20460 IF (NAT(I,J).EQ.D.OR.NAT(I,J).EQ.P) GO TO 80 MOD20470 70 CONTINUE MOD20480 M=M+1 MOD20490 IDUM(M)=I MOD20500 80 CONTINUE MOD20510 NB2(1,L)=IDUM(1) MOD20520 NB2(2,L)=IDUM(M) MOD20530 100 CONTINUE MOD20540 RETURN MOD20550 END MOD20560 C MOD20570 C------------------------- MOD20580 C SUBROUTINE SETTOR MOD20590 C------------------------- MOD20600 SUBROUTINE SETTOR MOD20620 CHARACTER * 4 MH MOD20630 CHARACTER * 1 IR,TITL,NTP,NAT,A,G MOD20640 INTEGER * 2 IRES MOD20650 CHARACTER * 3 FF(6),FC(4),FD(4),ATAB1(6),ATAB2(4),ATAB3(4),CHECK MOD20660 X ,ATAB4(5),FR(5) MOD20670 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD20680 COMMON/ATOM/NATM,ATM(3,1000),NTP(1000),IRES(1000),NAT(1000,5),NPLAMOD20690 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) MOD20700 DIMENSION IGR(2,200),IGN(200),IDUM(200) MOD20710 DATA ATAB1/'P ','O5''','C5''','C4''','C3''','O3'''/ MOD20720 DATA ATAB4/'C4''','O4''','C1''','C2''','C3'''/ MOD20730 DATA ATAB2/'C4 ','N9 ','C1''','O4'''/ MOD20740 DATA ATAB3/'C2 ','N1 ','C1''','O4'''/ MOD20750 MOD20760 DATA A/'A'/,G/'G'/ MOD20770 IRN=1 MOD20780 IGR(1,1)=1 MOD20790 IGN(1)=IRES(1) MOD20800 DO 10 I=2,NATM MOD20810 IF (IRES(I-1).EQ.IRES(I)) GO TO 10 MOD20820 IGR(2,IRN)=I-1 MOD20830 IRN=IRN+1 MOD20840 IGR(1,IRN)=I MOD20850 IGN(IRN)=IRES(I) MOD20860 10 CONTINUE MOD20870 IGR(2,IRN)=NATM MOD20880 IRNH=IRN/2 MOD20890 C MOD20910 C GENERATE ATOM NUMBERS FOR 1ST AND 2ND STRANDS MOD20920 DO 200 M=1,2 MOD20940 NUP=0 MOD20950 DO 110 K=1,IRNH MOD20960 L=K+(M-1)*IRNH MOD20970 N=0 MOD20980 NNR=0 MOD20990 IS=IGR(1,L) MOD21000 IF=IGR(2,L) MOD21010 DO 20 J=1,4 MOD21020 20 FD(J)=ATAB2(J) MOD21030 IF (NTP(IS).EQ.A.OR.NTP(IS).EQ.G) GO TO 40 MOD21040 DO 30 J=1,4 MOD21050 30 FD(J)=ATAB3(J) MOD21060 40 DO 60 J=1,6 MOD21070 DO 50 I=IS,IF MOD21080 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD21090 IF (CHECK.NE.ATAB1(J)) GO TO 50 MOD21100 NUP=NUP+1 MOD21110 IF (NUP.GT.500) GO TO 160 MOD21120 NATO(M,NUP)=I MOD21130 GO TO 60 MOD21140 50 CONTINUE MOD21150 60 CONTINUE MOD21160 DO 80 J=1,4 MOD21170 DO 70 I=IS,IF MOD21180 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD21190 IF (CHECK.NE.FD(J)) GO TO 70 MOD21200 N=N+1 MOD21210 IF (N.GT.4) GO TO 150 MOD21220 NCHI(M,K,N)=I MOD21230 GO TO 80 MOD21240 70 CONTINUE MOD21250 80 CONTINUE MOD21260 DO 100 J=1,5 MOD21270 DO 90 I=IS,IF MOD21280 CHECK=NAT(I,1)//NAT(I,2)//NAT(I,3) MOD21290 IF (CHECK.NE.ATAB4(J)) GO TO 90 MOD21300 NNR=NNR+1 MOD21310 IF (NNR.GT.5) GO TO 170 MOD21320 NRNG(M,K,NNR)=I MOD21330 GO TO 90 MOD21340 90 CONTINUE MOD21350 100 CONTINUE MOD21360 110 CONTINUE MOD21370 200 CONTINUE MOD21380 RETURN MOD21390 150 WRITE (LUW,500) FD,L MOD21400 500 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD21410 X 4(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 4') MOD21420 STOP MOD21430 160 WRITE (LUW,501) ATAB1 MOD21440 501 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD21450 X 6(2X,A3,','),' EXCEEDS 500') MOD21460 STOP MOD21470 170 WRITE (LUW,502) ATAB4,L MOD21480 502 FORMAT (//,' ***** INPUT ERROR, NUMBER OF ATOMS OF TYPE ', MOD21490 X 5(2X,A3,','),' IN RESIDUE ',I4,' EXCEEDS 5') MOD21500 STOP MOD21510 END MOD21520 C MOD21530 C------------------------- MOD21540 C SUBROUTINE TORANG MOD21550 C------------------------- MOD21560 SUBROUTINE TORANG MOD21580 CHARACTER * 4 MH MOD21590 CHARACTER * 8 NNAME(2,100,5) MOD21600 CHARACTER * 1 IR,TITL,NTP,NATT,SLASH MOD21610 CHARACTER * 2 BTM(3) MOD21620 INTEGER * 2 IRES MOD21630 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),ICORL MOD21640 COMMON/ATOM/NAT,ATM(3,1000),NTP(1000),IRES(1000),NATT(1000,5),NBP MOD21650 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,100,5) MOD21660 DIMENSION NA(4),ANG(300),ACHI(100),ANSW(200,14),ARG(100,5) MOD21670 X ,SIG(14),SSQ(14),ANGL(2,200,5),AV(14),SD(14) MOD21680 Y ,AVV(2,100),THAU(2,100),FAN(200),ANSX(200) MOD21690 DATA SLASH/'-'/ MOD21700 500 FORMAT(9F8.1) MOD21710 501 FORMAT(/,' STRAND',I5) MOD21720 502 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHIMOD21730 1 DIF EP-ZE',/) MOD21740 503 FORMAT(/,' ALPHA BETA GAMMA DELTA EPSILON ZETA CHIMOD21750 1 MEAN EP-ZE',/) MOD21760 504 FORMAT(/,' V0 V1 V2 V3 V4 Pseud. DeltaMOD21770 1',/) MOD21780 505 FORMAT(I5,' ATOMS AND',I5,' BASE PAIRS') MOD21790 506 FORMAT(1X,' TORSION ANGLE CALCULATION, NEWHEL91') MOD21800 507 FORMAT (/,1X,72A1,/) MOD21810 508 FORMAT(8(2X,'______'),/) MOD21820 509 FORMAT(7F8.2,8X,' AV',/) MOD21830 510 FORMAT(7F8.2,8X,' SD',///) MOD21840 511 FORMAT(2(5X,'-',2X),7F8.1) MOD21850 512 FORMAT (4F8.1,2(5X,'-',2X),3F8.1) MOD21860 513 FORMAT(6(2X,'______'),/) MOD21870 514 FORMAT(6F8.2,' AV',/) MOD21880 515 FORMAT(6F8.2,' SD',///) MOD21890 516 FORMAT (/,' SUGAR ANGLES',//,2X,5(A8,2X),' AVERAGE THAU(M)' MOD21900 * ,/) MOD21910 517 FORMAT (6F10.1,F12.4) MOD21920 518 FORMAT(6F8.1,'(',F5.1,')') MOD21930 519 FORMAT (1X,'SUGAR PSEUDOROTATION PARAMS, NEWHEL91') MOD21940 555 FORMAT(1H1) MOD21950 C MOD21960 C READ STARTING PARAMETERS MOD21970 RAD=0.0174533 MOD21990 DANG=SIN(36*RAD)+SIN(72*RAD) MOD22000 WRITE(LUW,555) MOD22010 WRITE(LUW,506) MOD22020 WRITE(LUW,507)TITL MOD22030 WRITE(LUW,505)NAT,NBP MOD22040 C MOD22050 C READ ATOM COORDINATES MOD22060 2020 FORMAT(3F10.5,11X,A1,I2,5A1) MOD22080 REWIND L12 MOD22090 DO 10 I=1,NAT MOD22100 10 READ (L12,2020) (ATM(J,I),J=1,3),NTP(I),IRES(I),(NATT(I,J),J=1,5) MOD22110 C MOD22120 C GET MAIN CHAIN AND CHI ATOM NUMBERS MOD22130 IF (INPTOR.EQ.0) CALL SETTOR MOD22150 50 CONTINUE MOD22170 DO 60 JC=1,14 MOD22190 SIG(JC)=0. MOD22200 SSQ(JC)=0. MOD22210 DO 60 IC=1,50 MOD22220 60 ANSW(IC,JC)=0. MOD22230 N1=0 MOD22240 DO 65 M=1,2 MOD22250 DO 65 I=1,100 MOD22260 65 AVV(M,I)=0. MOD22270 DO 200 M=1,2 MOD22290 C MOD22300 C CALCULATE MAIN CHAIN TORSION ANGLES MOD22310 ANG(1)=0.0 MOD22330 ANG(2)=0.0 MOD22340 NMA=6*NBP-4 MOD22350 DO 80 I=1,NMA MOD22360 DO 70 J=1,4 MOD22370 IU=I+J-1 MOD22380 70 NA(J)=NATO(M,IU) MOD22390 CALL TORSON(NA,TE,ATM) MOD22400 I2=I+2 MOD22410 80 ANG(I2)=TE MOD22420 NMB=NMA+3 MOD22430 NMC=NMA+4 MOD22440 ANG(NMB)=0.0 MOD22450 ANG(NMC)=0.0 MOD22460 DO 120 I=1,NBP MOD22470 DO 110 K=1,5 MOD22480 DO 90 J=1,4 MOD22490 IU=K+J-1 MOD22500 IF (IU.GT.5) IU=IU-IU/5*5 MOD22510 NN=NRNG(M,I,IU) MOD22520 90 NA(J)=NRNG(M,I,IU) MOD22530 CALL TORSON(NA,TE,ATM) MOD22540 IF(TE-180.)669,669,670 MOD22550 670 TE=TE-360. MOD22560 669 CONTINUE MOD22570 ARG(I,K)=TE MOD22580 DO 100 J=1,3 MOD22590 IU=K+J-1 MOD22600 NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) MOD22610 IF (IU.GT.5) IU=IU-IU/5*5 MOD22620 NN=NRNG(M,I,IU) MOD22630 BTM(J)=NATT(NN,1)//NATT(NN,2) MOD22640 100 NA(J)=NN MOD22650 CALL ANGLE (NA,TE,ATM) MOD22660 ANGL(M,I,K) = TE/RAD MOD22670 NNAME(M,I,K)=BTM(1)//SLASH//BTM(2)//SLASH//BTM(3) MOD22680 AVV(M,I)=AVV(M,I)+ANGL(M,I,K) MOD22690 110 CONTINUE MOD22700 120 CONTINUE MOD22710 C MOD22720 C CALCULATE GLYCOSYL CHI ANGLES MOD22730 DO 140 I=1,NBP MOD22750 DO 130 J=1,4 MOD22760 130 NA(J)=NCHI(M,I,J) MOD22770 CALL TORSON(NA,TE,ATM) MOD22780 140 ACHI(I)=TE MOD22790 C MOD22800 C REARRANGE ANGLES AND PRINT OUT MOD22810 DO 180 I=1,NBP MOD22830 N1=N1+1 MOD22840 IM=NBP*(M-1)+I MOD22850 DO 150 J=1,6 MOD22860 NO=6*I-6+J MOD22870 150 ANSW(IM,J)=ANG(NO) MOD22880 ANSW(IM,7)=ACHI(I) MOD22890 DO 160 J=1,5 MOD22900 160 ANSW(IM,8+J)=ARG(I,J) MOD22910 ANSW(IM,14)=(ATAN(((ARG(I,5)+ARG(I,2))-(ARG(I,4)+ARG(I,1)))/ MOD22920 X (2.*ARG(I,3)*DANG)))/RAD MOD22930 IF(ARG(I,3))671,672,672 MOD22940 671 ANSW(IM,14)=ANSW(IM,14)+180. MOD22950 672 CONTINUE MOD22960 FAN(IM)=ANSW(IM,14) MOD22970 IF (FAN(IM).LT.0.) FAN(IM)=360.+ANSW(IM,14) MOD22980 180 CONTINUE MOD22990 200 CONTINUE MOD23000 M=1 MOD23010 WRITE(LUW,501)M MOD23020 WRITE(LUW,502) MOD23030 DO 210 I=1,NBP MOD23040 IM=NBP*2-I+1 MOD23050 DEL=ANSW(I,4)-ANSW(IM,4) MOD23060 ANSW(I,8)=DEL MOD23070 ANSX(I)=ANSW(I,5)-ANSW(I,6) MOD23080 IF(I.GT.1.AND.I.NE.NBP) WRITE(LUW,500)(ANSW(I,J),J=1,8),ANSX(I) MOD23090 IF(I.EQ.1) WRITE(LUW,511)(ANSW(I,J),J=3,8),ANSX(I) MOD23100 IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(I,J),J=1,4),(ANSW(I,J),J=7,8),ANSMOD23110 *X(I) MOD23120 210 CONTINUE MOD23130 M=2 MOD23150 WRITE(LUW,501)M MOD23160 WRITE(LUW,503) MOD23170 DO 220 I=1,NBP MOD23180 IM=I+NBP MOD23190 IN=NBP-I+1 MOD23200 FMEAN=0.5*(ANSW(IM,4)+ANSW(IN,4)) MOD23210 ANSW(IM,8)=FMEAN MOD23220 ANSX(IM)=ANSW(IM,5)-ANSW(IM,6) MOD23230 IF(I.GT.1.AND.I.NE.NBP) WRITE(LUW,500)(ANSW(IM,J),J=1,8),ANSX(IM) MOD23240 IF(I.EQ.1) WRITE(LUW,511)(ANSW(IM,J),J=3,8),ANSX(IM) MOD23250 IF(I.EQ.NBP) WRITE(LUW,512)(ANSW(IM,J),J=1,4),(ANSW(IM,J),J=7,8),AMOD23260 *NSX(IM) MOD23270 220 CONTINUE MOD23280 DO 230 M=1,2 MOD23290 DO 230 I=1,NBP MOD23300 IM=NBP*(M-1)+I MOD23310 DO 230 J=1,14 MOD23320 SIG(J) = SIG(J) + ANSW(IM,J) MOD23330 230 SSQ(J) = SSQ(J) + ANSW(IM,J)*ANSW(IM,J) MOD23340 DO 240 I=1,14 MOD23350 NN = N1 MOD23360 IF (I.LT.3.OR.(I.GT.4.AND.I.LT.7)) NN=N1-2 MOD23370 AV(I)=SIG(I)/NN MOD23380 SDZ = (NN*SSQ(I) - SIG(I)*SIG(I))/(NN*(NN-1)) MOD23390 IF (SDZ.LE.0.0001) SDZ=0. MOD23400 SD(I) = SQRT(SDZ) MOD23410 240 CONTINUE MOD23420 WRITE (LUW,508) MOD23430 WRITE (LUW,509) (AV(J),J=1,7) MOD23440 WRITE (LUW,510) (SD(J),J=1,7) MOD23450 WRITE(LUW,555) MOD23460 WRITE (LUW,519) MOD23470 WRITE(LUW,507)TITL MOD23480 DO 260 M=1,2 MOD23490 WRITE(LUW,501)M MOD23500 WRITE (LUW,504) MOD23510 DO 250 K=1,NBP MOD23520 I = (M-1)*NBP + K MOD23530 WRITE (LUW,500) (ANSW(I,J),J=9,14),ANSW(I,4) MOD23540 250 CONTINUE MOD23550 260 CONTINUE MOD23560 WRITE (LUW,513) MOD23570 WRITE (LUW,514) (AV(J),J=9,14) MOD23580 WRITE (LUW,515) (SD(J),J=9,14) MOD23590 WRITE(LUW,555) MOD23600 WRITE(LUW,507)TITL MOD23610 DO 280 M=1,2 MOD23620 WRITE(LUW,501)M MOD23630 WRITE (LUW,516) (NNAME(M,1,J),J=1,5) MOD23640 DO 270 K=1,NBP MOD23650 AVV(M,K)=AVV(M,K)/5 MOD23660 THAU(M,K)=SQRT((108.-AVV(M,K))/0.00186) MOD23670 WRITE (LUW,517) (ANGL(M,K,J),J=1,5),AVV(M,K),THAU(M,K) MOD23680 270 CONTINUE MOD23690 280 CONTINUE MOD23700 RETURN MOD23710 END MOD23720 C MOD23730 C------------------------- MOD23740 C SUBROUTINE TORSON MOD23750 C------------------------- MOD23760 C TORSION ANGLE CALCULATING SUBROUTINE MOD23790 SUBROUTINE TORSON(NA,TE,ATM) MOD23810 DIMENSION ATM(3,1000),NA(4) MOD23820 DIMENSION AV(3),BV(3),CV(3),S(3),T(3) MOD23830 DO 1 J=1,3 MOD23840 J1=J+1 MOD23850 NS=NA(J) MOD23860 NE=NA(J1) MOD23870 AV(J)=ATM(1,NE)-ATM(1,NS) MOD23880 BV(J)=ATM(2,NE)-ATM(2,NS) MOD23890 1 CV(J)=ATM(3,NE)-ATM(3,NS) MOD23900 S(1)=BV(1)*CV(2)-BV(2)*CV(1) MOD23910 S(2)=CV(1)*AV(2)-CV(2)*AV(1) MOD23920 S(3)=AV(1)*BV(2)-AV(2)*BV(1) MOD23930 T(1)=BV(2)*CV(3)-BV(3)*CV(2) MOD23940 T(2)=CV(2)*AV(3)-CV(3)*AV(2) MOD23950 T(3)=AV(2)*BV(3)-AV(3)*BV(2) MOD23960 RM=SQRT(AV(2)**2+BV(2)**2+CV(2)**2) MOD23980 SM=SQRT(S(1)**2+S(2)**2+S(3)**2) MOD23990 TM=SQRT(T(1)**2+T(2)**2+T(3)**2) MOD24000 TOP=AV(1)*(BV(2)*CV(3)-BV(3)*CV(2))+ MOD24010 *AV(2)*(BV(3)*CV(1)-BV(1)*CV(3))+ MOD24020 *AV(3)*(BV(1)*CV(2)-BV(2)*CV(1)) MOD24030 SAL=(RM*TOP)/(SM*TM) MOD24040 CAL=(S(1)*T(1)+S(2)*T(2)+S(3)*T(3))/(SM*TM) MOD24050 TE=57.29578*ATAN2(SAL,CAL) MOD24060 IF(TE)667,668,668 MOD24070 667 TE=TE+360. MOD24080 668 CONTINUE MOD24090 RETURN MOD24100 END MOD24110 C MOD24120 C------------------------- MOD24130 C SUBROUTINE XDRED MOD24140 C------------------------- MOD24150 SUBROUTINE XDRED MOD24170 CHARACTER * 5 ATAB MOD24180 CHARACTER* 4 MH,I,M,JZ,NAME MOD24190 CHARACTER*1 TITL,IR,FMT,FMKONN(72),FMCORL(72),IBLNK,M1,FMBRKH(72) MOD24200 CHARACTER * 1 AIR(4,30,10) MOD24210 COMMON/ATOM/NATM,ATM(3,1000),NAME(2,1000),NBP MOD24220 COMMON/DATA/IR(72),MH(37),LUR,LUW,L11,L12,L13,L14,TITL(72),IREAD MOD24230 DIMENSION AA(200) MOD24240 COMMON/HELIXP/NSEQ(200,10),MMH(10),NVEC,INPHEL,NN1(200),NN2(200), MOD24250 X ATAB(30,10),KSEQ(10) MOD24260 COMMON/INPUT/CELL(6),FMT(72),NPMIN,NPMAX,IFPUN,IFLAGP MOD24270 X ,IHELIX,IBROLL,ICYLIN,ITORNG MOD24280 COMMON/CYLINP/INPCYL,NP(2,20),NC(2,20),NO(2,10) MOD24290 COMMON/BROLLP/INPBRL,NBB(2,20),NB1(2,20),NB2(2,20) MOD24300 COMMON/TORANP/INPTOR,NCHI(2,100,4),NATO(2,500),NRNG(2,500) MOD24310 COMMON/BROOK/IBARF MOD24320 DATA FMBRKH/'(','T','3','1',',','3','F','8','.','3', MOD24330 X ',','T','2','0',',','A','1',',','T','2','5',',','2', MOD24340 Y 'A','1',',','T','1','4',',','3','A','1',')',38*' '/ MOD24350 DATA FMKONN/'(','T','1','9',',','3','F','1','0','.','5', MOD24360 X ',','T','9',',','6','A','1',')',53*' '/ MOD24370 DATA FMCORL/'(','T','1','6',',','3','F','1','0','.','5', MOD24380 X ',','T','4',',','A','1',',','T','1','0',',', MOD24390 Y '5','A','1',')',46*' '/ MOD24400 DATA JZ/' '/,IBLNK/' '/ MOD24410 NA=0 MOD24420 10 FORMAT(A4,72A1) MOD24430 20 FORMAT(1H ,A4,72A1) MOD24440 C MOD24450 C READ IN FREE FORMAT MOD24460 IBARF=0 MOD24480 30 READ(LUR,10,END=820)I,IR MOD24490 NA=0 MOD24500 NB=0 MOD24510 IF(I.NE.JZ)GO TO 35 MOD24520 WRITE (LUW,20) I,IR MOD24530 GO TO 30 MOD24540 35 N=0 MOD24550 NK=37 MOD24560 40 IF(I.EQ.MH(NK)) GOTO 50 MOD24570 NK=NK-1 MOD24580 IF(18-NK)40,50,50 MOD24590 50 NK=NK-17 MOD24600 GO TO 180 MOD24610 60 W=1. MOD24620 70 V=0. MOD24630 NB=0 MOD24640 Y=1. MOD24650 U=10. MOD24660 Z=1. MOD24670 GOTO 100 MOD24680 80 Z=Y*Z MOD24690 V=U*ABS(V)+Z*XX MOD24700 NB=1 MOD24710 IF(V)90,100,90 MOD24720 90 V=SIGN(V,W) MOD24730 W=V MOD24740 100 N=N+1 MOD24750 K=10 MOD24760 IF(72-N)240,110,110 MOD24770 110 XX=0. MOD24780 DO 120 MM=1,10 MOD24790 M1=MH(MM)(1:1) MOD24800 IF(IR(N).EQ.MH(MM)) GOTO 80 MOD24810 120 XX=XX+1. MOD24820 GOTO 140 MOD24830 130 M1=MH(K+9)(1:1) MOD24840 IF(IR(N).EQ.M1) GOTO 240 MOD24850 140 K=K-1 MOD24860 IF(K-2)240,130,130 MOD24870 150 U=1. MOD24880 Y=0.1 MOD24890 GOTO 100 MOD24900 160 READ(LUR,10,END=820)M,IR MOD24910 WRITE(LUW,20)M,IR MOD24920 N=0 MOD24930 IF(JZ.EQ.M)GOTO 60 MOD24940 170 WRITE (LUW,5000) MOD24950 5000 FORMAT (/,' **************** INPUT ERROR') MOD24960 GOTO 830 MOD24970 180 CONTINUE MOD24980 220 DO 230 J=1,200 MOD24990 230 AA(J)=0. MOD25000 NA=0 MOD25010 WRITE(LUW,20)I,IR MOD25020 GOTO 60 MOD25030 240 IF(K-2) 250,150,250 MOD25040 250 NA=NA+NB MOD25050 IF(200-NA)170,260,260 MOD25060 260 IF(-NA)270,280,280 MOD25070 270 AA(NA)=V+AA(NA) MOD25080 280 IF(K-9)290,160,350 MOD25090 290 IF(K-3)60,300,60 MOD25100 300 W=-1. MOD25110 GOTO 70 MOD25120 350 GOTO(490,400,410,420,430,440,450,460,470,480,500,510,520,530,540 MOD25130 X,550,560,570,580,820) , NK MOD25140 C MOD25150 C UNITCELL MOD25160 400 CONTINUE MOD25180 IF (NA.LT.6) GO TO 170 MOD25190 DO 402 J=1,6 MOD25200 402 CELL(J)=AA(J) MOD25210 GO TO 30 MOD25220 C MOD25230 C FPUN MOD25240 410 CONTINUE MOD25260 IFPUN=1 MOD25270 GO TO 30 MOD25280 C MOD25290 C PMIN MOD25300 420 CONTINUE MOD25320 NPMIN=AA(1) MOD25330 GO TO 30 MOD25340 C MOD25350 C PMAX MOD25360 430 CONTINUE MOD25380 NPMAX=AA(1) MOD25390 GO TO 30 MOD25400 C MOD25410 C KONN MOD25420 440 CONTINUE MOD25440 DO 441 J=1,72 MOD25450 441 FMT(J)=FMKONN(J) MOD25460 IREAD=1 MOD25470 GO TO 30 MOD25480 C MOD25490 C CORL MOD25500 450 CONTINUE MOD25520 IREAD=2 MOD25530 DO 451 J=1,72 MOD25540 451 FMT(J)=FMCORL(J) MOD25550 GO TO 30 MOD25560 C MOD25570 C FFMT MOD25580 460 CONTINUE MOD25600 DO 461 J=1,72 MOD25610 461 FMT(J)=IR(J) MOD25620 IREAD=2 MOD25630 GO TO 30 MOD25640 C MOD25650 C HELX MOD25660 470 CONTINUE MOD25680 IHELIX=IHELIX+1 MOD25690 NNUMBR=0 MOD25700 J=0 MOD25710 471 CONTINUE MOD25720 J=J+1 MOD25730 IF (J.GT.72) GO TO 474 MOD25740 IF (IR(J).EQ.IBLNK) GOTO 471 MOD25750 NNUMBR=NNUMBR+1 MOD25760 AIR(1,NNUMBR,IHELIX)=IR(J) MOD25770 AIR(2,NNUMBR,IHELIX)=IR(J+1) MOD25780 AIR(3,NNUMBR,IHELIX)=IR(J+2) MOD25790 AIR(4,NNUMBR,IHELIX)=IR(J+3) MOD25800 J=J+3 MOD25810 GO TO 471 MOD25820 474 KSEQ(IHELIX)=NNUMBR MOD25830 GO TO 30 MOD25840 C MOD25850 C NATM MOD25860 480 CONTINUE MOD25880 IF (AA(1).NE.0) NATM=AA(1) MOD25890 GO TO 30 MOD25900 C MOD25910 C DUMM MOD25920 490 CONTINUE MOD25940 GO TO 30 MOD25950 C MOD25960 C TITL MOD25970 500 DO 501 J=1,72 MOD25990 501 TITL(J)=IR(J) MOD26000 GO TO 30 MOD26010 C MOD26020 C FLGP MOD26030 510 CONTINUE MOD26050 IFLAGP=1 MOD26060 GO TO 30 MOD26070 C MOD26080 C BASE MOD26090 520 CONTINUE MOD26110 NBP=AA(1) MOD26120 GO TO 30 MOD26130 C MOD26140 C BROL MOD26150 530 CONTINUE MOD26170 IBROLL=1 MOD26180 IF (NA.EQ.0) GO TO 30 MOD26190 INPBRL=1 MOD26200 IF (NBP*6.EQ.NA) GO TO 531 MOD26210 WRITE (LUW,5004) MOD26220 5004 FORMAT (/,' ****** INPUT ERROR, NUMBER OF INPUT PARAMETERS DOES NOMOD26230 XT MATCH, CHECK NUMBER OF BASE PAIRS') MOD26240 STOP MOD26250 531 JJ=0 MOD26260 DO 532 J=1,NBP MOD26270 JJ=JJ+1 MOD26280 NBB(1,J)=AA(JJ) MOD26290 NBB(2,J)=AA(JJ+1) MOD26300 NB1(1,J)=AA(JJ+2) MOD26310 NB1(2,J)=AA(JJ+3) MOD26320 NB2(1,J)=AA(JJ+4) MOD26330