CONSENSUS CONFIGURATIONAL BIAS MONTE CARLO METHOD AND SYSTEM FOR PHARMACOPHORE STRUCTURE DETERMINATION

Abstract: In a specific embodiment, this invention comprises a method for selecting highly targeted lead compounds for design of a drug that binds to a target molecule. The method comprises screening a diversity library against the target molecule of interest to pick the selectively binding members. Next the structure of the selected members is examined and a candidate pharmacophore responsible for the binding to the target molecule is determined. Next, preferably by REDOR nuclear magnetic resonance, several highly accurate interatomic distances are determined in certain of the selected members which are related to the candidate pharmacophore. A highly accurate consensus, configurational bias, Monte Carlo method determination of the structure of the candidate pharmacophore is made using the structure of the selected members and incorporating as constraints the shared selected members and incorporating as constraints the shared candidate phamacophore and the several measured distances. This determination is adapted to efficiently examine only relatively low energy configurations while respecting any structural constraints present in the organic diversity library. If the diversity library contains short peptides, the determination respects the known degrees of freedom of peptides as well as any internal constraints, such as those imposed by disulfide bridges. Finally, the highly accurate pharmacophore so determined is used to select lead organics for drug development targeted at the initial target molecule.

Description: CONSENSUS CONFIGURATXONAL BIAS MONTE CARLO METHOD AND SYSTEM FOR PHARMACOPHORE STRUCTURE DETERMINATION This specification includes in Sec. 8 computer program listings that are exemplary embodiments of the computer programs of this invention. A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by any one of the patent disclosure, as it appears in the Patent and Trademark Office patent files and records, but otherwise reserves all copyright rights whatsoever. This invention was made with Government support under Grant number 1R43CA62752-01 awarded by the National Institutes of Health. The Government has certain rights in the invention. 1. FIELD OF THE INVENTION The field of this invention is computer assisted methods of drug design. More particularly the field of this invention is computer implemented smart Monte Carlo methods which utilize NMR and binders to a target of interest as inputs to determine highly accurate molecular structures that must be possessed by a drug in order to achieve an effect of interest. Illustrative U.S. Patents are 5,331,573 to Balaji et al., 5,307,287 to Cramer, III et al., 5,241,470 to Lee at al., and 5,265,030 to Skolnick et al. 2. BACKGROUND Protein interactions have recently emerged as a fundamental target for pharmacological intervention. For example, the top two major uncured diseases in the United States are atherosclerosis (the principal cause of heart attack and stroke) and cancer. These diseases are responsible for greater than 50% of all U.S. mortality and cost the U.S. economy over $200 billion per year. A consistent picture of these diseases, which has gradually emerged during the past ten years of molecular biological and medical research, views both as triggered by disordering of specific molecular recognition events that take place among sets of proteins present in both the normal and disease states . Hierarchical, organized patterns of protein-protein interactions are often referred to as "pathways" or "cascades." At the molecular level, cancers have been determined to be the deregulation of pathways of interacting proteins responsible for guiding cellular growth and differentiation. During the past year, individual cellular events have been organized into nearly complete mechanistic explanations of how a cell's behavior is controlled by its environment and how communication pathway errors lead to uncontrolled proliferation and cancer. Disruption in similar pathways are responsible for the proliferation of blood vessel walls marking the atherosclerotic disease state (Cook et al., 1994, Nature 369:361-362; Hall, 1994, Science 264:1413-1414; Ross, 1993, Nature 362:801-809; Zhang et al . , 1993, Nature 364:308-313) . Inhibition or stimulation of particular protein- substrate interactions have long been known drug targets. Many important anti-hypertensives, neurotransmitter analogues, antibiotics, and chemotherapeutic agents act in this fashion. Captopril, an antihypertensive drug, was designed based on its ability to antagonize a focal blood- pressure-regulating enzyme. Proteins involved in biological processes, either as part of protein-protein pathways -or as enzymes, are composed of domains (Campbell et al . , 1994, Trend. BioTech. 12:168-172; Rothberg et al., 1992, J. Mol. Biol. 227:367-370) . Domains, or regions of the protein of stable three dimensional (secondary and tertiary) structures, play several major roles, including providing on their surface small regions ("examples of targets") , where proteins and substrates are able to bind and interact, and functioning as structural units holding other domains together as part of a large protein (tertiary and quaternary structure) . The interaction surface of a domain or target is fundamental to determining binding specificity. Targets are often small enough that the principal contribution to the binding energy is short range, highly localized to several amino acids (Wells, 1994, Curr. Op. Cell Biol . 6:163-174) . The functional specificity of targets and domains, responsible for the incredible diversity of cellular function, ultimately rests with the arrangement of amino acid side chains forming their interaction surfaces, or targets (Marengere et al . , 1994, Nature 369:502-505) . It can be appreciated, therefore, that pharmacological intervention affecting the specific protein-protein and protein-substrate recognition events occurring at protein targets is of fundamental importance, particularly for effective drug design. However, achieving desired pharmacological interventions in a predictable manner remains as elusive as ever. Early approaches to drug design depended on the chance observation of biological effects of a known compound or the screening of large numbers of exotic compounds, usually derived from natural sources, for any biological effects. The nature of the actual protein target was usually unknown. 2.1. TARGET STRUCTURE-BASED APPROACHES TO DRUG DESIGN Rational approaches to drug design.have met with only limited success. Current rational approaches are based on first determining the entire structure of the proteins involved in particular interactions, examining this structure for the possible targets, and then predicting possible drug molecules likely to bind to the possible target. Thus the location of each of the thousands of atoms in a protein must be accurately determined before drug design can begin. 6/30849 Direct experimental and indirect computational methods for protein structure determination are in current use. However, none of these methods appears to be sufficiently accurate for drug design purposes according to current rational approaches. The primary direct experimental methods for determining the structure of proteins involved in particular interactions are X-ray crystallography, relying on the interaction of electron clouds with X-rays, and liquid nuclear magnetic resonance (NMR) , relying on correlations between polarized nuclear spins interacting via indirect dipole-dipole interactions. X-ray methods provide information on the location of every heavy atom in a crystal of interest accurate to 0.5-2.0 A (1 A = 10 "8 cm) . Drawbacks of x-ray methods include difficulties in obtaining high-quality crystals, expense and time associated with the crystallization process, and difficulties in resolving whether or not the structure of the crystalline forms is representative of the in vivo conformation (Clore et al. , 1991, J. Mol. Biol. 221:47; Shaanan et al. , 1992, Science 227:961-964) . High resolution, multidimensional, liquid phase NMR techniques represent an attractive alternative, to the extent that they can be applied in si tu (i.e., in aqueous environment) to the study of small protein domains (Yu et al., 1994, Cell 76:933-945). However, the complexity of the analysis of the various mutual correlations is time consuming, and the correlations (primarily from the nuclear Overhausser effect) provide no better accuracy than X-ray methods. Isotopic enrichment of proteins with "C and 1S N reduces the time associated with analysis, but at a great expense (Anglister et al., 1993, Frontiers of NMR in Biology III LZ011) . Protein structures determined by any of these current methods do not predict success in subsequent drug design. Resolution obtainable either by measurement or computation, generally 0.5-2 A, has often been found to be inadequate for effective direct drug design, or for selection of a lead compound from organic compound libraries. The resolution required to understand both drug affinity and drug specificity, although not precisely known, is probably measured in fractions of an A, down to 0.1 A (MacArthur et al . , 1994, Trend. BioTech. 12:149-153) . This accuracy appears to be beyond the capabilities of many current methodologies. Prior research has identified tools which, although promising, cannot be used in a coordinated manner for drug design. One promising measurement approach with speed, simplicity, accuracy, and the ability to carefully control the measurement environment is rotational echo double resonance (REDOR) NMR, a type of solid state NMR (Guillion and Schaefer, 1989, J. Magnetic Resonance 81:196; Holl et al . , 1990, J. Magnetic Resonance 81:620-626 and McWherter, 1993, J. Am. Chem. Soc. 115:238-244) . REDOR accuracy can be below the 0.1 A believed to be sufficient for direct drug design. However, since REDOR measures only a few selected distances, it is not usable in drug design methods which depend on the initial determination of the complete structure of the protein containing the target of interest . Once a target's structure is determined by the above methods, most rational drug design paradigms call for the prediction of small drug structures that will bind (or dock) to the target. This prediction is generally done by computational methods, of which several are in current use. Most seek to predict the position of all the thousands of atoms in a drug structure. Purely ab ini tio computational approaches to high resolution structure analysis, such as quantum statistical mechanics and molecular dynamics, require prohibitive computing resources. To apply either approach, the potential energy, or Hamiltonian, of the entire system must be known. Statistical mechanics provides an expression for the probability of any given protein configuration as a ratio of partition functions. Proper quantum statistical mechanics required for an exact evaluation of full protein partition functions is not currently computationally feasible, as it would involve many thousands of atoms including the target, the protein, and the aqueous environment. The application of even simple, approximate quantum statistical mechanics to simple systems in aqueous environments is currently a non-trivial task (Chandler, 1991, in Liquids. Freezing, and Glass Transitions. Elsevier, NY, p. 195) . Molecular dynamics computes the dynamics of a molecule's motion in time. Computing the atomic dynamics of all the perhaps thousands atoms of a protein is an extreme computational burden. Only picoseconds, or at most a few nanoseconds, of molecular time can be simulated, which is insufficient to determine a high resolution, equilibrium, structure (Smit et al . , 1994, J. Phys . Chem. 98:8442-8452) . In any case, most of the information determined is wasted, since only the structure of the protein binding target are of interest in drug design. Further, current approximate computational techniques for protein structure determination are in need of greater accuracy or efficiency. The most common techniques depend on Molecular Dynamics or Monte Carlo methods (Nikiforovich, 1994, Int. J. Peptide Protein Res. 44:513-531; Brύnger and Karplus, 1991, Ace. Chem. Res. 24:54-61) . These methods randomly alter initial molecular structures by generating simulated thermal perturbations, and then average the ensemble of results to determine a final structure. The generated perturbation must preserve all structural constraints and be energetically favorable. If both conditions are not met, the perturbation will be discarded. Current Monte Carlo methods applied to constrained protein structure determinations productively use only approximately 1 out of 10 5 perturbed structures generated (Siepmann et al . , 1993, Nature 365:330-332) . This extreme waste of computer resources results in time consuming, low resolution structure determinations. To summarize, existing rational drug design methods based on identification of target structure fail to reliably yield drug molecules due to experimental structure 6/30849 determination difficulties and computational difficulties associated with predicting drug structures with ill-defined Hamiltonianε . 2.2. DIVERSITY-BASED APPROACHES TO DRUG DESIGN Another method for exploring protein target interactions utilizes "recognition systems" which comprise huge libraries of related molecules (Clarkson et al . , 1994, Trend. BioTech. 12:173-184) . From such a library only those members binding to the target of interest are selected. Such recognition systems must encompass the structural diversity of protein targets while being amenable to serve for the selection of lead compounds for drug design. Antibodies are one classic example of such a system that certainly meets the recognition requirement. Unfortunately, there is a need to determine the antibody structures needed for lead compound selection more rapidly and accurately. While about 2000 recognition regions have been sequenced, only about 23 in the Brookhaven Protein Structural Database have structures determined to even within 2 A (Rees et al . , 1994, Trends in Biotech. 12:199-206) . Promising recognition systems at the opposite extreme comprise huge libraries of small peptides. The small peptides must be sufficiently diverse so that they attain a level of affinity and specificity similar to that obtained by protein domains. Given the role peptides play in nature, this condition can be met by surprisingly small structures, with 6 to 12 amino acids. However, linear peptides are either unstructured or weakly structured at room temperature in aqueous solutions (Alberg et al., 1993, Science 262:248; Skalicky et al. , 1993, Protein Science 10:1591-1603) . From a practical viewpoint, linear peptides must be constrained to reduce their degrees of freedom (reduced conformational entropy) and to increase their chances for strongly binding. These constraints, or scaffolds, limit the range of stable conformations and make more straightforward determining bound structure (Olivera et al . , 1990, Science 249:259; Tidor et al., 1993, Proteins: Structure Function and Genetics 15:71) . Methods are now available to create such libraries and to select library members that recognize a specific protein target . The production of constrained peptide diversity libraries requires synthesizing oligonucleotides with the desired degeneracy to code for the peptides and legating them into selection vectors (Goldman et al . , 1994, Bio/Tech. 10:1557-1561) . Once a constrained structured diversity library is created, it is a source from which to select specific members that bind to a target of interest. Beginning with a known pathway involving specific domain-domain or protein-substrate interactions at a target, molecular biological methods can be used to identify in a matter of days small ensembles of highly constrained peptides from these huge libraries that bind to these domains with high affinity and specificity. While this field has been exploding in the last few years and showing great potential, it is severely limited by its use in isolation without the benefit of integrated structural analysis needed both to derive the high resolution structures of binding peptides and also to direct the construction of additional structured libraries. Drug design is not aided by having library members recognizing the protein target of interest but without any understanding of why the recognition occurs. This is entirely similar to the random screening methods of early fortuitous drug design efforts. Unfortunately, rational drug design according to current approaches (target structure-based) remains an inefficient, laborious process with a disproportionately high lead- compound failure rate. Presently, about 90% of lead compounds fail to emerge successfully from clinical trials (Trends in U.S. Pharmaceutical Sales and Research and Development, Pharmaceutical Manufacturing Association, Washington, D.C., 1993) . It is becoming clear that low-resolution structures of an entire protein or target (at 0.5-2 A) , or an uncharacterized lead, such as produced by chemical diversity methods, leave much to be desired for use in drug design. If the limitations of prior art methods were overcome and a sufficiently accurate structure needed by a molecule to bind to a target of interest could be determined, existing chemical libraries could be searched for highly targeted lead compounds with similar structure (Martin, 1992, J. Medicinal Chem. 35:2145-2154) . This database search can be based not only on chemical and electronic properties, but also on geometric information. Such searches that have high resolution (better than 0.25 A) , would provide a vast improvement over the prior art, as lower resolutions lead to an exponentially increasing number of potential leads. Computational methods to determine high resolution drug structures from recognition system binding information or NMR partial distance measurements are not currently available. No current structure determination methods uses such additional information to make more efficient or more accurate determination of high resolution structures (Holzman, 1994, Amer. Sci . 872:267) . Citation of a reference or discussion hereinabove shall not be construed as an admission that such is prior art to the present invention. 3. SUMMARY OF THE INVENTION It is a broad object of this invention to address the prior art problems of drug design by providing a method of rational design of drugs that achieve their effect by binding to a target molecule or molecular complex of interest. Importantly, this object is achieved without requiring determination of the structure of the molecule or molecular complex ("target molecule") bearing the target or even of the target itself. The method is target structure independent. The method of the invention uses an interdisciplinary combination of computational modeling and simulation, experimental distance constraints, and molecular biology. In an important aspect, the invention provides a computer implemented modeling and simulation method to determine a highly accurate consensus structure for the pharmacophore and a structure for the remainder of the molecule from diversity library members that bind to the protein target of interest . Where prior structure determination methods focused on the structure of the target molecule or of the target, the method of this invention is uniquely adapted to focus instead on the structures of molecules that bind to the target . Such structural information is directly applicable to drug design since it defines the structure a drug must possess to bind to the target of interest. Also, this structural information is much easier to determine by use of the present invention, since it concerns molecules with many fewer atoms than the target molecule. The method of the invention achieves accuracy by improving upon the accuracy and utility of the input structural information. In a further embodiment of the invention, the method employed for structural determination is a smart Monte Carlo technique adapted to small constrained molecules . The structure determination method of the invention allows one to take maximum advantage of the information obtained from the molecular biological selection of the diversity library members that tightly and specifically bind to the target molecule of interest . The selected library members must share some common structure to bind to the same target molecule. The smart Monte Carlo computer method of this invention specifically seeks and provides this common structure. The invention also provides a method of performing REDOR NMR measurements of molecules on a solid phase substrate. In a preferred embodiment, the substrate is a solid phase on which the molecule (e.g., peptide) has been synthesized, with a high degree of purity. In another preferred embodiment, performing REDOR measurements of such a molecule on a substrate can be done in a dry nitrogen atmosphere, under /30849 hydrated conditions, and when the molecule is either free or bound to a target. In a specific embodiment, the REDOR measurements are accurate to better than 0.05 A from 0 to 4 A, and to better than 0.1 A from 4 to 8 A. In an advantageous aspect of the invention, the structure determination method makes maximum use of these highly accurate internuclear distance measurements to constrain the determined common structure for the binding library members. The invention also provides methods of identifying a compound that specifically binds to a target molecule, by first screening a diversity library, and then using a genetic selection method for screening the compounds identified from the diversity library. In broad aspects, the invention provides a method and apparatus for rational and predictable design of new and/or improved drugs that achieve their effect by binding to a specified target molecule. More particularly, the invention is directed to a method for the rational selection of highly specific lead compounds for such drug design, including the computer implemented step of highly accurate determination of the structure responsible for this target binding by the highly accurate, consensus, configurational bias Monte Carlo method. A lead compound serves as a starting point for drug development both because it specifically binds to the protein target of interest, achieving the biological effect of interest, and because it has or can be modified to have good phar acokinetics and medicinal applicability. A final drug may be the lead compound or may be derived therefrom by modifying the lead to maximize beneficial effects and minimize harmful side-effects. Although any lead compound is useful, a lead that tightly and specifically binds to the target molecule of interest in a known manner, such as can be provided by the invention, is of great use. Knowledge of the high resolution structures in a lead compound responsible for its binding and activity provides a more focused and efficient drug development process. The methods of the invention improve lead compound determination, by determining the "pharmacophore", the precise structural characteristics needed for a lead compound to specifically bind to a target of interest. The most fundamental specification of a pharmacophore is in terms of the electronic properties necessary for a molecule to specifically bind to the surface of a target molecule. These properties may be fundamentally represented by requirements on the ground and low lying excited state wave functions of a pharmacophore, such as, for example, by specifying requirements on the well known multiple expansion of these wave functions. The preferred pharmacophore specification according to the invention is in terms of both the chemical groups making up the pharmacophore and determining its electronic properties and also the geometric relationships of these groups. This chemical representation is not the only possible representation of the pharmacophore. Several chemical arrangements may have similar electronic properties. For example, if a pharmacophore specification included an -OH group at a particular position, a substantially equivalent specification might include an -SH group at the same position. Equivalent chemical groups that may be substituted in a pharmacophore specification without substantially changing its nature are called "homologous". In particular embodiments, therefore, this invention provides a method and apparatus for the highly accurate determination of the pharmacophore needed to specifically bind to the target molecule of interest, by a specification of the geometric relationships of the important chemical groups. The pharmacophore is preferably determined by a smart Monte Carlo method from molecular biological input specifying molecules (preferably selected from among diversity libraries) that specifically bind to the target molecule and also preferably from REDOR NMR data specifying a few highly accurate distances in these selected molecules. /30849 An important advantage provided by the invention is the ability to make a pharmacophore structure determination without relying on any knowledge of the structure of the target molecule or target. Where the target molecule is a protein, conventional prior art methods have sought to sequence and determine the structure of the protein containing the target, hoping thereby to determine active sites by examination of the structure. A further important advantage of the invention is that this structure determination can be made by use of a relatively small number of actual physical position measurements. In contrast, conventional methods using X-ray crystallography and liquid NMR require determination of positions of all atoms in the molecule ("binder") that specifically binds to the target, and the target. An additional advantage provided by the invention is that, in a preferred embodiment wherein REDOR structural measurements provide input information, the accuracy of the pharmacophore structure determination can be at least approximately 0.25-0.50 A or better. This accuracy is provided by the combination of an efficient, Monte Carlo technique for structure determination with a few highly accurate distance determinations. 4. BRIEF DESCRIPTION OF THE DRAWINGS These and other features, aspects, and advantages of the present invention will become better understood by reference to the accompanying drawings, following description, and appended claims, where: Fig. 1 is the overall method of this invention in its broadest aspect; Fig. 2A and 2B are more detail for.the step of Fig. l for selecting candidate pharmacophore structures; Fig. 3 is more detail for the step of Fig. 1 for preforming distance measurements; Fig. 4 is more detail for the step of Fig. 3 for performing NMR measurements; Fig. 5 is REDOR NMR signal response details for step of Fig. 3 of data analysis; Fig. 6 is sample REDOR NMR spectra according to the method of Fig. 3; Fig. 7 is sample data analysis according to the method of Fig. 3; Fig. 8 is more detail for the Step of Fig. 1 for configurational bias Monte Carlo structure determination; Fig. 9 is a sample of simulation completion data; Fig. 10 is further detail of peptide memory representation used in the method of Fig. 8; Fig. 11 is additional detail of peptide memory representation used in the method of Fig. 8; Fig. 12 is more detail for the step of Fig. 8 of processor generation of proposed modified structures by Type I moves; Fig. 13 is more detail for the step of Fig. 8 of processor generation of proposed modified structures by Type II moves; Fig. 14 is additional detail for the step of Fig. 8 of processor generation of proposed modified structures by Type II moves; Fig. 15 is a structure for implementing the method of Fig. 8; Fig. 16 is the main program structure of Fig. 15; Fig. 17 is the structure modification program structure of Fig. 15; Fig. 18A and 18B are the Type I move generator program structure of Fig. 17; Fig. 19A and 19B are the Type II move generator program structure of Fig. 17. 5. DETAILED DESCRIPTION For clarity of disclosure, and not by way of limitation, the detailed description of the invention is described as a series of steps. A broad view of the exemplary steps of which the invention is comprised is presented in Fig. l, a brief overview of which is presented in the text that follows. The invention method preferably begins with a target molecule (or molecular complex) 1 having a binding target of biological or pharmacological interest. Specific binding of a molecule to the target is predicted to affect its biological activity and may provide biological effects of interest. For example, these effects might include amelioration of a disease process or alteration of a physiological response. Lead compounds 8 output from the invention are able to specifically bind to target molecule 1 and can serve as starting points for the design of a drug able to specifically bind to the target. Diversity library screening, step 2, allows the selection from among library members of a plurality of molecules [hereinafter called "binders"] that specifically bind to target molecule (or molecular complex) 1; the chemical building block structure (e.g., sequence, structural formula) is then determined. If predetermined binders and their structure are already available, the invention can use this information directly without the need for library screening. If library screening is done, one or more libraries may be screened. The selected binders all share a common pharmacophore structure, allowing their specific binding to the target in a chemically and physically similar manner. This common structure is preferably iteratively determined by a select and test method. Candidate pharmacophore selection, step 3, is based upon chemical structure homologies. Geometric and conformational information is not needed to be used at this step and is preferably not considered. A candidate pharmacophore shared by all the N binders is selected, step 3, for structure determination by subsequent steps. The binders will typically present several candidate chemical pharmacophores, ignoring conformation considerations. These candidates are small groups of library building blocks, often contiguous, each candidate group in one binder being homologous to the candidate groups in all the other binders. Building block homologies are determined by applying rules appropriate to the diversity library. In the preferred embodiment, homologous building blocks have similar surface chemical groups, since pharmacophores are defined by a similar geometric arrangement of chemical structures. In " the case of the preferred library, CX 6 C, candidate pharmacophores are amino acid sequences whose side chain surface groups have similar chemical properties. Amino acid homologies are determined by mechanical rules described below. These candidate sequences are typically 3 amino acids long, but may range from 2 all the way to 6. Where pharmacophores are defined by their charge distributions, homologous library building blocks must have similar charge distributions. Having selected N binders by screening one or more libraries and determined a candidate pharmacophore in each binder, the subsequent steps of distance measurement, step 4, and Monte Carlo structure determination, step 5, determine a highly accurate structure for the candidate pharmacophore, if possible. This determination will be possible if the candidate is the actual pharmacophore. A subsequent test, step 6, checks for success of this structure determination. In particular cases, distance measurements may not be necessary in order to determine an adequately precise pharmacophore structure. Measurements are made, step 4, of a few strategic distances in the binders, that will be most useful for the subsequent structure determination step. A minimum number of strategic interatomic distances in the binders are measured in step 4. These few distances constrain possible binder structures and make the subsequent complete structure determination more efficient and more accurate. In preferred but not limiting embodiments, measurement methods yielding distances accurate to at least approximately 0.25 A or less are used. The preferred methods use nuclear magnetic resonance ["NMR"] techniques. Particularly preferred is the rotational-echo double resonance ["REDOR"] NMR method for directly measuring 13 C- 1S N internuclear distances in peptides, the most accurate current method for simply and inexpensively obtaining such distances. It is generally capable of accuracy to 0.1 A and a span of 8 A. In a specific embodiment, peptide binders are synthesized from amino acids labeled with 13 C and 15 N. Labeling is chosen to obtain the most useful distance data about the selected candidate pharmacophore structures. Either backbone nuclei, side chair, nuclei, or both can be labeled. The step is detailed below. Liquid NMR techniques can also be used to indirectly determine internuclear distances in peptides, but are less preferred since they require considerable data interpretation to obtain distances of less accuracy than those obtained by use of REDOR. Structure determination, step 5, determines a precise geometric conformation for both the candidate shared chemical structures, if possible, and the remainder of the binders. The preferred but not limiting method, consensus, configurational bias, Monte Carlo ["CCBMC"] determination, step 5, is an efficient smart Monte Carlo method uniquely able to incorporate knowledge from prior steps to obtain highly accurate physical binder structures. From library screening, step 2, it is deduced that the binders have a shared, actual pharmacophore, structure because they all bind specifically to the same target molecule (hence, a "consensus" method) . It is not significant to the method if the binders come from more than one library as long as they all have a structure adaptable to representation in the consensus structure determination step (see infra) . From distance measurements, step 4, a few strategically chosen distances are accurately known. This information is heuristically utilized along with an accurate model of the physical atomic interactions and the allowed molecular conformations. Further, these means are particularly adapted for determining structures of molecules having limited conformational degrees of freedom at the temperature of „ Λ 30 interest and conformationally constrained by, e.g., internal bonds. Potential conformations are generated and selected by smart configuration bias techniques which avoid generation of unnecessarily improbable new conformations. (Hence, a "configuration bias" method.) The technique is preferably applied herein to conformationally constrained peptides. A concerted rotation technique is combined with configurational bias conformation generation so that new conformations automatically preserve the internally linked backbone structure constraints. This technique is preferably applied to the preferred constrained peptide library, of a sequence comprising CX 6 C (wherein X is any amino acid) . The technique is also applicable to other constrained peptide libraries, to peptoid libraries, and to any more general organic diversity libraries that meet certain geometric limitations (i.e., that have structures adaptable to representation in the consensus structure determination step (see infra) ) . The methods of the invention are not limited to the use of CCBMC for determining a consensus pharmacophore structure. Alternative embodiments of this invention may use alternative structure determination methods to determine a consensus pharmacophore structure. For example, a simple yet expensive method is to make exhaustive REDOR NMR measurements characterizing the candidate pharmacophore in each binder and then average these measurements. A somewhat less expensive method is to use a conventional Monte Carlo molecular structure determination method to limit somewhat the number of REDOR NMR measurements required to characterize the candidate pharmacophore. Conventional Monte Carlo methods, being unable to directly make use of partial distance measurements or consensus binding information, are less efficient than the CCBMC method and require more distance measurements. Further, other known techniques of molecular structure determination, for example folding rules or molecular dynamics, can be used in place of conventional Monte Carlo. The success of the structure determination is tested, step 6, against various convergence and success criteria. Consistency tests, step 6, are applied to the resulting structure to determine whether the candidate pharmacophore previously selected is the actual pharmacophore. One set of tests checks predicted distances against new distance measurements or against previous measurements temporarily not used as structure constraints. A second set of tests checks heuristically whether the candidate pharmacophore exhibits the expected low energy consensus structure. The test are described further below. If a shared structure is found, the candidate pharmacophore must be the actual pharmacophore. If not, another candidate pharmacophore and another shared structure is determined, if possible. An actual pharmacophore exists and will eventually be found and accurately structured. Upon passing these tests, the methods of the invention have provided a consensus structure for the selected candidate pharmacophore, preferably accurate to at least approximately 0.25-0.50 A, as well as structures for the remainder of the binder molecules. Lead compound selection, step 7, uses these structures to determine or select highly targeted lead compounds 8. One method of lead selection is to design new organic molecules of pharmacologic utility with the determined pharmacophore structure. Another method selects leads from databases of molecular descriptions. Conventionally known to medicinal chemists are databases of potential drug compounds indexed by their significant chemical and geometric structure (e.g., the Standard Drugs File (Derwent Publications Ltd., London, England), the Bielstein database (Bielstein Information, Frankfurt, Germany or Chicago) , and the Chemical Registry database (CAS, Columbus, Ohio)) . The determined pharmacophore, being a chemical and geometric structure in the preferred embodiment, is used to query such a database. Search results will be those compounds with homologous chemical groups arrayed in a very closely similar geometric arrangement. These are lead compounds 8 output from this invention and input to the process of drug testing and development. Although the preferred identity and ordering of the method steps is presented in Fig. 1, the invention is not limited to this identity and ordering. Other orderings, especially of steps 3, 4, and 5, are possible to achieve certain efficiencies. Steps can be inserted and deleted, for optimal effect. For example, an additional partial structure determination step can be inserted between existing steps 3 and 4 to provide information on how best to make the step 4 strategic measurements. As another example, in an alternative aspect, in lieu of screening one or more libraries to select binders, predetermined binders can be obtained and used (e.g., binders determined by any means to be specific to the same target molecule) ; thus, step 2 can be omitted. In another embodiment, step 4, the measurement step, can be omitted. While all method steps in the preferred embodiment assume an aqueous environment at body temperature (37 °C) , to the extent these parameters are relevant to the particular step, the invention is not limited to human environmental parameters . Screening against a diversity library consists of selecting by assay those library members which bind specifically to the target molecule of interest. Binding specificity is preferably a binding constant of less than 1 μm (micromolar) , and more preferably less than 100 nm (nanomolar) . Preferably, an assay is done that detects an effect of binding of the binder to the target molecule on the target molecule's biological activity, to ensure that the binding is actually to the biological target of interest. Also, preferably, the selected binders are tested to further select those binders that bind to the target molecule competitively, to ensure that each binds to the same target in the target molecule. The output of the screening step is a number, N, of binders selected from one or more libraries for use by the subsequent steps of the method. The binders with highest affinity are preferably selected for use by the subsequent steps. The chemical structure of each of the N binders selected for use is determined as part of the member synthesis and library screening. The primary chemical structure of the preferred constrained peptide library is specified by the amino acid sequence of the -X t - portion of the CX 6 C molecule. For more general organic diversity libraries, the selection and arrangement of library building blocks in the binders must be determined. It is a preferred aspect of this invention that the set of determined lead compounds is selective and small. Example 1 illustrates that as pharmacophore distance tolerances are relaxed, the number of compounds retrieved by drug database searches increases geometrically. As this invention determines high resolution pharmacophore geometries, it can be expected that database searches, or other methods of determining leads from pharmacophore structure, will return only a few, selective, targeted leads. Methods limiting the number of leads decrease the cost of drug development and are consequently of considerable utility to the pharmaceutical industry and medical community. The expense of developing and evaluating lead compounds for biological effect and medicinal usefulness is well known. Each lead compound must be screened for pharmacological usefulness, efficacy, and safety. Often chemical modifications are required and the process must be repeated. Finally, the required in vivo pharmacologic toxicity and clinical trials alone can consume years of time and millions of dollars. Therefore, starting with a target molecule 1 having a biologically or pharmacologically interesting target, the method and apparatus of this invention determines a consensus pharmacophore structure. This consensus pharmacophore structure can then be used to determine a selective set of highly specific lead compounds 8 (Fig. 1) for rational design of drugs, e.g., capable of acting as ligand-mimics (agonists or antagonists) for the particular target molecule. 30849 In the following discussion and examples, each cf these steps will be more fully described. 5.1. SELECTION OF A TARGET MOLECULE The target molecule is any one or more molecules containing a target or putative target of interest. The target is a binding interaction region. The target can be in a single molecule or can be a product of a molecular complex. The target can be a continuous or discontinuous binding region. The target molecule selected for use (Fig. 1, step 1) is preferably any molecule that is found in vivo (preferably in mammals, most preferably in humans) and that has biological activity, preferably involved or putatively involved in the onset, progression, or manifestation of a disease or disorder. The target molecule can also be a fragment or derivative of such an in vivo molecule, or a chemical entity that contains the same target as the in vivo molecule. Examples of such molecules are well known in the art. Such molecules can be of mammalian, human, viral, bacterial, or fungal origin, or from a pathogen, to give just some examples. The target molecule is preferably a protein or protein complex. The target molecules that can be used include but are not limited to receptors, ligands for receptors, antibodies or portions thereof (e.g., Fab, Fab', F(ab') 2 , constant region), proteins or fragments thereof, nucleic acids, glycoproteins, polysaccharides, antigens, epitopes, cells and cellular components, subcellular particles, carbohydrates, enzymes, enzyme substrates, oncogenes (e. g. , cellular, viral; oncogenes such as ras, raf, etc.), growth factors ( e . g. , epidermal growth factor, platelet-derived growth factor, fibroblast growth factor) , lectins, protein A, protein G, organic compounds, organometallic compounds, viruses, prions, viroids, lipids, fatty acids, lipopolysaccharides, peptides, cellular metabolites, steroids, vitamins, amino acids, sugars, lipoproteins, cytokines, ly phokines, hormones, T cell surface antigens (e. g. , CD4, CD8, T cell antigen receptor), /30849 ions, organic chemical groups, viral antigens (hepatitis B virus surface or core antigens, HIV antigens { e . g. , gpl20, gp46)) , hepatitis C virus antigens, toxins (e.g., bacterial toxins) , cell wall components, platelet antigens { e . g. , gpiibiiia) , cell surface proteins, cell adhesion molecules, neurotrophic factors, and neurotrophic factor receptors. In specific embodiments, vEGF (vascular endothelial growth factor) or KDR (the receptor for vEGF) (Terman et al . , 1992, Biochem. Biophyε. Res. Comm. 187:1579-1586) is the target molecule. vEGF and its receptor are the major regulators of vasculogenesis and angiogenesis (Millauer et al . , 1993, Cell 72:835) . Inhibition of the vEGF and the concomitant inhibition of its mitogenic activity and angiogenic capacity has been shown to suppress tumor growth in vivo (Kendall et al . , 1993, Proc. Natl . Acad. Sci . USA 90:10705-10709; Kim et al . , 1993, Nature 362:841-844) . Use of vEGF or KDR or portions thereof, as a target molecule is a preferred embodiment for use of the present invention to develop lead molecules as drugs in the area of cardiovascular disease or cancer. The proteins ras and raf, or portions thereof (e . g. , modules -- functional portions), are also preferred target molecules, particularly in an embodiment wherein the methods of the present invention are employed to develop lead molecules for drugs that are cancer therapeutics, ras is a member of an intracellular signaling cascade that controls cell growth and differentiation (Cook and McCormick, 1994, Nature 369:361-362) . ras functions in signal transduction by specifically recognizing the protein raf and bringing it to the cell membrane (Hall, 1994, Science 264:1413-1414; Vojtek et al., 1993, Cell 74:205-214) . The recognition modules in both ras and raf have been determined (Zhang et al., 1993, Nature 364:308-313; Warne et al., 1993, Nature 364:352-355; and Vojtek et al . , 1993, Cell 74:205-214); in a specific embodiment, such a recognition module is used as a target molecule according to the invention. /30849 In another specific embodiment, an integrin is used as a target molecule. Such molecules are known to function in clot formation, and can be used according to the present invention to develop lead molecules for drugs in the area of cardiovascular disorders. Target molecules for use can be obtained commercially (where the target is commercially available) , or can be synthesized or purified from natural or recombinant sources. In a specific embodiment, a target molecule is prepared that has been modified to incorporate an "affinity tag," i . e . , a structure that specifically binds to a known binding partner, to facilitate recovery/isolation/immobilization of the target molecule. In a preferred aspect, recombinant expression methods well known in the art can be used to produce a protein target molecule as a fusion protein, incorporating a peptide affinity tag. Such affinity tags include but are not limited to epitopes of known antibodies ( e . g. , c-myc epitope (Evan et al . , 1985, Mol . Cell. Biol . 5:3610-3616)) , a series (e.g., 5-7) of his residues (which bind to zinc) , maltose binding sequences such as pmal, etc. Tags are incorporated into protein targets at either the amino or carboxy-terminus . In another embodiment, the target is chemically attached to a tag { e . g. biotin (which binds to avidin, streptavidin) , streptavidin) , e . g . , by biotinylation. The target molecule is purified by standard methods. For example, a protein target can be purified by standard methods including chromatography (e . g. , ion exchange, affinity, and sizing column chromatography) , centrifugation, differential solubility, or by any other standard technique for the purification of proteins; in a preferred embodiment, reverse phase HPLC (high performance liquid chromatography) is employed. Once the target molecule has been purified, it is preferably tested to ensure that it retains its biological activity (and thus retains its native conformation) . Any suitable in vi tro or in vivo assay can be used. In instances where the desired target molecule is a fragment or derivative /30849 of a molecule found in vivo, or is a chemical entity putatively containing the same target as a molecule found in vivo, it is highly preferred that testing be done of such desired target molecules prior to their use, so that among such desired target molecules, only those that have the same biological activity as the in vivo molecule or compete with a known ligand to the in vivo molecule, are selected for actual use as target molecules according to the invention. In the event that biological activity has been reduced or lost in a recombinant protein relative to the native form of the protein, the protein can be recombinantly expressed in a different host (e.g., yeast, mammalian, or insect) and/or with a variety of tags and location of tags (on either the amino- or carboxy-terminal side) , in order to attempt to achieve, or to optimize, recovery of biological activity. 5.2. DIVERSITY LIBRARIES According to a preferred embodiment of the invention, diversity libraries are screened to select binders, which specifically bind to the target molecule. Diversity libraries are those containing a plurality of different members. Generally, the greater the number of library members and the greater the probability that all possible members are represented, the more preferred the library. In preferred embodiments, the diversity libraries have at least 10* members, and more preferably at least 10 e , 10*, 10 10 , or 10 1 *, members. Many libraries suitable for use are known in the art and can be used. Alternatively, libraries can be constructed using standard methods. Chemical (synthetic) libraries, recombinant expression libraries, or polysome-based libraries are exemplary types of libraries that can be used. In a preferred embodiment, the library screened is a constrained, or semirigid library (having some degree of structural rigidity) . Examples of constrained libraries are described below. A linear, or nonconstrained library, is 6/30849 less preferred although it may be used. Additionally, one or more different libraries can be screened to select binders. In a preferred embodiment, the library contains peptide or peptide analogs having a length in the range of 5-18 amino acids or analogs thereof in each library member. In specific embodiments, binders are identified from a random peptide expression library or a chemically synthesized random peptide library. The term "random" peptide libraries is meant to include within its scope libraries of both partially and totally random (variant) peptides. In one embodiment, the peptide libraries used in the present invention may be libraries that are chemically synthesized in vi tro . Examples of such libraries are given in Fodor et al . , 1991, Science 251:767-773, which describes the synthesis of a known array of short peptides on an individual microscopic slide; Houghten et al . , 1991, Nature 354:84-86, which describes mixtures of free hexapeptides in which the first and second residues in each peptide were individually and specifically defined; Lam et al. , 1991, Nature 354:82-84, which describes a "one bead, one peptide" approach in which a solid phase split synthesis scheme produced a library of peptides in which each bead in the collection had immobilized thereon a single, random sequence of amino acid residues; Medynski, 1994, Bio/Technology 12:709-710, which describes split synthesis and T-bag synthesis methods; and Gallop et al . , 1994, J. Medicinal Chemistry 37 (9) :1233-1251. Simply by way of other examples, a combinatorial library may be prepared for use, according to the methods of Ohlmeyer et al. , 1993, Proc. Natl. Acad. Sci. USA 90:10922-10926; Erb et al. , 1994, Proc. Natl. Acad. Sci. USA 91:11422-11426; Houghten et al . , 1992, Biotechniques 13:412; Jayawickre e et al., 1994, Proc. Natl. Acad. Sci. USA 91:1614-1618; or Salmon et al. , 1993, Proc. Natl. Acad. Sci. USA 90:11708-11712. PCT Publication No. WO 93/20242 and Brenner and Lerner, 1992, Proc. Natl. Acad. Sci. USA 89:5381-5383 describe "encoded combinatorial chemical 6/30849 libraries, " that contain oligonucleotide identifiers for each chemical polymer library member. In another embodiment, biological random peptide libraries are used to identify a binder which binds to a target molecule of choice. Many suitable biological random peptide libraries are known in the art and can be used or can be constructed and used to screen for a binder that binds to a target molecule, according to standard methods commonly known in the art . According to this approach, involving recombinant DNA techniques, peptides are expressed in biological systems as either soluble fusion proteins or viral capsid fusion proteins . In a specific embodiment, a phage display library, in which the protein of interest is expressed as a fusion protein on the surface of a bacteriophage, is used {see, e . g. , Smith, 1985, Science 228:1315-1317) . A number of peptide libraries according to this approach have used the M13 phage. Although the N-terminus of the viral capsid protein, protein III (PHI) , has been shown to be necessary for viral infection, the extreme N-terminus of the mature protein does tolerate alterations such as insertions. The protein PVIII is a major M13 viral capsid protein, which can also serve as a site for expressing peptides on the surface of M13 viral particles, in the construction of phage display libraries. Other phage such as lambda have been shown also to be able to display peptides or proteins on their surface and allow selection; these vectors may also be suitable for use in production of libraries (Sternberg and Hoess, 1995, Proc. Natl. Acad. Sci. USA 92:1609-1613) . Various random peptide libraries, in which the diverse peptides are expressed as phage fusion proteins, are known in the art and can be used. Examples of such libraries are described below. Scott and Smith, 1990, Science 249:386-390 describe construction and expression of a library of hexapeptides on the surface of M13. The library was made by inserting a 33 6/30849 base pair Bgl I digested oligonucleotide sequence into an Sfi I digested phage fd-tet, i . e . , fUSE5 RF. The 33 base pair fragment contains a random or "degenerate" coding sequence (NNK) 6 where N represents G, A, T or C and K represents G or T. Cwirla et al. , 1990, Proc. Natl. Acad. Sci. USA 87: 6378- 6382 also described a library of hexapeptides expressed as pill gene fusions of M13 fd phage. PCT publication WO 91/19818 dated December 26, 1991 by Dower and Cwirla describes a library of pentameric to octameric random amino acid sequences. Devlin et al . , 1990, Science, 249:404-406, describes a peptide library of about 15 residues generated using an (NNS) coding scheme for oligonucleotide synthesis in which S is G or C. Christian and colleagues have described a phage display library, expressing decapeptides (Christian, R.B., et al . , 1992, J. Mol. Biol. 227:711-718) . The DNA of the library was constructed by use of an oligonucleotide comprising the degenerate codons [NN(G/T)] 10 (SEQ ID NO:8) with a self- complementary 3' terminus. This sequence forms a hairpin which creates a self-priming replication site that was used by T4 DNA polymerase to generate the complementary strand. The double-stranded DNA was cleaved at the Sfil sites at the 5 ' terminus and hairpin for cloning into the fUSE5 vector described by Scott and Smith, supra. Lenstra, 1992, J. Immunol. Meth. 152:149-157 describes a library that was constructed by annealing oligonucleotides of about 17 or 23 degenerate bases with an 8 nucleotide long palindromic sequence at their 3' ends. This resulted in the expression of random hexa- or octa-peptides as fusion proteins with the /3-galactosidase protein in a bacterial expression vector. The DNA was then converted into a double- stranded form with Klenow DNA polymerase, blunt-end ligated into a vector, and then released as Hind III fragments. These fragments were then cloned into an expression vector at the sequence encoding the C-terminus of a truncated 0-galactosidase to generate 10 7 recombinants. Kay et al . , 1993, Gene 128:59-65 describes a random 38 amino acid peptide phage display library. PCT Publication No. WO 94/18318 dated August 18, 1994 describes random peptide phage display "TSAR libraries" that can be used. Other biological peptide libraries which can be used include those described in U.S. Patent No. 5,270,170 dated December 14, 1993 and PCT Publication No. WO 91/19818 dated December 26, 1991. In a specific embodiment, a "peptide-on-plasmid" library, containing random peptides fused to a DNA binding protein that links the peptides to the plasmids encoding them, can be used (Cull et al . , 1992, Proc. Natl. Acad. Sci. USA 89:1865-1869) . Another alternative to phage display or chemically synthesized libraries is a polysome-based library, which is based on the direct in vi tro expression of the peptides of interest by an in vi tro translation system (in some instances, coupled to an in vi tro transcription system) . These methods rely on polysomes to translate the genomic information (in this case encoded by an mRNA molecule, in some instances made in vi tro by transcription from synthetic DNA) { see, e . g. , Korman et al . , 1982, Proc. Natl. Acad. Sci. USA 79:1844-1848) . Such in vi tro translation-based libraries include but are not limited to those described in PCT Publication No. WO 91/05058 dated April 18, 1991; and Mattheakis et al. , 1994, Proc. Natl. Acad. Sci. USA 91:9022-9026. Diversity library screening, step 2 of Fig. 1, determines a few, N, members (compounds) from one or more libraries and their primary sequences all of which specifically bind to target molecule 1 in a similar manner. A structured organic diversity library is a prescription for the creation of a huge number of related molecules all built from combinations of a small number of chemical building blocks. Preferred diversity libraries for use according to the invention have members whose binding to a target molecule is characterized by configurational entropy change that are relatively small to the binding energy. This means that library members have definite structures in the bound and, especially, the unbound states. A preferred example of a chemical diversity library for use in the invention contains short peptides with a constrained conformation. Short peptides without constrained conformations are often freely flexible in an aqueous environment and adopt no fixed unbound structure. The binding of such library members is complicated by significant configurational entropy changes. To eliminate this complication, it is preferred that all library members have a constrained structure and bind to the target molecule in a specific and identifiable manner. One method of achieving constrained conformation is to require internal linking, such as by disulfide bonds. In one embodiment, disulfide bond formation is achieved by use of libraries that contain peptides having a pair of invariant cysteine residues, preferably positioned in the range of 2-16 residues apart, most preferably 6-8 residues apart, that cross-link in an oxidizing environment to form cystines (disulfide bonds between cysteines) . An example of such libraries are those containing or expressing peptides of the form R^X n CR 2 wherein R 1 is a sequence of 0-10 amino acids, C is cysteine, X n is a sequence of n variant amino acids (e.g., if all 20 classical amino acids are represented, X means any one of the 20 classical amino acids) ; n is an integer ranging from 2 to 16; and R 2 is a sequence of 0-10 amino acids. R 1 and R 2 can contain invariant or variant amino acids. Another example is such libraries are those containing or expressing peptides of the form R 1 CX„R 2 , where R 1 , X, n, and R 2 are as described above; n is preferably 8 or 9. A preferred constrained peptide library, of at least 10 β members, consists of peptides comprising the sequence CX 6 C (SEQ ID NO:l) , wherein C is cysteine, X is any naturally occurring amino acid, and a disulfide bond is formed between the two cysteines. Additional invariant amino acids ( e . g. , preferably no more than 5-10 amino acids) on either the amino- or carboxy-terminus of CX C can be incorporated as part of the peptide in this preferred embodiment. Fig. 10 schematically illustrates such a molecule. The disulfide bridge between the two cysteines acts as a sufficient conformational constraint for the preferred practice of this invention. By way of example, the library is constructed by generating oligonucleotides with the desired degeneracy to code for the peptides and ligating them into vectors of choice. These inserted oligonucleotides are suitable for both use in in vi vo genetic expression systems exemplified by phage display, or in vi tro translation methods based on coupled transcription and translation from DNA of interest (see below) . The creation and use of an exemplary library is described in Section 6.3 hereinbelow. The invention is easily and readily adaptable to other alternative peptide libraries which include short peptides with alternative disulfide scaffolding, for example, comprising the sequence CX n CX„CC with two disulfide bridges, wherein n and m are each . independently an integer in the range of 2-10, and X is any amino acid. More generally, any peptide library containing members of definite conformation which bind to a target molecule in a specific and identifiable manner may be used. Further, more general, structurally constrained, organic diversity (e.g., nonpeptide) libraries, can also be used. By way of example, a benzodiazepine library ( see e . g. , Bunin et al., 1994, Proc. Natl. Acad. Sci. USA 91:4708-4712) may be adapted for use. Constrained libraries that can be used are also known in the art. For example, PCT Publication No. WO 94/18318 dated August 18, 1994 describes semirigid phage display libraries, in which the plurality of expressed peptides can adopt only a single or a small number of conformations. Examples of such libraries have a pair of invariant cysteine residues positioned in or flanking random residues which, when expressed in an oxidizing environment, are most likely cross- linked by disulfide binds to form cystines. Also disclosed are libraries having a cloverleaf structure by appropriate /30849 arrangement of cysteine residues. Also disclosed are libraries with peptides having invariant cysteine and histidine residues positioned within the random residues, or invariant histidines alone within the random residues. TSAR-13 and TSAR-14 are exemplary semirigid libraries disclosed therein. Other conformationally constrained libraries that can be used include but are not limited to those containing modified peptides (e.g., incorporating fluorine, metals, isotopic labels, are phosphorylated, etc.) , peptides containing one or more non-naturally occurring amino acids, non-peptide structures, and peptides containing a significant fraction of γ-carboxyglutamic acid. As stated above, libraries of non-peptides, e . g. , peptide derivatives (for example, that contain one or more non-naturally occurring amino acids) can also be used. One example of these are peptoid libraries (Simon et al . , 1992, Proc. Natl. Acad. Sci. USA 89:9367-9371) . Peptoids are polymers of non-natural amino acids that have naturally occurring side chains attached not to the alpha carbon but to the backbone amino nitrogen. Since peptoids are not easily degraded by human digestive enzymes, they are advantageously more easily adaptable to drug use. Another example of a library that can be used, in which the amide functionalities in peptides have been permethylated to generate a chemically transformed combinatorial library, is described by Ostresh et al., 1994, Proc. Natl. Acad. Sci. USA 91:11138-11142) . The peptide or peptide portions of members of the libraries that can be screened according to the invention are not limited to containing the 20 naturally occurring amino acids. In particular, chemically synthesized libraries and polysome based libraries allow the use of amino acids in addition to the 20 naturally occurring amino acids (by their inclusion in the precursor pool of amino acids used in library production) . In specific embodiments, the library members contain one or more non-natural or non-classical amino acids or cyclic peptides. Non-classical amino acids include but are not limited to the D-iεomers of the common amino acids, α-amino isobutyric acid, -aminobutyric acid, Abu, 2-amino butyric acid; γ-Abu, e-Ahx, 6-amino hexanoic acid; Aib, 2-amino isobutyric acid; 3-amino propionic acid; ornithine; norleucine; norvaline, hydroxyproline, sarcosine, citrulline, cysteic acid, t-butylglycine, t-butylalanine, phenylglycine, cyclohexylalanine, β-alanine, designer amino acids such as β-methyl amino acids, Cα-methyl amino acids, Nof-methyl amino acids, fluoro-amino acids and amino acid analogs in general. Furthermore, the amino acid can be D (dextrorotary) or L (levorotary) . By way of example, the incorporation of non-standard or modified amino acids into libraries can be done by taking advantage of concurrent development in reassigning the genetic code (Noren et al . , 1989, Science 244:182-188; Benner, 1994, Trend. BioTech. 12:158-163) and the charging of specific tRNAs with the desired amino-acid (Cornish et al . , 1994, Proc. Natl. Acad. Sci. USA 91:2910-2914) . See also Ibba and Hennecke, 1994, Bio/Technology 12:678-682 (particularly Table I), and references cited therein. These pre-charged tRNAs are then utilized in the in vi tro translation system to incorporate the non-standard amino acid into the library of choice. The position of incorporation can be either random (variant) or defined (invariant) . The defined case can be chosen to maximize the utility of the resulting placement of the non-natural functional group to maximize either binding properties or the ability.to perform structural measurements. Similar techniques may be used to incorporate non-standard amino acids into the peptides. In a specific embodiment, an iterative approach to library construction can be taken, as structural information on the mode of binding to a given target is obtained. For example, information from structural analysis can be used to make libraries with library members containing chemical backbones that match known chemical scaffolds, enhance solubility or membrane permeability, reduce effect of water on structure, and incorporate other physical parameters suggested by structural analysis. Use of algorithmically optimized library inserts can be used to increase the chances of finding binders of interest (see e . g. , Arkin and Youvan, 1992, Bio/Technology 10:297-300) . In other embodiments, the following can be used to improve library use in both phage and bacterial systems: production of libraries in bacteria which overproduce the chaperonins GroES and GroEL (Soderlind et al . , 1993, Bio/Technology 11:503-507) , and production in E. coli strains which prevent degradation in the periplasmic space (Strauch and Beckwith, 1988, Proc. Natl. Acad. Sci. USA 85:1576-1580; Lipinska et al . , 1989, J. Bacteriology 171:1574-1584) . Purified cofactors such as GroES and GroEL could also be directly added to an in vi tro expression and selection system. 5.3. SCREENING OF DIVERSITY LIBRARIES Once a suitable diversity library has been constructed (or otherwise obtained) , the library is screened to identify binders having binding affinity for the target. Screening is done by contacting the diversity library members with the target molecule under conditions conducive to binding and then identifying the member (s) which bind to the target molecule. Screening the libraries can be accomplished by any of a variety of commonly known methods. See, e . g. , the following references, which disclose screening of peptide libraries: Par ley and Smith, 1989, Adv. Exp. Med. Biol . 251:215-218; Scott and Smith, 1990, Science 249:386-390; Fowlkes et al., 1992; BioTechniques 13:422-427; Oldenburg et al., 1992, Proc. Natl. Acad. Sci. USA 89:5393-5397; Yu et al., 1994, Cell 76:933-945; Staudt et al . , 1988, Science 241:577-580; Bock et al . , 1992, Nature 355:564-566; Tuerk et al., 1992, Proc. Natl. Acad. Sci. USA 89:6988-6992; Ellington et al., 1992, Nature 355:850-852; U.S. Patent No. 5,096,815, U.S. Patent No. 5,223,409, and U.S. Patent No. 5,198,346, all to Ladner et al . ; Rebar and Pabo, 1993, Science 263:671-673; and PCT Publication No. WO 94/18318. See also the references cited in Section 5.2 hereinabove (disclosing libraries) regarding methods for screening. Screening can be carried out by contacting the library members with an immobilized target molecule and harvesting those library members that bind to the target. Examples of such screening methods, termed "panning" techniques are described by way of example in Par ley and Smith, 1988, Gene 73:305-318; Fowlkes et al . , 1992, BioTechniques 13:422-427; PCT Publication No. WO 94/18318; and in references cited hereinabove. In panning methods that can be used to screen the libraries, the target molecule can be immobilized on plates, beads, such as magnetic beads, sepharose, etc., or on beads used in columns. In particular embodiments, the immobilized target molecule has incorporated an "affinity tag, " as described above, which can be used to effect immobilization by attaching the tag's binding partner to the desired solid phase. In one embodiment, the primary method of selecting from libraries is the use of solid phase plastic affinity capture to immobilize the target molecule prior to its use in the selection (screening) process. This method can be improved upon to increase throughput, selectivity and specificity. Solid phase plastic supports can be replaced with magnetic particles. In phage-based systems, large beads can be used, but these are not believed to be suitable, due to steric hindrance, for use in bacterial systems. This steric hindrance can be avoided by using high gradient magnetic cell separation with small particles (<<0.5μm) (Miltenyi et al., 1990, Cytometry 11:231-238) . In a specific embodiment involving the use of a peptide phage display library, selection of a binder protein expressed on the surface of a bacteriophage thus selects both the binder protein and the DNA that encodes it (the DNA being within the phage particle) . Following binding between the target molecule and library members, phage are released from a solid support on which the binder-target molecule complex is immobilized, and are amplified, e. g. , by infecting E. coli and propagating each isolated binding phage. Repeating this process of affinity capture and amplification allows those peptides which bind with the highest affinity to the target molecule to be selectively enriched from the original, ' library. In one particular embodiment, presented by way of example but not limitation, a phage display library can be screened as follows using magnetic beads (see PCT Publication No. WO 94/18318) : Target molecules are conjugated to magnetic beads, according to the instructions of the manufacturers. The beads are incubated with excess bovine serum albumin (BSA) , to block non-specific binding. The beads are then washed with numerous cycles of suspension in phosphate buffered saline (PBS) with 0.05% Tween ® 20 and recovered by drawing a strong magnet along the sides of a plastic tube. The beads are then stored under refrigeration, until use. An aliquot of a library is mixed with a sample of resuspended beads, at 4°C for a time period in the range of 2-24 hrs . The magnetic beads are then recovered with a strong magnet and the liquid is removed by aspiration. The beads are then washed by resuspension in PBS with 0.05% Tween ® 20, and then drawing the beads to the tube wall with the magnet. The contents of the tube are removed and washing is repeated 5-10 additional times. 50 mM glycine-HCl (pH 2.0), 100 μg/ml BSA solution is added to the washed beads to denature proteins and release bound phage. After a short incubation, the beads are drawn to the side of the tubes with a strong magnet, and the liquid contents are then transferred to clean tubes. 1 M Tris-HCl (pH 7.5) or 1 M NaH 2 P0 « (pH 7) is added to the tubes to neutralize the pH of the phage sample. The phage are then diluted, e . g. , 10 "3 to 10"*, and aliquots plated with E. coli DH5αF' cells to determine the number of plaque forming units of the sample . In certain cases, the platings are done in the presence of XGal and IPTG for color discrimination of plaques ( i . e . , lacZ+ plaques are blue, lacZ- plaques are white) . The titer of the input samples is also determined for comparison. Alternatively, as yet another non-limiting example, screening a diversity library of phage expressing peptides can be achieved by panning using microtiter plates (see PCT Publication No. WO 94/18318) as follows: The target molecule is diluted and a small aliquot of target molecule solution is adsorbed onto wells of microtiter plates ( e . g . by incubation overnight at 4°C) . An aliquot of BSA solution (1 mg/ml, in 100 mM NaHC0 3 , pH 8.5) is added and the plate incubated at room temperature for 1 hr. The contents of the microtiter plate are flicked out and the wells washed carefully with PBS-0.05% Tween ® 20. The plates are repeatedly washed free of unbound target molecules. A small aliquot of phage solution is introduced into each well and the wells are incubated at room temperature for 2-24 hrs. The contents of microtiter plates are flicked out and washed repeatedly. The plates are incubated with wash solution in each well for 20 minutes at room temperature to allow bound phage with rapid dissociation constants to be released. The wells are then washed five more times to remove all unbound phage. To recover the phage bound to the wells, a pH change is used. An aliquot of 50 mM glycine-HCl (pH 2.0) , 100 μg/ml BSA solution is added to the washed wells to denature proteins and release bound phage. After 10 minutes at 65°C, the contents are then transferred into clean tubes, and a small aliquot of 1 M Tris-HCl (pH 7.5) or 1M NaH 2 PO < (pH 7) is added to neutralize the pH of the phage sample. The phage are then diluted, e . g. , 10" 3 to 10" € and aliguots plated with E. coli DH5orF' cells to determine the number of the plaque forming units of the sample. In certain cases, the platings are done in the presence of XGal and IPTG for color discrimination of plaques (i.e., IacZ+ plaques are blue, JacZ- plaques are white) . The titer of the input samples is also determined for comparison (dilutions are generally 10 "6 to 10"') . By way of another example, diversity libraries expressing peptides as a surface protein of either a particle or a host cell, e. g. , phage or bacterial cell, can be screened by passing a solution of the library over a column of the target molecule immobilized to a solid matrix, such as sepharose, silica, etc., and recovering those particles or host cells that bind to the column after washing and elution. In yet another embodiment, screening a library can be performed by using a method comprising a first "enrichment" step and a second filter lift step as described in PCT Publication No. WO 94/18318. Several rounds of serial screening are preferably conducted. In a particularly preferred aspect, each round is varied slightly, e. g. , by changing the solid phase on which immobilization occurs, or by changing the method of immobilization on (e.g., by changing the linker to) the solid phase. When using a phage display library, the recovered cells are then preferably plated at a low density to yield isolated colonies for individual analysis. By way of example, the following is done: The individual colonies are selected, grown and used to inoculate LB culture medium containing ampicillin. After overnight culture at 37°C, the cultures are then spun down by centrifugation. Individual cell aliquots are then retested for binding to the target molecule attached to the beads. Binding to other beads, having attached thereto a non-relevant molecule, can be used as a negative control. /30849 In a specific embodiment, different rounds of screening can respectively involve selection against targets in primarily their purified form, and then in their natural state ( e . g. , on the surface of a mammalian cell) ( see, e . g. , Marks et al. , 1993, Bio/Technology 11:1145-1149, describing selection against cell surface blood group antigens) . In other examples, subsequent rounds of screening can involve immobilization of the target molecule by attachment at different ends (e.g. , amino or carboxy-terminus) of the target molecule to a solid support, or presentation of library members by attachment to or fusion at different ends of the library members. By way of other examples of screening methods that can be used, genetic selection methods can be adapted for screening of libraries, or can be used in a recursive scheme. Thus, in a specific aspect, the invention provides screening methods in which methods allowing high throughput and diversity screening (e . g . , screening phage display or polysome libraries against a ligand) are utilized in initial rounds, with subsequent rounds employing a genetic selection technique, in which the presence of a binder of appropriate specificity increases the activity of or activation of a transcriptional promoter or origin of replication. Genetic selection techniques that can be adapted for use (e.g., by inserting random oligonucleotides in the test plasmid) include the two-hybrid system for selecting interacting proteins in yeast, replicative based systems in mammalian cells, and others (see, e. g. , Fields & Song, 1989, Nature 340:246-246; Chien et al. , 1991, Proc. Natl. Acad. Sci. USA 88:9578-9582; Vasavada et al. , 1991, Proc. Natl. Acad. Sci. USA 88:10686-10690). Thus, in a specific embodiment, compounds are produced as fusion proteins, and contacted with a different fusion protein comprising a target fused to another molecule, in which specific binding of the fusion proteins to each other results in an increase in activity or activation of a transcriptional promoter or an origin of replication. In a specific embodiment, a genetic selection method is used in a later round of screening to either select directly for a library member that binds to a target molecule, or to select a library member that competitively inhibits binding of a ligand to the target molecule. Several exemplary methods for screening a phage/phagemid library are presented by way of example in Section 6.4 hereinbelow. An exemplary method for screening a polysome- based library is presented in Section 6.3.3 hereinbelow. Once binders are selected from a diversity library which bind to a target molecule of interest, additional assays are preferably, although optionally, performed, including but not limited to those described below. Thus, in vivo or in vitro assays can be performed to test whether binding of a binder to the target molecule affects the target molecule's biological activity; binders that exert such an effect are preferred for use in subsequent steps of the invention. Alternatively, or in addition, competitive binding assays can be carried out to test whether the binder competes with other binders or with a natural ligand of the target molecule, for binding to the target molecule; binders that compete with each other, and that compete with the natural ligand, are preferably selected for use in subsequent steps of the invention. Alternatively, or in addition to the above assays, the binding affinity of binders for the target molecule is determined, by standard methods, or by way of example, as described in Section 6.5 infra . Binders of the highest affinity are preferred for use in subsequent steps of the invention. 0 5.4. DETERMINING THE SEQUENCE OR CHEMICAL FORMULA OF BINDERS Many of the references cited in Section 5.2 and 5.3 hereinabove, which disclose library construction and/or screening, also disclose methods that can be used to _ determine the sequence or chemical formula of binders isolated from such libraries. By way of example, a nucleic acid which expresses a binder can be identified and recovered from a peptide expression library or from a polysome-based library, and then sequenced to determine its nucleotide sequence and hence the deduced amino acid sequence that mediates binding. (In an instance wherein the sequence of an RNA is desired, cDNA is preferably made and sequenced.) Alternatively, the amino acid sequence of a binder can be determined by direct determination of the amino acid sequence of a peptide selected from a peptide library containing chemically synthesized peptides. In a less preferred aspect, direct amino acid sequencing of a binder selected from a peptide expression library can also be performed. Nucleotide sequence analysis can be carried out by any method known in the art, including but not limited to the method of Maxam and Gilbert (1980, Meth. Enzymol. 65:499- 560), the Sanger dideoxy method (Sanger et al. , 1977, Proc. Natl, Acad. Sci. U.S.A. 74:5463), the use of T7 DNA polymerase (Tabor and Richardson, U.S. Patent No. 4,795,699; Sequenase™, U.S. Biochemical Corp.), or Taq polymerase, or use of an automated DNA sequenator ( e . g . , Applied Biosystems, Foster City, CA) . Direct determination of the chemical formulas of non- peptide or peptide binders can be carried out by methods well known in the art, including but not limited to mass spectrometry, NMR, infrared analysis, etc. In preferred aspects involving certain types of libraries well known in the art, sequencing or the use of known analytic techniques for chemical formula determination will not be necessary. In some such libraries, the identity and composition of each member of the library is uniquely specified by a label or "tag" which is physically associated with it and hence the compositions of those members that bind to a given target are specified directly (see, e.g., Ohlmeyer et al., 1993, Proc. Natl. Acad. Sci. USA 90:10922-10926; Brenner et al., 1992, Proc. Natl. Acad. Sci. USA 89:5381-5383; Lerner et al., PCT Publication No. WO 93/20242) . In other examples of such libraries, the library members are created by step wise synthesis protocols accompanied by complex record keeping, complex mixtures are screened, and deconvolution methods are used to elucidate which individual members were in the sets that had binding activity, and hence which synthesis steps produced the members and the composition of individual members (see, e.g., Erb et al. , 1994, Proc. Natl. Acad. Sci. USA 91:11422-11426) . Step 2 of the invention provides as output N binding library members (binders) and their sequences or chemical formulas. 5.5. CANDIDATE PHARMACOPHORE SELECTION The prior diversity library screening, step 2, determines a set of size N of specifically binding members from one or more diversity libraries. While the binders are preferably but not necessarily isolated from one or more diversity libraries ( e . g. , binders need not be isolated from diversity libraries; known binders can be simply provided), the following description shall refer to the preferred embodiment wherein diversity library members are the binders. It will be apparent that the description is also readily applicable to binders that are not isolated from diversity libraries. The pharmacophore responsible for the library member binding is preferably determined by an overall select and test method in this and subsequent steps. In general, a pharmacophore is specified by the precise electronic properties on the surface of the binder that causes binding to the surface of the target molecule. In the preferred embodiment, these properties are specified by the underlying, causative, chemical structures. Chemical structures are specified generally by groups such as -CH 2 -, -COOH, and -CONHj. The preferred pharmacophore representation consists of a specification of the underlying chemical groups and their geometric relations. The more precisely the geometric relations are specified, the more preferred. In preferred but not limiting aspects, the geometric relations are precise to at least 0.50 A, and most preferably, at least 0.25 A. A 0849 pharmacophore will usually comprise 2 to 4 of such groups, with 3 being typical. However, for complex protein recognition targets, a pharmacophore may comprise a greater number of groups. For example, it is possible that the entire 6 amino acid sequence, -X e -, may be needed for a member of the preferred CX 6 C library to bind to complex targets, in which case the pharmacophore includes the entire binder. Considering by way of example, the case of binders isolated from the preferred library, of sequence CX 6 C, the chemical groups defining a peptide pharmacophore are terminal groups on amino acid side chains. Typically, therefore, a sequence of two to four contiguous amino acids will contain the pharmacophore of interest. For example, Fig. 11 illustrates an Arginine-Glycine-Aspartate sequence forming a well known platelet aggregation inhibiting pharmacophore, which is defined by the positions and orientations of the adjacent -CN 3 H , -Cα;H 2 -, and -COOH groups. Pharmacophores formed by discontiguous amino acids are not likely to occur in the preferred library due to the conformational constraint on the short peptide imposed by the disulfide bridge. The selection step determines candidate amino acid sequences in each binder that define a candidate pharmacophore by the positions of their.terminal groups. Candidate selection depends substantially only on the chemical structures of the amino acid side chains and terminal groups (only very rarely on backbone groups) . Geometric structure is not yet available and cannot be used for candidate selection. In the preferred embodiment, amino acids are grouped into homologous groups defined by group members having similar side chain structure and activity (see infra) . Candidate pharmacophores are found by searching the sequences of the N binders for short sequences of homologous amino acids. This search will produce at least one candidate, because all the binders share the actual pharmacophore. Several candidates will usually be found since geometric information is ignored, and the search is thereby underdetermined. Fig. 2A illustrates an exemplary method of performing the search for homologous sequences. Although this method is illustrated as searching for homologous contiguous sequences of length 3, it is easily adaptable to search for homologies of other lengths and also for discontiguous homologous sequences. If no candidate pharmacophores of length 3 have a consistent consensus structure, then pharmacophores of length 2, 4, or longer or discontiguous sequences must be searched and selected for test. For some complex targets, the pharmacophore may include the entire variable part of the library member. The exemplary method is a simple depth-first search for matching amino acid strings. More sophisticated string search methods are known and are equally applicable to this invention. The method begins with the administrative steps 201 and 202 of labeling the binders with integers from 1 to N and assigning the string variable 'ABC to the next left most sequence of three amino acids to test in binder 1. If this is the first candidate selection, 'ABC will be at the left most position in binder 1. If prior candidates have been selected, 'ABC will be assigned one amino acid to the right of its prior assignment. The FOR loop, formed by steps 203, 206, and 207, then selects each binder from 2 to N for scanning for a sequence homologous to 'ABC . Step 203 does loop administration. Step 206 does the scanning. If homologous sequences are found, test 207 loops back to scan the next binder. If homologous sequences have been found in all binders from 2 to N, the loop exits at step 204. In this case 'ABC is a string in binder 1 which is homologous to other strings in all remaining binders and is thus a candidate pharmacophore. The method exits at 205 for this candidate to be structured and tested for whether it is the actual pharmacophore. If a binder does not have a sequence homologous to 'ABC, then this string is not a candidate. In this case, test 208 determines if 'ABC is at the right end of binder 1. If so, there are no more homologies to test for and the method exits at 209. If not, then 'ABC is advanced one amino acid to the right 210 and the scan of all binders is repeated beginning at 203. Fig. 2B illustrates how string variable 'ABC is scanned across binder 1, represented schematically by 220. First, 'ABC is assigned to X α X 2 X 3 at 221, then to X 2 X 3 X « at 222, to X 3 X 4 X S at 223, and finally to X < X 5 X 6 at 224. Given an assignment to 'ABC , step 206 scans each other binder, for example binder K with K>1, for homologous sequences. This is simply done by comparing all contiguous substrings of binder K with 'ABC to determine if they are homologous. They are homologous if corresponding amino acids in the substring and 'ABC are homologous. In turn, two amino acids are homologous if they satisfy established homology rules . Each homologous sequence found in binder K defines a separate candidate pharmacophore, if sequences homologous to 'ABC are found in all other binders. In a case where discontiguous homologous sequences are sought, 'ABC is assigned to amino acids in discontiguous positions in binder 1 and then compared for homologies to amino acids in the same relative positions throughout the other binders. Various rules of amino acid homology may be used in this invention. In the preferred embodiment, amino acids are homologous if they are found in the same class of amino acids, based on side chain activity (see Lehninger, Principles of Biochemistry. (1982) , chap. 5) . Preferred homologous groups of amino acids are as follows. The nonpolar (hydrophobic) amino acids include alanine, leucine, isoleucine, valine, proline, phenylalanine, tryptophan and methionine. The polar neutral amino acids include glycine, serine, threonine, cysteine, tyrosine, asparagine, and gluta ine. The positively charged (basic) amino acids include " arginine, lysine and histidine. The negatively charged (acidic) amino acids include aspartic acid and glutamic acid. The foregoing classes may be modified by those skilled in chemical arts to create finer classifications. For example, phenylalanine and tryptophan could be placed in a separate aromatic nonpolar group. Further, homology rules could depend on amino acid sequence, such as by dividing contiguous doublets or triplets of amino acids into homology groups. The invention is not limited to the above-described exemplary method of selecting candidate pharmacophores. Any automatic method of selecting candidates that depends only on chemical structure of binder library members, preferably expressed in terms of building block composition and sequence, can be used. For example, in the case of the preferred CX 6 C library, candidates could be selected by a clustering analysis performed on the entire amino acid string in a multi-dimensional space. This above method of selecting candidate pharmacophores is not limited to the preferred CX 6 C diversity library. For example, this method is immediately applicable to any diversity library having members comprising building blocks linked by a linear backbone by simply specifying rules of homology appropriate for the building blocks. These homology rules would group building blocks presenting similar structure and reactivity to targets. This method then selects candidates comprising sequences of homologous building blocks present on all the binding library members. If the library members do not have a linear backbone, a related candidate selection method can be used. In this case, the search for homologous building blocks would need to be confined to adjacent building blocks. Adjacent building blocks in this case are those building blocks brought physically close by whatever chemical structures form the library members (instead of simply being linearly adjacent on a backbone) . An adjacency determination would be specific to the particular chemical structure and would be algorithmicly specified. In addition appropriate rules of homology would be specified. The method would then select candidates comprising groups of adjacent, homologous building blocks, a group being present on each binding library member. The above-described step is the selection step of the overall select and test method. Distance measurements and Monte Carlo structuring, steps 4 and 5, determine a consensus pharmacophore structure for the candidate, if possible. If a consensus is found, the candidate is the actual pharmacophore. If a consensus is not found, this selection step must be revisited, and a new candidate selected for test. 5.6. INTRAMOLECULAR DISTANCE MEASUREMENTS Having obtained N binders, their chemical building block structures (chemical formula or primary sequence) , and the identification of a candidate pharmacophore in each binder, steps 4 and 5 of the method of this invention cooperatively determine a precise spatial structure for the candidate pharmacophore (if it exists; if not, a new candidate pharmacophore is selected.) In the preferred (but not limiting) embodiment of this invention, N members of the CX 6 C library that specifically bind to the protein target of interest have been screened; their sequences determined; and a candidate pharmacophore consisting of homologous triplets (more generally from 2 to 6 mers) of amino acids has been determined in each binder. Step 4 measures one or more strategic distances, preferably no more than 10-20, e.g., 1-10 or, more preferably, 1-5 interatomic distances are measured. The remainder of the structure is determined in subsequent steps, other than by direct measurement. The interatomic distances measured in step 4 are preferably with an accuracy of at least 2 A, more preferably at least 1 A or 0.5 A or 0.25 A, and most preferably at least 0.05 A. Thus, in a preferred but not limiting embodiment, distances in the pharmacophore are specified to at least approximately 0.25 A. Step 5, using the CCMBC computational method, then completes determination of the pharmacophore structure at a high resolution and the structures of the rest of the binder molecules with a secondary resolution. Having a high resolution structure for the pharmacophore of interest is orders of magnitude more useful than having a low resolution structure for an entire binder. Consequently, steps 4 and 5 focus resources on the former problem. A distance measurement method is preferred for use if it meets certain conditions, as follows. First, accuracy of distance measurements is preferably better than at least 0.25 A for distances on the order of those between amino acids in a peptide. Second, measurement conditions preferably approximate target binding conditions, i.e., are approximately physiologic. For example, crystallization, which may induce conformational changes, is preferably avoided. Also, the employed measurement methods preferably allow one binder sample to be measured when dry, when hydrated and when bound to the target molecule of interest, thereby observing the effects of water and conformational changes on binding. Third, the measurement method is preferably quick and inexpensive. Important advantages are conveyed by these certain conditions. First, as the method of the invention determines high resolution pharmacophore structures, use of distances less accurate than the intended results would almost certainly result in decreased resolution. Second, as the CCMBC structure determination method approximates the structural effects of hydration and target binding, use of accurate distances including the physical effects of hydration or binding helps increase the resolution of the computational results. These distances as used in the CCMBC method pull the binder structures towards a more accurate representation both of the bound, hydrated pharmacophore and also of the remainder of the binder molecule without a computationally burdensome inclusion of water molecules and without knowledge of the target molecule's structure. REDOR NMR is the preferred method of distance determination. REDOR is a solid phase NMR technique which directly measures the inter-nuclear dipole-dipole interaction strength between two spin nuclear species, denoted D M where A and B are the two nuclear species measured. The inter¬ nuclear distance between A and B is simply determined from D ω by the following equation: where R M is the inter-nuclear distance, h is Planck's constant, and γ A , and are the respective gyromagnetic 10 ratios of nuclei A and B. REDOR is typically accurate to less than 0.05 A and can generally measure distances up to about 8 A. Any two nuclear species observable and resolvable by NMR methods and, preferably, adaptable to chemical inclusion in ^5 the diversity library members of interest, may be the basis of REDOR measurements. Although the subsequent description is often directed to distance determinations between 13 C and 15 N nuclei in members of a preferred library comprising the sequence CX 6 C, this invention is not so limited. One skilled 2 0 in the art can readily adapt the method for use in making measurements of other types of molecules ( e . g. , peptides and nonpeptides) ; additionally, other nuclear species may be used. Other common spin M species that can be used include but are not limited to 31 P and the halogen 19 F. 25 General references on NMR techniques are Slichter, Principles of Magnetic Resonance. Berlin, Springer-Verlag, (1989) and Mehring, Hiαh Resolution NMR in Solids. Berlin, Springer-Verlag (1983) . REDOR references include Gullion et al., Rotational-echo double-resonance NMR. J. Magn. Res. 30 81:196-200 (1989); Pan et al. , Determination of C-N internuclear distance by rotational-echo double-resonance NMR of solids. J. Magn. Res. 90:330-40 (1990); Garbow et al. , DetermiTation of the molecular conformation of melanostatin usinσ 13C. 15N-REDOR NMR spectroscopy. J. Am. Chem. Soc. 35 115:238-44 (1993), all of which are incorporated herein by reference. Other solid phase NMR techniques are applicable but less preferred. These include but are not limited to those disclosed in Kolbert et al . , Measurement of internuclear distances bv switched anαle spinning. J. Physical Chemistry 98:7936 et seq. (1994), and in Raleigh et al . , Rotational Resonance NMR. Chemical Physics Letters 146:71 (1988) . These techniques measure homonuclear distances only to 0.5 A accuracy and are less accurate than REDOR. Liquid phase NMR techniques of NOE (nuclear overhausser) and COESY (correlation enhanced spectroscopy) can also be used but are less preferred. They require complex interpretation to obtain comparable distance accuracy greater than 0.5 A in small molecules with complete rotational freedom. X-ray crystallography can also be used, although it is much less preferred, since crystallization may induce conformational changes in the binder, and since binding to the target molecule may be necessary for crystallization. In the case of REDOR measurements of the heteronuclear distances between 13 C and 15 N, 13 C and 15 N are introduced ("labeled") at the .positions between which a distance measurement is needed. The preferred embodiment of the invention measures the 1S N NMR resonance. Since nearly all the 15 N signal will originate with nuclear labels, very little background signal due to natural abundance nuclei need be accounted for. Alternatively, the 13 C resonance may be measured, in which case the natural abundance background is subtracted from the measurements. Since REDOR depends on observing the internuclear dipole-dipole interaction, the binder being measured should be substantially stationary on the time scale of the NMR signal. The measurement system preferably ensures this condition. The substrate holding the binder to be measured can be " chosen so as to restrain binder motion, or the measured sample may be cooled to restrain motion, or, alternatively, the binder may be bound to its target molecule in order to restrain its motion. Further details of the REDOR distance measurements will make reference to Fig. 3. This illustrates the measurement method for one labeling of one binder, which is repeated if the binder requires multiple labelings and also is repeated for each binder. Subsequent description will focus on only one binder. Step 41 chooses a binder labeling. Labeling is preferably done to obtain the most information about the pharmacophore consistent with chemical labeling opportunities and available labeled amino acids. Backbone labeling, for example, labels the amide N of one amino acid and one of the backbone C's of a next adjacent or more distant amino acid. Backbone labeling is typically done in the backbone in the vicinity of the candidate pharmacophore. It might also be done away from a candidate pharmacophore to confirm a previously determined structure as described for step 6. Side chain labeling strategies vary with the chemical opportunities offered by the candidate pharmacophore. If a terminal N is available, an adjacent side chain or backbone C can be labeled. If not, the side chain C and backbone amino N can be labeled. Side chain labeling is preferably on side chains in the candidate pharmacophore. Preferred labeling in the candidate pharmacophore is either a backbone amino N and a nearby backbone C or a side chain C or, if available, a side chain amino N and an adjacent or nearby side chain C. In an alternative embodiment, to get the most structural information on the binders, these labelings are designed to select the actual major conformation from known possible conformations. For example, if it is known from preliminary determinations that a binder may exist in one of a few, e.g. two, major backbone or side chain folding patterns, the labelings are chosen to distinguish these conformations. Nuclear pairs labeled for measurement are preferably those that have significantly different distances in the possible conformations. Multiple labeling of one binder to determine multiple distances at once is possible, for example, by including one 13 C and several 1S N nuclei, or vice versa, in one labeled molecule. Multiple labeling is limited, however, as is obvious to one skilled in the NMR arts, by chemical shifts of the various nuclear resonances. REDOR measurement of multiple "N- 13 C distances requires that each spectroscopically observed 15 N or 13 C resonance have a distinguishable chemical shift. If these conditions are not met, several separately labeled versions of the binder are prepared and measured, one for each internuclear distance sought. Step 42 synthesizes the labeled binder after a labeling has been determined by applying these preferences and rules. In an embodiment wherein the binder is a peptide, variously labeled 13 C or 15 N labeled amino acid reagents for the synthesis of the labeled binder are widely available from commercial sources. A preferred supplier is Isotec Inc. (Mia isburg, OH) . Other commercial sources include MSD Isotopes (Montreal, Canada) and Sigma Chemical Co. (St. Louis, MO) . Step 42 has three substeps: linear peptide synthesis 43, cyclization 44 (by forming the disulfide bond), and deprotection of the side groups 45. Synthesis and side chain deprotection are performed by solid phase peptide synthesis using standard Boc (tert-butoxycarbonyl) and Fmoc (9-fluorenylmethyloxycarbonyl) chemistry. Exemplary references for this method are Merrifield, J. Amer. Chem. Soc, vol 85, pp 2149 et seq. (1963); Caprino et al. , J. Amer. Chem. Soc. (1970); and Stewart et al. , Solid Phase Peptide Synthesis. Berlin, Springer-Verlag (1984) , which are herein incorporated by reference. Cyclization is by conventional mild oxidation, well known in the chemical arts. The method of these steps is detailed in Example 2 supra. To obtain accurate REDOR NMR measurements, the binder sample is preferably highly purified. Accordingly, it is preferable that the sample be at least 90% pure (but not necessary if spurious NMR signals can be discriminated) , and even more preferable that the sample be at least 95% pure. Such pure samples can be obtained as follows. In a first synthesis method, the binder peptide is synthesized directly on the substrate to be used in the subsequent NMR measurements. In this case particular care is preferably taken with the standard solid phase synthesis steps of Example 2. By way of example, synthesis reagents should be pure, adequate time should be allowed for diffusion of reagents and solvents throughout the interstices of the substrate resin, and between steps, prior reagents should be thoroughly washed from the resin before new reagents applied. That the purity, reaction time, and washings are adequate is gauged by subsequent analysis. An aliquot of the resulting peptide-resin is taken, the peptide is cleaved (Example 2) and its purity analyzed by mass spectroscopy or high performance liquid chromatography (HPLC) . In a second synthesis method, the peptide can be synthesized on any convenient solid phase substrate in a standard manner and then cleaved from the substrate. The peptide is purified by standard methods ( e . g . , HPLC) and then attached to the NMR measurement substrate. The attachment can be done by any methods known in the art, preferably at either the amino- or carboxy-terminus, e . g. , by condensation of the free carboxy terminal group on the peptide with an amino labeled resin, with the attachment step preceding deprotection of any side chain carboxy groups on the peptide; by use of heterofunctional linker groups, etc. Great care is preferably exercised in forming the binder-substrate used for the REDOR NMR measurements. This invention is also directed to binder-substrates suitable to precise REDOR NMR measurements in the following environmental conditions: dry unbound, hydrated unbound, and bound to its molecular target molecule ( e. g. , in lyophilized or hydrated forms) . For any binder and any NMR measurement substrate utilized, the substrate should restrain the attached binder sufficiently so that binder motion will not average out the dipole-dipole interactions necessary for the REDOR measurement. Generally, this requires that the frequency of motion of the binder be less than the frequency of the 6/30849 dipole-dipole interaction being observed, which varies with the nuclear species being observed and the measurement distance. For 13 C- 15 N observations to 2.5 A the binder motion frequency should be less than approximately 200 Hz; for observations to 5 A, less than approximately 30-50 Hz; and for observations beyond 5 A, less than approximately down to 10 Hz. The more polar the substrate, such as glass beads or p-MethylBenzhydrilamine ["mBHA"] resin, the more are polar attached binders (such as are many peptides) restrained. Less polar substrates, such as polystyrene resin, provide less restraints for polar binders. In an embodiment wherein a peptide comprising the sequence CX 6 C is bound to an mBHA resin with an glycine residue serving as a linker to a binding site on the resin, probably no additional steps need be taken for 2.5 A measurements. Additional steps that can be used, if needed, to slow binder motions include cooling the measurement sample to, for example, liquid N 2 temperatures (approximately 77 °K) or binding to a large, relatively immobile target molecule. Second, the net binder density is important and typically is adjusted. The substrate preferably has an adjustable number of binder synthesis sites or binding sites per unit of substrate surface area. Too high a binder density on the substrate surface will cause inter-molecular nuclear dipole-dipole interactions to distort the REDOR distance measurements. To obtain accurate intra-molecular distances, the peptides should be kept sufficiently far apart so that only intra-molecular nuclear dipole-dipole interactions are significant. Inter-molecular nuclear dipole-dipole interactions are preferably kept less than about 10% of the intra-molecular interaction. In the case of "C- 15 N measurements, this criterium can be monitored by observing 13 C- 13 C dipolar couplings. As the dipole interaction falls off as R" 3 , keeping adjacent binders apart by more than approximately 2-3 times the distance to be measured is sufficient . For measurements to 5 A, this criterion can be satisfied by keeping binders approximately 10 A or more 6/30849 apart. At a 10 A spacing interfering 13 C or 15 N signals will not exceed 2.8 hz, which is sufficient attenuation for 30 hz or greater measurements. In an embodiment wherein the binder is a peptide comprising the sequence CX e C, that is synthesized on an mBHA resin that is also to serve as the NMR substrate, there is an additional upper bound on the peptide density. To prevent disulfide di er formation in more than approximately 5% of peptides, the peptides are preferably kept apart by at least their average size. Dimer formation and incorrect disulfide scaffolds result in unconstrained, flexible peptides of altered structure distorting the REDOR distance determination of the properly conformationally constrained, cyclized binder peptides. A 10 A or more separation will meet this requirement. In this case, more than 95% of the disulfide bonds will result in intended intra-molecular constraints. This separation may be adjusted based on a determination of actual dimer formation by chromatographic ( e . g. , HPLC) or mass spectroscopic analysis of the peptide after cleavage from the substrate (see Section 6.6, infra) . NMR instrumental sensitivity places a lower bound on binder density. By way of example, for an adequate observed signal to noise ratio using a preferred NMR spectrometer, no less than approximately 10 lβ observed nuclear spins should be present in a 0.1 g sample. This translates to having a binder density of no less than approximately 0.017 mmole/g (l mole ~ 10 "3 mole) . For alternative NMR spectrometers with higher field magnets ( 3 H Lar or frequency of 500 mHz) , the binder density may be as low as 0.0017 mmole/g. A third substrate condition to be considered is pore size, which is relevant when measurement of binder bound to a target molecule is desired. In a preferred method of conducting such bound measurements, the substrate must have sufficient pore size so that the target molecules can diffuse to all binders on the surface of the substrate and bind to them. For example, folded, moderate sized protein targets of 50 kd are typically roughly spherical with diameters of 6/30849 approximately 50 A. Preferable substrate pore sizes for use with such moderate sized protein targets are no less than 100-200 A. Excessive pore sizes can result in a too dilute binder that decreases NMR signal intensity. The preferable pore sizes also facilitate high purity peptide synthesis directly onto substrate resins by similarly facilitating diffusion of reagents and solvents to synthesis sites. Also, binder substrate binding is preferably of such a nature that it will not be disrupted under either dry conditions, aqueous conditions, and conditions suitable to binder-target binding. Generally, adequate pore sizes are in the range of 100-500 A, although this will vary with the size of the target molecule. Solid phase substrates that can be used include but are not limited to mBHA resins, divinylbenzyl polystyrene resins, and glass beads. All of these substances can be manufactured to have binding sites in the range from 0 to 1.0 mmol/g. In addition, these substrates can be made so as to have the following surface areas: for mBHA about 100 m 2 /g, for polystyrene from 50-100 m 2 /g, and for glass from 0.1-100 m 2 /g. These substrates also can be manufactured so as to have a surface binding site density in the range of from 0 to 1.0 mmol/m 2 . More generally any microporous material with a surface density of binding sites adjustable from 0 to at least 1.0 mmol/m 2 , and preferably with pore sizes in the preferred ranges, can be used. Suppliers of such adjustable resins include Chiron Mimotope Peptide Systems (San Diego, CA) and Nova Biochem (San Diego, CA) . Peptide binders can be synthesized directly on the surface of the substrates, by way of example as set forth in Section 6.6 infra , to achieve a purity of preferably at least 90%, more preferably at least 95%. In the case of a peptide comprising the sequence CX 6 C, the preferred peptide spacing on the substrate is no closer than approximately 10 A, or a peptide density of no greater than one peptide every 100 A 2 . Peptide synthesis on the preferred resin p-MethylBenzhydrilamine ["mBHA"] with 0.16 mmole/g of peptide binding sites, a surface of 100 m 2 /g, and a preferable pore size of 100-200 A results in a binder-substrate having such a preferable peptide surface density and suitable for accurate REDOR NMR measurements in dry, hydrated, and bound conditions. The total binder density is more than tenfold above instrumental sensitivity. The glycine linker provides a sufficient spacer from the substrate surface. Steps 43, 44, and 45 in the preferred embodiment of the invention are carried out by one of a number of commercial peptide synthesis sources, such as Chiron Mimotope Peptide Systems (San Diego, CA) and Nova BioChe (San Diego, CA) . Methods that can be used in these steps are known in the ar . However, the preferred practice of these steps is detailed in the example in Section 6.6. The invention thus provides a method of performing solid state NMR, preferably REDOR NMR, measurements of molecules on a solid phase substrate. In one embodiment, the molecule is a compound having conformational degrees of freedom at the temperature of interest that are limited to torsional rotations about bonds between otherwise rigid subunitε, the torsional rotations respecting any conformational constraints. The molecule is preferably a peptide, more preferably a peptide of constrained conformation, and is most preferably a peptide having one or more cystines (e.g., comprising the sequence CX 6 C) . In other embodiments, the molecule is a peptide analog or derivative. In a preferred embodiment, the substrate is a solid phase on which the molecule ( e. g. , peptide) has been synthesized, with a high degree of purity. In specific embodiments, the REDOR measurements of the molecule on the substrate can be done in a dry nitrogen atmosphere, under hydrated conditions, and when the molecule is either free or bound to a target. The invention is also directed to a solid phase substrate having a surface to which is attached a population of molecules (preferably peptides, peptide derivatives, or peptide analogs) , suitable for obtaining REDOR NMR measurements of the molecules. In specific embodiments, at least 90% of the population consists of a single molecule (i.e., 90% purity). In a more preferred aspect, 95% purity is present. Methods of producing such solid phase substrates, as described above, are alεo provided. Step 46 REDOR spectroscopy is performed on the strategically labeled, binder peptide-resin sample. Step 46 details include final sample preparation, spectrometer parameters and tuning, and excitation pulse sequence. Sample preparation can be carried out by standard methods. The binder peptide-subεtrate sample is dried in N 2 , and an approximately 0.1 g amount is sealed in the NMR measurement rotor. The rotor can be cooled, if necessary, to limit binder motion. An alternative final sample preparation step is to bind the target molecule to the binder peptide-resin sample and then dry the complex in N 2 . Optionally, the binder peptide can be split from the resin before binding to the target. In this alternative, the highly accurate REDOR NMR distances are of the bound binder and thuε reflect any conformational changes that occur upon binding with the target. A triple resonance, magic angle spinning ["MAS"] NMR machine is adaptable to REDOR measurements. Such machines are commercially available from Bruker (Billerica, MA) , Chemmagneticε (Fort Collins, CO) , and Varian (Palo Alto, CA) . An exemplary machine suitable for use is in the laboratory of Prof. Zax, Cornell University (Ithaca, NY) . This machine includes a 7.05 Telsa magnet from Oxford Instruments (Oxford, United Kingdom) and RF pulse excitation and receiving hardware conventional in the NMR art . An exemplary measurement rotor is a triple resonance, MAS probe from Chemmagnetics. The exemplary magnetic field is adjusted for a X H Larmor frequency of 300 Mhz with, corresponding Larmor frequencies for 13 C and 15 N of 75.4 and 30.4 Mhz, respectively. An exemplary probe spin frequency (ω r ) is 4.8 kHz, with corresponding rotor period (T r ) of 0.208 msec. 15 N resonances are measured. The low natural abundance of 15 N eliminates the need for natural background corrections. Alternatively, 13 C measurements can be done with conventional background corrections . REDOR is a pulse NMR technique requiring careful excitation of appropriate H, 13 C, and 15 N resonances synchronous with the MAS rotor and followed by observation of the 15 N free induction decay. Many alternative REDOR excitation sequences have been described in the literature, some of which are found in the references cited hereinabove. These sequences can involve multiple 1 C excitations per rotor period. The simple pulse sequence preferred for use in this invention requires only one α3 C excitation per period. The exemplary sequence for 8 rotor periods is illustrated in Fig. 4, and is detailed herein in a manner such that those εkilled in the NMR arts can program an NMR spectrometer for similar measurement. Three channels excited are the *H channel 50, the 13 C channel 51, and 15 N channel 52. The 13 C and 1S N RF power supplies are tuned to the resonances of the nuclei whose distance is to be measured. The *H channel RF power is initially tuned to the resonance of a proton coupled to the 15 N of interest. The time sequence, (increasing to the right) of the exciting signals (increasing vertically) in each of these channels is illustrated. In the 15 N channel, an initial excitation is applied to the 15 N εpinε in either of two manners: either an initial 7r/2 pulse may be applied or, as illustrated and preferred, a cross polarization transfer from the protons is made. Sufficient RF intensity is applied at time 54 in both the H and 15 N channels, 50 and 51 respectively, to achieve a Hartman-Hahn precession match at a π spin flip time of 13.2 μsec. Subsequent to the initial "N excitation, synchronous -n pulses 56 are applied in phase with the MAS probe rotor for N c rotor cycles, denoted by line 59,. with sufficient RF intensity to achieve a it spin flip time of 13.2 μsec. The phase of these Γ pulses is varied systematically to reduce artifacts in a manner well known in the NMR arts. The preferred sequencing is detailed in Table 1. Table 1 The phase sequence is expressed as the axis, in the frame procesεing with the 15 N spins, about which the TΓ spin flip is made. This axis is systematically varied depending on the number of rotor periods intervening between the 15 N excitation and signal observation. The illustrated phase sequences may be varied into equivalent sequenceε in a conventional manner. For example, "XYXY" is equivalent to "-YX-YX". Finally, at 501 the free induction decay of the 15 N spins is observed and generates the time domain output signal . l n the H channel, the preferred sequence is an initial exciting 7r/2 pulse 53 followed with the previously described cross polarization transfer 54 to the 15 N spins. The less preferred sequence omits these initial pulses in favor of a 7τ/2 15 N excitation. During the subsequent spin evolution time for N c rotor cycles and the free induction decay time 501, a decoupling field 55 is applied to the protons. The preferred decoupling field has a 66 kHz RF intensity to achieve a α H π spin flip in 7.6 μsec. In the 13 C channel, two distinct options must be measured. The first option (not illustrated) has no 13 C exciting pulses. The second option (illustrated) has synchronous π pulses 57 applied for N c rotor cycles at the rotor frequency but with a fixed phase delay 58, denoted by t lf and at sufficient signal intensity sufficient to achieve a 7τ spin flip time of 10.6 μsec. Any value of t 1 may be used; the preferred value is 1/2 the rotor period, T r /2. Alternative REDOR pulse sequences include 2 or more 13 C pulses per rotor cycle. Summarizing still with reference to Fig. 4, a REDOR measurement scan is characterized by the number of rotor cycles, N c , of spin evolution. A complete scan comprises, first, an equilibration period, preceding the illustrated pulse sequences. Second, there is a "N excitation period comprising pulses 53 and 54. Third, there is a spin evolution period for N c rotor cycles which has two optionε, both measured. Both optionε comprise the application of decoupling H field 55 and synchronous in phase 15 N it pulses 56. The first option haε no 13 C excitation; the second has synchronous phase displaced 13 C -n pulses 57. Fourth, and finally, there is observation of free induction decay 501 of the 15 N spins. Fig. 4 illustrates an N c of 8. Each scan option is repeated, and the induction decay signal accumulated, for a sufficient number of times to obtain acceptable signal to noiεe ratio. With the preferred practice, thiε haε required leεε than approximately 5,000 scans, and typically 3000 have been sufficient. An alternative implementation of the REDOR measurement interchanges the roles of 13 C and 15 N and measures the free induction decay of 13 C. Further, the invention is not limited to this described pulse sequence and is adaptable to equivalent pulse sequences yielding direct inter-nuclear dipole-dipole interaction strengths. Following REDOR measurement step 46, is data analysis step 47. This comprises several substeps. As is conventional, the free induction decay signal is Fourier transformed from the time domain to the .frequency domain. The scan option without the 13 C excitation produces a transformed signal with an observed 1S N resonance peak of magnitude S; the scan option with 13 C excitation produces an observed 15 N resonance peak of magnitude S f . The REDOR output signal, denoted ΔS/S , is conventionally formed according to the equation: A S ( S - S f ) (2 ) S The output signal is observed for different N c . Preferably 0, 2, 4, and 8 rotor cycles are observed. Other preferred N c will be apparent during the following description. Further analysis of the REDOR output signal, ΔS/S, is made clearer by a very brief explanation of how this output signal represents the spin 1/2 dipole-dipole interaction between the 13 C and 15 N. In the spin evolution period, the K decoupling excitation eliminates all proton effects from the 13 C and 15 N NMR spectra. Magic angle spinning, in the scan option without any 13 C excitation, eliminates all nuclear dipole-dipole and chemical shift anisotropy from the NMR line. Thus signal S represents an NMR resonance without any dipole interaction. However, in the second scan option, the 13 C 7τ spin flip pulses reintroduce in a controlled manner the dipole-dipole interaction. This interaction causes additional dephasing, or loss of signal strength, in the observed 15 N signal. Thus signal S £ represents an NMR resonance with dipole interaction and the output signal ΔS/S represents the percentage strength of pure dipole-dipole interaction between the 13 C and 1S N nuclei. The exact loss of signal strength depends on the timing of the 13 C pulses and the number of rotor cycles for which they are applied. In the alternative where a general phase delay, t 1# is used, the expression for the REDOR signal is derived by numerically integrating the following equations from the Pan et al. reference (1990, J. Magnetic Resonance 90:330-340): S f = J sinβdβdα (3 ) where ω 0 (α,β, t) = ±- .D cw [sin 2 (β)cos2 (a+ω τ t) - */2sin2βcos (α+ω r t] (4) ωi(o,β, t j ) = - - [J * ω c (c_,β, t') dt' - Jω D (α , β , t') dt'] This integration can be done by standard numerical integration techniques such as are found in Press et al. , 0 Numerical recipes: the art of scientific computing. Cambridge, U.K., Cambridge University Press, (1986), chapter 4, which is herein incorporated by reference. Alternatively the expreεεion can be directly evaluated from the symbolic representations by numerical tools such as Mathematica from 5 Wolfram Research Inc. (Champaign, ID or Mathcad from Mathsoft Inc. (Cambridge, MA) . In a preferred embodiment, however, a much simpler approach is used. In the preferred embodiment, the 13 C pulse phase delay is 1/2 the rotor period, T r , and the preceding equations can be 0 simply expressed (Mueller et al. , 1995, J. Magnetic Resonance, in press) : A2 = 1 - [J 0 ( 2)λ] 2 + 2 k—lsJ k (s/2λ)] 2 S fa 16 2 -l k (5) 5 λ = N c T r CN where J k is a Bessel function of the first kind. Adequate accuracy is obtained by limiting the summation of equation 5 0 to its first five terms. Fig. 5 is a graph of this equation. Vertical axis 61 represents ΔS/S; horizontal axis 62 represents λ; and graph 63 represents equation 5. In detail, step 47 of Fig. 3 uses equation 5 and the REDOR output signal, ΔS/S, for various values of N c to obtain _ a best value for DQ,, the dipole interaction strength. The internuclear distance is simply and directly determined from D o , by equation 1. An exemplary method for finding the best value of D^ is to use a least squares method. First, form the sum of the squares of the differences of the observed ΔS/S and ΔS/S computed from equation 5, which will be a function of D Q ,, T r , and N c through λ. Second, find the value D j u minimizing this function by searching exhaustively in sufficiently small increments over the relevant range. For example, D Q * can be varied by varying R in 0.01 A increments from 0.5 to 8 A. More efficient minimization methods as presented in Press et al . chapter 10 can also be used. Values of the Bessel functions can be simply calculated by the methods in Press et al, supra , § 6.4. Alternatively, this minimization and best value determination is easily performed directly from the symbolic representations with the previously cited mathematical packages. The example in Section 6.6 provides typical results of this measurement and analysis method. This completes the method of Fig. 3 and determines the internuclear distance between the 13 C and 15 N nuclei to which the excitation channels were tuned for the REDOR NMR measurements. If other C-N pair distances are to be determined in the labeled binder, step 46 as detailed above is repeated for the other distinct resonances. If the alternative 15 N resonances cannot be distinguished, separately labeled binders are prepared and measured. 5.7. CONSENSUS. CONFIGURATIONAL BIAS MONTE CARLO Broad overview With reference to Fig. 1, having found N specifically binding members of one or more libraries, step 2, selected a candidate pharmacophore shared by all these binders, step 3, and determined a few strategic distances in the vicinity of the candidate pharmacophore, step 4, precise pharmacophore and binder peptide structures are now determined by the preferred method, the consensus, configurational bias Monte Carlo method. Other orderings and identities of these steps are possible. For example, the binders may be predetermined thereby rendering step 2 unnecessary. Further, no strategic /30849 diεtance measurements may need to be made, and step 4 may be omitted. Alternatively, a partial structure determination step may be inserted before step 4 to guide selection of distances for measurement. Pharmacophore structure determination of this invention is not limited to the CCBMC method to be described. CCMBC makes the most efficient use of heuristic consensus binding and partial distance measurement information. However, the consensus pharmacophore can be determined by methods including but not limited to use of exhaustive REDOR NMR measurements or by extensive but fewer REDOR measurements in conjunction with a conventional molecular structure determination method, such as molecular dynamics, conventional Monte Carlo, or even peptide folding rules. In the following description, the CCBMC method is broadly overviewed; subsequently, details of important steps are described; and finally a description of the preferred computer method and apparatus for practicing the invention is given. From the description of the methods, equations, data structures, and programs provided herein, one will be able readily to translate them into implementations. Although the following descriptions are directed to binders isolated from the preferred library of peptides comprising the sequence CX 6 C (constrained by disulfide bonds) , the method is applicable to more general organic diversity library members. It is immediately applicable to compounds from constrained peptide libraries with other scaffolds and also to compounds from similar peptoid libraries. It will be readily apparent that the method is applicable to any compounds whose structural region of interest exhibits conformational degrees of freedom at a temperature of interest (e.g., body temperature .-- 37°C) that are limited to torsional rotations of rigid molecular subunits about bonds between the subunits, in which any loops present in the structural region of interest are independently rotatable by concerted rotation (see Section 7. Appendix: Concerted Rotation) . Examples of such compounds include but are not limited to peptides, peptoids, peptide derivatives, peptide analogs, etc., including members of libraries discussed in Section 5.2, supra . General features of Monte Carlo simulation methods are known. A reference is Rowley, Statistical mechanics for thermophvsical property calculations. Englewood Cliffs, N.J., PTR Prentice Hall (1994) , especially chapters 5 and 7, which is herein incorporated by reference. The application of simple Monte Carlo to constrained peptides has conventionally been hindered by difficulty generating geometrically proper and energetically useful conformational alterations, and by the consequent wasteful and inefficient exploration of conformational space. This method overcomes these problems for constrained peptides with a novel combination of techniques. In addition, this method is uniquely able to incorporate partial information about binding affinities and distance measurements to improve determination of the pharmacophore structure, one goal of the invention. Fig. 8 is a overview of the method. Step 91 representε the initial geometric and chemical structure of each binding peptide in computer memory. Peptide geometric structure is represented as a set of records, each record representing one rigid subunit or one atom of the peptide. The subunit records are linked together as the subunits are linked in the peptide molecule. Each rigid unit record includes fields for the composition, structure, and connectivity of the rigid unit represented. Since the rigid units only undergo torsional rotations about mutual bonds, their internal geometric structure is fixed. If a previous run with these peptides has been done, peptide initial structure may be chosen as one of the structures generated late in that run. Such an initial structure is desirable since the effects of arbitrary initial conditions have been eliminated. Alternatively, an initial structure is generated from a prototypical backbone without side chains by adding sidechains with random torsional orientations. For members of each type of diversity library, 6/30849 a prototypical backbone meeting structural constraints and representing an allowed configuration for a member possessing no side chains can be defined. The prototypical backbone for the CX 6 C library is generated from the CCBMC model itself as run for the linear peptide C(gly) 6 C (SEQ ID NO:7) using a Ha iltonian consisting only on the H^ term. The H^ term contains only terms which, in the disulfide bond backbone region - C 1 -S 1 -S 2 -C 2 -, limit the S 1 -S 2 distance to 2.038 A and both the C j -S 2 and the S 1 - C 2 distances to 2.883 A. When run for a linear peptide, no Type II backbone moves are made. Only Type I backbone moves which remove and regrow randomly selected portions of the backbone are used to generate backbone alterations. The model is run with temperatures gradually decreasing from room temperature to a small temperature, approximately 1 °K. The final low temperature structure is used for the prototyptical backbone. Backbones for similar constrained peptide libraries can be constructed in similar manners. In memory, for each peptide, a current structure is represented; the initial current structures being the just assigned initial structures. Also in memory is represented a proposed modified structure for one peptide. At step 92 the processor generates "moves" that transform the current structure of a randomly chosen peptide into a proposed modified structure. The moves mimic body temperature (37 °C) thermal agitation experienced by the binders so that their equilibrium structure may be determined. Generation of these moves for conformationally constrained peptides is an important aspect of this method. There are two move types. Type I moves alter the conformation of the side chain of a randomly chosen amino acid of the randomly chosen peptide. The alteration is built by side chain removal followed by side chain regrowth into a new torsional conformation. During regrowth, unfavorable overlap with neighboring side chains is avoided. Type II moves alter the conformation of a limited random region of the peptide backbone of a randomly chosen binder by performing linked, or "concerted", rotations, the linking being such that only four backbone rigid units are spatially displaced. Thereby the internally bonded ring of 8 amino acids will not be disrupted. A reference describing a similar move in linear alkane molecules is Dodd et al . , A concerted rotation algorithm for atomistic Monte Carlo simulation of polymer melts and glasses. Molecular Phyε. , vol 78, pp 961 et seq. (1991) , which is herein incorporated by reference. The ratio between the Types I and II moves is an adjustable parameter with a preferred value of 4. Another important aspect of this method is that both moves are selected in a "configurationally biased" manner. Normal Monte Carlo methods use standard Metropolis procedures, in which each proposed structure is generated randomly and independently of the current structure with an equal a priori probability. However, for complex molecules, it is known that this typically results in the generation of many highly improbable or energetically unlikely structures. In some situations up to 10 5 wasted moves are generated for each useful move, a very considerable waste of processor resources. In contrast, the method of this invention generates proposed structures according to an a priori probability depending on the current structure and the energetic cost of the new structure. This bias toward more acceptable structures of lower energy avoids generating highly improbable structures, making a very much more efficient use of processor resources. Because detailed balance must be satisfied, the acceptance probability of the configurationally biased method must include factors in addition to the usual Boltzman factor. A reference applying a similar method for simple linear alkanes is Smit et al., Computer simulations of the energetics and siting of n- alkanes in zeolites. J. Phys. Chem. vol '98, pp 8442 et seq. (1994) , which is herein incorporated by reference. At Step 93 the processor evaluates the energy, or Kamiltonian, of the proposed configuration. The Hamiltonian contains two groups of terms: conventional physical energy /30849 terms, and heuristic constraint terms. Conventional terms include the energies of rigid unit torsional rotations and of Lenard-Jones, electrostatic interactions, and H-bonding between atoms in different rigid units. Bond lengths and angleε are assumed fixed at the temperature of interest and their energies constant. These conventional interactions are exclusively intramolecular; no physical intermolecular interaction effects are considered in this invention. References for the conventional energies are Weiner et al . , An all atom force field for simulations of proteins and nucleic acids. J. of Computational Chem., 7:230-52 (1986); and Weiner et al. , A new force field for molecular simulation of nucleic acids and proteins. J. Amer. Chem. Soc. 106:765 (1984) (herein referred to as the "AMBER referenceε") , which are herein incorporated by reference. Another important aεpect of the Monte Carlo method of this invention is the heuristic terms: the consensus term and the measurement constraint term. They uniquely make use of partial information on the binder peptides to guide the Monte Carlo simulation. The consensus term, H consenϊus , is added to the Hamiltonian to represent that all the binders do in fact bind to the same protein target in the same physical and chemical manner. Since binding occurs at the shared candidate pharmacophore in each binder, this term makes energetically unfavorable moves that cause the geometric structure in the shared pharmacophore to depart from an average, common structure. Pseudo chemical "bonds" to this average structure are added which mimic the actual physical bonding to the surface groups of the protein target. If the candidate pharmacophore is in fact the actual pharmacophore, this energy will become minimized and small in the equilibrium configuration, since there will be an actual, shared, geometric configuration. If the candidate pharmacophore is not the actual one, this term will not become minimized or small, as there is no physical reason for this region of the peptide molecules to share a common structure. This is the only Hamiltonian term which couples the N binders together; no physical intermolecular effects are considered. The binders are otherwise treated independently by the method. The measurement constraint term, H,^, iε added to repreεent the distance measurementε made, which are in fact actual distances in the molecules and constrain any simulated structure. This term makes energetically unfavorable, by adding pseudo chemical bonds of the measured lengths, moves that cauεe the constrained internuclear distance to depart from their measured values. Of course if no partial distance measurements have been made or are otherwise available, this term may simply be omitted from the Hamiltonian without adversely affecting the practice of this step. Which measurementε to make, if any, is guided by the results of the consensus structure determined. If an adequate structure can be obtained without assistance of distance measurementε, none need be incorporated. If inadequate reεultε are obtained, additional iterations of the method will need distance measurement inputs. Step 94 tests the proposed structure against an acceptance probability, accept (curr->prop) . This acceptance probability is determined by the energy of the proposed structure previously computed in step 93. If the proposed structure fails this test and is not accepted, the method progresεeε immediately to step 96. If the proposed structure meets the test and is accepted, the accepted proposed structure replaces and becomes the current structure. The proposed structure of this peptide is also saved (given certain other conditions detailed later) in a separate memory store of structures for later analysis. This structure store is preferably on disk. Repeated application of the concerted rotation may lead to a slightly imperfect structure, due to numerical precision errors. In an alternative embodiment, peptide geometry would be restored to an ideal state by application of the Random Tweek algorithm after several thousand moves (Shenkin et al., 1987, Biopolymers 26:2053-85) . S tep 96 teεts whether enough structures of equilibrated total energy have been generated in this simulation run. The run terminates if a sufficient number have been generated. S ufficiency is determined on the basis of whether the statistical sampling errors of the average pharmacophore structure determined at step 97 is adequate (typically, less than 0.25 A). Preferably, 25,000 equilibrated structures would be accumulated for each run. Also, preferably, three runs would be performed for a total of 75,000 saved structures. Fig. 9 illustrates energy equilibration of an actual run. Axis 101 is the total energy of a set of peptide binders; axis 102 is the number of moves accepted. Traces 103 represent total energieε of all binders from each of the three runs. Typically, run energy rapidly equilibrates within less than approximately 2000 moves in most cases. Subsequent εaved εtructureε are counted toward termination. Traceε 103 display typical energy variations superimposed on a secular stability. The illustrated energy variations typically comprise several components having different variabilities. First, there is a very high frequency oscillation with a period of a few tens of moves (known as "hair"). Second, there is a low frequency oscillation with a period of several hundred to a few thousand moves and with low amplitude. Step 97 analyzes the structure stored in memory. In the simplest preferred embodiment, the stored geometric structures for each binder are simply averaged, yielding a final structure for each binder and for the candidate pharmacophore. In another alternative, clustering software seeks clusters of similar structures for each binder. The clusters are then averaged to give a final structure for each variant structure for each binder. The variants represent alternative foldings for the binder. Exemplary clustering methods are found in Gordon et al. Fuzzy cluster analysis of molecular dynamics trajectories. Proteins: Structure, Function and Genetics 14:249-264 (1992). Alternative post-proceεεing can be done on the clustered structures to account for small bond angle vibrations. Such vibrations are expected to make small perturbations to the clustered structures determined by the Monte Carlo method and can be accounted for by a brief molecular dynamics simulation. Such a simulation is fully defined by the Hamiltonian, comprising the physical and heuristic energieε to be described infra in Eqn. 8, and by the temperature of interest. The structures observed during the simulation are averaged to determine a final more accurate equilibrium structure. A code capable of performing such a simulation is Discover ® from BIOSYM (San Diego, CA) . Preferably, the molecular dynamics simulation would be run for approximately 10 s bond angle vibration periods. Since the typical bond angle vibration period is 10 *2 ps (1 ps = 10 "α2 sec), such a run will encompasε approximately 1 nε of molecular time. Configurational biaε move generation detailε One Type I or II move will, in general, alter the position of several -rigid units on a side chain or along the backbone. Each altered rigid unit is sequentially considered during move generation. The Hamiltonian describing the energy of the rigid unit currently being considered in a move is divided into an internal, u ιnt , and an external, u ext , part, where u β t is all energy not included in u int . In the preferred embodiment, u int is set to 0; an alternative choice would be to include only the torsional interaction energy between this rigid unit and units to which it is currently bound. u int generates a probability distribution, p int , according to which is generated a set, φ k , k = 1...K, of candidate torsional angles for the bond between the rigid unit being examined and rigid units already examined. u ext generates another probability distribution, p βxt , according to which is selected one torsional angle from the prior set as the proposed new angle for the rigid unit being examined. These probabilities are defined by the equations: P nε <Φ i .*>"exp[-βu/ 'n£ (φ J,Jt )] exp[-βu : (φ i f )] , ( Φ,.* ) - (6) In thiε equation, " α " εignifieε the rigid unit being conεidered, K iε the total number of candidate torsional angles generated by p ιnt , and β = 1/kT (k is Boltzman's conεtant; T the temperature, preferably 37 °C) . The overall probability of generating a tranεition from the current to the proposed structures and accepting the proposed structure are given by the equations: y P ( urr- ro )« π <Φ . ) x:( Φ,. -=1 κ r,7 new accept { curr-prop) =min (1, j ol—d) In this equation, M is the total number.of rigid units added in the move. W old is a weight for the reverse move and will be described subsequently. Because energy is included in the generation probabilities, proposed structures are preferentially of lower energy. Since the acceptance of proposed structures depends on their energies, the acceptance of proposed structures is thereby more probable. Peotide memory representation details It is well known that at body temperature peptides consist of linked rigid units capable only of torsional rotational about mutual bonds whose lengths and angles are fixed. The torsional rotations respect any molecular conformational constraints. See Cantor et al . , Biophysical chemistry part I the conformation of biological macromolecules. New York, W.H. Freeman and Co. (1980) , which is herein incorporated by reference. Table 2 listε the rigid units encountered in the preferred embodiment of this invention utilizing librarieε of conformationally constrained peptides. Table 2, where applicable, also listε dihedral bond angles between incoming and outgoing bonds to a rigid unit and the aεεigned unit type. Table 2 Table 3 illustrates the decomposition of all amino acid side chains into rigid units. Glycine is a εpecial case, without a side chain. Proline is a special case with a side chain cyclically bonded to the backbone amino N. Table 3 Fig. 10 illustrates a structurally correct but geometrically inaccurate decomposition of the peptide backbone CX 6 C into rigid units (inessential hydrogens have been omitted) . Rigid units are set off in boxes 121 and their types 122 are indicated. Fig 11 illustrates a structurally correct but geometrically inaccurate decomposition of the peptide backbone and side chains of -arginine-glycine-aspartate- ("RGD") into rigid units. Rigid units are set off in boxes 131 and their types 132 are indicated. Rigid units are represented as records in memory. The data structure for a peptide comprises records for its constituent rigid units linked together by data pointers exactly as the actual rigid units in the peptide are chemically linked. The record representing a rigid unit comprises fields for: type of the unit, pointers to chemically bonded units, all atoms of the unit and their spatial positions, atoms of the unit that are the target of the incoming and outgoing bonds, amino acid to which the unit belongs, and atomic composition of the unit. A known, conventional representation of atoms and atomic interactions is taught by the AMBER references. Each atom is divided into a εerieε of subtypes of specific properties. For example, for carbon there are subtypes C, C2, CA, CT, etc.; for nitrogen, there are N, N2, etc.; for oxygen, there are 0, 02, etc.; and for hydrogen, there are H, H2, etc. Bonds between each pair of subtypes are separately characterized by equilibrium lengths, angles, and torsional energies. Interactions between each pair of subtype atoms are separately characterized by Lenard-Jones force parameterε, hydrogen bonding force parameterε, and electroεtatic chargeε. Amino acid charge distributions are in Weiner et al . , J. of Computational Chem., 7:230-52 (1986) . Thus each atom in each rigid unit is represented by an in-memory record comprising fields for: its AMBER reference subtype and any electrostatic charge. The atom's spatial position relative to its containing rigid unit, stored in that unit's record, is geometrically determined from the unit's internal chemical structure and bonds by the AMBER bond lengths and angles defined for each of these bonds. The relative spatial positions of atoms within a rigid unit are, of course, fixed, and there is no interaction energy to consider between atoms within a rigid unit. Fig. 11 is a complete memory representation of a tripeptide sequence -RGD- (a known pharmacophore) . Rigid units are set off in boxes 131 and their types 132 are indicated. The torsional degrees of freedom between the rigid units are indicated by angle arrows 133. AMBER atoms types are indicated as at 134. Net atomic charges are indicated only for arginine as at 135. Rigid unit records are linked into a data structure modeling the rigid unit's physical linkages. Not shown are relative atomic spatial poεitionε represented by the atoms rectangular coordinates. All parameterε defining the AMBER atomic representations and interatomic forces can be found in Weiner et al. , J. of Computational Chem., 7:230-52 (1986) , and Weiner et al . , J. Amer. Chem. Soc, 106:765 (1984) . Conventionally, these parameters are obtained from computer readable fileε from commercial εourceε . The preferred computer readable source of these parameters is from Insight II ® 2.3.5 software from BIOSYM (San Diego, CA) . Other sources are Tripos (St. Louis, MO) and CHARM (Molecular Simulations, Inc., Burlington, MA) . Interaction enerσy evaluation details The form of the intramolecular energy, or Hamiltonian, evaluated at step 93, is an important element of this invention. The Hamiltonian consists of the components: ^total ~ _-* "•!. εoεaJ ltbindezε (g) "1, total "1, molecular*"l,ΛMF + '"i, consensus The H l molecular component is determined from the Weiner et al . references, J. of Computational Chem., 7:230-52 (1986) , and J. Amer. Chem. Soc, 106:765 (1984) . H l . ( 9 ) Here, φ, . is the i'th torsional angle between rigid units of the l'th binder peptide, and R lfl , is the interatomic distance between the i'th and j 'th atoms in different rigid units of the l'th binder. The firεt term in thiε equation iε the torεional energy of rigid units; the second is the interatomic Lenard-Joneε energy; the third is the interatomic electrostatic energy; and the fourth is the interatomic hydrogen bond energy. Rigid unit torsional rotations directly change the firεt term. Such rotations indirectly change all other termε as interatomic distances change. The AMBER parameters V ιn , A ι: , B l q 1 , C 13 and D l3 are obtained as stated above. The effect of water is approximated in a known manner by setting e equal to 4e 0 r, where r is distance (in A) in the electrostatic term and e t iε the vacuum permeability. The distance constraint term, as described, makes energetically unfavorable moves which cause those measured interatomic separations in the simulation to depart from their measured values. If no measured values are available, this term is simply omitted from the Hamiltonian. Since this is not a physical energy and in simulation equilibrium the binders should have the measured distance, it is advantageous that this term should make only a small contribution to the equilibrium energy, no more than 10% of the total energy and preferably approximately 2.5 to 5%. Further, it is advantageous that the energetic disfavor be weighted by the confidence in the measurements, so that measurements having more confidence have a greater effect. Many forms of this energy meet these criteria. The preferred form is: (o) H ( R l . ij ~ R l . iJ > > l .NUR ' i<j * 2 W n ll.. iijj (10 ) observed distance pairs where R (0, ι,ι:J is a measured distance in the l'th binder peptide between atomic pair ij . This makes the constraints appear as an elastic pseudo-bond with equilibrium length as measured. The w : i:j are weights designed to meet the above size criteria. 5 In the preferred embodiment, they are calculated with an overall multiplicative factor limiting the contribution of H I,HM to no more than approximately 5% of the total equilibrated energy. Their relative value is selected to reflect the lower reliability of longer measurements. Thus 0 if R' 01 ! _ i: is between 0 and 3 A, w 1#1 . has a relative value of 1; if the measurement is between 3 and 4.5 A, the relative value is 2; if between 4.5 and 7 A, the value is 3; and if the distance exceeds 7 A, the term is dropped from the sum. Other alternative weight assignments meeting the general 5 criteria are clearly possible. The consensus constraint term, as described, makes energetically unfavorable moves which cause the candidate pharmacophore in each of the binders to depart from an average, shared configuration. In simulation equilibrium 0 when the candidate is the actual pharmacophore, the binders share the pharmacophore structure and this term should be small. Since this iε not a physical energy, in the case where the candidate pharmacophore iε correct, this term should not be large compared to the total energy, in 5 equilibrium no more than 10% of the total energy, and preferably approximately 5%. Further, the energetic disfavor should preferably be weighted by the affinity of each binder for the protein target, so that binders with greater affinity have a greater energetic effect. 30 Many forms of this energy meet these criteria. The preferred form is: R' 01 ! ,, the shared consenεuε εtructure for the candidate pharmacophore, is an average of the interatomic distances between corresponding atomic positionε, ij , in the shared pharmacophore in all binders. Thiε makes the constraints appear as a pseudo-bonds to a shared pharmacophore, which represents the binding to the protein target. The w y lrl . are weights designed to meet the above size criteria. In the preferred embodiment, they are calculated with an overall multiplicative factor limiting the contribution of H lιCOn , enlus to no more than approximately 5% of the total equilibrated energy. Their relative value is selected to reflect that binders with lower affinity are less reliable indicators of actual pharmacophore structure. Thus the relative value of the weights is proportional to the logarithm of the affinity of the corresponding binder with an affinity of 1 μmolar having a relative weight of 1. Other weight assignmentε meeting the general criteria are clearly poεεible. The heuriεtic H consβnιus is the only Hamiltonian term linking together the various binders . All Hamiltonian components change only due to the dependence of the interatomic distances, R 1<13 , on the rigid unit's torsional rotation. The R lιlD are the well known Euclidean distances between the atomic coordinates stored in the rigid unit records. Calculation of coordinate changes due to rotation of angle φ about a bond with unit direction n originating at atom A with position x. is well known, but will be detailed. (Throughout, symbols representing vector quantities are indicated by underlining.) First, translate from the current coordinate origin to an origin at position x. by adding x. to all relevant coordinate vectors. Second, apply a rotation matrix, T, to the atomic coordinate vectors. Third, translate back to the prior coordinate origin from . by subtracting 2£ from all relevant coordinate vectors. A rotation matrix is given by: T=cos ( φ ) I+n τ [ l -cos ( φ ) ] +Msin ( φ ) A reference for this computation is Goldstein, Classical mechanics. Massachusetts, Addison-Wesley (1981) , especially chapter 4, which is herein incorporated by reference. Type I move generation Type I moves alter εide chain εtructure of a randomly choεen amino acid in a randomly choεen binder. Theεe randorr. choiceε are conventionally made by a random number subroutine. The chosen side chain iε "removed" from the binder peptide and "grown" back rigid unit by rigid unit. For the next, i'th, rigid unit to be added, K possible new torsional angles are generated according to p ιn X Preferably K iε from 10 to 100. One of these torsional angles is selected according to p ex" , and the rigid unit is added at this new angle . Determination of p ext requires obtaining the normalization w 1 ex X At each step the u lnt and u ext used to calculate the respective probabilities include only interaction energies with rigid units present in other amino acids or already grown back. Rigid units not yet added are ignored. After all the side chain rigid units have been added back, W*" is computed as the product of the normalization factors. Fig. 12 illustrates a Type I move for glutamate. At 141 the side chain has been removed. The first -CH 2 - unit is added back at 142 with new torsional angle φ x . The generation according to p int and selection according to p βxt of this angle ignores energy interactions with the other side chain rigid units not yet added. At 143, the next CH 2 - rigid unit is added back at angle φ 2 . Finally at 144, the last -C0 2 rigid unit is added at angle φ 2 . For this last step interaction energies with all the rigid units are considered in generating and selecting the new angle. W° αd is the weight for the reverse move, the move from the proposed new structure to the current configuration. For this, the proposed side chain iε removed and regrόwn in itε current structure unit by unit. For the next, i'th, unit generate K-l possible new torsional angles according to p ln" , again ignoring interactions with units yet to be added. The K'th new angle is the current angle for that unit. The current torsional angle is selected. Although p ext is not used, normalization , ext is determined. After all units have been regrown at the current angles, W old is computed as the product of the normalizations. The acceptance probability for the proposed side chain configuration is determined from equation 7 using W" ew and W° : Type II move generation Type II moves alter a limited region of the amino acid backbone beginning at ε. randomly chosen backbone rigid unit of a randomly chosen binder peptide in a manner consistent with conformational constraints due to internal disulfide bonds. These random choices are made similarly to those for Type I moves . In Type II moves, side chains attached to the altered rigid units move rigidly with their backbone rigid units. For this move, important geometric constraints must be met. In a randomly chosen binder and at a randomly chosen backbone bond between adjacent rigid units, a torsional angle rotation by φ 0 is made. Subsequent backbone torsional rotations are chosen so that a minimum number of rigid units undergo a spatial displacement. -This constraint fixes a limited number (if any) of possible subsequent torsional angles as a function of φ 0 so that at most 4 rigid units are spatially displaced and rotated with at most 3 additional rigid units undergoing a rotation. This move is an important aspect of this invention and is required to maintain the conformational constraint due to the disulfide bridge. Since only 7 rigid units are spatially modified, the Type II move preserveε the 8 amino acid cycle (20 rigid unitε) , including the cystine side chain. Fi - 13 illustrates a Type II move of a poly-glycine 7- er. Rigid unit positions are indicated generally by black circles as at 1509 with incoming bonds generally as at 1502. A C„ rigid unit (B unit) is illustrated in box 1515, and an amide bond (C unit) in box 1516. Backbone structure 1500 in transformed into structure 1501 by the Type II move generated by an initial rotation about bond 1502. Subsequent rotations about bonds 1503, 1504, 1505, 1506, 1507, and 1508 are thereby determined so that the rigid unit 1510 and at most three subsequent units undergo only a rotation without any spatial displacement. The four rigid units between unitε 1509 and 1510 undergo both a spatial displacement and a rotation as structure 1500 is transformed to structure 1501. No other backbone rigid unitε are altered. The derivation of these asεertions, including expresεionε for the- allowed angleε, is in Section 8. Appendix: Concerted Rotation. Fig. 14 defines notation used in this Appendix: Concerted Rotation. Poly-glycine 7-mer backbone 1600 iε the same as in Fig. 13. Rigid unit positions are indicated generally by black circles as at 1601 with incoming bonds generally as at 1602. The torsional rotations φ 0 to φ 6 are about bonds 1602 to 1608, respectively, between sequential, adjacent rigid units. The rigid unit position vectors r. 0 to £,, illustrated as vectors 1610 to 1616, respectively, define the position of these sequential rigid units with respect to a laboratory coordinate system with origin 1609. Summarizing this Appendix, the determination of the fixed torsional angles proceeds as follows. The allowed values for are the roots of equation 34, which depends on the φ 0 driver angle and φ 2 through φ . But φ 2 through 4 can be determined in terms of φ l . Two solutions for φ 2 are determined by equation 25 in terms of φ 1 . Two solutions for φ 3 are determined by equation 29 in terms of the preceding φ'ε. Finally, a εimple inverεion of equation 32 determineε one solution for φ < in terms of the preceding φ ' ε . Having found the allowed values of φ l t then equationε 25, 29, and 32 determine correεponding allowed values for the other φ'ε, which in turn determine the alteration of the firεt four rigid units caused by the φ 0 initial rotation. More precisely, final torsional angles φ 0 to φ 6 determine position vectorε £α to £ 4 by applying rotation matrix 18 to equationε 17 to obtain new position vectors in the laboratory coordinate system, the rotation matrices of equations 16 and 18 being determined by these final torsional angles. Position vectors r c and r. s to r, do not change. Then rigid unit 0 is translated to position r 0 ; aligned so that its incoming bond axis is along the direction of the outgoing bond of unit -1; and finally rigidly rotated so that the end of its outgoing bond is at position r, . Rigid unit 1 iε then tranεlated to poεition r..; aligned so that its incoming bond axiε iε along the outgoing bond of unit 0; and rigidly rotated εo that the end of itε outgoing bond is at position £ 2 . Rigid units 2 to 6 are then added to the backbone in a similar fashion. In this fashion the Type II move geometry is determined. Any side chains attached to these rigid units are rigidly rotated when their parent unit iε rotated. The Type II rotation iε chosen in the following manner. Using the configurational bias prescription, the Hamiltonian is divided into u int and u ext . u ι t is preferably 0, or alternatively is the torsional energy associated with the rigid unit of interest, while u βxt includes all remaining interaction energies. In the previous manner, u int determines p int according to which are generated K' candidate φ 0 rotation angles. Preferably K' is 1. Then the geometric constraints are solved for each candidate φ 0 . Typically, but not always, 6K' , denoted K, possible backbone alterations are obtained. One of these is selected by p ,xt , determined by: p β *. ( φo ) , ex P [ -β c - ( φ J ) JC ) ] P ^o. *' W*' ( i k ) (13 ) u ext includes all interactions not in u ιnt , that is all other backbone and side chain interactions. Because these 0 determinations occur in torsional angle space and change the volume element in that space, the Jacobian, determined by equation 35, of the selected Type II move is also needed as a weight in the acceptance probability for detailed balance. This acceptance probability for Type II moves is: 5 j newή new accept ( cuzr-piop) = min [l , ft ol —d = j -■ — ol —d ] (14) The weight and Jacobian of the reverse transformation 20 from the proposed to the current structure are also needed in the acceptance probability for Monte Carlo detailed balance. These quantities are determined as follows. Using the proposed backbone structure just selected as the basis, generate a set of K'-l new φ 0 torsional angles according to __ p ιnt and also include the current φ 0 in the set. Then solve the geometric constraint to determine the permitted alterations. The current configuration, since it exists, must be among the permitted structures. From this set of permitted structures determine W° l per equation 13. Then ,_ select the current configuration and compute the Jacobian J old per equation 35. This completes the determination or the acceptance probability. Proline is approximated. Proline is not subject to Type I moves. However, proline is subject to normal Type II 3 _ moves, with its side chain bond to the amino nitrogen broken. The side chain thus moves rigidly with its backbone rigid unit as in normal Type II move. To compensate for the broken bond approximation, the C 0 -N torsional energy amplitude in the proline backbone is set at approximately 5 kcal/mole. (By contrast the torsional energy in a typical amino acid of the C 0 -N bond is approximately 0.3 kcal/mole.) This invention is adaptable to other suitable approximations for proline. Alternatively, the proline side chain may be subject to alterations which preserve its cyclicity, such as for example, by an extension of the constraint scheme just described. Program detailed description The following deεcribes the construction and use of a computer method and apparatus to perform the method of step 5. The listing of this code is included in a microfiche appendix to this specification. Fig. 15 is a general view of the computer system and its internal data and program structureε. To the left in Fig. 15 are the principal data structures of this method. Current structures 1701 contains the current structureε of the N binderε represented in memory as deεcribed. Propoεed structure 1702 contains working memory areas uεed to generate a proposed new structure for one binder peptide. Structures 1701 and 1702 would typically be εtored in RAM memory of the computer system, RAM memory being memory directly accessible to processor fetches. Stored structures 1703 contain similar memory representations of all the peptide structures generated, accepted, and selected for storage. This iε typically stored on permanent disk file(s) . Candidate pharmacophore structures 1704 are input to the programs from either a disk file of the display and input unit 1712. The identified candidate structures are used to determine the ' 1#ij in Eqn 11. Parameters 1705 comprises several parts. First, are all the AMBER atomic interaction definitions and parameters. Second, are standard representations of the amino acids including component rigid units and atomic charge assignments. Third, are parameters controlling the run. These further comprise, by example, values for K and K' , the Type I/II move branching ratio, the number of moves made in the simulations run, the simulation total energy record, etc The parameters would typically be loaded from disk file(s) into RAM memory for manipulation during a simulation run. Unit 1712 includes display and input devices" for monitoring and control . Depicted on the display are the total number of moves made in the current run and the course of the total energy, which is εimilar to that illuεtrated in Fig. 9. Processor 1711 is loaded with necessary programs prior to a simulation run and executes the programs to perform the simulation method. The general structure consiεtε of main program 1706, εtructure modification program 1707, Type I and II move generatorε 1708 and 1709, and subroutines 1710. The subroutines consist of common utility subprograms, such as for performing torsional rotationε about bondε and computing interaction energieε by the previouε methodε, and conventional library εubprogramε, such as for performing input and output and finding random numberε. Any scientifically adequate random number generator can be used. A reference for random number generators is Press et al . , Numerical recipes: the art of scientific computing. Cambridge, U.K., Cambridge University Press, (1986), chapter 7. The invention is equally adaptable to other program structures that will occur to those skilled in computer simulation arts. The preferred embodiment of these εtructure is an Indigo 2 workstation from Silicon Graphics (Mountain View, CA) . Alternatively, any high performance workstation, such as products of Hewlett-Packard, IBM or Sun Microsystems, could be used. Preferably the data and program structures are coded in the C computer language. Alternatively any scientifically oriented language, such as Fortran, could be used. Conventional subroutine and scientific subroutine libraries are used where appropriate. The program components will be now described in detail with reference to Figs. 16, 17, 18, and 19. Fig. 16 illustrates main program 1706. The peptide sequences of the N binders are input at step 1801. All necessary AMBER parameters - bond lengths and angleε, atomic typeε and charges, interaction parameters, amino acid definitions, etc - are input at step 1802. Step 1803 creates initial structures from this input data. Rigid unit records for all rigid unitε are created and linked to represent peptides. The geometric structures of these peptides either are obtained from a prior run or are built by adding side chains to a prototypical backbone characteristic of the library of the binder. A prototypical backbone for the CX f C library is found in the microfiche appendix heading CX6C.CAR. The initial binder εtructureε are stored in the current structure data areas in preparation for the beginning the main steps of the method. Step 1804 begins the main loop of the simulation with the generation of a proposed modified structure for one of the binder peptides by structure modification program 1707. As part of proposed structure generation, an acceptance probability, accept (curr->prop) is determined as previously described. The proposed structure will be accepted at 1805 based on this probability. For example, a random number between 0 and 1 is generated, and the proposed structure accepted if the random number is less than the acceptance probability. If the proposed structure is accepted, then it is tested for sufficient distinctiveness at step 1806. This test is met if at least one atomic position in the proposed structure differs from the corresponding position in the current structure by at least approximately 0.2 A. If the proposed structure is distinct, it is stored at 1807 in the structure store for later analysis. Whether distinct or not, the accepted proposed structure for the peptide replaces the corresponding current structure at step 1808. The simulation is tested for completion at step 1809. Completion can be controlled by the operator at station 1712 depending on display of run progress results. Alternatively, termination can be mechanically controlled. After completing a certain number of total moves after run energy equilibration, the moves being split between Types I and II according to the specified branching ratio, the run is terminated. The preferred number of total moves is 25,000, and the preferred Type I/II branching ratio is 4. Thus it is preferred to have 20,000 Type I and 5,000 Type II moves after equilibration per simulation run. At step 1810, the stored structures are analyzed to determine both the consensus pharmacophore structure and the structures of the remainder of the binders. In the preferred embodiment, atomic positionε in the equilibrated stored structures for each peptide are averaged to obtain the predicted geometric structure. The shared pharmacophore structure is obtained from the predicted structure of each peptide, again by averaging the shared position information for all peptides. Alternatively, before structure averaging, the structures generated for each binder can be clustered into similar groups -and the clusters for each peptide separately averaged. The clusters would represent alternative peptide folding patterns. It is anticipated that because preferred binders are short peptides constrained by disulfide bridges, any alternative foldings identified will be structurally similar. The clustering can be done by the exemplary methods found in the previously referenced article Gordon et al. Fuzzv cluster analysis of molecular dynamics trajectories. Proteins: Structure, Function, and Genetics 14:249-264 (1992). For all analysis methods, the choice of the preferred number of stored moves is adjusted to achieve adequate estimated statistical position errors. Further, preferably, the results of three runs are combined to achieve increased statistical confidence. Other information is also output. Particularly important is the course of the total energy for each peptide and for all the peptides, and the intra-molecular, consensus, and constraint components of the energies. These energy components are used in determining whether a consensus pharmacophore has been found. As previously described, this is preferably done by insuring that H consenϊus is small compared to the total energy and is minimized by a particular 5 candidate pharmacophore. Also H^ must be relatively small. Finally at 1811, all resultε are output in a form usable for the subsequent steps 6 and 7 of Fig. 1. For example, this may be a particular file format suitable for subsequent lead compound search by a database query. 10 Turning now to Fig. 17, structure modification program 1707 will be described. This is invoked from the main program at 1804. Upon entry, this program randomly picks one of the binder peptides at 1901 for which to generate a proposed structure and also picks which type of move to uεe 15 at 1902. This latter random choice iε made according to an adjustable Type I/II branching ratio (preferably 4) . For a Type I move, step 1903 picks a random amino acid side chain of the selected peptide, and step 1904 invokes the Type I move program. (Proline has no Type I moves.) For a Type II 20 move, step 1905 picks a random backbone bond between rigid units to rotate and also a random direction from the picked bond along which backbone rigid unit structure will be altered. Step 1906 invokes the Type II move program. Figs. 18A and 18B illustrate the Type I move generator 25 1708, which is defined by equations 6 and 7. With reference first to Fig. 18A, the proposed structure of the selected peptide is created from its current structure by removing the selected side chain. All intra-molecular interactions are subsequently determined with respect to the proposed 30 structure absent side chain rigid units not yet regrown. K candidate new torsional angles for the next, i'th, rigid unit to add are generated by Pi int at 2002. Preferably K is between 10 and 100. Generation of these angles uses the conventional rejection method referenced in Press et al. at § 7.3. The 35 weight w α βxt and Pi ext are determined for each of these candidate angles. This requires the rigid unit to be added to be rotated to the candidate angle using the previous rotation method. Candidate interaction energy is determined from candidate interatomic distances resulting from the candidate rotation. One of the candidate angles is probabilisticly selected at 2003 and the rigid unit added back at this torsional angle at 2004. If there are more units to add, which is tested at 2005, these εtepέ are repeated. If not, the acceptance weight W" ew is determined as the product of the w " 1 at 2006. Laεtly the old weight iε determined at 2007. From the weightε the move acceptance probability iε found for use at 1805. Fig. 18B details the determination 2007 of W old , the weight for the reverse move from the proposed to the current side chain εtructure. Temporarily the proposed structure iε used as a basis for energy determination at 2008, and then the current structure is restored at 2016, when thiε proceεε iε finished. The proposed side chain iε removed at 2009 for regrowth rigid unit by rigid unit aε in Fig. 18A. For the next, i'th, rigid unit to be added back, K-l candidate angleε are generated according to ^ at 2010 with the current value of that angle for the K-th candidate at 2011. Aε previously, the weight j "" is determined for these candidate angles at 2012. The rigid unit iε added back at the current, K-th, angle at 2013. If there are more units to add, teεted at 2014, these steps are repeated. If not, the acceptance weight W old is determined as the product of the w " at 2006. Figs. 19A and 19B illustrate Type II move generator 1709, which is defined by equation 13 and 14 and the concerted rotation geometric constraints. With reference to Fig. 19A, K' candidate new torsional angles for the selected backbone bond are generated by p int using the rejection method. Preferably K' is l . Torsional rotations about adjacent backbone bonds, in the selected direction along the backbone, permitted by the concerted rotation constraints are determined from the roots of equation 34 at 2102. Equation 34 depends on intermediate variables obtained from equations 25, 29, and 32 and determined in that order. The roots are simply found by searching the interval [-7r,τr] in 0.04° increments. When a root is located in a 0.04° segment, it iε refined with the bisection method referenced in Press et al. at § 9.1. It iε expected on the average that εix K' solutions will be found. If no roots are found at 2103, the candidate rotation is impossible and this move is skipped. If solutions exist, next, at 2104, p ext and W" e are ' determined. Using the described rotation method, the backbone rigid unitε are rotated (with consequent spatial displacement of 4 units) to a candidate torsional angle solution about their mutual bonds. Additionally, any side chains attached to backbone rigid units are rigidly rotated using the same method. Having made these rotations, candidate interatomic distances and candidate interaction energies can be determined and used to obtain p ext for this candidate εolution. One of the candidateε iε probabiliεticly selected at 2104, and the backbone and any side chains are rotated according to thiε candidate into the propoεed structure. The Jacobian of thiε transformation is determined at 2106 by equation 35. Laεtly the old acceptance weight and Jacobian are determined at 2107. From the weightε and Jacobianε the move acceptance probability iε found for use at 1805. Fig. 19B details the determination 2107 of W old and J old for the reverse move from the proposed to the current side chain structure. Temporarily the proposed structure is used as the basis for energy determination at 2008, and the current structure is restored at 2016, when this process is finished. At 2109, a set of K'-l candidate torsional angles is generated for the selected backbone bond according to p int using the rejection method and the current torsional angle is added to this set. If as preferred, K' is 1, this step results in a set with only the current angle. At 2111, similarly to 2102, the permitted torsional rotations about adjacent backbone bonds are determined from the equations expressing the concerted rotation constraints. Special care is taken to ensure that the original conformation is found by the root finding procedure. In particular, the search interval is centered on the known original x and is made as small as necessary to isolate the root, which may be as small as 0.004° or smaller. The current structure must be among these solutions, since it exists. Select it at 2112. W olα is computed from the candidate angle solution, making the candidate rotations and determining candidate interactions. Also the Jacobian, J old , of the transformation iε computed from the proposed to the current structure. 5.8. CONSENSUS STRUCTURE TEST Having selected a candidate pharmacophore and determined a best possible consensus structure and best possible structures for the remainder of the binder moleculeε, the consensus test, step 6, testε whether a conεensus structure has actually been found. A consensus pharmacophore structure consists of a spatial arrangement of chemically similar groups shared by all the N binders to high accuracy. Since an actual pharmacophore exists, the N specifically binding members of the screened libraries will share the actual structure. However, the remainder of binder moleculeε will share no other similar structureε to such a high accuracy. Therefore, a structure consensus of the N binders is possible only if the candidate pharmacophore is the actual physical pharmacophore responsible for the actual binding. If the candidate selected relates to other parts of the binder molecules, no structure consensus will be found. Further, if the Monte Carlo determination attempts to impose a consensus on parts of the binder molecules that do not share structure, an inconsistent overall structure will be obtained for the remainder of the binder molecules. Therefore, two preferred consensus tests are applied: one test asks whether a consistent candidate pharmacophore has been obtained, and a second test asks whether consistent structures have been obtained for the remainder of the binder molecules. Both tests have a preferred absolute and a less preferred relative version. There are two portions for the first test. First, are all the consensus pharmacophore distances obtained in the N binders within at least a specified distance, preferably approximately 0.25 A, of each other? Second, is the conεenεus energy, H consensus , relatively small compared to the total molecular energy ( e . g . , lesε than at moεt approximately 5-10% of the total molecular energy) aε determined by the Monte Carlo method? There are also two portions of the second test. First, can the intramolecular distances predicted by the Monte Carlo method be confirmed by additional distance measurements? Second, since the Monte Carlo method utilizes distance constraints previously measured, one or more of theεe meaεurement conεtraintε can be ignored and the predicted diεtance checked againεt that meaεured distance. Tolerances for these testε are distance agreements of at least specified diεtanceε, e. g. , approximately 0.5 A, in each binder. The two preferred teεtε have been described in the absolute version aε requiring checks against absolute tolerances. Alternatively, the values of the pharmacophore distance differences among the binderε, H conιenιuε , and the differences of the predicted and measured distances can be accumulated for all the possible candidate pharmacophores, the candidate selected being that one minimizing these departures. Therefore, the selected candidate will have the minimum values for the differences of the pharmacophore distances in the binders, the minimum value for H con , enιus , and the minimum values of the differences of predicated from measured distances. This invention is adaptable to other tests that evaluate the consistency of the consensus structure obtained for the candidate pharmacophore and the accuracy of the structure obtained for the remainder of the binder molecules. 5.9. LEAD COMPOUND DETERMINATION Having started at step 1 with a target of interest, upon completion of step 6 of Fig. 1 a high resolution pharmacophore structure has been determined as well as supporting structures of the N binder peptides. This high resolution εtructure iε uεed in step 7 to determine lead compounds for use as a drug that will bind to the original target of intereεt . Thuε, one or more lead compoundε are determined, that share a pharmacophore εpecification with the determined consensus pharmacophore εtructure. This determination can be preferably done by one of several methods: by a search of a database of potential drug compounds or of chemical structureε { e . g . , the Standard Drugε File (Derwent Publications Ltd. , London, England) , the Bielstein database (Bielstein Information, Frankfurt, Germany or Chicago) , and the Chemical Registry (CAS, Columbus, OH) ) to identify compounds that contain the pharmacophore specification; by modification of a known lead compound to include the pharmacophore specification; by εynthesizing a de novo εtructure containing the pharmacophore εpecification; or by modification of binderε to the target molecule (e.g., iεolated in εtep 2) outεide of the pharmacophore structure to render the binder more attractive for use aε a drug (e.g., to increaεe half-life, .solubility, ability to achieve desired in vivo localization) . Database search queries are baεed not only on chemical property information but alεo on precise geometric information. Computer-based approaches rely on database searching to find matching templates; Y.C. Martin, Database searching in drug design. J. Medicinal Chemistry, vol. 35, pp 2145-54 (1992) , which is herein incorporated by reference. Existing methods for searching 2-D and 3-D databases of compounds are applicable to this εtep. Lederle of American Cyanamid (Pearl River, New York) has pioneered molecular shape-searching, 3D searching and trend-vectors of databases. Commercial vendors and other research groups have enhanced searching capabilities [MACSS-3D, Molecular Design Ltd. (San Leandro, CA) ; CAVEAT, Lauri, G. et al. , University of California (Berkeley, CA) ; CHEM-X, Chemical Design, Inc. (Mahwah, N.J. )] . The pharmacophore structure determined in this invention is adaptable to any of these methods and sources of chemical database searching and to the enumerated non-database methods. Output will be lead compounds εuitable for drug deεign. An important aεpect of thiε invention iε that the high reεolution pharmacophore structure will lead ' to highly targeted leads. Lower resolution structureε result in a geometric increase in the number of lead compound query matches. Example 1 illustrateε thiε effect. 5.10. APPENDIX: CONCERTED ROTATION Since the preferred molecules under consideration are conformationally constrained by disulfide bridge (s) , a Monte Carlo move that preserves thiε conεtraint is required. The "concerted rotation" scheme used for alkanes can be extended to allow rotation of the torsional angleε in conformationally constrained peptides. This appendix describes this extension. Dodd et al . (1993) discusses the original, restricted method. (The esεential extenεionε are expreεsed in equations 27, 28, and 34.) Thiε method iε directly applicable to the cyclic residue of proline, and an alternative embodiment of thiε invention would thermally perturb proline with a move of εimilar geometric conεtraints. Fig. 14 illustrates the geometry under consideration. Illustrated backbone 1600 is a poly-glycine 7-mer. Rigid unit positions are indicated generally by black circles as at 1601 with incoming bonds generally as at 1602. The torsional rotations φ„ to φ 6 are about bonds 1602 to 1608, respectively, between sequential, adjacent rigid units. The rigid unit position vectors r. 0 to r. 6 , illustrated aε vectors 1610 to 1616, respectively, define the position of these sequential rigid units with respect to a laboratory coordinate system with origin 1609. A C„ rigid unit (B unit) is illustrated in box 1630, and an amide bond (C unit) in box 1631. To formulate this method, let us consider rotating about seven torsional angles, which will displace the root positions and rotate four rigid units, rotate up to three additional ones, and leave the reεt of the peptide fixed. The root poεition of a rigid unit iε the C 0 poεition for a B unit, the C poεition for a C unit, the C poεition for a CH 2 unit, and the S poεition for the S unit in cyεtine. If unit 5 iε a C unit, however, r-- iε defined to be the backbone amino nitrogen poεition of that unit. For each unit, let us define θ j to be the fixed angle between the incoming and outgoing bonds. Thus, e ι = 0 for a C unit, and e - 70.5° for all others. The method leaves the positionε r α of units i 0 or i 5 fixed. The torsion φ 0 is changed by an amount δφ 0 . The values of , 1 < . i < . 6 are then determined so that only the positions r i of units 1 < . i < . 4 are changed. The method requires several definitions to present the solution for the new torsional angles. The bond vectors are defined to be the difference in position between unit i and unit i - 1, as seen in the coordinate syεtem of unit i: 1 *(.! '1 -1 (15) Bond vectors 1 1 to l s are illustrated in Fig. 14 at 1620 to 1624, respectively. The length and orientations of the are determined by rigid unit structure and the length and angle AMBER parameters for bonds between atom types. The coordinate system of i is εuch that the incoming bond iε along the direction. Thus 1^ = 1 A . if atoms ri and r 1 . 1 are directly bonded to each other and has x- and y-components otherwise. Here a is a fixed unit vector along the x direction. Now define a rotation matrix that transforms from the coordinate system of unit i+1 to unit i 0 r_ = sinφ α (16) s n ^s n j -cos ^s n^ -cosφ ; The positions of the units in the frame of unit 1 are, thus, given by: ι : -τ 1 α 2+ τ 2 3 -τ 3 ι 4 )) Further define the matrix that convertε from the frame of reference of unit 1 to the laboratory reference frame lab i ' cosψI + Λ/7 τ (l -cosψ) +Λfsin ψ] A . (18) where and cosψ = kllil sinψ = l(ι χ i) where r is the axis of the bond coming into unit 1. The matrix A iε a rotation about £ and is defined so that Al 1 =Δi where c = (l lv Δr y + l lz Δr 2 )/(Δr y 2 +Δr 2 z ) (21) s = {-l lz Δz y + l ly Ax z ) /{Aτϊ+Δxϊ) Here Δ∑ = A 17 ,yJa±>] _1 {z -Z if unit 0 is a C unit. Otherwise, Δr = I,. The method proceeds by solving for φ , 2 < . i <. 6, analytically in terms of φ α . Then a nonlinear equation is solved numerically to determine which values of φ lt if any, are posεible for the chosen value of φ 0 . The derivation proceeds in the coordinate system of unit i, after it has been rotated by the chosen φ 0 . Define 1 = x^ 1 ' -1, = [τ ab ] - 1 (r 5 -χ 0 ) -l α . ( 22) If θ 3 ≠ 0 and θ s ≠ 0, one can see from Fig. 14 that the distance between unit 3 and unit 5 is known and equal to , _ (l 4x cosθ 4 -l 4y sinθ 4 +l 5x ) 2 + qι " (l 4x sinθ 4 +l 4y cosθ 4 +l 5y ) 2 But this distance can also be written as „ 2 Is - τ 2 l 3 | 2 (24) ^i -1,. Equating these two results, two values of φ 2 are possible Φ2 arcsin(c 1 ) - arctan (x y /x z ) - H (x z ) (25) II Φ π-arcsinfC j ) - arctan (x y /x z ) - H (x z ) , with H(x) 0, ΛΓ>0 {ϊ: x<0 (26) The constant c l is given by q? -x 2 - 1- + 2x χ {cosβ 2 l 3x *sinθ 2 l 3y ) θ,≠0,θ ς ≠0 ■ 2(sinβ 2 l 3x -coεβ 2 l 3y ) (x y* x z 2)\ 1/2 θ,=0,θ,≠0 sinθ- 2 +xj) 1 2 (Z s -Z 2 ) -( -Z.) /J 6 -2 5 -2 4x cosθ 4 - (cosθ 2 J 3X+ sinθ 2 J 3v ) θ,≠0,θ,= (sinθ 2 J 3x -cosθ 2 i 3y ) (xl+xl) 1 ' 2 l 3x cosθ 4 -x x (cose 2 l 2x +εinβ 2 l, y ) , θ,=0,θ < =0 (sinθ,J, -cosθ ∑,J÷ 3 ly v )' (xl+xl) ' 2 (27) where x is given by Eqn. 24 if θ s ≠ 0, and x. = ϊf 1 [ϊι la ] _1 (£ 6 - £ 5 )/l 6 if θ 5 = 0. Clearly for there to be a solution | C j . | <. 1. The last three equations for c x were determined by conditions similar to equating Eqns. 23 and 24. For θ 3 = 0, θ 5 ≠ 0, the x component of r 6 (3) - r 3 ,3) is known to be equal to (l 4x + l 5 cosθ 4 ) . For θ 3 ≠ 0, θ 5 = 0, the x component of r 5 l5) - r 3 (S1 is known to be equal to l Sx + l 4x cosθ < . For θ 3 = 0, θ 5 = 0, the angle between r 3 - £ 2 and r s - r 5 is known to be equal to θ « . To determine φ 3 two expressionε for |r 5 - r 4 1 2 are again equated to determine that: Ol = arcsin(c 2 ) - arctan (y y /y z ) - H (y z ) (29) Φ II 3 π-arcsin(c 2 ) - arctan (y y /y z ) - H (y z ) , where y = T ' 2 (T^Z~1 2 ) ~1 3 Again, -21 i <. 1 for there to be a solution. If θ 5 ≠ 0, the value of φ 4 can now be determined from: * χ α, = X (i) +Tι 2 τ 3 τ 4 l 5 . (30) Defining a 3 = T 3 X T - T I 1 [T ab ] - 1 (X 5 - X 4 ) - (31) the equationε that define φ 4 are given by g 3y = cosφ 4 (sinθ 4 2 5x - cosθ 4 2 5y ) (32) q 3z = sinφ 4 (sinθ 4 2 5x - cosθ 4 2 Sy ) This is a succeεεful rotation if the poεition of £ 6 iε successfully predicted. That iε, the equation χ ) _ χ (i) = T^T j T.T^ = [T 1 l ' b ]- l (χ 6 -χ s ) . (33) must be satisfied. Consider the x-component, which implies (1) .(1) f ( r r 1 τ 2 r 3 r 4 :-(2 6jf coεθ 5 +2 by εinθX =0, θ 5 ≠0 (34) F 5 ( Φa ) - Z t -Z 3 ) -sZ^Z^) -2 4 2 6 cosθ 4 =0, θ 3 *0,θ 5 =0 . «- « i [(lι x +l 5x ) 2 + l y ] 1/2 = 0, θ 3 =0,θ 5 =0 must be satisfied if the rotation is successful . The equations for the case s = 0 clearly express the geometric conditions required for a succeεεful rotation. Eqn. 34 iε the nonlinear equation for φ l becauεe φ 2 , φ 3 , and φ « are determined by Eqns . (25), (29), and (32) in terms of φ α . This equation has between zero and four values for each value of φ 1( however, due to the multiple root character of Eqns. (25) and (29) . The equation iε εolved by searching the region -π < φ < IT for zero crosεingε. The εearch iε in incrementε of - 0.04°. Theεe rootε are then refined by a biεection method. The tranεformation from φ x , 0 <_ i . 6 to the new solution which is constrained to change only r lt 1 . i < . 4 actually implies a change in volume element in torsional angle space. This change in volume element is the reason for the appearance of the Jacobian in the acceptance probability. The Jacobian of this transformation iε calculated in Dodd et al. (1993)at pp. 991-93. It iε slightly different here since root position r. 5 is not necessarily the head position. The Jacobian is given by. (35) detB where the 5 x 5 matrix B is given by B Aj = [^ x (r. 5 - lι j )] 1 for i <. 3 and Bij [u ( £β - £s ) /|£« " IsUi.j ' for i = 4,5. Here , = £i, except that h. 5 is the head position even if θ 5 = 0, and i is the incoming bond vector for unit i. Repeated application of the concerted rotation may lead to a slightly imperfect εtructure, due to numerical precision errors. In an alternative embodiment, peptide geometry would be restored to an ideal εtate by application of the Random Tweek algorithm after several thousand moves (Shenkin et al . , 1987, Biopolymerε 26:2053-85) . The invention is further described in the following examples which are in no way intended to limit the scope of the invention. 6. EXAMPLES 6.1. RELATION BETWEEN EFFECTIVENESS OF POTENTIAL DRUG IDENTIFICATIONS AND PHARMACOPHORE GEOMETRIC TOLERANCE Searches of a drug library well known to medicinal chemists, the Standard Drugs File (Derwent Publicationε Ltd. , London, England) , illustrate the geometric increase in the number of compounds found (and thus decrease in expected effectiveness of identification of potential drugs) aε pharmacophore geometric tolerance is increaεed. Table 4 tabulates the resultε. Table 4 The pharmacophores are two well known neurotransmitters, 5-hydroxytryptophan and dopamine. As the tolerance of one distance in the pharmacophore structure is decreased from 2.0 to 0.1 A, the number of compounds retrieved from the database iε listed. The advantage of achieving pharmacophore resolution better than approximately 0.25 A is clear. If the tolerance of three distanceε were involved, the expected number of compound retrieved would be the cube of these numbers. For the dopaminergic pharmacophore, the number of lead compounds would decrease from over 6.5xl0 6 to about 125 as three tolerances were decreased from 2.0 A to 0.1 A. This example illustrateε the geometric increaεe in the number of leadε identified aε pharmacophore geometry is leεε well defined. It thuε a very preferred aspect of thiε invention that the computational method results in determining pharmacophore structure accurate to at least approximately 0.25 to 0.30 A. Thus an exponentially large improvement in lead compound selection for drug design can be expected to result from this invention. 6.2. EXPRESSION AND PURIFICATION OF TARGET PROTEINS Target molecules that are proteins, for example ras, raf, vEGF and KDR, are expressed in the Pichia pastoriε expression system (Invitrogen, San Diego, CA) and as glutathione-S-transferase (GST) -fusion proteins in E. coli (Guan and Dixon, 1991, Anal. Biochem. 192:262-267) . The cDNAs of these target proteins are cloned in the Pi chia expression vectors pHIL-Sl and pPIC9 (Invitrogen) . Polymerase chain reaction (PCR) is used to introduce six Histidineε at the carboxy-terminuε of these proteins, εo that thiε Hiε-tag can be used to affinity-purify these proteins. The recombinant plasmids are used to transform Pi chia cells by the spheroplaεting method or by electroporation. Expresεion of theεe proteinε is inducible in Pichia in the presence of methanol . The cDNAε cloned in the pHIL-Sl plasmid are expressed as a fusion with the PH01 signal peptide and hence are secreted extracellularly. Similarly cDNAs cloned in the pPIC9 plaεmid are expressed as a fusion with the α-factor signal peptide and hence are secreted extracellularly. Thus, the purification of theεe proteins is simpler as it merely involves affinity purification from the growth media. Purification is further facilitated by the fact that Pichia secretes very low levels of homologous proteins and hence the heterologouε protein comprises the vast majority of the protein in the medium. The expreεsed proteins are affinity purified onto an affinity matrix containing nickel. The bound proteins are then eluted with either EDTA or imidazole and are further concentrated by the use of centrifugal concentrators. As an alternative to the Pichia expression syεtem, the target proteins are expressed as glutathione-S-transferase (GST) fusion proteins in E. coli . The target protein cDNAs are cloned into the pGEX-KG vector (Guan and Dixon, 1991, Anal. Biochem. 192:262-267) in which the protein of interest is expreεεed aε a C-terminuε fuεion with the GST protein. The pGEX-KG plasmid has an engineered thrombin cleavage site at the fusion junction that is used to cleave the target protein from the GST tag. Expression iε inducible in the presence of IPTG, since the GST gene is under the influence of the tac promoter. Induced cells are broken up by sonication and the GST-fusion protein is affinity purified onto a glutathione-linked affinity matrix. The bound protein is then cleaved by the addition of thrombin to the affinity matrix and recovered by washing, while the GST tag remains bound to the matrix. Milligram quantities of recombinant protein per liter of E. coli culture are expected to be obtainable in this manner. 6.3. SYNTHESIS AND SCREENING OF POLYSOME-BASED LIBRARIES ENCODING RANDOM CONSTRAINED PEPTIDES OF VARIOUS LENGTHS 6.3.1. PREPARATION OF DNA TEMPLATES DNA libraries with a high degree of complexity are made 10 as two components: an expresεion unit, and a semi-random (or degenerate) unit. The expresεion unit haε been εyntheεized chemically as an oligonucleotide (termed T7RBSATG) , and contains the promoter region for bacteriophage T7 RNA ._ polymerase, a ribosome binding εite, and the initiating ATG codon. The random region, alεo εynthesized aε an oligonucleotide (termed MMN6) contains a region complementary to the expresεion unit, the antisense verεion of the codons specifying Cys-X 6 -Cyε, and a reεtriction εite (BεtXI) . The _- library iε conεtructed by annealing 100 pmol of oligonucleotide T7RBSATG [having the sequence 5 'ACTTCGAAATTAATACGACTCACTATAGGGAGACCACAACGGTTTCCCTCCAGAAAT AATTTTGTTTAACTTTAACTTTAAGAAGGAGATATACATATGCAT3 ' (SEQ ID NO:2)] ; and oligonucleotide MNN6 [having the sequence 25 5 'CCCAGACCCGCCCCCAGCATTGTGGGTTCCAACGCCCTCTAGACA[MNN] β ACAATG TATATCTCCTTCTT3 ' (SEQ ID NO:3); M = A or C , N = G, A, T, or C] , and extending the DNA in a reaction mixture containing 10-100 units of Sequenase (United States Biochemical Corp., Cleveland, OH) , all four dNTPS (at 1 mM) , and 10 mM 30 dithiothreitol for 30 min at 37 β C. The extended material is then digested with BstXI, ethanol precipitated and resuspended in water. This fragment of DNA is then ligated via the BstXI end to a 250 base pair (bp) , PCR-amplified Glycine-Serine coding fragment derived from gene III of M13 , 5 bacteriophage DNA. The gene III fragment has been amplified by use of two primers, respectively termed FGSPCR [having the sequence 5 'TCGTCTGACCTGCCTCAACCTCCCCACAATGCTGGCGGCGGCTCTGGT3 ' (SEQ ID NO: 4)] , and RGSPCR [having the sequence 5 'ATCAAGTTTGCCTTTACCAGCATTGTGGAGCGCGTTTTCATC3 ' (SEQ ID NO:5)] , and Taq DNA polymerase (Gibco-BRL) . The amplified DNA (250 bp) was cut with BstXI to yield a 200 bp 5 fragment that has been gel purified. The 200 bp fragment iε then ligated to the random peptide coding DNA fragment. This DNA specifieε the synthesis of a peptide of the sequence Met- Hiε-Cys- (X) 6 -Cys- (SEQ ID NO:6) fused to the Gly-Ser rich region of the M13 gene III protein. The Gly-Ser rich domain 0 is thought to behave as a flexible linker and assist in presentation of the random peptide to the target molecules. To make constrained random peptides of different lengths, oligonucleotides are made that are similar to MNN6 , except that the degenerate region iε 5, 7, 8, and 9 codonε 5 long. In addition, oligonucleotideε are made that code for variouε εhapes of constrained random peptides by specifying sequenceε compriεing three cyεteine reεidues interspersed between 6-10 randomly specified amino acids. 20 6.3.2. IN VITRO SYNTHESIS AND ISOLATION OF POLYSOMES An E. coli S30 extract is prepared from the B strain SL119 (Promega) . Coupled transcription-translation reactions are performed by mixing the S30 extract with the S30 premix _ ς (containing all 20 amino acids) , the linear DNA template coding for peptides of random sequences (prepared as described in Section 6.3.1 above), and rifampicin at 20 μg/ml. The reaction is initiated by the addition of 100 units of T7 RNA polymerase and continues at 37°C for 30 min. 30 The reaction iε terminated by placing the reactions on ice and diluting them 4-fold with polysome buffer (20 mM Hepes- NaOH, pH 7.5, 10 mM MgCl 2 , 1.5 μg/ml chloramphenicol, 100 μg/ml acetylated bovine serum albumin, 1 mM dithiothreitol, 20 units/ml RNasin, and 0.1% Triton X-100) . Polysomes are ,_ isolated from a 50 μl reaction programmed with 0.5-1 μg of linear DNA template specifying the synthesis of random constrained peptides. To isolate polysomes, the diluted S30 reaction mixtures are centrifuged at 288,000 X g for 30-40 min at 4°C. The pellets are suspended in polysome buffer and centrifuged a second time at 10,000 X g for 5 min to remove insoluble material. 6.3.3. AFFINITY SELECTION/SCREENING OF POLYSOMES The isolated polysomes are incubated in microtiter wells coated with the target proteins. Microtiter wells are uniformly coated with 1-5 μg of 6-His tagged, or glutathione S-transferase fused, target proteins (see Section 6.2 hereinabove) . Target proteins that are used include the oncoproteins ras and raf, KDR (the vascular endothelial growth factor [vEGF] receptor protein) and vEGF. The microtiter wells are coated with 1-5 μg of these target proteins by incubation in PBS (phosphate-buffered saline; 10 mM sodium phosphate, pH 7.4, 140 mM NaCl, 2.7 mM KC1), for 1- 5 hours at 37°C. The wells are then washed with PBS, and the unbound surfaces of the wells blocked by incubation with PBS containing 1% nonfat milk for 1 hr at 37°C. Following a wash with polysome buffer, each well is incubated with polysomes isolated from a single 50 μl reaction for 2-24 hr at 4°C. Each well is washed five times with polysome buffer and the associated mRNA is eluted with polysome buffer containing 20 mM EDTA. After affinity selection of the polysomes, the associated mRNAs are isolated, and treated with 5-10 units of DNase I (RNase-free; Ambion) for 15 min at 37 β C after addition of MgCl 2 to 40 M. The mRNA is phenol-extracted and ethanol-precipitated and dissolved in 20 μl of RNase-free water. A portion of the mRNA is used for cDNA preparation and subsequent amplification using 15 pmol each of primers RGSPCR [5'ATCAAGTTTGCCTTTACCAGC^TTGTGGAGCGCGTTTTCATC3 « (SEQ ID NO:5)], and SELEXF1 [5'ACTTCGAAATTAATACGACTCACTATAGGGAGACCACAACGGTTTCC3 ' (SEQ ID NO:9)] and rTth Reverse Transcriptase RNA PCR kit (Perkin Elmer Cetus) . Specifically, the mRNA is reverse- transcribed into cDNA in a 20 μl reaction containing 1 pg mRNA, 15 pmol of RGSPCR primer, 200 μM each of dGTP, dATP, dTTP, and dCTP, 1 mM MnCl 2 , 10 mM Tris-HCi, pH 8.3, 90 mM KCl, and 5 unitε of rTth DNA polymeraεe at 70°C for 15 min. In the next εtep, the cDNA is amplified by the addition of 2.5 mM MgCl 2 , 8% glycerol, 80 mM Tris-HCl, pH 8.3, 125 " mM KCl, 0.95 mM EGTA, 0.6% Tween 20, and 15 pmol of the SELEXF1 primer. The reaction conditions that are employed are 2 min at 95°C for one cycle, 1 min at 95°C and 1 min at 60°C for 35 cycles, and 7 min at 60°C for one cycle. The amplified product iε then gel-purified and quantitated by spectrophotometry at 260 nm. A portion of the amplified DNA is digested with Nsil and Xbal and the resulting 30 base pair fragment is directionally cloned into a monovalent phage display vector. The DNAs inεerted in the monovalent phage display vector are then sequenced to determine the identity of the peptides that were selectively retained by one cycle of affinity binding to the target protein. A second portion (0.5-1 μg) of the amplified DNA is subjected to another cycle of affinity selection, mRNA isolation, cDNA amplification, and cloning. 6.4. PHAGEMID SCREENING Three different protocols for screening of a phagemid library are presented in the subsections hereinbelow. These protocols, particularly the immobilization and binding steps, are readily adaptable to uεe for screening of different libraries, e. g. , polysome librarieε. Preferably, different methodε are used in different rounds of screening. 6.4.1. PLATE PROTOCOL In thiε example, a protocol is presented for screening a phagemid library, in which in the first round of screening, a biotinylated target protein is immobilized (by the specific binding between biotin and streptavidin) on a streptavidin coated plate. The immobilized target protein is then contacted with library members to select binders. Reagents Used: Purified target protein, microfuge tubes, Falcon 2059, Binding Buffer, Wash Buffer, Elute Buffer, phage display Library of >10 11 pfu/Screened Target, fresh overnight cultures of appropriate host cells, LB Agar plateε with antibioticε aε needed, biotinylating agent NHS-LC-Biotin (Pierce Cat. -#21335) , streptavidin, 50 mM NaHC0 3 pH 8.5, 1 M Tris pH 9.1, M280 Sheep anti-mouse IgG coated Dynabeads (Dynal) , phosphate buffered saline (PBS) , Falcon 1008 petri dishes. Wash Buffer = IX PBS (Sigma Tablets) , 1 mM MgCl 2 , 1 mM CaCl 2 , 0.05% Tween 20; (For one liter: 5 PBS tablets, 1 ml 1 M MgCl 2 , 1 ml 1 M CaCl 2 , 0.5ml Tween 20, nanopure K 2 0 to 1 liter) . Binding Buffer = Wash Buffer with 5 mg/ml bovine serum albumin (BSA) . Elute Buffer = 0.1 N HCl adjusted to pH 2.2 with glycine: 1 mg/ml BSA. Procedure: Protein Biotinylation: 1. Wash 50-100 μg of target protein in 50 mM NaHC0 3 pH 8.5 in a Centricon (Amicon) of the appropriate molecular weight cut-off. 2. Bring the total volume to 100 μl with 50 mM NaHC0 3 pH 8.5. 3. Dissolve 1 mg of NHS-LC-Biotin in 1 ml H 2 0. Do not store thiε solution. 4. Immediately add 37 μl of the NHS-LC-Biotin solution to the target protein and incubate for 1 hr at room temperature (RT) . - Ill 5. Remove the unreacted biotin by washing 2X PBS in a Centricon (Amicon) of the appropriate molecular weight cutoff. Store the biotinylated protein at 4°C. 5 Coating a 1008 Plate with Streptavidin: 6. The night before the binding experiment precσat a 1008 plate with streptavidin. 7. Add 10 μg of streptavidin (1 mg/ml H 2 0) per 1 ml of 50 mM NaHC0 3 pH 8.5. 0 8. Add 1 ml of this solution to each plate and place in a humidified chamber overnight at 4°C. Prebinding; Blocking Non- pecific Sites: 9. To a streptavidin coated plate add 400 μl of Binding 5 Buffer (BSA blocking) for one hour at room temperature. 10. Rinse wells six times with Wash Buffer by slapping dry on a clean piece of labmat . Binding; Specific Target/Phage Complexes Round 1: 20 11. Add 10 μg of biotinylated target protein in 400 μl of Binding Buffer to the well and incubate for 2 hr at 4°C. 12. Add 4 μl of 10 mM biotin and swirl for 1 hr at 4°C. 13. Wash as in step 10. 14. Add concentrated phage library (>10 αι pfu) in 400 μl of 25 Binding Buffer and swirl overnight at 4°C. Washing and Elution: 15. Slap out binding mixture and wash as in step 10. 16. To elute bound phage add 400 μl of Elution Buffer and 30 rock at RT for 15 min. 17. Transfer the elution solution to a sterile 1.5 ml tube which contains 75 μl of l M Tris pH 9.1. Vortex briefly. Amplification of Round 1 Eluted Phage: 35 18. Plate all of the eluted round 1 phage by adding 157 μl of phage to 200 μl of cells incubated overnight (previously checked free of contamination) in three aliquots. Incubate 25 min in a 37°C water bath and then εpread onto LB agar/antibiotics plate containing 2% glucose. 19. Scrape plates with 5 ml of 2XYT (growth broth)/ Antibiotics/Glucose and leave swirling for 30 min at RT. 5 20. Add the appropriate amount of 2XYT/Antibiotics/Glucose to bring the CD. 600 down to 0.4 and then grow at 37°C at 250 rpm until the O.D. 600 reaches 0.8. 21. Remove 5 ml and add to it 1.25 x 10 10 M13 helper phage. 22. Shake 30 min at 150 rpm and then 30 min at 250 rpm at 10 37°C. 23. Centrifuge 10 min at 3000 X g at RT. 24. Resuspend cells in 5 ml 2XYT with no glucose. (This step removes glucoεe) . 25. Centrifuge aε in step 23 and resuspend in 5 ml 2XYT with 15 kanamycin and the appropriate antibiotics (no glucose) . Spin 18 hr at 37°C and 250 rpm. 26. Pellet cells at 10,000 X g and εterile filter the phage containing supernatant which is now ready for round 2 screening. 20 27. Titer the round 1 eluted phage stocks. Binding; Specific Target/Phage Complexes Rounds 2-5: 6. Combine -1 μg of biotinylated target protein with the eluted and titered round 1 phage (10 s pfu) in 200 μl of 25 Binding Buffer and rock 4 hr at 4°C. 7. The night before the round 2 screening is started, prewash 200 μl/target protein to be screened of sheep anti- mouse IgG magnetic beads (M280 IgG Dynabeads) with 2X 1 ml of Wash Buffer using the Dynal Magnet. Let the beads collect at 30 least 1 min before removing the buffer. Let the beads stand 15 sec to allow residual Binding Buffer to collect and remove with a P200 Pipetman. 8. Resuspend the washed beads in 200 μl of Binding Buffer and add 100 μl of mouse anti-biotin IgG. (Jackson IRL) . Rock 35 overnight at 4°C. 10. Wash the unbound anti-biotin IgG from the Dynabeads by placing them on the Dyna magnet for at least 1 min and remove all liquid aε in Step 7. Remove the tube from the magnet and resuspend the beads in 1 ml of Wash Buffer, rock at 4°C for 30 min, and return to the magnet. Again let the beads pellet for 1 min; repeat this process 3 more times and resuspend the beads in 400 μl of Binding Buffer. 10a. The coated beads are now ready for use (100 μl/round/target protein) . The remainder can be εtored for use for up to 2 weeks. 11. Add the 100 μl of anti-biotin coated Dynabeads (Step 10) to the protein/phage fraction (Step 9) bringing the total binding volume to 300 μl and rock for 2 hr at 4°C. Ensure that the beads mix thoroughly with the phage/protein solution. Washing and Elution: 12. Place the binding reaction into the Dynal magnet and let sit for 1 min. 13. Remove the solution using a P1000 Pipetman and discard. Let the beads stand 15 sec to allow residual binding buffer to collect and remove with a P200 Pipetman. Note serial dilution depends upon all residual liquid being removed (i.e., 5 μl into 500 is 100X washing; 50 μl into 500 is only 10X) . 14. Remove the tube from the magnet and resuspend the beads in 750 μl of Wash Buffer and return to the magnet. Again let the beads pellet by waiting 1 min. 15. Remove the Wash solution as in Step 7 and repeat this process several more times. 16. After the removal of the final wash, resuspend the beads and transfer them to a fresh, labeled tube and wash once more. 17. To elute bound phage, add 400 μl of Elution Buffer, titrate and rock for 14 min at RT. 18. Place the tube on the magnet for one minute and transfer the eluate to a sterile 1.5 ml tube which contains 75 μl of 1 M Tris pH 9.1. Vortex briefly. Amplification of Round 2-5 Eluted Phage: 15a. Plate 10 μl and 100 μl of round 2,3,4 eluateε uεing 200 μl of contamination free (previously tested) E. coli XLlBlue cells onto each plate containing tetracycline/ampicillin/glucose and tetracycline/ampicillin and amplify as in Steps 17-25. 6.4.2. BIOTIN-ANTIBIOTIN IσG BEAD PROTOCOL In this example, a protocol iε presented for screening a phagemid library, in which a biotinylated target protein is immobilized (by the specific binding between anti-biotin antibodies and biotin) on a magnetic bead containing anti- biotin antibodies on the bead εurface. The immobilized target protein iε then contacted with library members to select binders. Reagents Used: M280 Sheep anti-Mouse IgG coated Dynabeads (Dynal) Binding; Specific Target/Phage Complexes Round 1: 6. Combine 10 μg of biotinylated target protein with the phage library (>10 10 pfu) in 400 μl of Binding Buffer and rock overnight at 4°C. 7. That same night prewash 50 μl sheep anti-mouse IgG magnetic beads (M280 IgG Dynabeadε) with 500 μl of Binding Buffer twice uεing the Dynal Magnet. Let the beadε collect at least 1 min before removing the buffer. Let the beadε stand 15 sec to allow residual binding buffer to collect and remove with a P200 Pipetman. 8. Resuspend the washed beads in 100 μl of Binding Buffer and add 33 μl of mouse anti-biotin IgG (40 μg, Jackson IRL) . Rock overnight at 4°C. 9. Remove unbound protein from the phage/protein reaction in Step 6 with a Microcon 100. Spin at 800 X g until exclusion volume is met and wash twice with Wash Buffer (again at 800 X g) . Collect phage/protein with a Pipetman and add an additional 50 μl of Wash Buffer to the Microcon, gently titrate and combine with first fraction to ensure maximal recovery. 10. Wash the unbound anti-biotin IgG from the Dynabeadε by placing them on the Dyna magnet for at leaεt 1 min and remove 5 all liquid aε in Step 7. Remove the tube from the magnet and resuspend the beads in 750 μl of Wash Buffer, rock at 4°C for 30 min, and return to the magnet. Again, let the beads pellet for 1 min; repeat this process 3 more times and resuspend the beads in 100 μl of Binding Buffer. 10 11. Add the anti-biotin coated Dynabeads (Step 10) to the protein/phage fraction (Step 9) , bring the total binding volume to 500 μl with Binding Buffer, and rock for 2 hr at RT. Ensure that the beads mix thoroughly with the phage/protein solution. 15 Washing and Elution: 12. Place the binding reaction into the Dynal magnet and let sit for 1 min. 13. Remove the solution using a P1000 Pipetman and diεcard. 20 Let the beadε stand 15 sec to allow residual binding buffer to collect and remove with a P200 Pipetman. Note that serial dilution depends upon all residual liquid being removed (i.e., 5 μl into 500 iε 100X washing; 50 μl into 500 is only 10X) . 25 14. Remove the tube from the magnet and resuspend the beadε in 750 μl of Waεh Buffer and return to the magnet. Again let the beads pellet by waiting 1 min. 15. Remove the wash εolution as in Step 7 and repeat this process 3 more times. 30 16. After the removal of the fourth wash, resuspend the beads and transfer them to a fresh, labeled tube and wash once more. 17. To elute bound phage, add 400 μl of Elution Buffer, titrate and rock for 14 min at RT. 35 18. Place the tube on the magnet for one minute and transfer the eluate to a sterile 1.5 ml tube which containε 75 μl of 1 M Tris pH 9.1. Vortex briefly. Amplification of Round 1 Eluted Phage: 17. Plate all of the eluted round 1 phage by adding 157 μl of phage to 200 ml of cells incubated overnight (previously checked to be free of contamination) in three aliquotε. 5 Incubate 25 min in a 37°C water bath and then εpread onto LB agar/antibiotics plate containing 2% glucose. Place plates upright in 37°C incubator until dry and then invert and incubate overnight . 18. Scrape plates with 5 ml of 2XYT/Antibioticε/Glucoεe and 10 leave swirling for 30 min at RT. 19. Add the appropriate amount of 2XYT/Antibiotics/Glucoεe to bring the O.D. 600 down to 0.4 and then grow at 37°C at 250 rpm until the O.D. 600 reacheε 0.8. 20. Remove 5 ml and add to it 1.25 x 10 10 M13 helper phage. 15 21. Shake 30 min at 150 rpm and then 30 min at 250 rpm at 37°C. 22. Centrifuge 10 min at 3000 X g at RT. 23. Resuspend cells in 5 ml 2XYT with no glucose. (This εtep removes glucoεe) 20 24. Centrifuge as in step 23 and resuεpend in 5 ml 2XYT with kanamycin and the appropriate antibioticε (no glucose) . Spin 18 hr at 37°C and 250 rpm. 25. Pellet cells at 10,000 xg and sterile filter the phage- containing supernatant which is now ready for round 2 25 screening. Binding; Specific Target/Phage Complexes Round 2, 3, & 4: 6a. Bind 1 μg of target protein with 100 μl of amplified phage from the previous round as before, overnight at 4°C. 30 7a. Prepare the IgG anti biotin/anti IgG beads as in Steps 7-10 using, however, only 20 μl of sheep anti-mouse IgG and 13 μl of anti-biotin IgG. 8a. All other binding procedures are identical with Steps 6- 11. 35 Washing and Elution: 9a. Place the binding reaction into the Dynal magnet and let sit for 1 min. 10a. Remove the solution and discard using a P1000 Pipetman. 5 Let the beads stand 30 sec to allow residual Binding Buffer to collect and remove with a P200 Pipetman. 11a. Remove the tube from the magnet and resuspend the beads in 750 μl of Wash Buffer and return to the magnet. Again let the beads pellet by waiting 1 min. 10 12a. Remove the wash solution as in Step 11a and repeat this process 3 more times. 13a. After the removal of the fourth wash, resuspend the beads and transfer them to a freεh, labeled tube and waεh 4 more timeε . 15 14a. Elute and neutralize as in Step 15. Amplification of Rounds 2, 3, & 4 Eluted Phage: 15a. Plate 10 μl and 100 μl of round 2,3,4 eluateε and amplify aε in Stepε 17-25. 20 6.4.3. BIOTIN-STREPTAVIDIN, MAGNETIC BEAD PROTOCOLS In thiε example, a protocol iε presented for εcreening a phagemid library, in which a biotinylated target protein is 25 immobilized (by the specific binding between biotin and streptavidin) on a streptavidin coated magnetic bead. The immobilized target protein iε then contacted with library memberε to select binders. _ 0 Reagents Used: Purified target protein, M280 streptavidin coated Dynabeads (Dynal) Binding; Specific Target/Phage Complexes Round 1: 35 6. Combine 10 μg of biotinylated target protein with the phage library (>10 10 pfu) in 400 μl of Binding Buffer and rock overnight at 4 β C. 7. Remove unbound protein with a Microcon 100. Spin at 800 X g until exclusion volume is met, and waεh twice with Waεh Buffer (again at 800 X g) . Collect phage/protein with a Pipetman and add an addition 50 μl of Waεh Buffer to the 5 Microcon, gently titrate and combine with the firεt fraction to ensure maximal recovery. 8. Prewash 50 μl (per reaction) of streptavidin magnetic beads (M280 streptavidin Dynabeads) twice with 500 μl of Washing Buffer using the Dynal magnet. 109. Add the prewashed Dynabeads to the protein/phage fraction (add Binding Buffer to a total of 500 μl) and rock for 30 min. Ensure that the beads mix thoroughly with the phage/protein solution. 15 Washing and Elution: 10. Place the binding reaction into the Dynal magnet and let sit for 1 min. 11. Remove the solution using a P1000 Pipetman and discard. Let the beads stand 15 sec to allow residual Binding Buffer to 20 collect and remove with a P200 Pipetman. Note that serial dilution depends upon all reεidual liquid being removed ( i . e . , 5 μl into 500 iε 100X washing; 50 μl into 500 is only 10X) . 12. Remove the tube from the magnet and resuspend the beads in 750 μl of Wash Buffer and return to the magnet. Again let 25 the beads pellet by waiting 1 min. 13. Remove the wash solution as in step 11 and repeat this process 3 more times. 14. After the removal of the fourth wash, resuspend the beads and transfer them to a fresh, labeled tube and wash once more. 3015. To elute bound phage add 400 μl of Elution Buffer, titrate and rock for 14 min at RT. 16. Place the tube on the magnet for one minute and transfer the eluate to a sterile 1.5 ml tube which contains 75 μl of 1 M Triε pH 9.1. Vortex briefly. 35 Amplification of Round 1 Eluted Phage: 17. Plate all of the eluted round 1 phage by adding 157 μl of phage to 200 μl of overnight cells (previously checked to be • free of contamination) in three aliquotε. Incubate 25 min in 5 a 37°C water bath and then spread onto LB agar/antibiotics plate containing 2% glucose. Place plates upright " in 37°C incubator until dry and then invert and incubate overnight . 18. Scrape plates with 5 μl of 2XYT/Antibiotics/Glucose and leave swirling for 30 min at RT. 1019. Add the appropriate amount of 2XYT/Antibiotics/Glucoεe to bring the O.D. 600 down to 0.4 and then grow at 37°C at 250 rpm until the O.D. 600 reaches 0.8. 20. Remove 5 ml and add to it 1.25 x 10 10 M13 helper phage. 21. Shake 30 min at 150 rpm and then 30 min at 250 rpm at 1537°C. 22. Centrifuge 10 min at 3000 X g at RT. 23. Resuspend cells in 5 μl 2XYT with no glucose. (Thiε step removes glucose) . 24. Centrifuge as in step 22 and resuεpend in 5 ml 2XYT with 20 kanamycin and the appropriate antibiotics (no glucose) . Shake 18 hr at 37°C and 250 rpm. 25. Pellet cells at 10,000 X g and sterile filter the phage containing supernatant which is now ready for round 2 screening. 25 Binding; Specific Target/Phage Complexes Round 2, 3, & 4: 6a. Combine 1 μg of biotinylated target protein with 100 μl of the previous round's phage (>10 9 pfu) in 400 μl of Binding Buffer and rock overnight at β C. 307a. Remove unbound protein with a Microcon 100. Spin at 800 X g until exclusion volume is met and wash twice with Wash Buffer (again at 800 X g) . Collect phage/protein with a Pipetman and add an addition 50 μl of Wash Buffer to the Microcon, gently titrate and combine with the first fraction 35 to ensure maximal recovery. 8a. Prewash 20 μl (per reaction) of streptavidin magnetic beads (M280 streptavidin Dynabeads) twice with 500 μl of Washing Buffer uεing the Dynal magnet. 9a. Add the prewashed Dynabeads to the protein/phage fraction 5 and rock for 30 min. Add Binding Buffer to a total of 500 μl . Enεure that the beadε mix thoroughly with the phage/protein solution. Washing and Elution: 1010a. Place the binding reaction into the Dynal magnet and let sit for 1 min. 11a. Remove the solution and discard using a P1000 Pipetman. Let the beads stand 30 sec to allow residual Binding Buffer to collect and remove with a P200 Pipetman. 1512a. Remove the tube from the magnet and resuspend the beads in 750 μl of Wash Buffer and return to the magnet. Again let the beads pellet by waiting 1 min. 13a. Remove the wash solution as in Step 11a and repeat thiε process 3 more times. 2014a. Aft«r the removal of the fourth wash resuspend the beads and transfer them to a fresh, labeled tube and wash 4 more times . 15a. Elute and neutralize as in Step 15. 25 Amplification of Rounds 2, 3, & 4 Eluted Phage: 16a. Plate 10 μl and 100 μl of round 2,3,4 eluates and amplify as in Steps 17-25. 6.5. AFFINITY MEASUREMENTS OF 30 PEPTIDE-TARGET PROTEIN INTERACTIONS Once peptides that bind to a target protein have been identified, the affinities of these peptides to their respective targets are measured by measuring the dissociation constants (l ) of each of these peptides to their respective 35 targets. Oligonucleotides that encode the peptides are constructed so as to encode also an epitope tag fused to the peptide (for example, the myc epitope) that can be detected by a commercially available antibody. These oligonucleotides are incubated with polysome extracts to produce the peptide tagged with the epitope. Binding of the target protein to the peptide is done in solution, and separation of the bound peptide from the unbound peptide is done by immunoaffinity purification using an anti-target protein antibody. Thiε immunoaffinity purification is done by a modified ELISA (enzyme-linked immunosorbent assay) protocol, in which the target protein-peptide mixture is exposed to the anti-target protein antibody immobilized on a solid support such as a nitrocellulose membrane, and the unbound peptide iε then washed off. In this protocol, the concentration of the target protein is varied and then the amount of bound peptide iε eεtimated by detecting the epitope tag on the peptide by uεe of anti-epitope antibody. In thiε manner, the affinity of each peptide for its target protein can be determined. 6.6. REDOR MEASUREMENTS ON A CX T C PEPTIDE RESIN This example demonεtrateε successful synthesis and cyclization of a CX 6 C peptide resin of greater than 95% purity and with a labeled glycine followed by succesεful REDOR diεtance measurements on the CX € C peptide resin using the preferred REDOR methods of this invention. The labeled peptide used was Cys-Asn-Thr-Leu-Lyε- ( 15 N-2- 13 C)Gly-Asp-Cys-Gly-mBHA reεin, where a glycine linker attached the peptide of interest to the nBHA resin. (Cys-Asn-Thr-Leu-Lys-Gly-Asp-Cys- ' Gly = SEQ ID NO:10) The peptide resin was synthesized by solid phase synthesis on p-MethylBenzhydrilamine (mBHA) resin uεing a combination of Boc and Fmoc chemistry. MethylBenzhydrilamine resin (Subst. 0.36 meq/g) was purchased from Advanced Chem Tech (Louisville, KY) . Fmoc( 15 N-2-- 13 C)Gly was prepared from HC1, ( 15 N-2-"C)Gly (Isotec Inc., Mia isburg, OH) and Fmoc-OSu. Boc-Gly, (Trt) , Fmoc-Asp(OtBu) , Fmoc-Lys(Boc) , Fmoc-Leu, Fmoc-Thr(OtBu) , Fmoc-Asn and Boc-Cys(Acm) were purchased from Bachem (Torrance, CA) . Reagent grade solvents were purchased from Fisher Scientific, Diisopropylcarbodiimide (DIC) , Trifluoroacetic acid (TFA) and Diisopropylethylamine (DIEA) were purchased from Chem Impex (Wooddale, IL) . Nitrogen, HF were purchased from Air Products (San Diego, CA) . The first step 43 was the synthesis of Boc-Cys (ACM) -Asn-Thr(OtBu) -Leu-Lys (Boc) -Gly-Aεp (OtBu) - Cys (Trt) -Gly-mBHA resin. l.llg (0.40 meq) of mBHA resin were placed in a 150 ml reaction vessel (glass filter at the bottom) with Methylene Chloride (CH 2 Cl 2 ) ["DCM"] and stirred 15 min with a gentle bubbling of Nitrogen in order to swell the resin. The solvent was drained and the resin was neutralized with DIEA 5% in DCM (3X2 min) . After washes with DCM, the resin was coupled 60 min with Boc-Gly (0.280 g-1.6 meq-4 fold excess-O.lM) and DIC (0.25 ml-1.6 meq-4 fold exceεε-O.lM) in DCM. Completion of the coupling waε checked with the Ninhydrin test. After washes, the resin was stirred 30 min in TFA 55% in DCM in order to remove the Boc protecting group. The resin was then neutralized with DIEA 5% in DCM and coupled with Fmoc-Cys (Trt) (0.937g-l .6 meq-4 fold excess-O.lM) and DIC (0.25 ml-1.6 meq-4 fold excess-O.lM) in DCM/DMF (50/50) . After washes the resin was stirred with Piperidine 20% in DMF (5 min and 20 min) in order to remove the Fmoc group. After washes, this same cycle was repeated with Fmoc-Asp (OtBu) , Fmoc ( 15 N-2- 13 C)Gly (2 fold excess only) , Fmoc-Lys (Boc) , Fmoc- Leu, Fmoc-Thr (OtBu) , Fmoc-Asn and Boc-Cyε (Acm) . After the last coupling, the Boc group was left on the peptide. The resin was washed thoroughly with DCM and dried under a nitrogen stream. Yield was 1.49g (Expected: -1.7g) . The next step 44 was cyclization of the Boc-Cys-Asn-Thr(OtBu) -Leu-Lys (Boc) -Gly-Aεp(OtBu) -Cys-Gly-mBHA resin. 600 mg of protected peptide resin were sealed in a polypropylene mesh packe . The bag was shaken in a mixture of solvent (DCM/Methanol/Water-640/280/47) in order to swell the resin. The bag was then shaken 20 min in 100 ml of a solution of iodine in the same mixture of solvent (0.4 mg I 2 /ml solvent mixture) . This operation was performed 4 timeε. No decoloration was observed after the third time. The resin was then thoroughly washed with DCM, DMF, DCM, and methanol succeεsively. The last step 45 was side-chain deprotection of the Cys-Aεn-Thr-Leu-Lyε-Gly-Aεp-Cyε-Gly-mBHA reεin. After 5 cyclization the resin in the polypropylene bag was reacted 1.5 hour with 100 ml of a mixture TFA/p-Cresol-Water (95/2.5/2.5) . After washes with DCM and Methanol, the resin was dried 48 hours under vacuum. Yield waε 560 mg. The resulting peptide resin was analyzed fcr its purity 0 and the presence of the disulfide bridge. 40 mg of resin were sealed in a propylene mesh packet and treated with HF at 0 C for 1 hour in presence of anisole (HF/Anisole: 90/10) . The scavenger and by-products were extracted from the resin with cold ethyl ether. The peptide was extracted with 10% Acetic 5 Acid and lyophilized 36 hourε . The dry iεolated peptide waε characterized by PDMS (maεε εpectrography) and HPLC (high performance liquid chromatography) . Thiε analysis demonstrated that greater than 95% of the product peptide was of the correct amino acid composition, having a diεulfide loop 0 and without inter-molecular diεulfide dimers. REDOR measurements were made on the peptide resin prepared by this method, and as a control, also on dried ( 15 N-2- 13 C) labeled glycine. The preferred REDOR methods and parameters, as previously detailed, were used. Fig. 6 5 illustrates the 15 N resonance spectral signals obtained. Signal 70 is the signal produced by dried glycine after no rotor periods. Signals 71, 72, 73 are glycine signals after 2, 4, and 8 rotor periods, reεpectively. Signalε 74, 75, 76, and 77 are the peptide reεin εignals after 0, 2, 4, and 8 30 rotor periods, respectively. Fig. 7 illustrates the data analysis. As in Fig. 5, axis 81 is the ΔS/S axis, and axis 82 iε the λ axiε. The variables are as used in equation 5. Graph 83 is defined by equation 5, and is the initial rising part of the full curve shown in Fig. 355. Data points 84, 85, 86, and 87 are best fits of the data for 0, 2, 4, and 8 rotor periods, respectively. At these points, the circles represent the glycine values and the squares the peptide resin values. These values correspond to a C-N distance in glycine and the peptide of 1.55 A (and a D^ of 800 Hz) . Repeated measurements gave a C-N distance of 1.50 A (and a D^* of 875 Hz) . The accepted distance in glycine is 1.48 A. The above procedure waε repeated for ( 15 N-1- 13 C) labeled glycine in Cys-Aεn-Thr-Leu-Lyε- ( 1S N-1- 13 C)Gly-Aεp-Cyε-Gly-mBHA resin, and the measured C-N distance of 2.50 A is in excellent agreement with the predicted value of 2.46 A. Thuε REDOR accuracy to better that 0.1 A iε demonstrated. Also demonstrated is the peptide resin as an appropriate substrate for NMR measurementε. Inter-molecular dipole-dipole interactions between adjacent peptides did not interfere. Also the overlap of the diεtanceε meaεured in free glycine and in glycine incorporated in the peptide demonεtrated that the peptide waε held εufficiently rigidly by the reεin that any remaining peptide motions did not interfere with the NMR measurementε . 7. SPECIFIC EMBODIMENTS, CITATION OF REFERENCES The preεent invention iε not to be limited in scope by the specific embodiments deεcribed herein. Indeed, variouε modifications of the invention in addition to those described herein will become apparent to those skilled in the art from the foregoing description and accompanying figures. Such modifications are intended to fall within the scope of the appended claims. Various publications are cited herein, the diεclosures of which are incorporated by reference in their entireties. 8. COMPUTER PROGRAM LISTINGS These computer program listings are copyright 1995 of CuraGen, Inc. c 1995 CuraGen, Inc. ***************************************************************** **************************************************************** START OF LISTING ********************************* ***************************************************************** ***************************************************************** ***************************************************************** C CODE ROUTINES ***************************************************************** ****************************************************************** ***************************************************************** MAKEFILE AND GO PROC ***************************************************************** MAKEFILE: OPTIONS=-mips2 -ansi -g -fullwarn -00 peptide.ex: random.o peptide.o peptidel.o peptide2.o peptide3.o pep ide4.o \ peptide5.o peptideδ.o peptide7.o cc $(OPTIONS) random.o peptide*.o -lm -o peptide.ex random.o: rando .c cc $(OPTIONS) -c random.c peptide.o: peptide.c *.h cc $ (OPTIONS) -c peptide.c peptidel.o: peptidel.c *.h cc $(OPTIONS) -c peptidel.c peptide2.o: peptide2.c *.h cc $ (OPTIONS) -c peptide2.c peptide3.o: peptide3.c *.h cc $(OPTIONS) -c peptide3.c peptide4.o: peptide4.c *.h cc $(OPTIONS) -c peptide4.c peptide5.o: peptideS.c *.h cc $(OPTIONS) -c peptideS.c peptideδ.o: peptideδ.c *.h cc $ (OPTIONS) -c peptide6.c peptide7.o: peptide7.c *.h cc $ (OPTIONS) -c peptide7.c GO PROC: peptide.ex << EOF 0.1 1 CGGGGGGC EOF **************************************************************** MAIN PROGRAM - PEPTIDE.C **************************************************************** #define MAIN #include "peptide.h" /* The main program stub */ void main(int argc, char *argv[] , char *envp[]) { logical *cyclic; int n_peptides, max_atoms_per_unit; int *n_amino_acids, *n_atoms_total, +n_side, *n_main,- rigid_unit **peptide; torsion_list **torsion,- hbond_list **hbond; atom_list **atom, **atom2; atom_info **atom_tmp; vector *twig[KMAX]; int ***bond_table; string *sequence; int i, j; int list_num, max_atoms_total; double seed; regrowth **main, **side,- printf("Enter random number seed ") ; scanf ("%lf", fcseed) ; ran2 (seed) ; /* get linear sequences */ get_sequence(fitsequence, &n_peptides) ; printf("\n") ; /* allocate memory for arrays */ if ((peptide = (rigid_unit **) malloc(n_peptides*sizeof (rigid_unit *))) == NULL) out_of_memory() ; if ((torsion = (torsion_list **) malloc(n_peptides*sizeof (torsion_list *))) == NULL) out_of_memory() ; if ((hbond = (hbond_liεt **) malloc(n__peptides*sizeof (hbond_list *) ) )==NULL) out_of_memory() ; if ((atom = (atom_list **) malloc(n_peptides*sizeof(atom_list *) ) ) == NULL) out_of_memory() ,- if ( (atom2 = (atom_list **) malloc(n_peptides*sizeof(atom_list *) ) ) == NULL) out_of_memory() ; if ( (atom_tmp * (atom_info **) malloc(n peptides*εizeof(atom_info *))) == NULL) out_of_memory() ; if ((main = (regrowth **) malloc(n_peptides*sizeof (regrowth *))) == NULL) out_of_memory() ,- if ((side = (regrowth **) malloc(n_peptides*sizeof (regrowth *) ) ) == NULL) out_of_memory() ; if ( (bond_table = (int ***) malloc(n_peptides*sizeof (int **))) « NULL) out_of_memory() ; if ( (n_amino_acids = (int *) malloc(n_peptides*sizeof (int) ) ) == NULL) out_of_memory() ; if ( (n_atoms_total = (int *) malloc(n_peptides*sizeof(int) ) ) == NULL) out_of_memory() ; if ((cyclic = (logical *) malloc(n_peptides*sizeof (logical) ) ) == NULL) out_of_memory() ; if ( (n_main = (int *) malloc(n_peptides*sizeof(int) ) ) == NULL) out_of_memory() ; if ( (n_side = (int *) malloc(n_peptides*sizeof(int) ) ) == NULL) out_of_memory() ; for(i=0; i<n_peptides,- i++) { n_amino_acids [i] = (int) strlen ( sequence [i] ) ; } /* read in parameter files */ read_torsion_data() ; read_lj_da a() ; read_hbond_data() ; max_atoms_per_unit = 0; /* read in geometric sequence information */ max_atoms_total = 0,• for (i=0; i<n_peptides; i++) { peptide [i] = read_peptide_data(sequence[i] , &n_atoms_total [i] , &max_atoms_per_unit) ; cyclic[i] = (n_amino_acids [i] > 1) && (sequence[i] [0] *== 'C') (sequence[i] [n_amino_acids[i] -1] ~='C ) ; if (cyclic[i] ) peptide[i] = modify_cystine_ends (peptide[i] , n_amino_acids[i] , &n_atoms_total [i] ) ; if (n_atoms_total[i] >max_atoms_total) max_atoms_total = n_atoms_total [i] ; n_main[i] = (cyclic[i] ) ? 2*n_amino_acids[i] + 3 2*n_amino_acids[i] + 1; n_side[i] = n_amino_acids[i] ; } /* allocate sub arrays */ for (i«0; i<KMAX; i++) i f ( ( t w i g [ i ] = ( v e c t o r * ) malloc(max_atoms_total*sizeof (vector) ) ) == NULL) out_of_memory() ; for(i»0; i<n_peptides; i++) { i f ( ( a t o m [ i ] = ( a t o m_ l i s t * ) malloc(n_atoms_total [i] *sizeof (atom_list) ) ) == NULL) out_of_memory() ,- i f ( ( a t o m 2 [ i ] = ( a t om_ l i s t * ) malloc (n_atoms_total [i] *εizeof (atom_list) ) ) == NULL) out_of_memory ( ) ,- i f ( ( a t o m_ t m p [ i ] = ( a t o m_ i n f o * ) malloc (n_atomε_total [i] *εizeof (atom_inf o) ) ) == NULL) out_of _memory ( ) ,- if ((main[i] = (regrowth *) malloc (n_main [i] *εizeof (regrowth) ) ) == NULL) out_of _memory ( ) ,• if ((side[i] = (regrowth *) malloc (n_εide [i] *εizeof (regrowth) ) ) == NULL) out_of _memory ( ) , • i f ( ( b o n d_ t a b l e [ i ] = ( i n t * * ) malloc (n_atoms_total [i] *sizeof (int *) ) ) == NULL) out_of _memory ( ) ; for (j=0; j<n_atomε_total [i] ; j++) if ( (bond_table [ i] [j ] = ( int * ) malloc (MAX_BONDS*εizeof (int) ) ) == NULL) out_of_memory() ; } /* loop over all peptides */ for (i=0; i<n_peptides; i++) { get_main_side(peptide[i] , mainfi] , side[i], &n_main[i], &n_side[i] ) ; /* determine connections */ initialize_connection_table(bond_table[i] , n_atoms_total [i] ) ,- list_num = 0; make_connection_table(bond_table[i] , &list_num, peptide[i], peptide[i] ) ; /*print_connection_table(bond_table[i] , n_atoms_total[i] ) ;*/ list_num = 0; /* assign noncoordinate information in atom array */ assign_atom_pointers(&liεt_num, peptide[i], peptide[i], atom[i] ) ; /* get H-bonds and torsion lists */ get_hbonds(&nbond[i] , atom[i] , n_atoms_total [i] ) ; /*print_hbonds(hbond[i] , atom[i] ) ;*/ list_num = 0; torsion [i] = NULL; get_torsions (&torsion[i] , bond_table [i] , &liεt_num, atom[i] , peptide [i] , peptide [i] ) ; assign_lj_parameters (peptide [i] , peptide [i] ) ; /* copy noncoordinate information in atom to atom2 */ for (j=0; j<n_atoms_total [i] ,- j++) atom2[i] [j] = atom[i] [j] , • } /* do the Monte Carlo */ do_mc (peptide [0] , torsion [0] , hbond[0], atom[0] , atom2[0], atom_tmp [0] , twig, main[0] , εide[0], n_amino_acids [0] , n_atoms_total [0] , n_main[0] , n_side[0] , cyclic [0] ) , • /*print_torεions (torsion [0] , atom[0] ) ;*/ write_car_f ile (n_amino_acids [0] , n_atoms_total [0] , atom[0] , "teεt.car") ,• } #undef MAIN ***************************************************************** INPUT/OUTPUT ROUTINES - PEPTIDE1.C ***************************************************************** /* input/output routines */ #include "peptide.h" /* hardcoded AMBER rules have the keyword AMBER nearby */ #define NT_CT_DISTANCE 1.4750 #define S_S_DISTANCE 2.0380 #define P_CHARGE 0.048 #define C_CHARGE1 -0.098 #define C_CHARGE2 0.050 #define C_CHARGE3 0.050 #define C_CHARGE4 0.824 #define C_CHARGE5 -0.405 #define C_CHARGE6 -0.405 /* This function is called when out of memory */ void out_of_memory(void) { printf("Out of memory error\n") ; exit(1) ; } /* This routine returns the 1-letter amino acide εequenceε */ void get_εequence(string **sequence, int *n_peptideε) { #define SEQUENCE_LENGTH 80 int i; printf ("Enter number of peptides: "); εcanf("%d", n_peptides) ; if ( (*εequence = (εtring *) malloc (*n_peptides*sizeof (string) ) ) == NULL) out_of_memory() ; for (i=0; i<*n_peptides,- i++) i f ( ( ( * s e qu e n c e ) [ i ] = ( s t r i n g ) malloc(SEQUENCE_LENGTH*sizeof(char) ) ) == NULL) out_of_memory() ; for (i=0; i<*n_peptideε; i++) { printf ("Enter peptide sequence %d: ",i); εcanf("%ε", (*εequence) [i] ) ; } #undef SEQUENCE_LENGTH } /* read in the data files aεεociated with this sequence */ rigid_unit *read_peptide_data(εtring sequence, int *n_atoms_total, int *max_atoms_per_unit) { int i, n_amino_acids; char name[]="?.dat" ; acid_label label; rigid_unit *ul, *u2, *ret; /* check amino acids in sequence */ n_amino_acids = strlen(sequence) ; for(i»0; i<n_aτtιino_acids; i++) { label = amino_acid_code(sequence[i] ) ; if (label == BAD) { printf("Invalid amino acid code %c\n", sequence[i] ) ; exit(1) ; } if (label == P) { printf("Proline not yet supported\n") ; exit (1) ; } } *n_atoms_total = 0; /* add unit A */ label = amino_acid_code(sequence[0] ) ,- ul = read_unit ("unitA.dat", label, 0, n_atoms_total, max_atoms_per_unit) , • ret = ul; for(i=0; i<n_amino_acidε,- i++) { name[0] = εequencefi]; label = amino_acid_code(εequence [i] ) ; /* add unit B */ u2 = read_unit("unitB.dat", label, i, n_atoms_total, max_atoms_per_unit) ; u2->type = nonCunit; /* follow IUPAC naming rules if glycine */ if (label == G) strcpy(u2->atom[l] .name, "HA1"); /* follow AMBER charge rules if alanine or proline */ if (label == A j j label == P) u2->atom[l] .charge = P_CHARGE; if (i==0) u2->head.axis « vector_scale(u2->head.axis, NT_CT_DISTANCE) ; couple_unit(ul,u2) ; ul = u2; /* add residue */ u2 = read_uni (name, label, i, n_atoms_total, max_atoms_per_unit) ; couple_unit(ul, u2) ; /* add unit C or D */ u2 = read_unit( (i==n_amino_acids-l) ? "unitD.dat" "unitC.dat", label, i, n_atomε_total, max_atoms_per_unit) ; if (i < n_amino_acids-l) { /* align incoming and outgoing bonds */ u2->bond[0] ->tail.axis = vector_scale(u2->head.axis, 1.0); u2->type « Cunit; label = amino_acid_code(sequence[i+1] ) ; u2->atom[2] .residue = u2->atom[3] .residue = label; u2->atom[2] .reεidue_num = u2->atom[3] .residue_num = i+1; } couple__unit(ul, u2) ; Ul = u2; } return(ret) ; } /* This routine reads in a rigid unit data file */ rigid_unit *read_unit (string file, acid_label label, int residue_num, int *n_atoms_total, int *max_atoms_per_unit) { #define LINE_LEN 200 FILE *fp; int i, j, k, il, n_rigid_units,- Char Stmpl[NAME_LENGTH] , Stmp2 [NAME_LENGTH] , line[LINE_LEN] ; rigid_unit **utmp; if ((fp = fopen(file, "r")) == NULL) { printf ("Data file %s does not exist\n", file); exit (1) ; } /* read in number of rigid units */ getline dine, LINE_LEN, fp) ; εscanf dine , " -kd" , &n_rigid_units ) ,- /* printf ( " %d\n" , n_rigid_units) ; */ if ( (ut p « (rigid_unit ** ) malloc(n_rigid_units*sizeof(rigid_unit *))) == NULL) out_of_memory() ; /* allocate rigid unit */ for (i»0; i<n_rigid_units; i++) { if ((utmp[i] = (rigid__unit *) malloc(sizeof(rigid_ύnit) ) ) «= NULL) out_of_memory() ; utmpti] ->type ■ UNKNOWN; ge t line (line, LINE_LEN, fp) ; sscanfdine, "%d" , fcutmp [i] ->n_atomε) ,- *n_atoms_total += utmp [i] ->n_atoms; if (utmp[i] ->n_atomε > *max_atoms_per_unit) *max_atoms_per_unit = utmp [i] ->n_atoms; /* printf ("%d\n", utmpti] ->n_atoms) ; */ if ( (utmp[i] ->atom ■ (atom_info *) malloc (utmp[i] ->n_atoms*sizeof (atom_info) ) ) == NULL) out_of _memory ( ) ; /* read in atoms */ for(j=0; j<utmp[i] ->n_atoms; j++) { getline (line,LINE_LEN, fp) ; εscanf (line, "%s %lf %lf %lf %s %d %s %s %lf", utmp [ i ] - >a om [ j ] . name , &utmp[i] ->atom[j] . position. x, &utmp [i] ->atom[j] . position. y, fcutmp [i] ->atom[j] .position. z, fcstmpl, &il, utmpti] ->atom[j] . type, &stmp2, &utmp[i] ->atom[j] .charge) ; /* printf ("%s %lf %lf %lf %s %lf\n", utmpti] ->atom[j] .name, utmpfi] ->atom[j] . position. x, utmp[i] ->atom[j] . position. y, utmpfi] ->atom[j] .position. z, utmp[i] ->atom[j] .type, utmp[i] ->atom[j] .charge) ; */ utmp [i] ->atom[j] .residue = label; utmpti] ->atom[j] .residue_num = residue_num; } } for (i * =0; i<n_rigid__units; i++) { /* allocate incoming bond vector information */ getline(line,LINE_LEN,fp) ; sscanfdine, "%d %d %d %d %d" , &il, &utmp [i] ->head.bond[0] , &utmpti] ->head.bondtl] , &utmp[i] ->head.bondt2] , fcutmp I i ] - >head . bond [ 3 ] ) ; /* printf ("%d %d %d %d %d\n",il, utmpti] ->head. bond [0] , utmp[i] ->head.bond[l] , utmp [i] ->head.bond[2] , utmp [ i ] - >hea . bond [ 3 ] ) ; * / for (j=4; j<MAX_BONDS; j++) utmp [i] - >head. bond [j ] = -1; utmp [ i ] - >head . atom__num = il ; getline dine, LINE_LEN, fp) ; sscanfdine, "%lf %lf %lf", fcutmp [i] ->head.axiε.x, &utmp [i] ->head.axis .y, fcutmp [i] ->head.axis . z) ; /* printf ("%lf %lf %lf \n" , utmp [i] ->head. axis. x, utmp[i] ->head.axis .y, utmp [i] ->head. axis .z) ,- */ utmp [i] ->head.axis .x=utmp [i] ->atom[il] . posit ion. x-utmp [i] ->head. axis . x; utmp [i] ->head.axis .y=utmp [i] ->atom[il] .position. y-utmp [i] ->head. axis .y; utmp [i] ->head.axis . z=utmp [i] ->atom[il] .position, z -utmp [i] ->head. axiε .z; /* allocate outgoing bond pointers */ getline (line, LINE_LEN,fp) ; εεcanfdine, "%d", &utmp [i] ->n_bondε) ; if ( (utmp[i] ->bond = (bond_type **) malloc (utmp [i] ->n_bondε*sizeof (bond_type *) ) ) == NULL) out_of_memory ( ) ; for (j=0; j<utmp [i] ->n_bonds; j++) { if ( (utmp[i] ->bond[j] = (bond_type *) malloc (sizeof (bond__type) ) ) == NULL) out_of _memory ( ) ; getline (line, LINE_LEN, fp) ; sscanfdine, "%d" , til) ; /* printf ("%d\n",il) ; */ utmp[i] ->bond[j] ->next = (il==-l) ? NULL : utmptil] ; getline (line, LINE_LEN, f p) ; sscanf dine, "%d %d %d %d %d" , &iι, &utmp[i] ->bond[j] ->tail.bondt0] , &utmp[i] ->bond tj] ->tail .bondtl] , &utmp[i] ->bond[j] ->tail .bond [2] , fcutmp [i] ->bond[j] ->tail .bond [3] ) ; /* printf ("%d %d %d %d %d\n" , il, utmpti] ->bond[j] ->tail .bond[0] , utmp [i] ->bond [j] ->tail .bond[l] , utmp [i] ->bond[j] ->tail .bond [2] , utmpti] ->bond[j] ->tail .bond [3] ) ;*/ for (k=4; k<MAX_BONDS; k++) utmp [i] ->bon [j ] ->tail .bon [k] = -l; utm ti] ->bondtj] ->tail .atom_num= il; getline dine, LINE_LEN,fp) ; εscanfdine, "%lf %lf %lf", &utmp[i] ->bond [j] ->tail .axiε .x, &utmp [i] ->bond[j] ->tail .axis.y, &utmp[i] ->bond[j] ->tail .axis . z) ,- u t mp t i ] - > b on [ j ] - > t a i l . ax i ε . x - = utmp ti] ->atom[il] . position. x; u t mp t i ] - > b o n d t j ] - > t a i l . ax i s . y - = utmp [i] ->atom[il] . position. y,- u tmp t i ] - > b ond t j ] - > t a i l . ax i s . z - = utmp [i] ->atom[il] .position. z; utmp [i] ->bond [j] ->tail .axis = vector_scale (utτnp[i] ->bond[j] ->tail .axis, 1.0) ; } } f close (fp) ; return (utmp [0] ) ; #undef LINE_LEN } /* This routine couples two rigid units */ void couple_unit(rigid_unit *unitl, rigid_unit *unit2) { bond_type **bond; for(bond=unitl->bond; bond[0] ->next; bond++) ,- bond[0] ->next = unit2; } /* Thiε routine turns a linear CX_nC peptide into a cyclic disulfide-bonded peptide */ rigid_unit *modify_cystine_ends (rigid_unit *unit, int n_amino__acidε , int *n_atomε_total ) { int i ; rigid_unit *unitl, *unit2, *unit3, *unit4, *unit5, *unit6; double len,- vector headl, head2; bond_type *btmp,- /* get new first unit */ unitl = unit->bondt0] ->next,- unit2 = unitl->bond[0] ->next; unit3 = unit2->bondtO] ->next,- /* save head vectors */ headl = unitl->head.axis,- head2 = unit2->head.axiε; /* modify A unit to be a side group */ len = vector_length(unitl->head.axis) ,- unit->head = unit->bond[0] ->tail; unit->head.axiε.x *= -len; unit->head.axis.y *= -len; unit->head.axis.z *= -len; unit->n_bonds = 0; /* modify C_alpha head */ len = vector_length(unit2->head.axis) ; unitl->head = unitl->bond[0] ->tail; unitl->head.axiε.x *= -len, unitl->head.axiε.y *= -len; unitl->head.axis.z *= -len; /* modify C_beta head */ len = vector_length(unit3->head.axis) ; unit2->head = unit2->bondt0] ->tail; unit2->head.axiε.x *= -len; unit2 ->head. ε cis .y *= -len; unit2->head.axiε.z *= -len; /* modify S tail */ unit3->bond = unit->bond; unit3->head.bondt2] = -1; unit3->bond[0] ->tail •= unit3->head; unit3->bondt0] ->tail.axis = vector_scale(unit3->head.axis, - 1 . 0 ) ; unit3 ->bond [0] - >next = unit2 ,- unit3->n_bondε = 1; unit3->n_atoms--,- (*n_atoms_total) --; /* modify S head */ unit3->head.axiε = unit3->atom[0] .position,- unit3->head.axis.x -= unit3->atomt3] .position.x; unit3->head.axiε.y -= unit3->atomt3] .position.y; unit3->head.axis.z -= unit3->atom[3] .position.z,- /* modify C_beta tail */ unit2->bond[0] ->tail.axiε = vector_scale(head2, -1.0); unit2->bondt0] ->next = unitl; /* modify C_alpha tail */ unitl->bondtO] ->tail.axis = vector_scale(headl, -1.0); unitl->bond[0] ->next = unit; unit4 = unitl; /* find last B unit */ for (i=l; i<n_amino_acids; i++) { unit4 = unit4->bond[unit4->n_bonds-l] ->next,- unit4 = unit4->bond[unit4->n_bonds-l] ->next,- } unit5 = unit4->bond[0] ->next; unit6 = unit5->bond[0] ->next; /* swap bond 0 and bondl for unit 4*/ btmp = unit4->bond[0] ; unit4->bondt0] = unit4->bond[1] ; unit4->bon tl] = btmp; /* modify S tail */ if ( (unit6->bond = (bond_type **) malloc(εizeof(bond_type *))) -= NULL) out_of_memory() ; if ( (unite->bond[0] = (bond_type *) malloc(εizeof(bond_type) ) ) == NULL) out_of_memory() ,• unite->head.bond[2] = -1; unit6->bond[0] ->tail = unit6->head; unit6->bond[0] ->next = unit3; unit6->n_bondε = 1; unit6->n_atoms-- ; ( *n_atoms_total ) - - ; unit6- > bond[0] ->tail.axis = unit6->atom[3] .position unit6- > bond[0] ->tail.axis.x -= unit6->atom[0] .position.x; unit6->bond[0] ->tail.axiε.y -= unit6->atom[0] .position.y; unit6- > bondt0] ->tail.axiε.z -= unit6->atom[0] .position.z,- u n i t e - > b o n d [ 0 ] - > t a i l . a x i ε vector_εcale(unit6->bond[0] ->tail.axis, 1.0) ; /* use AMBER S-S bond length */ unit3->head.axis = vector_εcale(unit3->head.axis, S_S_DISTANCE) ; /* modify cystine S types to obey AMBER rules */ strcpy(unit3->atom[0] .type, "S") ; εtrcpy(unit6->atom[0] .type, "S") ; /* modify cyεtine charges to obey AMBER rules */ unit2->atom[0 unit2->atom[l unit2->atom[2 unit3->atom[0 unit3->atom[l unit3->atom[2 unit5->atom[0 unit5->atom[l unit5->atom[2 unit6->atom[0 unit6->atom[l unit6->atom[2 /* reassign first unit */ return(unit3) ; } /* This routine determines the main and εide unit pointerε */ void get_main_εide(rigid_unit *unit, regrowth *main, regrowth ♦ side, int *n_main, int ♦ n_side) { rigid_unit ♦start, *unit2, *lastmain; regrowth ♦ mainO; int i; mainO = main; *n_εide = 0; *n_main = 0; εtart = unit; laεtmain = NULL; do { main->unit = unit; main->prev = lastmain,- main++,- (*n_main)++; for (i=0; i<unit->n_bonds-l; i++) { unit2 = unit->bond[i] ->next; if (unit2->atom[0] .residue != G) { side->unit = unit2; εide->prev = unit; side++; (*n_side)++,- } } lastmain = unit; unit = unit->bond[i] ->next,- } while (start != unit && unit->n_bonds > 0) ; if (unit->n_bondε == 0) { main->unit = unit; main->prev = lastmain; main++,• (*n_main)++; } else { mainO->prev = lastmain,- } } /* Thiε routine reads in the torsion data file */ void read_torsion_data(void) { #define LINE_LEN 200 FILE *fp; char line[LINE_LEN] ; int n_torsionε, itmp, i; double ftmp; torεion_data ♦♦ data if ((fp = fopenC'torεion.dat", "r")) == NULL) { printf ("Data file torεion.dat does not exist\n") ; exit (1) ; } getline dine, LINE_LEN, fp) ; εεcanfdine, "%d", &n_torsions) ; if ( (torsion_data_list = (torsion_data ♦♦) malloc ( (n_torεions+l) ♦ sizeof (torεion_data ♦ ))) == NULL) out_of_memory() ; data = torεion_data_liεt; data [n_torεionε] = NULL; for (i=0; i<n_torsions,- i++) { if ((datati] = (torεion_data *) malloc (εizeof (torsion_data) ) ) == NULL) out_of _memory ( ) ; getline dine, LINE_LEN, fp) ,- sscanfdine, "%lf %d %s %s %s %s %lf %lf %lf lf %lf %lf", fitftmp, fcitrnp, datati] ->typel, datati] ->type2, data [i] ->type3, datati] ->type4, tdatati] ->v0 tO] , &data[i] ->phi010] , &data[i] ->v0 tl] , &data[i] ->phi0 tl] , δdatati] ->v0 [2] , &data[i] ->phi0 [2] ) ; datati] ->phi0 [0] *= PI/180.0, datati] ->phi0[l] *= PI/180.0, datati] ->phi0t2] *= PI/180.0, } fclose (fp) ,- #undef LINE_LEN } /* This routine reads in the Lennard-Jones data file */ void read_lj_data(void) { #define LINE_LEN 200 FILE ♦ fp; char line [LINE_LEN] ; int n_terms, itmp, i; double ftτiφ; lj_data ♦♦ data,- if ((fp = fopen("lj__param.dat", "r")) == NULL) { printf ("Data file lj_param.dat does not exist\n") ; exit (1) ,- } getline dine, LINE_LEN, fp) ,- εεcanfdine, "%d", &n_terms) ,- i f ( ( l j _d a t a_l i s t = ( l j _da t a * * ) malloc ( (n_terms+l) ♦ εizeof (lj_data ♦ ) ) ) == NULL) out_of_memory() ,- data = lj_data_liεt; data [n_termε] = NULL; for (i=0; i<n_terms; i++) { if ((datati] = dj_data *) malloc (sizeof dj_data) ) ) == NULL) out_of _memory ( ) ; getline dine, LINE_LEN, fp) ,- sscanfdine, "%lf %d %s %lf %lf", fcftmp, titmp, data ti] ->type, &data [i] ->ri, &data [i] ->ei) ,- } fclose (fp) ; #undef LINE_LEN } /* This routine reads in the H-bond data file */ void read_hbond_data (void) { #define LINE_LEN 200 FILE ♦ fp; char linetLINE_LEN] ,- int n_termε, itmp, i; double ftmp; hbond_data ♦♦ data; if ((fp = fopen("hbond.dat", "r")) == NULL) { printf ("Data file hbond.dat doeε not exist\n"),- exit (1) ,- } getline (line, LINE_LEN, fp) ,- sscanfdine, "%d", &n_terms) ; if ( (hbond_data_lis = (hbond_data ♦♦ ) malloc ( (n_terms+l) ♦ εizeof (hbond_data *))) == NULL) out_of _memory ( ) ,- data = hbond_data_liεt; data [n_terms] = NULL; for (i=0; i<n_terms; i++) { if ((datati] = (hbond_data *) malloc (sizeof (hbond_data) ) ) = = NULL) out_of _memory ( ) ; getline dine, LINE_LEN, fp) ,- sscanfdine, "%lf %d s %ε %lf %lf", fcftmp, &itmp, data ti] ->typel, data [i] ->type2, &data[i]->a, &data [i] ->b) ,- } fcloεe(fp) ; #undef LINE_LEN } /* write out the BIOSYM car files aεsociated with this sequence */ voidwrite_car_file(int n_amino_acidε, int n_atoms_total, atom_list ♦ atom, εtring file) { int i; char nametNAME_LENGTH] ; FILE ♦ fp; time_t t; if ( (fp = fopen(file, "w")) == NULL) { printf("Cannot open car file %s\n" , file) ; exit(l) ; } fprintf(fp, "'BIOSYM archive 3\n") ; f rintf(fp, "PBC=OFF\n\n") ; t = time(NULL) ; fprintf(fp, " !DATE %ε", ctime(&t)) ; for (i=0; i<n_atoms_total; i++) { amino_acid_code_3 (atomti] .p->residue, name) ; capitalize(name) ; if (atomti] ,p->reεidue_num «= n_amino_acids-l) strcat(name, "N") ; elεe if (atomti] .p->reεidue_num == 0) εtreat (name, "n") ; elεe if (atomti] .p->reεidue == C) εtreat (name, "H") ; fprintf(fp, "%-5ε%15.9f%15.9f%15.9f %-4ε %-3d %-2s %2c%8.3f\n", atomti] .p->name, atomti] .poεition.x, atomti) .position.y, atomti] .position.z, name, atomti] .p->residue_num+l, ato ti] .p->type, atomti] .p->type[0], atomti] .p->charge) ,- } fprintf (fp, "end\nend\n") ; fcloεe(fp) ; } /* this routine returns the next valid line from the file */ εtring getline(εtring line, int len, FILE *fp) { string ret; do { ret=fgets (line,len,fp) ; strip(line) ,- } while (ret != NULL && ♦ line—'\x0' ) ,- return(ret) ; } / ♦ strip CR and LF from the end of a string alεo ignore everything to the right of ! */ void εtrip(string εtring) { for (; ♦ εtring != '\x0' && ♦ string != '\xA' && ♦string != '\xD' && ♦string != '!'; string++) t ♦ string = '\x0' ; } / ♦ remove commas from string, replacing with spaces */ void decomma(string string) for (,- ♦string != '\0' ; εtring++) if (♦εtring == ' , ' ) ♦ εtring = ' ' } /♦ This function capitalizes a εtring */ void capitalize(εtring ε) { int o,- o = 'a' - 'A' ; for (,- ♦ ε; ε++) if ( + ε >= 'a' && ♦ ε <= 'z') +s -= o,- } / ♦ This function returnε the 3-letter code for the amino acid */ void amino_acid_code_3 (acid_label label, string code_3) { switch (label) { case G: strcpy(code_3, case A: strcpy(code_3, case V: strcpy(code_3, case L: strcpy(code_3, case I: εtrcpy(code_3, caεe S: εtrcpy(code_3, caεe T: εtrcpy(code_3, caεe D: εtrcpy(code_3, caεe E: εtrcpy(code_3, case N: strcpy(code_3, case Q: εtrcpy(code_3, case K: strcpy(code_3, caεe H: strcpy(code_3, case R: strcpy(code_3, case F: εtrcpy(code_3, case Y: strcpy(code_3, case W: strcpy(code_3, case C: strcpy(code_3, case M: εtrcpy(code_3, case P: strcpy(code_3, default : strcpy(code } } /* This function returns the 1-letter code for the amino acid */ void amino_acid_code_l (acid_label label, char code_l) { switch (label) { case G: code_l = 'G' break case A: code_l = 'A' break case V: code_l = 'V break case L: code_l - 'L' break case I: code_l = 'I' break case S: code_l -= 'S' break caεe T: code_l = 'T' break case D: code_l -= 'D' break caεe E code_l = 'E' break case N code_l = 'N' break case Q code_l = 'Q' break case K code_1 = 'K' break caεe H: code 1 = 'H' break caεe R: code_l = 'R' break caεe F: code_l = 'F' break caεe Y: code_l = 'Y' break case W: code_l = 'W' break case C: code_l = 'C break case M: code_l = 'M' break case P: code_l = 'P' break default : code l = '? } } / ♦ This function returns the acid label from the 1-letter amino acid code */ acid_label amino_acid_code(char code_l) { acid_label ret; switch (code_l) { case 'G' : ret = G; break case 'A' : ret = A; break case 'V : ret = V; break } return (ret) } ***************************************************************** MOLECULAR TOPOLOGY CREATION - PEPTIDE2.C ***************************************************************** / ♦ The topology creation routines */ #include "peptide.h" / ♦ This routine initializes the bond connection table */ void initialize_connection_table (int ♦♦ bond_table, int n atoms total) { int i,j; for(i=0; i<n_atoms_total; i++) for(j=0; j<MAX_BONDS; j++) bond_table[i] [j] = -1; /♦ This routine creates a connection table */ void make_connection_table(int ♦♦ bond_table, int ♦ table_num, rigid_unit ♦unit, rigid_unit ♦ start) { int i, *j, il, save[MAX_BONDS] • il = unit->head.atom_num + ♦ table_num,- for (j=unit->head.bond; *j != -1; j++) { add_connection(bond_table, il, ♦ j+^table_num) ,- add_connection(bond_table, ♦ j+ + table_num, il) ; } for (i=0; i<unit->n_bondε; i++) { il = unit->bond[i] ->tail.atom_num + ♦ table_num; for (j=unit->bond[i] ->tail.bond; *j != -1; j++) { add_connection(bond_table, il, ♦ j+ + table_num) ,- add_connection(bond_table, *j+*table_num, il) ; } εaveti] = unit->bond ti] ->tail .atom_num + *table_num,- } ♦ table_num += unit->n_atoms,- for (i=0,- i<unit->n_bondε,- i++) { il = unit->bond[i] ->next->head.atom_num,- if (unit->bond[i] ->next != start) il += ♦table_num,- add_connection(bond_table, saved], il) ; add_connection(bond_table, il, εaveti]); if (unit->bond ti] ->next != start) make_connec ion_table (bond_table, table_num, unit->bond[i] ->next, start) ,- } } / ♦ This routine adds a connection to the connection table */ void add_connection(int ♦♦ bond_table, int il, int i2) { int *i, *j ; for (i=bond_table[il] ; *i != -1; i++) ; for (j=bond_table [il] ; j<i; j++) if ( + j == i2) return; ♦ i = i2; } /♦ This routine prints out the connection table ♦ / void print_connection_table(int ♦♦ bond_table, int n_atoms_total) { int i, j ; for (i=0; i<n_atoms_total; i++) { printf("%5d ",i); for (j =0 ; j <MAX_BONDS ; j ++) printf ( "%5d " , bond_table [i] [j ] ) ,- printf ( " \n" ) ; } } / ♦ Thiε routine determines the torsional terms p is set the head pointer and it returns the tail pointer */ void get_torsions(torsion_list **p, int ♦♦ bond_table, int ♦ table_num, atom_list *atom, rigid_unit ♦ unit, rigid_unit ♦ start) { int i, save[MAX_BONDS] ; static torsion_list ♦ q; static int i2, ♦ j , ♦ k; rigid_unit ♦ new_unit; if (!^p) q = NULL; for (i=0; i<unit->n_bondε,- i++) εaveti] = unit->bondti] ->tail.atom_num + ♦ table_num,- ♦ table_num += unit->n_atoms; for (i=0; i<unit->n_bondε,- i++) { new_unit = unit->bond[i] ->next; i2 = new_unit->head.atom_num; if (new_unit != start) i2 += ♦ table_num; for (j=bond_tabletsaveti] ] ; ♦ j != -1; j++) for (k=bond_tableti2] ; ♦k != -l ; k++) if (♦j != i2 && saveti] != + ) if (!*p) ♦ p = q = add_torsion(bond_table, atom, ♦ j , saveti] , i2, *k); else if (q->next « add_torεion(bond_table, atom, ♦j, save[i] , i2, *k) ) q = q->next; if (new_unit != start) get_torsionε (p, bond_table, table_num, atom, new_unit, εtart) ,- } } /* This routine addε a torεion to the torsion list Wildcards on i and 1 (simultaneously) are allowed for torsion_list *add_torsion(int **bond_table, atom_list *atom, int i, int j, int k, int 1) { torsion_liεt t, ♦v; char wild[]=" ♦ ",- int degen, itmp,- / ♦ count degeneracy for "general" torsions--don't count the torsion axiε! ♦ / / ♦ "specific" torsions have a degeneracy of l, "general" have a degeneracy of degen */ for (itmp=0; bond_table [j] [itmp] != -1; itmp++) ; for (degen=0; bond_tabletk] [degen] != -l; degen++) ; itmp--; degen--,- degen *= itmp; t.degen = l,- / ♦ printf("%s %ε %s %s %d\n", atomti] .p->name, atomtj] .p->name, ato tk] ,p->name, atomti] .p->name, degen) ,- ♦/ t.next = NULL; t.num[0] = i,- t.numtl] = j; t.num[2] = k; t.num[3] = 1; / ♦ "specific" torsions ♦ / if ( !lookup_torεion_data (atomti] .p->type, atomtj] .p-> type, atom[k] .p->type, atom[l] .p->type, &t.p)) { /* "general" torsions */ if ( ! lookup_torεion_data (wild, atom tj ] . p- > type , ato tk] .p->type, wild, & t .p) ) { printf ("Torsional data not found for %s %s %s %ε\n" , atomti] .p->type, atomtj] .p->type, atomtk] .p->type, atomti] .p->type) , • return (NULL) ; } t . degen = degen ; } /* only report nonzero torsional terms--this will screw up the 1/2 factor for AMBER! */ /* if (t.p->v0[0]==0 && t.p->v0 [1]==0 && t.p->v0[2]==0) return(NULL) ; */ if ( (v = (torsion_list *) malloc(sizeof(torsion_liεt) ) ) == NULL) out_of_memory() ,- ♦ v = t; return(v) ; } / ♦ This routine looks up the parameters for a torsional term in the torsion data base */ logical lookup_torsion_data(string typel, string type2, εtring type3, string type4, torsion_data **p) { torsion_data **1; for (l=torsion_data_list; *1; 1++) { if (strcmp( (^1) ->typel, typel)==0 && strcmp( (^1) ->type2, type2)«o && s trcmp ( ( + l ) - > type3 , type3 ) = = 0 & & strcmp( (^1) ->type4,type4) ==0) goto done; if (strcmp( (*1) ->typel, type4)==0 && strcmp( ( + 1) ->type2, type3)==0 && S t rcmp ( ( * l ) - >type 3 , type 2 ) = = 0 & & strcmp( (*1) ->type4,typel) ==0) goto done,- } return(FALSE) ; done: ,- *P = *1; return(TRUE) ; } /* This routine prints out the torsion terms */ void print_torsions (torsion_list *list, atom_list ♦atom) { torεion_liεt ♦ t; double theta,- for (t=liεt; t; t=t->next) { theta = torsion (atom[t->numtO] ] . position, ato tt->num tl] ] .position, atom [t - >num [2 ] ] . position , atom[t->num[3] ] .position) ,- printf ("%4-s %4-s %4-ε %4-ε" , atomtt->numtO] ] .p->name, atomtt->num[l] ] .p->name, atom[t->num[2] ] .p->name, atom[t->numt3] ] .p->name) ,- / ♦ printf ("%4-d %4-d %4-d %4-d" , t->num[0] , t->num[l] , t->num[2] , t->num[3]) ; ♦ / printf ("%4d ",t->degen) ; printf ("%9.31f %7.31f %7.31f %7.31f %7.31f %7.31f %7.31f\n", 180.0^theta/PI, t->p->v0[0], t->p->v0[l], t->p->v0[2], 180.0^t->p->phi0 t0] /PI, 180.0*t->p->phi0 [1] /PI, 180.0*t->p->phi0t2]/PI) ; } } /* This routine determines the torsional angle (in radians) defined by the input positions--bonded in the order pl-p2-p3-p4 */ double torsion(vector pi, vector p2, vector p3, vector p4) { vector bl, b2, b3, nl, n2; double dot, len, theta; /* define bond vectors */ b3.x = pl.x - p2.x,- b3.y = pl.y - p2.y; b3.z = pl.z - p2.z,- b2.x = p3.x - p2.x,- b2.y = p3.y - p2.y,- b2.z = p3.z - p2.z,- bl.x = p4.x - p3.x,- bl.y = p4.y - p3.y,- bl.z = p4.z - p3.z,- b2 = vector_εcale(b2, 1.0); dot = vector_dot (bl,b2) ; / ♦ project bonds onto torsion axis */ nl.x = bl.x - dot^b2.x,- nl.y = bl.y - dot + b2.y; nl.z = bl.z dot*b2.z; dot = vector_dot (b3,b2) ,- n2.x = b3.x - dot^b2.x; n2.y = b3.y - dot + b2.y; n2.z = b3.z dot*b2.z; len = vector_length(nl) ♦ vector_length(n2) ,- theta = vector_dot(nl,n2) /len; / ♦ watch out for theta=0,PI, which kill acos */ if (theta > 1.0-EPS) theta = 0.0; elεe if (theta < -1.0+EPS) theta = PI; elεe theta = acos(theta) ,- /* get proper sign on angle */ nl = vector_cross(n2,nl) ; if (vector_dot(nl, b2) < 0.0) theta = -theta; return(theta) ; } /* This function assignε the lennard joneε parameterε */ void assign_lj_parameters(rigid_unit ♦ unit, rigid_unit ♦start) { . int i; for (i«0; i<unit->n_atoms; i++) { if ( !lookup_lj_data(unit->atom[i] .type, &unit->atom[i] .ri, &unit->atom[i] .ei) ) { printf ("Lennard-Jones parameters not found for atom %s\n" , unit->atom[i] .type) ; exi (1) ; } } for (i=0; i<unit->n_bondε,- i++) if (unit->bond[i] ->next != start) assign_lj_parameterε (unit->bon [i] ->next, start) ,- } /* This function looks up the lennard joneε parameters for an atom */ logical lookup_lj_data (string type, double *ri, double *ei) { lj_data **1; for (l=lj_data_list; *1; 1++) if (strcmp( (*1) ->type, type)==0) { *ri = (*1) ->ri,- ♦ ei = ( + 1) ->ei; return(TRUE) ,- } return(FALSE) ,- } /* This routine determines the H-bonds that are in the molecule */ void get_hbonds (hbond_list ♦♦ list, atom_list ♦ atom, int n_atoms) { int i, j ,- hbond_liεt t, ♦ u, ♦ v,- ♦ list = NULL; t.next = NULL; for (i=0; i<n_atomε; i++) for (j=i+l; j<n_atoms; j++) if (lookup_hbond_data (atomfi] .p->type, atomtj] .p->type, &t.p)) { t . num [ 0 ] = i ; t .nu tl] = j ; if ( (v = (hbond_list ♦ ) malloc (εizeof (hbond_list) ) ) -== NULL) out_of _memory ( ) ,- ♦v = t; if (l^list) ♦liεt = u = v; else { u->next = v; u = u->next; } } } /♦ This function looks up the H-bond parameters for an atom pair ♦ / logical lookup_hbond_data(εtring typel, εtring type2, hbond_data ♦♦ p) { hbond_data * + l; for (l=hbond_data_list; *1; 1++) { if (εtrcmp( (*1) ->typel, typel) ==0 && strcmp( (*1) ->type2, type2)==0) goto done; if (strcmp( (*1) ->type2, typel) ==0 && strcmp( (*1) ->typel, type2)==0) goto done; } return(FALSE) ; done: ,- ♦P = *1; return(TRUE) ; } / ♦ This function prints out the H-bonds */ void print_hbonds(hbond_list *1, atom_list ♦atom) { for (,- 1; l=l->next) { printf ("%s %ε %lf %lf\n", atom[l->numtO] ] .p->name, atomtl->numtl] ] .p->name, l->p->a, l->p->b) ; } } / ♦ This function assignε the atom pointers * / void aεsign_atom_pointerε (int *liεt_num, rigid_unit *unit, rigid_unit ♦ start, atom_list ♦atom) { int i; for ( i=0 ; i<unit- >n_atoms ,- i++ ) atom [i + *list_num] .p = &unit- >atom [i] ,- *list_num += unit- >n_atoms ,- for (i=0; i<unit->n_bondε; i++) if (unit->bond[i] ->next != start) asεign_atom_pointerε(liεt_num, unit->bond[i] ->next, start, atom) ; } ***************************************************************** GEOMETRY CREATION ROUTINES - PEPTIDE3.C ***************************************************************** /* The geometry creation routines */ #include "peptide.h" logical grow_backwards=FALSE; / ♦ Thiε function creates the Rosenbluth factor for an old configuration */ void old_unit(int ♦ liεt_num, int nO, int nl, int n2, double ♦ logroεen, rigid_unit ♦ unit, rigid_unit ♦ start, torsion_list *t , hbond_list *1, atom_liεt ♦ atom, vector *twig[], vector pO, vector bO) { int i, j ,- vector p[MAX_BONDS] , btMAX_BONDS] , pi, bl; double e; pi - unit->atom[unit->head.atom_num] .poεition; bl = unit->head.axis; do_unit_subdist_num, nO, nl, n2, logrosen, unit, t, 1, atom, twig, pi, bl, pO, bO, &e, p, b, FALSE) ; for (j=0; j<unit->n_bonds,- j++) if (unit->bond[j] ->next != εtart) old_unit (liεt_num, nO, nl, n2, logroεen, unit->bond[j] ->next, start, t, 1, atom, twig, ptj] , b[j]); } /* This function creates the geometry of a peptide and the Rosenbluth factor. The growth is in one direction. */ void do_unit(int *list_num, int nO, int nl, int n2, double ♦ logrosen, rigid_unit ♦ unit, rigid_unit ♦start, torsion_list ♦ t, hbond_list ^1, atom_list *atom, vector ♦ twigt] , vector pO, vector bO, double ^e) { int i, j ,- vector p[MAX_BONDS] , b tMAX_BONDS] , pi, bl ; unit->liεt_num = ♦ liεt_num,- pi = unit->atom[unit->head.atom_num] .poεition; bl = unit->head.axiε; do_unit_εub(list_num, nO, nl, n2, logrosen, unit, t, 1, atom, twig, pi, bl, pO, bO, e, p, b, TRUE) ; / ♦ loop over remaining units ♦ / for (j=0; j<unit->n_bonds,- j++) { / ♦ εtore side-chain regrowth info ♦ / if (unit->bond[j] ->next != εtart) do_unit(lis _num, nO, nl, n2, logroεen, unit->bond[j] ->next, εtart, t, 1, atom, twig, ptj], btj] , e) ,- } } / ♦ Thiε function creates the geometry of a peptide and the Rosenbluth factor. The growth is forward. */ void do_backbone_f(int i, int n_main, int n_atoms_total, double *logrosen, regrowth *main, regrowth *side, torεion_liεt *t, hbond_liεt *1, atom_liεt ♦ atom, vector ♦ twigt], double ^e, logical new) { int list_num, nl, n2; vector p[MAX_BONDS] , b [MAX_B0NDS] , pi, bl, pO , bO ; if (i==0) i++; pO = get_main__pO(atom, main, i) ; bO = get_main_bO(atom, main, i) ; main += i; liεt_num = main->unit->list_num,- nl = n2 = n_atoms_total,- /* loop over backbone groups */ for ( ,- i<n_main,- i++, main++) { pi = main->unit->atom[main->unit->head.atom_num] .position; bl = main->unit->head.axis,- /* add on backbone unit */ do_unit_sub(Sclist_num, 0, nl, n2, logrosen, main->unit, t, 1, atom, twig, pi, bl, pO, bO, e, p, b, new) ,- if (!new && i < n_main-l) { pO = get_main_pO (atom, main, l) ,- bO = get_main_bO (atom, main, 1) ,- } else if (new && i < n_main-l) { pO = p[main->unit->n_bonds-l] ,- bO = b[main->unit->n_bonds-l] ,- } /* add on εide chain */ if (main->unit->n_bondε == 2) { if (new) do_unit(&list_num, 0, nl, n2, logroεen, main - >uni t - >bond [ 0 ] - > next , main->unit- >bond [ 0 ] - >next , t, 1, atom, twig, p[0] , b[0], e) ,- else old_unit (&list_num, 0, nl, n2, logrosen, main - >unit - >bond. t 0 ] - >next , main->unit->bond10] ->next, t, 1, atom, twig, ptO], b[0]),- } } } /♦ Thiε function creates the geometry of a peptide and the Roεenbluth factor. The growth iε forward. Side chains are rigidly rotated. */ void do_backbone_f_rigid(int i, int n_main, int n_atoms_total, double ♦ logrosen, regrowth *main, regrowth ♦ side, torsion_liεt + t, hbond_list ^1, atom_list *atom, atom_info ♦ atom_tmp, vector ♦twig[] , double ♦ e, logical new) { int liεt_num, nl, n2; vector p[MAX_BONDS] , b tMAX_BONDS] , pi, bl , pla, bla, pO, bO ; logical false=FALSE; int n_atomε, j ; atom__info ♦ q,- double len,- vector b2 [MAX_B0NDS] , v, v2; if (i==0) i++; pO = get_main_pO(atom, main, i) ; bO = get_main_bO(atom, main, i) ,- main += i; liεt_num = main->unit->list_num ( - nl = n2 = n_atomε_total,- /* get firεt head vector ♦ / p i = a t o m [ m a i n - > u n i t - > l i ε t _ n u m main- >unit- >hea . tom_num] .poεition; bl = atom[main[-1] .unit->liεt_num + main[-l] .uni ->bond[main[-1] .unit->n_bonds-l] ->tail.atom_num] .position; bl.x = pl.x - bl.x; bl.y = pl.y - bl.y,- bl . z = pi . z - bl . z ; for (; i<n_main,- i++, main++) { / ♦ change unit ♦ / n_atoms = main->unit->n_atoms; q = main->unit->atom; if (i < n_main-l) main->unit->n_atomε = main [1] .unit->liεt_num main->unit->list_num,- main->unit->atom = atom_tmp,- for (j=0; j<main->unit->n_atoms; j++) main->unit->atomtj] .position = atom[list_num+j ] .position, • for (j=0,- j<main->unit->n_bondε; j++) { b2[j] = main->unit->bond[j] ->tail .axis,- v = atom[main->unit->bond tj] ->next->list_num + main->unit->bond[j] ->next->head.atom_num] .position,- v2 = ato [main->unit->list_num + main->unit->bond[j] ->tail .atom_num] .position,- v.x -= v2.x; v.y -= v2.y; v. z -= v2. z ,- main->unit->bond[j] ->tail .axis = vector_scale (v, 1.0) ,- } /* get next head vector */ if (i < n_main-l) { pla = atom[main[l] .unit->list_num + main[l] .unit->head.atom_num] .position; bla = atom[main->unit->liεt_num + main->unit->bond[main->unit->n_bondε-1] ->tail .atom_num] .position; bla.x = pla.x - bla.x; bla.y = pla.y - bla.y; bla.z = pla.z - bla.z; } / ♦ add on unit ♦ / do_unit_sub(&liεt_num, 0, nl, n2, logrosen, main->unit, t, 1, atom, twig, pi, bl, pO, bO, e, p, b, new) ; /♦ change unit back ♦ / main- > unit->n_atoms = n_atomε,- main->unit->atom - q,- for (j=0; j<main->unit->n_bondε; j++) main->unit->bond[j] ->tail.axiε = b2[j]; /* change head vector */ if (!new && i < n_main-l) { pO = get_main_pO (atom, main, 1) ,- bO = get_main_bO (atom, main, 1) ; } elεe if (new && i < n_main-l) { pO = ptmain->unit->n_bonds-l] ; bO = btmain->unit->n_bonds-l] ,- } pi = pla,- bl = bla,- } } /* This function creates the geometry of a peptide and the Rosenbluth factor. The growth is backward. */ void do_backbone_b(int i, int n_main, int n_atoms_total, double *logrosen, regrowth ♦ main, regrowth ♦ side, torsion_liεt ♦ t, hbond_list ^1, atom_list ♦ atom, vector ♦twigt], double ^e, logical new) { int lis _num, nO, nl, n2, n_bonds; vector p[MAX_BONDS] , btMAX_BONDS] , bO, pO, tmp, pi, bl; if (i == n_main-l) i--; main += i; n2 = n_atoms_to al; bO = get_main_bO(atom, main, 1) ; for (; i>=0; i--, main--) { nl = maintl] .unit->list_num; nO = list__num = main->unit->list_num; / ♦ get bond vectors */ p 0 atom[mai tl] .unit->head.atom_num+main[l] .unit->liεt_num] .poεition; bO.x = -bO.x; bO.y = -bO.y,- bO.z = -bO.z; n_bonds = main->unit->n_bonds; pi = main->unit->atom[main->unit->bond[n_bonds-l] -> tail.atom_num] .position,- bl = main->unit->bond[n_bonds-l] ->tail.axis,- bl.x = -bl.x,- bl.y = -bl.y; bl.z = -bl.Z; bl = vector_εcale(bl, vector_length(main[1] .unit->head.axis) ) ,- tmp = main->unit->bond[n_bonds-l] ->tail.axis; main->unit->bond[n_bonds-1] ->tail.axis = main->unit->head.axis,- / ♦ add on unit ♦ / grow__backwards = TRUE; do_unit_sub(&*list_num, nC, nl, n2, logrosen, main->unit, t, 1, atom, twig, pi, bl, pO, bO, e, p, b, new); grow_backwards = FALSE; main->unit->bond[n_bonds-l] ->tail .axis = tmp; / ♦ change head vector ♦ / if ( !new && i > 0) bO = get_main_bO (atom, main-l, 1) ; elεe if (new && i > 0) bO = vector_scale(b[n_bonds-l] , 1.0); / ♦ add on side chain */ if (main->unit->n_bonds == 2) { if (new) do_unit(δtliεt_num, nO, nl, n2, logrosen, main - >uni t - >bond [ 0 ] - >next , main - >uni t - >bond [ 0 ] - >next , t, 1, atom, twig, p[0] , b[0], e) ; else old_unit (&list_num, nO, nl, n2, logrosen, main - >unit - >bond [ 0 ] - >next , main->unit->bond[0] ->next, t, 1, atom, twig, p[0], b[0]),- } } } / ♦ This function creates the geometry of a peptide and the Rosenbluth factor. The growth is backward. Side chains are rigidly rotated. */ void do_backbone_b_rigid(int i, int n_main, int n_atoms_total, double *logrosen, regrowth *main, regrowth ♦ side, torsion_list ♦ t, hbond_liεt *1, atom_list *atom, atom_info ♦ atom_tmp, vector + twig[] , double *e, logical new) { int list_num, nO, nl, n2, n_bondε, n_atoms, j; vector p[MAX_BONDS] , b [MAX_B0NDS] , bO, pO , tmp, pi, bl , pla, bla, b2[MAX_BONDS] , V, v2 ; logical false=FALSE; atom_info ♦ q; if (i == n_main-l) i--,- main += i; n2 = n_atoms_total ,- / ♦ get first head unit ♦ / pi -= atom [main- >unit->bond [main- >unit->n_bonds-l] ->tail .atom_num + main->unit->list_num] .position; b l = at om [ma in t l ] . uni t - > l i s t_num + maintl] .unit->head.atom_num] .position,- bl.x = pl.x - bl.x,- bl.y = pl.y - bl.y,- bl . z = pi . z - bl . z ; bO = get_main_bO (atom, main, 1) ,- for (; i>=0; i--, main--) { / ♦ get current info ♦ / list_num = main->unit->list_num; n_bondε = main->unit->n_bonds,- p 0 atom[main[l] .unit->head.atom_num+main[l] .unit->list_num] .position,- bO.x = -bO.x; bO.y = -bO.y; bO.z = -bO.z; nl = maintl] .unit->list__num; nO = list_num = main->unit->list_num; n_atoms = main->unit->n_atoms; q = main->unit->atom,- /* change current unit */ main->unit->n_atoms = nl - nO; main->unit->atom = atom_tmp,- for (j=0; j<main->unit->n_atoms; j++) main->unit->atom[j] .position = atom[list_num+j] .position,- / ♦ compute bond axes ♦ / for (j=0; j<n_bonds,- j++) { b2[j] = main->unit->bond[j] ->tail . axis; v = atom [main- >unit->bond [j ] ->next->liεt_num + main->unit->bond [j] ->next->head.atom_num] .position,- v2 = atom[liεt_num + main->unit->bond [ j ] ->tail .atom_num] .position,- v . x - = v2. x ,- v.y -= v2.y,- v . z - = v2. z ,- main- >unit- >bond [j] ->tail .axis = vector_εcale (v, 1.0) ,- } main->unit->bond[n_bondε-l] ->tail.axiε = vector_εcale(get_main_b0 (atom, main-i, i) , vector_length(main->unit->head.axiε) ) ; /* compute new head vector */ if (i > 0) { p l a = atom[main[-l] .unit- >bon [main [-1] .unit->n_bonds-l] ->tail.atom_num+ main[-l] .unit->list_num] .position,- bla=atom[list_num + main->unit->head.atom_num] .position,- bla.x = pla.x - bla.x; bla.y = pla.y - bla.y,- bla.z = pla.z - bla.z; } /* add on unit */ grow_backwards = TRUE; do_unit_sub(&liεt_num, nO, nl, n2, logroεen, main->unit, t, 1, atom, twig, pi, bl, pO, bO, e, p, b, new); grow_backwardε = FALSE; / ♦ reεtore backbone unit ♦ / main->unit->n_atoms = n_atoms; main->unit->atom = q; for (j=0; j<n_bondε,- j++) { main->unit->bond[j] ->tail.axiε = b2[j],- /♦ change head vector ♦ / if ( !new && i > 0) bO = get_main_bO (atom, main-i, l) ,- elεe if (new && i > 0) bO = vector_εcale(b[n_bonds-l] , 1.0); pi = pla; bl = bla; } } } /* Thiε routine creates the random positions. For new units, it picks and copies the winner. */ void do_unit_sub(int ♦ list_num, int nO, int nl, int n2, double ♦logroεen, rigid_unit ♦ unit, torsion_list ♦ t, hbond_liεt *1, atom_liεt ♦ atom, vector ♦ twig[] , vector pi, vector bl, vector pO , vector bO , double ^e , vector p [MAX_BONDS] , vector b [MAX_BONDS] , logical new) { int i , j , iO ; vector bond[KMAX] [MAX_BONDS] , point [KMAX] [MAX_BONDS] ; double ftmp, coε_theta2, sin_theta2; double de[KMAX] , sum, max; iO = 0; if (!new) { / ♦ copy old configuration to first "guess" ♦ / iO = 1; for (j =0 ; j <unit- >n_atoms ; j ++ ) twig [0] [j ] = atom [*liεt_num + j ] .position ; } / ♦ create gueseε for new unit position ♦ / for (i=i0; i<KMAX; i++) { do { coε_theta2 = l-2^ran2 (1.0) ,- sin_theta2 = l-2*ran2 (1.0) ,- ftmp = coε_theta2 # coε_theta2 + εin_theta2*εin_theta2,- } while (ftmp > 1.0); ftmp = εqrt(ftmp); coε_theta2 /= ftmp,- εin_theta2 /= ftmp; add_rigid_uni (unit, twig[i], pi, bl, pO, bO, point [i] , bond[i], cos_theta2, εin_theta2) ,- } / ♦ calculate probabiltieε -- be careful about zero of energy & overflows ♦ / max = -1E99; for (j=0; j<KMAX; j++) { de[j] = -BETA * delta_energy (t, 1, atom, twigtj], *list_num, nO, nl, n2, unit->n_atoms) ,- if (detj] > max) max = detj]; } sum = 0.0; for (j=0; j<KMAX; j++) { detj] = exp(de[j] - max) ,- sum += detj] ; } ♦ logroεen += log(εum) + max - log(KMAX),- if (!new) { / ♦ determine pointε ♦ / for (j=0; j<unit->n_bondε,- j++) { p t j ] = a t o m [ * l i ε t _ n u m + unit->bond[j] - >tail . atom_num] .position,- b[j] = atom [unit ->bondtj] ->next->list_num + unit->bond[j] ->next->head.atom_num] .position,- b[j] .x -= p[j] .X; •t [ j ] -y -= p [ j ] -y, b[j] .z -= p[j] .z, b[j] = vector_scale(b[j] , 1.0); } ♦ liεt_num += unit->n_atomε,- } elεe { /* pick winner */ de[0] /= sum,- for (j-l; j<KMAX; j++) de[j] = de[j-l] + de[j]/sum ; ftmp = ran2 (1.0) ,- for (i=0; i<KMAX; i++) if (ftmp <= de[i]) break,- ftmp = de [i] ; if (i > 0) ftmp -= de[i-l] ,- ftmp *= εum,- ♦e -= dog(ftmp)+max) /BETA; /* copy winner to atom array ♦ / for (j=0; j<unit->n_atomε,- j++, ( ♦ list_num)++) atom[*list_num) .position = twig[i] [j] ,- for (j=0,- j<unit->n_bonds,- j+ + ) { p[j] = point [i] [j] ,- b[j] = bond[i] [j] ,- } } } /* This routine adds a rigid unit to the peptide εtructure */ void add_rigid_unit(rigid_unit *unit, vector *pos, vector pi, vector bl, vector pO, vector bO, vector point [MAX_B0NDS] , vector bond[MAX_BONDS] , double cos theta2, double sin theta2) { int i,- double bond_len, cos_theta, sin_theta,- vector n, r0,- bond_len = vector_length(bl) ,- rO.x = pO.x + b0.x*bond_len; rO.y = pO.y + bO.y^bond_len; rO.z = pO.z + bO.z + bond_len, bl.x /= bond_len; bl.y /= bond_len,- bl.z /= bond_len,- n = vector_croεε(bl,b0) ; coε theta = vector dot(b0,bl); εin_theta = vector_length(n) ,- if (sin_theta < EPS) { n.x = 1.0; } else { n.x /= sin_thetaj n.y /= εin_theta; n.z /= εin_thetaj } for (i=0; i<unit->n_atoms,- i++) pos[i] = align (unit->atom[i] .position, rO, pi, n, cos_theta, sin_theta, bO, cos_theta2, εin_theta2) ; for (i=0; i<unit->n_bonds,- i++) pointfi] = pos [unit->bond[i] ->tail .atom_num] ,- rO.x = 0.0; rO.y = 0.0; rO . z = 0.0; pl=r0; for (i = 0; i<unit->n_bondε,- i++) bond[i] = align(unit->bond[i] ->tail.axis, rO, pi, n, cos_theta, sin_theta, bO, cos_theta2, sin_theta2) ,- } /* This routine aligns the position */ vector align(vector p, vector rO, vector rl, vector n, double cos_theta, double sin_theta, vector n2, double coε_theta2, double sin theta2) { vector ret; ret.x = p.x - rl.x; ret.y = p.y - rl.y; ret.z = p.z - rl.z; ret = vector_rotate(ret, n, cos_theta, sin_theta) ,- ret = vector_rotate(ret, n2, cos_theta2, sin_theta2) ; ret.x += rO.x; ret.y += rO.y; ret.z += rO.z; return(ret) ; ***************************************************************** ENERGY DETERMINATION - PEPTIDE4.C ***************************************************************** /* The energy routines */ #include "peptide.h" #define NO 8 #define Nl 11 #define N2 81 #define N3 84 #define N2 63 #define N3 66 #define SCALE 100 /* Thiε energy routine trieε to force a S-S ring-closure for CAAAAAAC */ double zenergy(torsion_list *t, hbond_liεt *1, atom_list *atom, int n_atoms_total) { double rl, r2; vector x, y, v,- x = atom[Nl] .position; x.x -= atom[N0] .position.x; x.y -= atom[NO] .position.y,- x.z -= atom[NO] .position.z; x = vector_scale(x, 2.038); x.x += atom[N0] .position.x,- x.y += atom[N0] .position.y; x.z += atom[NO] .position.z; y = atom[N3] .position; y.x -= atom[N2] .position.x,- y.y -= atom[N2] .position.y; y.z -= atom[N2] .position.z; y = vector_εcale(y, 2.038); y.x += atom[N2] .position.x; y.y += atom[N2] .position.y; y.z += atom[N2] .position.z; v = X; v.x -= atom[N2] .position.x; v.y -= atom[N2] .position.y,- v.z -= atom[N2] .position,z,- rl = vector_length2 (v) ,- v = y; v.x -= atom[N0] .poεition.x,- v.y -= atom[N0] .poεition.y,- v.z -= atom[NO] .position,z,- r2 = vector_length2 (v) ; return(SCALE* (rl+r2) /BETA) ,- } /* Thiε energy routine tries to force a S-S ring-closure for CAAAAAAC */ double zdelta_energy(torεion_list *t, hbond_list *1, atom_list ♦ atom, vector *twig, int n_atoms, int nO, int nl, int n2 int n_twig) double rl, r2,- vector x, y, v; rl = r2 = 0.0; if (INTERVAL(NO, n_atomε, n_atoms+n_twig) && INTERVAL(N2, nl, n2) ) { x = twig[Nl-n_atoms] ,- x.x -= twig[N0-n_atoms] .x; x.y -= twig[N0-n_atoms] .y,- x.z -= twig[N0-n_atomε) .z,- x = vector_scale(x, 2.038); x.x += twig[N0-n_atomε] .x; x.y += twig[N0-n_atomε] .y,- x.z += twig[N0-n_atomε] .z; y = atom[N3] .poεition; y.x -= atom[N2] . poεition. x,- y.y -= atom[N2] . poεition. y; y.z -= atom [N2] .poεition. z; y = vector_εcale(y, 2.038); y.x += atom[N2] . position. x,- y.y += atom[N2] . position. y; y.z += ato [N2] .position, z ,- V = X; v.x -= atom[N2] .poεition.x,- v.y -= atom[N2] .poεition.y,- v.z -= atom[N2] .position,z,- rl = vector_length2(v) ; v = y ; v.x -= twig[N0-n_atomε] .x; v.y -= twig[N0-n_atoms] .y; v.z -= twig[N0-n_atomε] .z; r2 = vector_length2 (v) ; } elεe if (INTERVAL(N2, n_atoms, n_atomε+n_twig) && INTERVAL(NO, nO, n_atoms)) { x = atom[Nl) .position,- x.x -= atom[N0] .position.x,- x.y -= atom[NO] .position.y,- x.z -= atomtNO] .poεition.z,- x = vector_εcale(x, 2.038); x.x += atom[N0] .poεition.x; x.y += atom[N0] .poεition.y,- x.z += atom[NO] .position.z; y = twig[N3-n_atomε] ,- y.x -= twigtN2-n_atoms] .x; y.y -= twig[N2-n_atoms] .y,- y.z -= twig[N2-n_atoms] .z; y = vector_εcale(y, 2.038); y.x += twig[N2-n_atoms] .x; y.y += twigtN2-n_atoms] .y; y.z += twig[N2-n_atoms] .z; V = X; v.x -= twig[N2-n_atomε] .x; v.y -= twig[N2-n_atomε] .y; v.z -= twigtN2-n_atoms] .z; rl = vector_length2 (v) ; v = y ; v.x -= atomtNO] . position. ; v.y -= atomtNO] . posit ion. y; v.z -= atomtNO] .position. z; r2 = vector_length2 (v) ; } return(SCALED (rl+r2) /BETA) ,- } /* This routine returnε the Coulomb, LJ, H-bond, and torεion energieε between the atomε in *atom and the atomε in ♦ twig. The atomε in ^twig muεt be thoεe directly following thoεe in ♦ atom. The atomε n_atomε to n_atoms+n_twig are in twig. The atomε nO to n_atomε and nl to n2 are in atom. nO <= n_atoms <= nl <= n2 */ double delta_energy(torsion_list ♦ t, hbond_liεt + 1, atom_liεt ♦ atom, vector *twig, int n_atomε, int nO, int nl, int n2, int n_twig) { return( d_nonbond_energy(t, atom, twig, n_atomε, nO, nl, n2, n_twig) + d_hbond_energy(1, atom, twig, n_atoms, nO, nl, n2, n_twig) + d_torsion_energy(t, atom, twig, n_atoms, nO, nl, n2, n_twig) ) ; } /* Thiε routine returnε the total energy */ double energy(torsion_list *t, hbond_list + 1, atom_liεt ♦atom, int n_atoms_total) { return( nonbond_energy(t, atom, n_atomε_total) + hbond_energy(1, atom) + torsion_energy(t, atom) ) ; } /♦ Thiε routine returns the Coulomb and LJ energies between the atomε in ♦ atom and the atomε in + twig. The atoms in + twig muεt be thoεe directly following thoεe in ♦atom. */ double d_nonbond_energy(torεion_liεt ♦ t, atom_liεt ♦atom, vector ♦ twig, int n_atomε, int nO, int nl, int n2, int n_twig) { #define FACT 332.06 / ♦ convertε from ei ej/rij to Kcal/mol ♦ / int i, j , k; vector r,- double r2, r6, e, eij, rij , rij3, term, a, b; e = 0.0; for (i=n0,- i<n2; i++) { if (INTERVAL(i,n_atoms,nl) ) continue,- for (j=0; j<n_twig; j++) { r.x = atomti] .poεition. x - twig[j].x; r.y = atomti] .position. y - twig[j] .y; r.z = atomti] .position. z - twig[j].z; r2 = vector_length2 (r) ,- r6 = r2 + r2^r2; eij = εqr (atomfi] ,p->ei * atom[n_atoms+j] .p->ei) ,- rij = 0.5* (atomti] .p->ri + atom[n_atoms+j ] .p->ri) ,- rij 3 = rij*rij*rij ,- a = eij * rij3*rij3*rij3*rij3 ,- b = 2^eij * rij3*rij3; /* epsilon = 4*r ♦/ term = FACT ♦ atomti] .p->charge ♦ atom[n_atomε+j] .p->charge / (4*r2) + a/(r6*r6) - b/r6; e += term; } } /♦ subtract off 1/2 of 1-4 interactions ♦/ for (,- t; t=t->next) { i = t->num[0] ,- j = t->num[3] ,- if (INTERVAL(i,n_atomε,n_atomε+n_twig) ) { k = i; i = j; j = k; } if ( INTERVAL ( j , n_a t omε , n_a t omε + n_twi g ) && ( INTERVAL ( i , nO , n_a omε ) | | INTERVAL (i, nl, n2))) { r.x = atomti] .poεition. x - twig [j -n_at omε] .x,- r.y = atomti] .poεition. y - twig[j-n_atomε] .y,- r.z = atomti] .poεition. z - twig t j -n_atoms] .z; r2 = vector_length2 (r) ,- r6 = r2*r2*r2,- eij = εqrt (atomti] .p->ei * atomtj] .p->ei) ,- rij = 0.5 * (atomti] .p->ri + atomtj ] .p->ri) ,- rij 3 = rij*rij *rij ,- a = eij * rij3*rij3*rij3^rij3,- b = 2^eij ♦ rij3^rij3; term = FACT ♦ atomti] .p->charge * atomtj] .p->charge / (4*r2) + a/(r6*r6) - b/r6; e -= 0.5 * term,- } } return(e) ,- #undef FACT } /* Thiε routine returnε the Coulomb and LJ energieε ♦ / double nonbond_energy(torεion_liεt ♦ t, atom_liεt ♦ atom, int n_atomε_total) { #define FACT 332.06 /* convertε from ei ej/rij to Kcal/mol */ int i, j ,- vector r,- double r2, r6, e, eij, rij, rij3, term, a, b; e = 0.0; for (i=0; i<n_atomε_total; i++) for (j=i+l; j<n_atomε_total; j++) { r.x = atomti] .poεition.x - atomtj] .poεition.x; r.y = atomti] . position. y - atomtj] . position. y,- r.z = atomti] .position, z - atom tj ] .position, z ,- r2 = vector_length2 (r) ,- r6 = r2^r2^r2; eij = εqrt (atomti] .p->ei * atomtj] .p->ei) ,- rij = 0.5* (atomti] .p->ri + atomtj ] .p->ri) ; rij3 = rij^rij^rij; a = eij ♦ rij3*rij3*rij3*rij3 ,- b = 2*eij * rij3*rij3; / ♦ epεilon = 4^r ♦ / term = FACT * atomti] .p->charge * atomtj] .p->charge / (4*r2) + a/(r6*r6) - b/r6; e += term,- } /* subtract off 1/2 of 1-4 interactions */ for (; t; t=t->next) { i = t->num[0] ; j = t->numt3] ,- r.x = atomti] .position. x - atomtj] .position. x,- r.y = atomti] .position. y - atomtj ] . position. y,- r.z = atomti] .position. z - atomtj] .position. z,- r2 = vector_length2 (r) ; r6 = r2*r2*r2; eij = sqrt (atomti] .p->ei * atomtj] .p->ei) ,- rij = 0.5 * (atom[i] .p->ri + atomtj] .p->ri) ,- rij 3 = rij ♦rij ♦rij ,- a = eij ♦ rij3^rij3^rij3^rij3; b = 2^eij * rij3*rij3; term = FACT ♦ atom[i] .p->charge * atomtj] .p->charge / (4 + r2) + a/(r6^r6) - b/r6; e -= 0.5 ♦ term,- } return(e) ; #undef fact } / ♦ Thiε routine returnε the H-bond energy between the atoms in ♦ atom and the atoms in ^twig. The atoms in + twig must be those directly following those in ♦ atom. */ double d_hbond_energy(hbond_list *1, atom_list ♦ atom, vector ♦ twig, int n_atomε, int nO, int nl, int n2, int n_twig) { int i, j ,k,- vector r,- double r2, e,- e = 0.0; for ( ,- 1; l=l->next) { i = l->num[0] ,- j = l->num[l] ,- if (INTERVAL(i,n_atomε,n_atoms+n_twig) ) { k = i, i = j j = k, } if ( INTERVAL ( j , n_a t oms , n_at oms +n_twi g ) & & ( INTERVAL ( i , nO , n_a t oms ) | | INTERVAL ( i , nl , n2 ) ) ) { r.x = atom[i] .position. x - twig [j-n_atoms] .X; r.y = atom[i] .position. y - twig [j -n_atomε] .y, r.z = atomfi] .position. z - twig[j -n_atoms] .z r2 = vector_length2 (r) ,- e += l->p->a / (r2*r2*r2*r2*r2*r2) l->p->b/ (r2*r2*r2^r2^r2) ,- } } return (e) ,- } / ♦ Thiε routine returns the H-bond energy */ double hbond_energy (hbond_list *1, atom_liεt ♦ atom) { vector r,- double r2, e; e = 0.0; for ( ; 1; l=l->next) { r.x = atom[l->num[0] ] . poεition. x - atom[l->num[l] ] . osition. x,- r.y s atom[l->num[0] ] . poεition. y - atom[l->num[l] ] . position. y,- r.z = atom[l->num[0] ] .position. z - atom[l->num[l] ] . position. z,- r2 = vector_length2 (r) ,- e += l->p->a / (r2^r2^r2 + r2^r2^r2) - l->p->b/ (r2^r2^r2^r2 + r2) ,- } return (e) ,- } /* Thiε routine returns the H-bond energy between the atoms in *atom and the atoms in ♦ twig. The atoms in twig muεt be those directly following those in ♦ atom. */ double d_torsion_energy(torεion_list + t, atom_liεt ♦atom, vector ♦ twig, int n_atomε, int nO, int nl, int n2, int n_twig) { int i,j,k,l,- vector v[4] ,- double theta, e, tmp,- e = 0.0; for (,- t; t=t->next) { if (t->p->v0 [0] != 0.0 ! | t->p->v0[l] != 0.0 j | t->p->v0[2] ! = 0.0) { i = t->num[0] ,- j = t->num[l] ,- k = t->num[2] ,- 1 = t->num[3] ,- if (INTERVAL(i,n_atoms+n_twig,nl) i >= n2 no: con inue; if (INTERVAL(j ,n_atoms+n_twig,nl) j >= n2 j < no: continue; if (INTERVAL(k,n_atoms+n_twig,nl) k >= n2 k < no: continue; if (INTERVAL(l,n_atoms+n_twig,nl) 1 >= n2 no: continue; if ( ! (INTERVAL(i,n_atomε,n_atomε+n_twig) INTERVAL(j ,n_atomε,n_atomε+n_twig) INTERVAL(k,n_atomε,n_atoms+n_twig) INTERVAL(1,n_atoms,n_atoms+n_twig) ) ) continue,- / ♦ printf("%d %d %d d", i, j, k, 1); ♦ / if (INTERVAL(i,n_atoms,n_atomε+n_twig) ) v[0] = twig [i-n_a oms] ; else v[0] = atom[i] .position,- if ( INTERVAL (j , n_atoms , n_atomε+n_twig) ) v[l] = twigfj -n_atoms] ,- else v[l] = atomtj ] .poεition; if (INTERVAL (k, n_atomε , n_atomε+n_twig) ) v[2] = twig[k-n_atoms] ,- else v[2] = atomtk] .poεition; if ( INTERVAL (1 , n_atoms , n_atoms+n_twig) ) v[3] = twig[l-n_atoms] ,- else v[3] = atom[l] .position,- theta = torsion(v[0] , v[l] , v[2] , v[3]) ; tmp = (t->p->v0 [0] ♦ (1 + cos ( theta-t->p->phiO t0] ) ) + t->p->v0 [1] ♦ (1 + cos (2 + theta-t->p->phi0 [1] ) ) + t->p->v0 t2] ♦ (1 + cos (3*theta-t->p->phi0 [2] ) ) ) / t->degen,- /* printf (" %lf %lf\n" , theta,tmp) ,- */ e += tmp,- } } return(e) ; } /* Thiε routine returns the torεional energy */ double torsion_energy(torsion_liεt + t, atom_list *atom) { double theta, e, tmp,- e = 0.0; for (,- t; t=t->next) { if (t->p->v0[0] != 0.0 ] | t->p->v0[l] != 0.0 || t->p->v0[2] != 0.0) { theta = t ors ion ( a t om t t - >num t 0 ] ] .poεition, atomtt->num[l] ] .poεition, atom [t->num [2] ] .poεition, atom[t->num[3] ] .poεition) ; tmp = (t->p->v0 [0] * (1 + coε ( theta- t->p->phi0 [0] ) ) + t->p->v0 [1] ♦ (1 + cos(2^theta-t->p->phi0 tl] ) ) + t->p->v0[2] ♦ (1 + cos(3 + theta-t->p->phi0 t2] ) ) ) / t->degen,- / ♦ printf ("Vd %d %d %d %lf %lf\n", t->num[0] , t->num[l], t->num[2] , t->num[3] , theta, tmp) ,- ♦ / e += tmp; } } return (e) ,- } ***************************************************************** MONTE CARLO ROUTINES - PEPTIDE5.C ***************************************************************** /* The Monte Carlo routines */ #include "peptide.h" /* Thiε routine drives the configurational bias Monte Carlo */ void do_mc (rigid_unit *unit, torsion_liεt *t, hbond_list *1, atom_liεt ♦ atom, atom_liεt *atom2, atom_info *atom_tmp, vector *twig[], regrowth *main, regrowth *side, int n_amino_acids, int n_atomε_total, int n_main, int n_εide, logical cyclic) { int list_nuτn, i, j ; double logroεen, e, e2, emin,- vector pO, bO; vector vi,v2; emin = 1.0E99; liεt_num = 0; pO.X = 0.0; pO.y = 0.0; pO.z =* 0.0; bO.X = 0.0; bO.y = 0.0; bO.z = 1.0; e = 0; logroεen = 0,- /* create initial geomeotry */ do_unit (&list_num, 0, n_atoms_total, n_atoms_total, fclogrosen, unit, unit, t, 1, atom, twig, pO, bO, &e) ; /* read in initial geometry */ if (0) read_restart (atom, n_atomε_total) ,- if (cyclic) read_cycle(t, 1, atom, main, εide, twig, n_main, n_εide, n_atomε_total) ; / ♦ do_backbone_f(0, n_main, n_atomε_total, Sdogroεen, main, side, t, 1, atom, twig, &e, TRUE) ,- do_backbone_b(n_main-l, n_main, n_atoms_total, fclogroεen, main, εide, t, 1, atom, twig, &e, TRUE) ; do_backbone_f_rigid(0, n_main, n_atoms_total, fclogroεen, main, εide, t, 1, atom, atom_tmp, twig, &e, TRUE) ,- do_backbone_b_rigid(n_main-l, n_main, n_atoms_total, δdogrosen, main, εide, t, 1, atom, atom_tmp, twig, &e, TRUE); */ emin = e = energy(t, 1, atom, n_atoms_total) ,- /* copy old poεitionε into new */ for (j =0 ,- j <n_atoms_total ; j ++ ) atom2 tj ] = atom tj ] ,- / ♦ do Monte Carlo ♦ / for (i=0; i<16000; i++) { printf ("%d\n",i) ,- rotate_main(atom, atom2, twig, main, side, t, 1, n_main, n_atoms_total, &e) ,- /* regrow_main(t, 1, atom, atom2, atom_tmp, twig, main, side, n_main, n_atoms_total, &e) ,- regrow_side(t, 1, atom, atom2, twig, main, εide, n_εide, n_atomε_total, &e) ,- */ if (e < emin) { emin = e; write_car_f ile (n_amino_acids , n_atomε_total , atom, "min . car" ) ,- } } printf ( "emin %lf \n" , emin) ,- } /* This routine reads in a restart file */ void read_restart(atom_list ♦ atom, int n_atomε_total) { #define LINELEN 200 FILE ♦ fp; int i; char name [30] , line [LINELEN] ; εtrcpy(name, "restart.car" ) ,- if ((fp = fopen(name, "r")) == NULL) { printf ("Data file %ε doeε not exiεt\n", name) ; exit (1) ,- } fgetεdine, LINELEN, fp) ,- fgetεdine, LINELEN, fp) ,- fgetεdine, LINELEN, fp) ; fgetεdine, LINELEN, fp) ,- for (i=0,- i<n_atomε_total ,- i++) { fgetεdine, LINELEN, fp) ,- εεcanfdine, "%s %lf %lf %lf", name, &atom[i] .poεition.x, &atom[i] .position.y, &atom[i] .position, z) ,- } fclose(fp) ; } /* Thiε routine reads in the backbone unitε pluε one εide-chain atom for the geometry CXXXXXXC. It then addε on each of the εide groups randomly */ void read_cycle(torsion_liεt *t, hbond_list *1, atom_list ♦ atom, regrowth ♦ main, regrowth *εide, vector ♦ twig[] , int n_main, int n_εide, int n_atomε_total) { #define LINELEN 200 FILE ♦ fp; int i, j, k, list_num; char name [30] , line [LINELEN] ; double logrosen, e; / ♦ read in loop atoms plus one side group atom ♦ / if (n_main != 2^8+3) { printf ("This cyclic geometry iε not supported\n") ,- exit(l) ; } strcpy(name, "CX6C.car"); if ((fp = fopen(name, "r")) == NULL) { printf ("Data file Vε doeε not exiεt\n", name); exit(1) ,- } fgetεdine, LINELEN, fp) fgetεdine, LINELEN, fp) fgetεdine, LINELEN, fp) fgetεdine, LINELEN, fp) for (i=0; i<n_main,- i++) { /* printf ("%d\n" , main [i] .unit->liεt_num) ; */ for (j=0; j<main [i] .unit- >n_at omε ,- j++) { k = mainfi] .unit->list_num + j ; fgetsdine, LINELEN, fp) ,- εεcanfdine, "%s %lf %lf %lf", name, &atom[k] . position. x, &atom[k] . position. y, &atom[k] .position, z) ,- /* printf ("%d %s %lf %lf %lf \n" ,k,name, atomtk] . poεition. x, atomtk] . poεition. y, atomtk] .position. z) ; */ } if (mainti] .unit->n_bonds == 2) { k++; fgetεdine, LINELEN, fp) ,- sscanfdine, "%s %lf %lf %lf", name, &atom[k] .poεition.x, &atomtk] .poεition.y, &atom[k] .position.z) ; /* printf ("%d %s %lf %lf %lf\n",k,name, atom[k] .position.x, atomtk] .position.y, atomtk] .position.z) ,- */ } } fclose(fp) ; /* add on side groups ♦ / for (i=0; i<n_side,- i++) { liεt_num = side [i] .unit->liεt_num,- do_unit (&liεt_num, 0, n_atomε_total, n_atoms_total, fclogroεen, εide ti] .unit, εide [i] .unit, t, 1, atom, twig, get_εide_pO (atom, εide, i) , get_εide_bO (atom, side, i) , &e) ,- } } /* This routine regrowε from a main chain unit onwards */ void regrow_main(torsion_liεt *t, hbond_liεt *1, atom_list *atom, atom_liεt *atom2, atom_info *atom_tmp, vector ♦ twigt] , regrowth *main, regrowth *side, int n_main, int n_atomε_total, double *e) { logical forward; int list_num, i, j, k; double logrosenl, logrosen2, x, e2 , el; / ♦ pick main group to start regrowth from ♦ / i = n_main*ran2 (1.0) ,- / ♦ pick direction to regrow ♦ / forward = (ran2(1.0) > 0.5) ; printf ( "regrowing %ε from unit %d\n" , (forward) ? "forward" "backward" , i) ,- list_num = mainti] .unit->list_num,- /* copy old poεitions into new */ for (j=0; j<n_atomε_total; j++) atom2 [j] .position atomtj] .position,- /* regrow new peptide */ e2 = 0; logroεen2 = 0.0; if (forward) do_backbone_f_rigid(i, n_main, n_atoms_total, &logrosen2, main, side, t, 1, atom2, atom_tmp, twig, &e2, TRUE) ; else do_backbone_b_rigid(i, n_main, n_atomε_total, &logroεen2, main, εide, t, 1, atom2, atom_tmp, twig, &e2, TRUE) ; e2 = energy(t, 1, atom2, n_atoms_total) ,- / ♦ get old Rosenbluth weight ♦ / list_num = main[i] .unit->list_num,- el = 0.0; logroεenl = 0.0,- if (forward) do_backbone_f_rigid(i, n_main, n_atoms_total, klogroεenl, main, εide, t, 1, atom, atom_tmp, twig, &el, FALSE) ; elεe do_backbone_b_rigi (i, n_main, n_atoms_total, fclogroεenl, main, εide, t, 1, atom, atom_tmp, twig, &el, FALSE) ,- printf("Wn Wo %lf %lf\n",logroεen2, logroεenl) ,- printf("En Eo %lf %lf\n",e2, ♦ e) ,- / ♦ perform acceptance teεt ♦ / x = 1.0; if (logroεenl > logroεen2) x = exp(logroεen2-logrosenl) ,- / ♦ accept new configuration ♦ / if (ran2 (1.0) < x) { for (j=0,- j<n_atomε_total,- j++) atomtj] .poεition atom2 [j] .position,- ♦ e = e2; printf("SWAP\n") ,- } } / ♦ This routine regrows a εide chain */ void regrow_side(torεion_liεt + t, hbond_liεt *1, atom_list ♦ atom, atom_list ♦ atoπώ, vector ♦twigt] , regrowth ♦ main, regrowth ♦ εide, int n_εide, int n_atoms_total, double ^e) { int list_num, i, j, k, nl; double logrosenl, logrosen2, x, e2; if (n_side ==0 ) return; / ♦ pick main group to εtart regrowth from ♦ / i = n_side^ran2 (1.0) ,- printf ("regrowing εide chain %d\n",i) ; liεt_num = εide [i] .unit->liεt_num,- logroεen2 = 0.0; /* copy old poεitions into new ♦ / for (j=0; j<n_atoms_total ,- j++) atom2 [j] .poεition atomtj] .poεition; / ♦ regrow side chain ♦ / e2 = 0; /* determine nl */ n l εideti] .prev->bond tside [i] .prev->n_bonds-l] ->next->liεt_num,- do_unit (&liεt_num, 0, nl, n_atoms_total, &logroεen2, εide [i] .unit, side [i] .unit, t, 1, atom2, twig, get_εide_p0 (atom, εide, i) , get_εide_b0 (atom, εide, i) , &e2) ,- e2 = energy(t, 1, atom2, n_atomε_total) ,- / ♦ get old Roεenbluth weight ♦ / liεt_num = εide ti] .unit->list_num,- logroεenl = 0.0; old_unit (&liεt_num, 0, nl, n_atoms_total, δdogrosenl, side [i] .unit, εide ti] .unit, t, 1, atom, twig, get_side_p0 (atom, side, i) , get_side_b0 (atom, side, i) ) ,- printf ("Wn Wo %lf %lf\n" , logrosen2, logrosenl) ,- printf ("En Eo %lf %lf\n",e2, ♦ e) ,- / ♦ perform acceptance test ♦ / x = 1.0; if (logrosenl > logrosen2) x = exp (logroεen2-logroεenl) ,- / ♦ accept new configuration ♦ / if (ran2 (1.0) < x) { for (j=εide [i] .unit->liεt_num,- j<liεt_num,- j++) atomtj] .poεition = atom2 [j] .poεition; ♦ e = e2; printf ("SWAP\n") ,- } } ***************************************************************** CONCERTED ROTATION ROUTINES - PEPTIDE6.C ***************************************************************** /* The concerted rotation routineε */ #include "peptide.h" /* global variableε */ vector 1 [8] , r[8] ; double thetat8] , mt3] [3] ; logical hea [8J ; / ♦ Thiε routine performε a concerted rotation on part of the main chain. */ void rotate_main(atom_liεt ♦ atom, atom_list ♦ atom2, vector *twig[], regrowth *main, regrowth *side, torsion_list *t, hbond_list *1, int n_main, int n_atomε_total, double ^e) { double jo, jn, logroseno, logrosenn, x, phil, eo, en; int no, nn, i, j, il, i2, iO,- vector q,- logical validt4],- double ρhi2 [4] , phi3 [4] , phi4 [4] , f[4] ; iO = n_main ♦ ran2(l.O); printf("Rotating from poεition %d\n",i0); / ♦ copy atom poεitions to atom2 ♦ / for (i=0; i<n_atoms_total; i++) atom2 [i] .position atomti] .position; /* determine theta, r, 1 */ get_rot_params(atom, main, iO, n_main) ,- / ♦ get original jacobian ♦ / jo = jac(atom, main, iO, n_main) ,- / ♦ get constantε needed by F5 ♦/ F5init(get_main_bO(atom, main, (iO+l) % n_main) , &phil) ,- / ♦ get original Rosenbluth weight ♦ / eo = energy(t, 1, atom, n_atomε_total) ; get_rot_rosenbluth(atom, atom2, twig, main, t, 1, iO, n_main, n_atoms_total, &no, &j , fclogroεeno, &en) ,- printf ("%d\n",no) ; if (no == 0) return,- / ♦ εhould never happen ♦/ /♦ rotate rl and get new conεtantε ♦ / q = rotate_rl (atom, main, iO, n_main) ,- F5init (q, fcphil) ; /♦ get new Roεenbluth weight ♦ / get_rot_rosenbluth(atom, atom2, twig, main, t, 1, iO, n_main, n_atoms_total, &nn, &j , s-logroεenn, &en) ,- printf ("%d\n",nn) ,- if (nn -== 0) return,- / ♦ geometric failure ♦/ /* copy atomic poεitions */ il = main[iO] .unit->liεt_num,- i2 = maint(i0+7) % n_main] .unit->liεt_num,- if (i2 < il) i2 += n_atoms_total,- for (i=il; i<i2; i++) atom2 ti % n_atomε_total] .poεition = twigtj] [i % n_atoms_total] ,- / ♦ determine new Jacobian ♦ / jn = jac(atom2, main, iO, n_main) ,- / ♦ Doroε move ♦ / / ♦ x = exp(-BETA # (en-eo) ) ♦ jn/jo * nn/no,- ♦/ / ♦ CBMC move ♦ / if (logroεenn - logroεeno < -10.0) x = 0.0; elεe if (logroεenn - logroεeno > 10.0) x = 1.0; elεe x = jn/jo ♦ exp(logroεenn - logroεeno); / ♦ decide if move is accepted ♦ / printf ("Wn Wo %lf %lf\n",logrosenn, logroseno) ,- printf ("En Eo %lf %lf\n",en, eo) ; if (ran2 (1.0) < x) { printf ("SWAP\n") ,- ♦ e = en,- / ♦ copy atomic positionε ♦ / il = main[i0] .unit->list_num; i2 = maint(i0+7) % n_main] .unit->liεt_num; if (i2 < il) i2 += n_atomε_total,- for ( i=il ; i<i2 ; i++ ) atom f i % n_atomε_total ] .position = twig tj ] [i % n_atoms_total] ; } elεe ♦e = eo ,- } /+ Thiε routine getε the theta, r, and 1 parameterε ♦ / void get_rot_paramε (atom_liεt ♦ atom, regrowth ♦ main, int iO, int n_main) { int i,- vector t, v, v2,- double len,- rigid_unit *unit, *unit2, *unit3; /* determine theta */ for (i=0; i<8; i++) { unit = maint(i+iO) % n_main] .unit,- thetafi] = vector_dot (unit->head.axiε, unit->bondtunit->n_bonds-l] ->tail.axis) / vector_length(unit->head.axiε) ,- thetati] = (theta [i] < 1.0-EPS) ? acoε (thetati] ) : 0.0; } /* determine r */ for (i=0; i<8; i++) headti] = TRUE; if (fabε(theta[5] ) < EPS) headt5] = FALSE; for (i=0; i<8; i++) { unit = main[(i+i0) % n_main] .unit,- r[i] = atom[unit->liεt_num + ((headti]) ? unit->head.atom_num unit->bond[unit->n_bonds-l] ->tail.atom_num) ] .position,- } /* determine 1 */ for (i=l; i<8; i++) { t.x = r[i].x - r[i-l].x; t.y = r[i] .y - r[i-l] .y,- t.z = rti].z - r[i-l] .z; len = vector_length(t) ; / ♦ if (2.03<len && len <2.05) len = 2.038; t = vector_scale(t, len); ♦/ l[i] .x = len,- l[i] .y = l[i] .z = 0.0; if ( ( (maint (i+iO) % n_main] .prev->type == Cunit) && head[i-l] ) | | !head[i] ) { 1 ti] .x = vector_dot (t , get_main_bO (atom, main, (i+iO) % n_main) ) ; 1 [i] .y = sqrt (len ♦ len - 1 [i] .x * 1 ti] .x) ; } } /* for (i=l; i<8; i++) printf ("%d %lf %lf %lf %lf\n",i, theta ti] , lti] .x, l[i] .y, l[i] .z) ,- for (i=l; i<8; i++) printf ("%d %lf %lf %lf\n",i, r[i] .x, r[i] .y, r[i] .z) ; */ } /* Thiε routine checks the rigid unit theta values */ void check_theta (atom_list ♦ atom, regrowth ♦ main, int n_main) { int i,- vector t, v, v2, r,- double len, theta,- rigid_unit ♦ unit, *unit2, ♦ units,- for (i=0,- i<n_main,- i++) { unit = main[i % n_main] .unit; unit2 = main[i % n_main] .prev,- unit3 = main[(i+l) % n_main] .unit ,- r = atom [unit- >list_num + unit->head.atom_num] .position,- t = atom[unit2->liεt_num + unit2->bond[unit2->n_bondε-l] ->tail .atom_num] .position,- t.x = r.x - t.x,- t.y = r.y - t.y; t.z = r.z - t.z,- printf ( " %lf %lf " , vector_length (t ) , vector_length (unit- >head. axiε) ) ,- v = atom[unit3->list_num + unit3->head.atom_num] .position,- v2 = atom [unit ->list_num + unit- >bond [unit- >n_bonds-l] ->tail.atom_num] .position,- v.x -= v2.x; v.y -= v2.y; v.z -= v2.z; theta = vector_dot (t, v) / (vector_length(v) ♦ vector_length(t) ) ,- theta = (theta < 1.0-EPS) ? acos (theta) : 0.0; printf ("%d %lf ",i, theta),- theta = vector_dot(unit->head.axiε, uni ->bond[unit->n_bondε-l] ->tail.axis) / vector_length(unit->head.axis) ,- theta = (theta < 1.0-EPS) ? acos (theta) : 0.0,- printf ("%lf \n", theta) ,- } } /* This routine determines the Rosenbluth weight ♦ / void get_rot_roεenbluth(atom_liεt ♦ atom, atom_list ♦atom2, vector ♦ twigf], regrowth ♦main, torsion_liεt + t, hbond_liεt ^1, int iO, int n_main, int n_atoms_total, int + , int ♦ j , double *logrosen, double ♦ e) { double phi [MAX_ROOTS] [5] , phil, max, sum, de [MAX_ROOTS] , ftmp; int i, k, kl, k2,- /* get phiO-phil εolutionε */ get_phil (phi, n) ,- if (*n == 0) return,- if ( ♦ n > MAX_ROOTS) { printf ("too many rootε\n"); ♦ n = 0; return; } / ♦ determine energieε of εolutions */ max = -1E99; for (i=0; i< + n,- i++) { get_r(phi[i] [1] , phi[i] [2], phi[i] [3], phi[i] [4]) ; do_rotat ion (atom, twig[i], main, iO, n_main, n_atoms_total) ,- kl = main [iO] .unit- >list_num,- k2 = main[(i0+7) % n_main] .unit->liεt_num,- if (k2 < kl) k2 += n_atoms_total,- for (k=kl; k<k2; k++) atom2 [k % n_atomε_total] .poεition = twig[i] [k % n_atoms_total] ; de[i] = -BETA*energy (t, 1, atom2, n_atoms_total) ,- if (de[i] > max) max = de[i]; } sum = 0.0; for (i=0; i<*n; i++) { de[i] = exp(de[i] - max); sum += de ti] ; } ♦logrosen = log (sum) + max; /* pick winner ♦ / /* Doros move ♦ / /* *j = ^n^ran2 (1.0) ,- ♦ / /* CBMC move ♦ / de[0] /= sum; for (i = l; i< + n,- i++) de[i] = de[i-l] + de[i]/εum; ftmp = ran2 (1.0) ,- for (*j=0; ♦ j<^n; (*j)++) if (ftmp <= de[*j]) break; /* get energy of winner */ ftmp = de [*j] ,- if (*j > 0) ftmp -= de[*j-l],- ftmp *= sum,- *e = - dog(ftmp) +max) /BETA; / ♦ asεign r to the winner ♦ / get_r(phi[*j] [1] , phi [ ♦ j] [2], phi[*j] [3], phi[*j] [4]) ; } /* This routine calculates the jacobian */ double jac(atom_list ♦ atom, regrowth *main, int iO, int n_main) { int i,- vector u[7], h[6], t, v; double b[5] [5] ,- / ♦ form ui and hi ♦ / for (i=l; i<7,- i++) u[i] = get_main_b0 (atom, main, (io + i, %n_main) ,- for (i=l; i<5; i++) h[i] = r[i],- h[5] = atom [main [ (i0+5)%n_main] .unit- >list_num + main [ (i0+5) %n_main] .unit->head.atom_num] .poεition, v.x = r[6] .x - h[5] .x; v.y = r[6] .y - h[5] .y,- v.z = r [6] .z - h[5] .z; v = vector_εcale (v, 1.0) ; /* form B matrix ♦ / for (i=l; i<6; i++) { .x = r [5] .x - h[i] .x; t.y = r[5] .y - h[i] .y; t.z = r [5] .z - h[i] .z; t = vector_croεε (u [i] , t) ,- b[0] [i-1] = t.x; b[l] [i-1] = t.y,- b[2] [i-1] = t.z,- } for (i=l; i<6; i++) { t = vector_cross (u [i] , u[6]) ,- b[3] [i-1] = t.x; b[4] [i-1] = t.y,- } return (1.0/f abε (det5 (b) ) ) ,- } / ♦ This routine rotates phiO to change r[l]. It returnε the new bO for unit iO+1. */ vector rotate_rl (atom_liεt ♦ atom, regrowth ♦ main, int iO, int n_main) { double c, s, y,- vector x, n; /* choose delta phiO ♦ / y = DPHI ♦ (i-2*ran2(l.O) ) ; c = coε (y) ; ε = sin(y) ; n = get_main_bO (atom, main, iO) ,- / ♦ rotate about axis ♦ / x = r[l] ; x.x -= r [0] .X; x.y -= r[0] .y; x.z -= r[0].Z; x = vector_rotate (x, n, c, s) ; r [1] .x = r t0] .x + x.x; rtl] .y » r[0] .y + x.y; r[1] .z = r[0] .z + x.z,- /* compute new bO for unit iO+1 */ return(vector_rotate(get_main_bO (atom, main, (iO+1) % n_main) , n, c, ε) ) ,- } /* This routine constructs r2-r4 from the theta, phi information */ void get_r(double phil, double phi2, double phi3 , double phi4) { int i; vector x, y,- printf ("\n") ,- printf ("%lf %lf %lf %lf %lf\n", phil, phi2, phi3, phi4: 7 x = bxm(m, 1 [1] ) ,- r[l •y = χ -y + r[0] -y; r[l .z = x.z + r [ 0 ] . z ,- x = bxm(m, flory_rot (theta [1] phil, 1[2])) ; r[2 .x = x.x + r[l] .x,- r[2 .y = x.y + r[l] .y,- r[2 .z = x.z + r [ 1 ] . z ,- x = bxm(m, flory_rot (theta [1] phil, f lory_rot (theta [2] , phi2, 1[3] ) ) ; r[3 .x = x.x + r[2] .x,- r[3 .y = x.y + r[2] .y; r[3 .z = x.z + r[2] .z; x = bxm(m, flory_rot (theta [1] , phil, flory_rot (theta [2] , phi2, flory_rot (theta [3] , phi3 , 1 [4] ) ) ) ) ,- r[4 •x = x.x + r [ 3 ] . x ; r[4 .y = x.y + r[3] .y,- r[4 .z = x.z + r[3] .z,- for (i=l; i<7,- i++) printf ("%d %lf %lf %lf\n",i, r[i] .x, r[i] .y, r[i] .z) ,- */ } / ♦ Thiε routine rotateε the rigid unitε to the poεitionε of the concerted rotation. */ void do_rotation(atom_liεt ♦ atom, vector ♦ twig, regrowth ♦ main, int iO, int n_main, int n_atoms_total) { int i, j, il, i2, i3, j2; double m[3] [3], a[3] [3], tmp, len2; vector xl, x2, yl, y2, x; rigid_unit ♦ unit; for (i=-l; i<6; i++) { il = (i+i0+n_main) % n_main,- i2 = (i+iO+1) % n_main,- i3 = (i+iO+2) % n_main; / ♦ get xl & x2 ♦/ l = r [i + 1] ,- x = (i > -1) ? twig [main [il] .unit->bond [main [il] .unit->n_bonds-l] ->tail .atom_num+ main [il] .unit- >list_num] : atom [main [il] .unit->bond [main [il] .unit->n_bonds-l] ->tail .atom_num+ mainfil] .unit->list_num] .poεition; l.x -= x.x,- xl.y -= x.y; xl . z -= X.Z; x2 = atomfmain [i2] .unit->list_num + ((head [i+1]) ? main [i2] .unit ->head. at om_num : main[i2] . unit ->bond [main [i2] .unit->n_bonds-l] ->tail .atom_num) ] .position; x = atom [main [il] .unit->bond[main[il] .unit->n_bonds-l] ->tail .atom_num + mainfil] .unit->list_num] .position,- x2. x - = x.x; x2. y - = x.y; x2. z - = x.z,- / ♦ get rotation matrix ♦/ flory_lab(a, xl, x2) ; / ♦ get yl & y2 ♦/ yl = r[i+2] ; x = (i > -1) ? twig [main [il] .unit- >bond [main [il] .unit->n_bondε-l] ->tail.atom_num+ main [il] .unit->list_num] : atomtmaintil] .unit->bond tmainfil] .unit->n_bondε-l] - >tail . atom_num+ main til] .unit->liεt_num] .position,- yl.x -= x.x,- yl.y -= x.y; yl.z -= x.z,- y2 = atomtmain [i3] .unit- >liεt_num + ((head[i+2]) ? main[i3] .unit->head.atom_num : main [i3] .unit->bond [main E±3 ] .unit->n_bonds-l] ->tail .atom_num) ] .position,- x = atom [main [il] .unit->bond [main [il] .unit->n_bonds-l] ->tail .atom_num + main[il] .unit->liεt_num] .position,- y2.x -= x.x; y2.y -= x.y; y2. z -= x.z,- y2 = mxb(a, y2) ,- / ♦ get projection ♦ / len2 = vector_length2 (xl) ,- tmp = vector_dot (y2, xl) / len2; y2.x -= xl.x * tmp,- y2.y -= xl.y * tmp,- y2. z -= xl.z * tmp,- tmp = vector_dot (yl, xl) / len2 ,- yl.x -= xl.x * tmp,- yl.y -= xl.y * tmp; yl .z -= xl.z * tmp,- / ♦ get rotation matrix ♦ / flory_lab(m, yl, y2) ,- mxm (m, a) ; /* perform rotation */ x 1 atom[main[il] .unit- >bond [main [il] .unit->n_bonds-l] - >tail . atom_num+ main[il] .unit->liεt_num] .position,- x2 = (i > -1) ? twig[main[il] . unit- >bond [main [il] .unit->n_bondε-l] - >tail . atom_num+ main [il] .unit- >list_num] : xl; j2 = main[i3] ,unit->liεt_num; if (i3 == 0) j2 = n_atoms_total,- for (j=main[i2] .unit->list_num; j < j2,- j++) { x = atomtj] .position; X.X - = Xl . X ; x.y -= xl.y; X.Z - = Xl . Z ; x = mxb (m, x) ; x.x += x2.x; x.y + = x2. y ,- x.z += x2. Z; twigtj] •= x; } } } /* This routine determineε the phil-phi3 values */ void get_phil(double phi [MAX_R00TS] [5] , int *n) { #define NTRY 10000 int i, j ,- logical validtNTRY+1] 14] ,- double phil [NTRY+1] , phi2 [4] , phi3 [4] , phi414] ,- double f[NTRY+1] t4] ; ♦ n = 0; i = 0; / ♦ Evaluate F5 ♦ / for (i=0; i<=NTRY; i++) { philfi] = -PI + i + 2 + PI/NTRY; F5(phil[i], phi2, phi3, phi4 , f [i] , valid [i] ) ,- } / ♦ Now search for roots ♦ / for (i=0; i<NTRY; i++) { for (j=0; j<4; j++) { if (!valid[i] tj] i! !valid[i+l] [j] ) continue,- if ((f ti] tj] < 0 && f ti+1] tj] > 0) j I (f ti] tj] > 0 && f [i+1] [j] < 0)) { if ( + n >= MAX_ROOTS) { printf ("Exceεεive number of roots failure in get_phil\n") ; return,- } get_root (phil[i] , phil [i+1] , &phi[*n] [l] , fcphi [*n] [2] , &phi[*n] [3] , &phi[*n] [4] , j) ; ( ♦ n)++; } } } #undef NTRY } / ♦ This routine refines a root using biεection */ void get_root (double xO, double xl, double ^pl, double *p2, double *p3, double *p4, int n) { logical valid [4] ,- double phi214] , phi3 [4] , phi4 [4] , f [4] ; /* order rootε: f(xθ) < 0 &<£ f (xl) > 0 */ F5(xl, phi2, phi3, phi4 , f, valid) ; if (f [n] < 0.0) { ♦ pi = xO; XO = Xl; Xl = *pl; } / ♦ do biεection to refine root */ do { *pl = 0.5* (xl+xO) ,- F5(^pl, phi2, phi3, phi4, f, valid); if (f [n] > 0) xl = *pl; elεe xO = *pi; } while (fabε(xl-xθ) > EPS); ♦ p2 = phi2 [n] ,- ♦ p3 = phi3 [n] ,- ♦ p4 = phi4 [n] ,- } / ♦ constantε ♦ / double clO, ell, cl2, ql2, c20, c21, c22, factl, fact2,- vector xO, u60; / ♦ Thiε routine εets up constants that F5 useε. The conεtantε are independent of phil */ void F5init(vector q2, double *phil) { int i,j ; vector t; double cl, c2, a[3] [3] , tmp,- t.X = 1.0; t.y = t.Z = 0.0; flory_labinv(m, q2, t) ; t.x = rllj .x - rtO] .x; t.y = r[l] .y - r[0] .y,- t.z = r[l] .z r[0] .z; t = tnxb (m, t) ; if (fabε(t.y) < EPS && fabε(t.z) < EPS) { cl = 1.0; C2 = 0.0; } elεe { cl = (l[l] .y*t.y + t.z*l [1] .z) /(t.y*t.y + t.z*t.z) ; c2 = (-l[l] .z*t.y + t.z*l [1] .y) / (t.y*t.y + t.z*t.z) ; if (fabε(cl) < EPS && fabs(c2) < EPS) cl = 1.0; } a[0] [0] = 1; a[0] [l] = 0; a[0] [2] = 0; a[l] [0] = 0; a[l] [1] = Cl; a [1] [2] = C2; at2] t0] = 0; a[2] [l] = -C2; a[2] t2] = Cl ; mxm(a, m) ,- for (j=0; j<3; j++) mti] tj] = a[i] [j] ; t.x = r[2] .x - rfl] .x; t.y = r[2] .y - r[l] .y,- t.z = r[2] .z r[l] .Z; t = mxb(m, t) ,- tmp = (εin(thetatl] )*lt2] .x - cos (theta[l] ) *1 [2] .y) ; ♦phil = atan2 (t.z/tmp, t.y/tmp); xO.x = r[5] .x - r[0] .x; xO.y = rt5] .y - r[0] .y; xO . z = rt5] .z r[0] .Z; xO = mxb(m, xO) ,- xO.x -= 1 [1] .x; xO.y -= ltl] .y; XO.Z -= 1 [1] .Z; if (fabs (theta [5] ) < EPS && fabs (theta [3] ) < EPS) { clO = 1[3] .x*cos(theta[4] ) ; ell = - (cos(theta[2] )*1[3] .x + sin(theta[2] ) *1 [3] .y) ; tmp = εin(thetat2] ) *1[3] .x - cos (theta [2] ) *1 [3] .y ; clO /= tmp; ell /= tmp; } else if (fabs (theta [5] ) < EPS && fabs (theta [3] ) > EPS) { clO = -l[5] .x - 1 [4] .x*cos(theta[4] ) ; ell = - (cos(theta[2] )*1[3] .x + εin (theta [2] ) + 1 [3] .y) ,- cl2 = 1.0/ (εin(thetat2] ) *113] .x - coε (theta 12] ) *l [3] .y) ,- } elεe if (fabs (theta [3] ) > EPS) { t.z = 0.0; t.x = 1 [4] .x^cos(theta[4] ) - 1 [4] .y*sin(theta[4] ) + l[5] .x,- t.y = 1[4] .x*sin(theta[4] ) + 114] .y*coε (theta [4] ) + l[5] .y ; ql2 = vector_length2 (t) ,- clO = ql2 - vector_length2 (1 [3] ) ; ell = 2* (coε (theta [2] ) *113] .x + sin (theta [2] ) *1 [3] .y) ; cl2 = -1.0/(2* (sin(theta[2] )*1[3] .x - coε (theta [2] ) *113] .y) ) ,- } elεe { clO = 113] .x + l[4] .x + 115] .x*coε(theta[4] ) ,- ell = -coε (theta [2] ) ,- tmp = sin(theta[2] ) ; clO /= tmp,- ell /= tmp,- } c20 = vector_length2 (1 [5] ) - vector_length2 (1 [4] ) ,- c21 = 2* (cos(thetat3] )*114] .x + sin(theta [3] ) *1 [4] .y) ,- c22 = -1.0/(2* (sin(thetat3] ) *1 [4] .x - cos (theta 13) ) *1 [4] .y) ) ,- factl = sin(theta[4] )*115] .x - cos (theta [4] ) *115] .y,- fact2 = 1 [6] .x^cos (theta 15] ) + 1 [6] .y*sin(theta [5] ) ,- u60.x = r[6] .x - r[5] .x; u60.y = r[6] .y - r[5] .y,- u60.z = r[6] .z - r[5] .2; } / ♦ Thiε routine returnε the F5 function of Doros. ♦n iε the number of εolutionε, which are in f. */ void F5 (double phil, double phi2 [4] , double phi3 [4] , double phi4[4], double f[4], logical valid[4]) { int i, j ; double tmp, cl, c2; vector vl, ql, q2, x, y, t, u6; double a [3] 13] , rotl[3] [3], rot2[3] [3], rot3[3] [3], rot4[3] [3],- / ♦ determine cl ♦ / valid [0] = valid [1] = valid 12] = valid [3] = FALSE; flory_rot_matrix (theta [1] , phil, rotl) ; x = bxm(rotl, xO) ; x.x -= l[2] .x; x.y -= l[2] .y ; x.z -= l[2] .z,- Vl = X; if (fabs (theta [5] ) < EPS && fabs (theta [3] ) < EPS) { x = bxm(rotl, mxb(m, vector_εcale (u60, 1.0))),- cl = (clO + x.x^cll) / εqrt(x.y^x.y + x.z^x.z),- } else if (fabs (theta 15] ) < EPS && fabs (theta t3] ) > EPS) { x = bxm(m, flory_rot (theta [1] , phil, 1[2])); r[2] .x = x.x + r[l].x; r[2] .y = x.y + rtl] .y,- rt2] .z = x.z + r[l] .z; t.x = rt5].x - r[2] .x; t.y = r[5) .y - r[2] .y ; t.z = rt5] .z - r[2] .z; x = bxm(rotl, mxb(m, vector_εcale (u60, 1.0) ) ) ,- cl = cl2 clO + vector_dot (t, u60) /vector_length(u60) + x.x^cll) / εqrt(x.y^x.y + x.z + x. z) ; } else if (fabs (theta [3] ) > EPS) { cl = cl2 clO - vector_length2 (x) + x.x+cll) / sqrt(x.y^x.y + x.z*x.z) ; } else { cl = (clO + x.x*cll) / sqrt(x.y*x.y + x.z*x.z),- } /* printf ("cl %lf\n",cl); */ if (fabε(cl) > 1) return; / ♦ determine phi2 ♦ / tmp = aεin(cl) ,- phi210] = phi2[2] = -atan (x.y/x. z) ,- if (x.z < 0) phi2[0] = phi2[2] = phi2 [0] - PI; phi2[0] += tmp; phi2 [2] += PI - tmp,- phi2 tl] = phi2 [0] ; phi213] = phi2[2] ; X = Vl; / ♦ determine c2 and phi3 ♦ / for (i=0; i<2; i++) { y = flory_rotinv(theta[2] , phi2[2*i], x) ,- y.x -= l[3].x ; y.y -= l[3] .y; y.z -= l[3] .z ; c2 = c22*(c20 - vector_length2 (y) + y.x*c21) / εqrt(y.y*y.y + y.z*y.z) ,- /* printf ("c2 %lf\n",c2); */ if (fabε(c2) <= 1) { tmp = aεin(c2) ,- phi312^i] = phi3 [2 + i + l] = -atan (y .y/y . z) ,- if (y.z < 0) phi3[2 + i] = phi3 I2*i+1] = phi3 [2*i+l] - PI; phi312 *i] += tmp,- phi3[2*i+l] += PI - tmp,- valid [2^i] = vali [2 + i+l] = TRUE; } } for (i=0; i<4; i++) { if (! valid [i] ) continue,- /* determine r4 ♦ / flory_rot_matrix (theta [2] , phi2 [i] , rot2) ,- flory_rot_matrix(theta[3] , phi3 [i] , rot3) ,- x = mxb(rot3, 1 [4] ) ; x.x += 1 [ 3 ] . ; x.y += 113 ] . y ; x.z += 1 [ 3 ] . z ,- x = mxb (rot2, x) ,- x.x += 112] . x ,- x.y += 1 [ 2 ] . y ,- x.z += 1 [ 2 ] . z ,- x = mxb (rotl, x) ,- x.x + •= 1 [ 1 ] . x ; x.y += 111 ] . y ; x.z += 111 ] . z ,- x = bxm(m, x) ,- x.x += rtO] .x; x.y += r[0] .y; x.z += r[0] .z,- / ♦ determine F5 ♦ / if (fabs (theta [5] ) < EPS && fabs (theta [3] ) < EPS) { vl.x = r [ 6 ] . x - x.x,- vl.y = r[6] .y - x.y; vl.z = r 16 ] . z - X.Z; f[i] = εqrt( (1 [6] .x+l[5] .x)* (1 [6] .x+l[5] .x) + 115] .y*l[5] .y) - vector_length (vl) ,- } elεe if (fabε (theta [5] ) < EPS && fabs (theta [3] ) > EPS) { x = bxm(m, mxb(rotl, mxb(rot2, mxb(rot3, 1[4])))); f [i] = vector_dot (x, u60) / (vector_length(x)*vector_length(u60) ) - cos (theta [4] ) ; } else { x.x = r[5] .x - x.x; x.y = rt5] .y - x.y,- x.z = r[5] .z - x.z,- x = mxb(m, x) ,- x = bxm(rot3, bxm(rot2, bxm(rotl, x) ) ) ; phi4[i] = atan2 (x.z/factl, x.y/factl) ,- u6 = mxb(m, u60) ,- X.X = 1.0; X.y = 0; X.Z = 0; f [i] s vector_dot (u6, mxb(rotl, mxb(rot2, mxb(rot3, flory_rot (theta 14] , phi4 [i] , x) ) ) ) ) f act2 ; } } } ***************************************************************** GEOMETRY/ROTATION ROUTINES - PEPTIDE7.C ***************************************************************** / ♦ The geometry routineε */ #include "peptide.h" /* Thiε routine rotates the vector a about n by theta (counterclockwise iε +) r' = r cos(theta) + (n.r) (l-coε (theta) ) + nxr sin(theta) */ vector vector_rotate(vector a, vector n, double coε_theta, double sin_theta) { double fact; vector ret, v; fact = (n.x*a.x + n.y*a.y + n.z^a.z) ♦ (1.0 - cos_theta) ,- v = vector_cross (n,a) ; ret.x = a.x + coε_theta + n.x^fact + v.x^εin_theta; ret.y = a.y^cos_theta + n.y^fact + v.y^sin_theta, ret.z = a.z^cos_theta + n.z^fact + v.z^sin_theta, return(ret) ; } / ♦ This routine returns main-chain bO i=0 noncyclic caεe should never happen--it won't be right */ vector get_main_bO (atom_liεt *atom, regrowth ♦main, int i) { vector x, y; if (mainti] .prev == NULL) { x.x = x.y = 0.0; x.z = 1.0; return(x) ; } x = a t om t ma i n t i ] . u n i t - > l i s t_num + mainti] .unit->head.atom_num] .position,- y atomtmain[i] .prev->bond[mainti] .prev->n_bondε-l] ->tail .atom_num + mainti] .prev->liεt_num] .poεition; .x.x -= y.x,- χ -y -= y-y; x.z -= y.Z; return(vector_εcale(x, 1.0)),- } / ♦ Thiε routine returns main-chain pO i=0 noncyclic case should never happen--it won't be right */ vector get_main_p0 (atom_liεt *atom, regrowth *main, int i) { vector x; if (mainti] .prev == NULL) { x.x = x.y = x.z = 0.0; return(x) ,- } x atomtmainti] . prev- >bond tmain [i] .prev->n_bonds-l] ->tail .atom_num + mainti] .prev->liεt_num] .position,- return (x) ,- } /* Thiε routine returnε εide-chain bO */ vector get_εide_b0(atom_liεt *atom, regrowth *εide, int i) { vector x, y; x = a t om [ ε i de [ i ] . un i t - > l i s t _num + side[i] .unit->head.atom_num] .position,- y = a t o m [ ε i d e [ i ] . p r e v - > l i s t _ n u m + sideti] .prev->head.atom_num] .position,- x.x -= y.x; x.y -= y.y; x.z - = y . z ,- return (vector_εcale (x, 1.0) ) ; } /* Thiε routine returnε side-chain pO */ vector get_side_pO (atom_liεt ♦ atom, regrowth ♦ εide, int i) { vector x; x = a t om [ s i d e t i ] . p r e v - > l i s t _num + sideti] .prev->head.atom_num] .position,- return (x) ,- } /* This routine gives the Flory rotation matrix */ void flory_rot_matrix(double theta, double phi, double m[3] [3]) { double cost, εint, coεp, εinp,- cost = cos (theta); εint = sin(theta); cosp = cos(phi); εinp = sin (phi) ; m[0] [0] = cost; m[0] tl] = sint; m[0] [2] = 0.0; mtl] [0] = εint*coεp,- m[l] [1] = -cost*coεp,- m[l] [2] = sinp; mt2] [0] = εint*sinp,- mt2] [1] = -cost*sinp,- m[2] [2] = -coεp,- } /* This routine does the Flory rotation */ vector flory_rot(double theta, double phi, vector a) { vector t; double cost, εint, coεp, εinp, tmp; coεt = coε (theta); εint = εin(theta); coεp = coε(phi); εinp = εin(phi); tmp = εint*a.x - coεt*a.y,- t.x = coεt*a.x + εint*a.y; t.y = cosp^tmp + εinp*a.z,- t.z = εinp^tmp - coεp^a.z,- return(t) ,- } / ♦ Thiε routine doeε the inverεe Flory rotation ♦ / vector flory_rotinv(double theta, double phi, vector a) { vector t,- double coεt, --5int, coεp, εinp, tmp,- coεt = cos (theta),- sint = sin(theta); coεp = coε(phi),- εinp = εin(phi),- tmp = coεp^a.y + εinp^a.z t.x = coεt^a.x + εint ♦ tmp; t.y = εint^a.x - coεt^tmp, t.z = εinp^a.y - coεp^a.z, return(t) ; } / ♦ Thiε routine conεtructε the lab tranεformation to go from 1 to r */ void flory_lab(double m[3] [3], vector r, vector 1) { double sin_theta, coε_theta,- vector n,- r = vector_εcale(r, 1.0); 1 = vector_εcale(1, 1.0); n = vector_croεε (1,r) ; coε_theta = vector_dot (1,r) ,- εin_theta = vector_length(n) ,- if (sin_theta < EPS) { n.x = 1.0; } else { n.x /= sin_thetaj n.y /= sin_theta n.z /= sin_theta } τn[0] [0] = coε_theta + n.x*n.x* (l.0-cos_theta) m[0] [1] = n.x*n.y + (l.0-coε_theta) - εin_theta^n.z m[0] 12] = n.x*n.z* (1.0-coε_theta) + sin_theta*n.y mil] [0] = n.y*n.x* (1.0-cos_theta) + sin_theta*n. z m[l] [1] = coε_theta + n.y*n.y* (1.0-cos_theta) mil] [2] = n.y^n. z* (1.0-cos_theta) - sin_theta*n.x m[2] [0] = n. z*n.x* (1.0-coε_theta) - sin_theta*n.y m[2] [l] = n. z*n.y* (1.0-coε_theta) + εin_theta*n.x m!2] [2] = coε_theta + n. z*n. z* (l .0-coε_theta) } /* Thiε routine constructε the inverεe lab tranεformation */ void flory_labinv(double m[3] [3], vector r, vector 1) { double εin_theta, cos_theta,- vector n,- r = vector_scale (r, 1.0) ; 1 = vector_εcale (1 , 1.0) ; n = vector_cross (1 , r) ,- coε_theta = vector_dot (1, r) ,- sin_theta = vector_length(n) ,- if (sin_theta < EPS) { n.x = 1.0; } elεe { n.x /= εin_theta, n.y /= εin_theta, n.z /= εin theta, } m[0] [0] coε_theta + n.x^n.x^ l.0-cos_theta) m[l] [0] n.x^n.y^ 1.0-cos_theta) - sin_theta*n. ∑ m[2] [0] n.x^n.z^ 1.0-cos_theta) + εin_theta*n.y m[0] [l] n.y^n.x^ 1.0-coε_theta) + sin_theta*n. z m[l] [1] coε_theta + n.y^n.y^ 1.0-cos_theta) m[2] [l] n.y^n.z^ 1.0-coε_theta) - εin_theta*n.x m[0] [2] n.z^n.x^ 1.0-coε_theta) - εin_theta*n.y mil] [2] n.z^n.y^ 1.0-coε_theta) + εin_theta*n.x m[2] [2] cos theta + n.z^n.z^ 1.0-cos theta) /* Thiε routine returnε a vector croεε product */ vector vector_croεε (vector a, vector b) { vector ret; ret.x = a.y*b.z - a.z*b.y,- ret.y = a.z*b.x - a.x*b.z,- ret.z = a.x^b.y - a.y^b.x,- return(ret) ,- } /* This function εcaleε the vector v εo that jv| = r */ vector vector_εcale (vector v, double r) { double ftmp,- ftmp = εqrt(v.x*v.x + v.y*v.y + v.z*v.z),- v.x *= r/ftmp, v.y *= r/ftmpi v.z *= r/ftmp; return(v) ,- } /* This routine returns mxn in m void mxm(double m[3] [3] , double n[3] [3]) { int i , j , k ; double a [3] [3] ,- for (i=0; i<3; i++) for (j=0; j<3; j++) { a[i] [j] = 0.0; for (k=0; k<3; k++) a[i] [j] += m[i] [k] *n[k] [j] ,- } for (i=0; i<3; i++) for (j=0; j<3; j++) m[i] [j] = a[i] [j] ; } /* This routine deturns det(m) , where m is 5x5 */ double det5 (double m[5] [5]) { int i , j , k ,- double a[5] [5] , fact; for (i=0; i<5; i++) for (j=0; j<5; j++) a[i] [j] = τn[i] [j] ,- for (i=0; i<4; i++) { for (k=i+l; k<5; k++) { fact = a[k] [i] / a[i] [i] ,- for (j=i; j<5; j++) a[k) [j] -= f act*a [i] [j] ,- } } return (a [0] [0]*a[l] [l]*a[2] [2]*a[3] [3]*a[4] [4] ) ,- } /* Thiε routine returnε det (m) , where m is 3x3 V double det (double m[3] [3]) { return(m[0] [0] *m[l] [1] *m[2] [2] + m[0] [1] *m[l] [2] *m[2] [0] + m[0] [2]*m[l] [0]*m[2] [1] - m[2] [0] ♦ mtl] [1] ♦ m[0] [2] - m[l] 10]^m[0] [l]*m[2] [2] - m[0] [0]*m[2] [l]*m[l] [2]) ; } /* This routine returns Mb */ vector mxb(double m[3] [3] , vector b) { vector t; t.x = mtO] [0]*b.x + m[0] [l]*b.y + m[0] [2] + b.z; t.y = m[l] [0]^b.x + m[l] [l]*b.y + mil] [2]^b.z,- t.z = m[2] [0]*b.x + m[2] [l]*b.y + m[2] [2] + b.z; return (t) ,- } / ♦ This routine returns Mb */ vector bxm(double m[3] [3] , vector b) { vector t; t.x = mtO] [0]*b.x + mil] [0]*b.y + m[2] [0]^b.z ; t.y = m[0] [l]*b.x + mil] [l]*b.y + m[2] [l]*b.z; t.z = mtO] [2] + b.x + mil] [2] + b.y + m[2] [2]*b.z; return (t) ; } /♦ This routine returns bl.b2 */ double vector_dot (vector bl, vector b2) { return(bl.x*b2.x + bl.y*b2.y + bl.z*b2.z); } / ♦ Thiε routine returns |vj */ double vector_length(vector v) { return(sqrt (v.x*v.x + v.y*v.y + v.z*v.z)); } /* Thiε routine returnε |v| A 2 */ double vector_length2 (vector v) { return(v.x*v.x + v.y*v.y + v.z*v.z); } ***************************************************************** RANDOM NUMBER GENERATOR - RANDOM.C *************************************************************** * * * /* Thiε iε the pεeudo-random number library. */ #include <time.h> /* This function returns a random number in [0,1) . It uses a linear-congruential method. ran(0.0) initializes the random number seed with a time dependant value and returns the value of the εeed that the generator recognizeε. ran(1.0) returns the next number in the random sequence. Other arguments initialize the seed with the user-supplied value. Initializing the generator with a seed from the sequence, will cause the subsequent ran(1.0) to generate the next value of the sequence. This is uεefull, for example, to shut down and start up the generator without a loss of continuity in the sequence. Values r 1 or < 0 are not recommended. It has a period of M. */ double ran(double dummy) { static long int ix,- double r = 566927.0, rm2 = 1.0/rm,- long int k = 5701, j = 3621, m = 566927, tmp,- /* make sure parameters not too far off */ if (dummy > 2.0) dummy = 2.0; if (dummy < -2.0) dummy = -2.0; if (dummy != 1.0) { if ( (tmp = dummy ♦ rm) < m) ix = tmp,- elεe ix = m-1; if (ix < 0) ix = 0; } elεe ix = (j*ix + k) % m; return(ix * rm2) ,- } /* Thiε function returns a pεeudo-random number in (0,1) . Thiε is a more robust pseudo-random number generator than a simple linear- congruential gererator is. It uses three linear congruential generators to get one random number. ran2(0.0) initializes the generator with time-dependent values. ran2(l.O) returns a pseudo-random number. Other arguments are used as an initializing seed. Arguments r 1 or s 0 are ill-advised. It has a period of (ml-1) (m2-l) (m3-l)/4. */ double ran2 (double dummy) { double fl=l.0/30269.0 , f2=1.0/30307.0, f3=1.0/30323.0, tmp; int ml=30269, m2=30307, m3=30323, seed, itmp,- εtatic x,y, z,- /* make εure parameters not too far off */ if (dummy > 1.1) dummy = 1.1; if (dummy < -1.1) dummy = -1.1; if (dummy != 1.0) { /* initialize with user's seed value */ if ( (itmp = dummy*ml) < ml) εeed = itmp,- else seed = ml-l; if (seed < 1) seed = 1; /* initialize first generator */ x = seed; /* initialize second generator */ y = 172 * (X % 176) - 35 * (x/176) ; if (y < 0) y += m2; /* initialize third generator */ Z = 170 * (y % 178) - 63 * (y/178) ; if (z < 0) ∑ += m3; } /* first generator */ X = 171 * (X % 177) - 2 * (x/177) ; if (x < 0) x += ml; / ♦ εecond generator */ y = 172 * (y % 176) - 35 * (y/176) ; if (y < 0) y += m2; / ♦ third generator ♦ / Z = 170 ♦ (z % 178) - 63 * (z/178) ; if (z < 0) z += m3; / ♦ amalgamated reεult */ itmp = tmp = x*fl + y*f2 + z*f3; return(tmp - itmp); ***************************************************************** ***************************************************************** C INCLUDE FILES ***************************************************************** ***************************************************************** ***************************************************************** GLOBAL VARIABLE TYPES - PEP TYPE.H ***************************************************************** /* Global types used in the program */ typedef enu {FALSE, TRUE} logical; typedef enum {BAD, G, A, V, L, I, S, T, D, E, N, Q, K, H, R, F, Y, W, C, M, P} acid_label; typedef enum {UNKNOWN, nonCunit, Cunit} unit_label,- typedef struct { double x,y, z; } vector; typedef εtruct { vector axis,- int atom_num; int bond[MAX_BONDS] ,- } connector; typedef εtruct bond_εtruct { connector tail; struct rigid_unit_struct *next; } bond_type,- typedef char *string; typedef struct { char name[NAME_LENGTH] ; char typetNAME_LENGTH] ; double charge, ri, ei; vector position,- acid_label residue,- int reεidue_num; } atom_info,- typedef εtruct rigid__unit_struct { unit_label type,- connector head,- int list_num; int n_bonds,- bond_type ♦♦ bond; int n_atoms,- atom_info ♦ atom; } rigid_unit,- typedef εtruct { atoτn_info ♦ p; vector poεition; } atom_list; typedef struct { char typel 1NAME_LENGTH] , type21NAME_LENGTH] , type31NAME_LENGTH] , type41NAME_LENGTH] ; double vO [3] , phiO [3] ,- } tcrsion_data; typedef εtruct torsion_list_struct { int num14] ,- torsion_data ♦ p,- int degen,- struct torsion_liεt_struct *next; } torsion_list; typedef εtruct { char type1NAME_LENGTH] ; double ri, ei; } lj_data; typedef struct { char typel [NAME_LENGTH] , type2 [NAME_LENGTH] ; double a, b; } hbond_data; typedef struct hbond_list_struct { int num[2] ,- hbond_data ♦ p,- struct hbond_list_struct *next; } hbond_list; typedef εtruct { rigid_unit *unit, *prev,- } regrowth,- ***************************************************************** GLOBAL VARIABLES - PEP_VAR.H ***************************************************************** /* Global variables used in the program */ #if defined(MAIN) #define EXT extern #else #define EXT #endif EXT torεion_data **torsion_data_list,- EXT lj_data **lj_data_list,- EXT hbond_data **hbond_data_list,- #undef EXT ***************************************************************** GLOBAL FUNCTIONS - PEPTIDE.H ***************************************************************** /* Include files needed by peptide code */ #include <εtdio.h> #include <float.h> #include <math.h> #include <fcntl.h> #include <εtdio.h> #include <memory.h> #include <malloc.h> #include <εtring.h> #include <search.h> #include <stdlib.h> #include <errno.h> #include <εtring.h> #include <time.h> #include <varargs.h> / ♦ global constants ♦ / #define BETA 1.6886683 / ♦ kB T at 298K ♦ / #define MAX_BONDS 8 #define PI 3.1415927 #define EPS 1.0E-9 #define NAME_LENGTH 10 #define KMAX 100 #define MAX_ROOTS 100 #define DPHI .01 / ♦ global macros ♦ / #define INTERVAL(a,nl, 2) ((a) >= (nl) && (a) < (n2)) /* Include files relevant to thiε program */ #include "pep_type.h" #include "pep_var.h" /* random.c */ double ran(double dummy),- double ran2 (double dummy) ,- / ♦ peptidel.c ♦ / void out_of_memory(void) ,- void get_sequence(εtring ♦♦ εequence, int ♦ n_peptideε) ,- rigid_unit *read_peptide_data(εtring εequence, int *n_atoms_total, int *max_atoms_per_unit) ,- rigid_unit *read_unit(string file, acid_label label, int residue_num, int *n_atoms_total, int *max_atomε_per_unit) , • void couple_unit (rigid_unit *unitl, rigid_unit ♦ unit2) ,- rigid_unit ♦ modify_cystine_ends (rigid_unit ♦ unit, int n_amino_acidε, int ♦ n_atomε_total) ,- void get_main_side(rigid_unit ♦ unit, regrowth ♦ main, regrowth ♦ εide, int ♦ n^ain, int ♦ n_εide) ,- void read_torεion_data(void) ; void read_lj_data(void) ; void read_hbond_data(void) ; voidwrite_car_file(int n_amino_acidε, int n_atomε_total, atom_liεt ♦ atom, εtring file) ,- εtring getline(εtring line, int len, FILE *fp) ,- void strip(εtring εtring); void decomma(εtring εtring); void capitalize(string ε) ; void amino_acid__code_3 (acid_label label, string code_3) ,- void amino_acid_code_l (acid_label label, char code_l) ,- acid_label amino_acid_code (char code_l) ,- / ♦ peptide2.c ♦ / void initialize_connection_table (int ♦ *bond_table, int n_atoms_total) ; void make_connection_table(int **bond_table, int *table_num, rigid_unit *unit, rigid_unit *start) ; void add_connection(int ♦♦ bond_table, int il, int i2); void print_connection_table(int **bond_table, int n_atoms_total) ; void get_torsions (torsion_liεt **p, int **bond_table, int *table_num, atom_liεt *atom, rigid_unit *unit, rigid_unit ♦ start) ,- torsion_list ♦ add_torεion(int ♦♦ bond_table, atoτ_liεt *atom, int i, int j , int k, int 1) ,- logical lookup_torεion_data(εtring typel, εtring type2, εtring type3, string type4, torsion_data **p) ,- void print_torsions(torεion_list *list, atom_list *atom) ,- double torsion(vector pi, vector p2, vector p3, vector p4) ,- void assign_lj__parameterε(rigid_unit *unit, rigid_unit *εtart) ,- logical lookup_lj_data(string type, double *ri, double *ei) ,- logical lookup_lj_data(string type, double *ri, double ♦ ei) ; void get_hbonds (hbond_list ♦♦ list, atom_list ♦ atom, int n_atoms) ,- logical lookup_hbond_data(string typel, εtring type2, hbond_data **p) ; void print_hbondε(hbond_liεt *1, atom_list ♦ atom) ,- void aεεign_atom__pointerε(int ♦ liεt_num, rigid_unit ♦ unit, rigid_unit ♦ start, atom_list *atom) ,- / ♦ peptide3.c ♦ / void old_unit(int ♦ liεt_num, int nO, int nl, int n2, double ♦ logrosen, rigid_unit *unit, rigid_unit ♦ εtart, torεion_liεt ♦t, hbond_liεt *1, atom_liεt ♦ atom, vector ♦twigt], vector pO, vector bO) ; void do_unit(int ♦ list_num, int nO, int nl, int n2, double ♦ logrosen, rigid_unit ♦ unit, rigid_unit ^εtart, torεion_liεt *t , hbond_liεt *1, atom_liεt ♦ atom, vector ♦ twigt] , vector pO, vector bO, double ♦ e) ,- void do_backbone_f(int i, int n_main, int n_atomε_total, double ♦ logroεen, regrowth ♦ main, regrowth ♦ εide, torεion_liεt + t, hbond_list ^1, atom_liεt ♦ atom, vector ♦ twigt], double ♦ e, logical new) ,- void do_backbone_f_rigid(int i, int n_main, int n_atoms_total, double ♦ logroεen, regrowth ♦ main, regrowth *side, torεion_liεt *t, hbond_list *1, atom_liεt *atom, atom_info *atom_tmp, vector *twig[] , double *e, logical new) ; void do_backbone_b(int i, int n_main, int n_atoms_total, double *logrosen, regrowth *main, regrowth *side, torsion_liεt *t, hbond_list *1, atom_liεt ♦ atom, vector *twig[], double *e, logical new) ; void do_backbone_b_rigid(int i, int n_main, int n_atomε_total, double *logroεen, regrowth *main, regrowth *εide, torsion_list *t, hbond_liεt ^1, atom liεt ♦ atom, atom_info ♦ atom_tmp, vector ♦ twigt] , double ^e, logical new) ,- void do_unit_εub(int *liεt_num, int nO, int nl, int n2, double *logrosen, rigid_unit *unit, torsion_liεt + t, hbond_liεt ^1, atom_list ♦ atom, vector ♦twigf] , vector pi, vector bl, vector pO, vector bO, double ^e, vector p[MAX_BONDS] , vector b[MAX_BONDS] , logical new); void add_rigid_unit(rigid_unit ♦ unit, vector ♦ pos, vector pi, vector bl, vector pO, vector bO, vector point 1MAX_B0NDS] , vector bond[MAX_BONDS] , double coε_theta2, double sin_theta2) ,- vector align(vector p, vector rO, vector rl, vector n, double coε_theta, double sin_theta, vector n2, double cos_theta2, double εin_theta2) ,- /* peptide4.c */ double delta_energy(torεion_liεt *t, hbond_liεt ^1, atom_liεt ♦ atom, vector ♦ twig, int n_atoms, int nO, int nl, int n2, int n_twig) ; double energy(torsion_liεt ♦ t, hbond_liεt *1, atom_liεt *atom, int n_atomε_total) ,- double d_nonbond_energy(torεion_liεt *t, atom_list *atom, vector ♦twig, int n_atoms, int nO, int nl, int n2, int n_ wig) ,- double nonbond_energy(torsion_liεt ♦ t, atom_list ♦atom, int n_atoms_total) ; double d_hbond_energy(hbond_liεt *1, atom_liεt ♦ atom, vector ^twig, int n_atoms, int nO, int nl, int n2, int n_twig) ,- double hbond_energy(hbond_list ^1, atom_liεt ♦atom); double d_torεion_energy(torεion_liεt *t , atom_liεt ♦atom, vector ♦twig, int n_atomε, int nO, int nl, int n2, int n_twig) ; double torsion_energy(torsion_list ♦ t, atom_liεt ♦ atom) ,- /* peptideS.c */ void do_mc(rigid_unit ♦ unit, torεion_list ^t, hbond_list *1, atom_list *atom, atom_liεt *atom2, atom_info *atom_tmp, vector *twig[], regrowth ♦ main, regrowth *εide, int n_amino_acidε, int n_atomε_total, int n_main, int n_εide, logical cyclic) ,- void read_reεtart(atom_liεt ♦ atom, int n_atomε_total) ,- void read_cycle(torsion_list ♦ t, hbond_liεt *1, atom_liεt ♦ atom, regrowth ♦ main, regrowth *εide, vector *twig[], int n_main, int n_εide, int n_atomε_total) ,- void regrow_main(torεion_liεt *t, hbond_list *1, atom_list ♦ atom, atom_list ♦ atom2, atom_info ♦ atom_tmp, vector ♦ twigt], regrowth ♦ main, regrowth *εide, int n_main, int n_atoms_total, double *e) ,- void regrow_εide(torεion_liεt *t, hbond_list *1, atom_liεt ♦atom, atom_liεt *atom2, vector *twigt] , regrowth *main, regrowth *εide, int n_side, int n_atomε_total, double *e) ,- / ♦ peptideδ.c ♦ / void rotate_main(atom_liεt ♦ atom, atom_liεt ♦ atom2, vector *twig[] , regrowth ♦ main, regrowth *εide, torεion_liεt *t, hbond_list *1, int n_main, int n_atoms_total, double ♦ e) ; void get_rot_params(atom_list *atom, regrowth *main, int iO, int n_main) ,- void get_rot_rosenbluth(atom_liεt *atom, atom_liεt *atom2, vector *twig[], regrowth ♦ main, torεion_liεt *t, hbond_liεt +1, int iO, int n_main, int n_atomε_total, int *n, int *j, double ♦ logroεen, double *e) ,- double jac(vector r[7]); vector rotate_rl(atom_liεt *atom, regrowth *main, int iO, int n_main) ,- void get_r(double phil, double phi2, double phi3, double phi , double phi5) ,- void do_rotation(atom_liεt *atom, vector ♦twig, regrowth ♦ main, int iO , int n_main, int n_atomε_total) ; void get_phil (double phi[MAX_ROOTS] [6] , int ♦ n) ; void get_root (double xO, double xl, double + pl, double + p2, double *P3, double # p4, double ♦ pδ, int n) ,- void F5init (vector q2, double ♦ phil); void F5 (double phil, double phi2 [4] , double phi3 [4] , double phi4[4] , double phi5 [4] , double f[4], logical valid[4] ); / ♦ peptide7.c ♦ / vector vector_rotate(vector a, vector n, double coε_theta, double εin_theta) ; vector get_main_bO (atom_liεt ♦ atom, regrowth *main, int i) vector get_main_pO(atom_liεt ♦ atom, regrowth *main, int i) vector get_side_bO (atom_liεt ♦ atom, regrowth ♦ side, int i) vector get_side_pO (atom_liεt ♦ atom, regrowth ♦ side, int i) void flory_rot_matrix(double theta, double phi, double m[3] [3] ) ,- vector flory_rot(double theta, double phi, vector a); vector flory_rotinv(double theta, double phi, vector a) ,- void flory_la (double m[3] [3], vector r, vector 1) ; void flory_labinv(double m[3] [3] , vector r, vector 1) ,- vector vector_cross (vector a, vector b) ,- vector vector_scale (vector v, double r) ,- void mxm(double m[3] [3] , double n[3] [3] ) ,- double det5 (double m[5] [5] ) ,- double det(double m[3] [3] ) ,- vector mxb(double m[3] [3] , vector b) ,- vector bxm(double mt3] [3], vector b) ; double vector_dot(vector bl, vector b2) ,- double vector_length(vector v) ; double vector_length2 (vector v) ; ***************************************************************** ***************************************************************** DATA FILES DEFINING GEOMETRIC STRUCTURE ***************************************************************** ***************************************************************** **************************************************************** DATA FILE FOR UNIT A - UNITA.DAT ***************************************************************** ! data file for rigid unit A--the NH2 terminuε l !rigid unit in thiε εtructure ! ATOM INFORMATION ! rigid unit 0 3 !atomε in thiε rigid unit N 0.039039567 -0.028048204 0.000005808 ALAn 1 NT N -0.463 HN1 -0.294595420 0.946419656 0.000007165 ALAn 1 H H 0.126 HN2 -0.309849501 -0.509882152 -0.840834498 ALAn 1 H H 0.126 ! BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming bond--doeεn' t mean anything, but muεt not be 1 0 0 .00000001 ibeginning of incoming bond -- juεt an overall diεplacement 1 !bond out from thiε unit -1 !don't know which unit thiε bond goeε to 0 1 2 -1 -1 Ibeginning of outgoing backbone bond 1.498959541 -0.043336947 -0.000000042 lending of outoing bond ***************************************************************** DATA FILE FOR UNIT B - UNITB.DAT ***************************************************************** ! data file for rigid unit B--the CH alpha carbon unit 1 !rigid unit in thiε structure ! ATOM INFORMATION ! rigid unit 0 2 !atoms in this rigid unit CA 4.047343731 2.755753756 -0.000011837 ALA 2 CT C 0.035 HA 3.779272556 3.294512749 -0.928205431 ALA 2 HC H 0.032 ! BOND INFORMATION ! rigid unit 0 0 1 -1 -1 -1lending of incoming backbone bond 3.370934725 1.461895347 -0.000009674 Ibeginning of incoming backbone bond 2 'bonds out from thiε unit -1 Idon't know which unit this bond goes to 0 1 -1 -1 -1 Ibeginning of outgoing side-chain bond 3.538550615 3.547572851 1.217100978 lending of outgoin εide-chain bond -l Idon't know which unit thiε bond goes to 0 l -1 -1 -1Ibeginning of outgoing backbone bond 5.547336102 2.582198620 -0.000015057 lending of outgoing backbone bond ***************************************************************** DATA FILE FOR UNIT C - UNITC.DAT ***************************************************************** 1 data file for rigid unit C--the OCNH amide bond unit 1 'rigid unit in thiε εtructure ! ATOM INFORMATION ! rigid unit 0 4 !atomε in thiε rigid unit C 2.054825068 1.360626340 0.000001071 ALAn 1 C C 0.616 0 1.320880890 2.356072187 0.011419594 ALAn 1 0 0 -0.504 N 3.370934725 1.461895347 -0.000009674 ALA 2 N N -0.463 HN 3.917454243 0.530382395 -0.000003380 ALA 2 H H 0.252 ! BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming main-chain bond 1.498959541 -0.043336947 -0.000000042 Ibeginning of incoming main-chain bond 1 ibond out from thiε unit -1 Idon't know which unit this bond goes to 2 0 3 -1 -1 Ibeginning of outgoing main-chain bond 4.047343731 2.755753756 -0.000011837 lending of outging main-chain bond ***************************************************************** DATA FILE FOR UNIT D - UNITD.DAT **************************************************************** 1 data file for rigid unit D--the HCO terminus 1 1rigid unit in thiε structure 1 ATOM INFORMATION 1 rigid unit 0 3 1atomε in this rigid unit C 8.274295807 5.082911491 -0.000008575 ALAN 3 C C 0.616 HC 9.361082077 5.166533947 -0.000010758 ALAN 3 HC H 0.000 0 7.540351391 6.078356743 0.011415332 ALAN 3 0 0 -0.504 1 BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming main-chain bond 7.718430996 3.678948641 -0.000013665 Ibeginning of incoming main-chain bond 0 Ibondε out from thiε unit ************************************************************* DATA FILE FOR ALANINE - A.DAT ************************************************************* 1 The side-chain εtructure file for Alanine 1 1rigid unit in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 4 !atomε in thiε rigid unit CB 3.178086281 3.790203094 1.217109203 ALA CT C -0.098 HB1 3.502361059 4.845792770 1.274110079 ALA HC H 0.038 HB2 2.072028160 3.800241470 1.180677295 ALA 2 HC H 0.038 HB3 3.465983868 3.309211969 2.172164917 ALA 2 HC H 0.038 1 BOND INFORMATION 1 rigid unit 0 0 1 2 3 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634676 -0.000003090 Ibeginning of bond for unit 0 0 Ibondε out from rigid unit 0 ************************************************************ DATA FILE FOR CYSTEINE - C.DAT ************************************************************* ! The εide-chain εtructure file for Cysteine 1 Do not modify the atom order in thiε file 2 !rigid unitε in εide-chain 1 ATOM INFORMATION ! rigid unit 0 3 1atomε in thiε rigid unit CB 3.185384274 3.813543320 1.210355163 CYSH 2 CT C -0.060 HB1 2.082855701 3.742515087 1.217666388 CYSH 2 HC H 0.038 HB2 3.528102398 3.371057510 2.168041706 CYSH 2 HC H 0.038 ! rigid unit 1 4 ! tomε in thiε rigid unit SG 3.628824234 5.564641953 1.168115854 CYSH 2 SH S 0.827 LG1 2.774378061 6.223292828 1.382826447 CYSH 2 LP L -0.481 LG2 4.018448353 5.879447937 0.188784361 CYSH 2 LP L -0.481 HG 4.543437004 5.521058083 2.133599997 CYSH 2 HS H 0.135 ! BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634914 -0.000003354 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 iε bonded to unit 1 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.628824234 5.564641953 1.168115854 lending of outgoing bond for unit 0 1 rigid unit 1 0 1 2 3 -1 lending of incoming bond for unit 1 and nn 3.185384274 3.813543320 1.210355163 Ibeginning of bond for unit 1 0 Ibondε out from rigid unit 1 ********************************************************** DATA FILE FOR ASPARTATE - D.DAT *********************************************************** 1 The εide-chain εtructure file for Aεpartate 2 1rigid unitε in εide-chain ! ATOM INFORMATION 1 rigid unit 0 3 1atomε in thiε rigid unit CB 3.195193052 3.859569550 1.198083878 ASP 2 CT C -0.398 HB1 2.099623203 3.734851122 1.256908774 ASP 2 HC H 0.071 HB2 3.574837923 3.424842119 2.144523859 ASP 2 HC H 0.071 1 rigid unit 1 3 1atomε in thiε rigid unit CG 3.488366127 5.366341114 1.240691185 ASP 2 C C 0.714 OD1 3.752036572 5.965095997 2.273211718 ASP 2 02 0 -0.721 0D2 3.445515871 5.949848175 0.005213364 ASP 2 02 0 -0.721 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003352 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 iε bonded to unit l 0 1 2 -1 -1 1 beginning of outgoing bond and nn 3.488366127 5.366341114 1.240691185 !ending of outgoing bond for unit 0 1 rigid unit 1 0 1 2 -1 -1 lending of incoming bond for unit 1 and nn 3.195193052 3.859569550 1.198083878 Ibeginning of bond for unit 1 0 1bonds out from rigid unit 1 ********************************************************* DATA FILE FOR GLUTAMINE - E.DAT ********************************************************* 1 The εide-chain structure file for Glutamine 3 !rigid units in side-chain ! ATOM INFORMATION 1 rigid unit 0 3 1 tomε in thiε rigid unit CB 3.210191727 3.806770086 1.242457986 GLU 2 CT C -0.184 HB1 3.453276873 4.884052753 1.160096049 GLU 2 HC H 0.092 HB2 2.103818655 3.775332928 1.193925381 GLU 2 HC H 0.092 1 rigid unit 1 3 1atoms in this rigid unit CG 3.670672178 3.303917646 2.650651217 GLU 2 CT C -0.398 HG1 3.495624304 2.214699984 2.732162237 GLU 2 HC H 0.071 HG2 4.766538143 3.410970449 2.754028797 GLU 2 HC H 0.071 ! rigid unit 2 3 1atomε in thiε rigid unit CD 3.044564962 3.944746017 3.891577959 GLU 2 C C 0.714 OE1 3.318646908 3.594962835 5.031950951 GLU 2 02 0 -0.721 OE2 2.157183647 4.937835217 3.607111931 GLU 2 02 0 -0.721 1 BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003351 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 iε bonded to unit 1 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.670672178 3.303917646 2.650651217 1ending of outgoing bond for unit 0 1 rigid unit 1 0 1 2 -1 -1 lending of incoming bond for unit 1 and nn 3.210191727 3.8067 * 70086 1.242457986 Ibeginning of bond for unit 1 1 1bonds out from rigid unit 1 2 lunit 1 is bonded to unit 2 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.044564962 3.944746017 3.891577959 1ending of outgoing bond for unit 1 ! rigid unit 2 0 1 2 -1 -1 lending of incoming bond for unit l and nn 3.670672178 3.303917646 2.650651217 [beginning of bond for unit 2 0 1bonds out from rigid unit 2 ******************************************************** DATA FILE FOR PHENYLALANINE - F.DAT ********************************************************* 1 The side-chain εtructure file for Phenylalanine 2 1rigid unitε in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 3 !atomε in thiε rigid unit CB 3.271046400 3.829343796 1.261018753 PHE 2 CT C -0.100 HB1 3.711064339 3.375446320 2.172759056 PHE 2 HC H 0.108 HB2 3.680548668 4.858696938 1.261503935 PHE 2 HC H 0.108 I rigid unit 1 II 1atomε in thiε rigid unit CG 1.746863961 3.913921356 1.435816050 PHE 2 CA C -0.100 CDl 1.070973635 2.894981861 2.116770267 PHE 2 CA C -0.150 HD1 1.621361971 2.061387062 2.533305407 PHE 2 HC H 0.150 CD2 1.019180536 4.963639259 0.869901121 PHE 2 CA C -0.150 HD2 1.528048277 5.750367641 0.331381440 PHE 2 HC H 0.150 CE1 -0.315989435 2.915796280 2.214086056 PHE 2 CA C -0.150 HE1 -0.830357015 2.108316422 2.715482712 PHE 2 HC H 0.150 CE2 -0.369023502 4.989082813 0.977358818 PHE 2 CA C -0.150 HE2 -0.928361893 5.798536777 0.531342983 PHE 2 HC H 0.150 CZ -1.036266327 3.964326382 1.646436572 PHE 2 CA C -0.150 HZ -2.113304853 3.975853443 1.718335271 PHE 2 HC H 0.150 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586264 3.069634914 -0.000003353 Ibeginning of bond 1 Ibondε out 1 lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.746863961 3.913921356 1.435816050 lending of outgoing bond 1 rigid unit 1 0 1 3 -1 -1 lending of incoming bond and nn 3.271046400 3.829343796 1.261018753 Ibeginning of bond 0 1bondε out *********************************************************** DATA FILE FOR GLYCINE - G.DAT ************************************************************* 1 The εide-chain εtructure file for Glycine 1 1rigid unit in εide-chain ! ATOM INFORMATION ! rigid unit 0 1 latom in thiε rigid unit HA2 2.054570675 -0.518772364 -0.887896836 GLYN 1 HC H 0.032 1 BOND INFORMATION 1 rigid unit 0 0 -1 -1 -1 -1 lending of incoming bond for unit 0 and nn 1.612465143 -0.031237146 -0.000000015 Ibeginning of incoming bond for unit 0 0 Ibondε out from rigid unit 0 *********************************************************** DATA FILE FOR HISTIDINE - H.DAT ********************************************************** 1 The side-chain structure file for Histidine 2 1rigid unitε in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atomε in thiε rigid unit CB 3.239844084 3.731920242 1.277127385 HIS 2 CT C -0.098 HB1 2.644425392 3.025787830 1.893024564 HIS 2 HC H 0.038 HB2 4.064783096 4.071127415 1.934927344 HIS 2 HC H 0.038 1 rigid unit 1 8 1atoms in thiε rigid unit CG 2.370461226 4.918142319 0.978080690 HIS 2 CC C 0.251 ND1 2.062596560 5.403582573 -0.290515751 HIS 2 NB N -0.502 CE1 1.272076607 6.440367222 0.045922592 HIS 2 CR C 0.241 NE2 1.048720956 6.674089432 1.367565274 HIS 2 NA N -0.146 CD2 1.767608762 5.675839901 1.972463250 HIS 2 CW C -0.184 HE1 0.858503580 7.036557198 -0.757577479 HIS 2 HC H 0.036 HE2 0.480951071 7.411210537 1.809884906 HIS 2 H H 0.228 HD2 1.867301583 5.485908508 3.037219763 HIS 2 HC H 0.114 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003353 Ibeginning of bond for unit 0 1 1bonds out from rigid unit 0 1 lunit 0 is bonded to unit 1 0 1 2 -1 -1 ! beginning of outgoing bond and nn 2.370461226 4.918142319 0.978080690 lending of outgoing bond for unit 0 1 rigid unit 1 0 1 4 -1 -1 lending of incoming bond for unit 1 and nn 3.222899199 3.830397844 1.236912012 Ibeginning of bond for unit 1 0 Ibondε out from rigid unit 1 *********************************************************** DATA FILE FOR ISOLEUCINE - I.DAT ************************************************************** ! The εide-chain εtructure file for Iεoleucine 4 1rigid units in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 2 1atomε in thiε rigid unit CB 3.184130907 3.905461311 1.203313947 ILE 2 CT C -0.012 HB 3.579479933 3.448693275 2.135145664 ILE 2 HC H 0.022 1 rigid unit 1 4 1atomε in thiε rigid unit CG2 3.632628202 5.399640560 1.184555411 ILE 2 CT C -0.085 HG21 3.256929159 5.962747097 2.057613134 ILE 2 HC H 0.029 HG22 4.728721142 5.525658131 1.229067683 ILE 2 HC H 0.029 HG23 3.277012348 5.929985046 0.281316549 ILE 2 HC H 0.029 1 rigid unit 2 3 1atomε in thiε rigid unit CGI 1.625806093 3.868085861 1.310235620 ILE 2 CT C -0.049 HG11 1.169472456 4.395492077 0.450418025 ILE 2 HC H 0.027 HG12 1.273633957 2.823534966 1.211708426 ILE 2 HC H 0.027 1 rigid unit 3 4 1atomε in thiε rigid unit CDl 1.028863907 4.391342163 2.632859945 ILE 2 CT C -0.085 HD11 -0.068560459 4.262083530 2.654643297 ILE 2 HC H 0.028 HD12 1.436750174 3.852109432 3.508637428 ILE 2 HC H 0.028 HD13 1.222232699 5.468014240 2.787941933 ILE 2 HC H 0.028 1 BOND INFORMATION 1 rigid unit 0 0 1 -l -l -l lending of incoming bond and nn 3.783586502 3.069634438 -0.000003350 Ibeginning of bond 2 Ibondε out 1 lunit bonded to 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 3.632628202 5.399640560 1.184555411 lending of outgoing bond 2 lunit bonded to 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 1.625806093 3.868085861 1.310235620 lending of outgoing bond ! rigid unit 1 0 1 2 3 -1 lending of incoming bond and nn 3.184130907 3.905461311 1.203313947 Ibeginning of incoming bond 01 bonds out 1 rigid unit 2 0 1 2 -1 -1 lending of incoming bond and nn 3.184130907 3.905461311 1.203313947 Ibeginning of incoming bond 1 Ibondε out 3 lunit bonded to 0 1 2 -1 -1 ! beginning of outgoing bond and nn 1.028863907 4.391342163 2.632859945 lending of outgoing bond 1 rigid unit 3 0 1 2 3 -1 lending of incoming bond and nn 1.625806093 3.868085861 1.310235620 Ibeginning of bond 0 1bonds out ************************************************************ DATA FILE FOR LYSINE - K.DAT ************************************************************* 1 The side-chain structure file for Lysine 5 !rigid units in side-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atomε in thiε rigid unit CB 3.218223095 3.829745770 1.231236458 LYS 2 CT C - 0 . 098 HB1 2.112416506 3.764609814 1.234413505 LYS HC H 0.038 HB2 3.536234617 3.317805290 2.163102627 LYS HC H 0.038 1 rigid unit 1 3 1atomε in this rigid unit CG 3.638167858 5.320005417 1.281187057 LYS CT C -0.160 HG1 4.741127968 5.406830788 1.274424553 LYS HC H 0.116 HG2 3.295989990 5.833013058 0.360635072 LYS HC H 0.116 1 rigid unit 2 3 1 atomε in thiε rigid unit CD 3.153400660 6.084614754 2.516160011 LYS CT C -0.180 HD1 2.046517849 6.074027538 2.552636147 LYS HC H 0.122 HD2 3.501233101 5.571547031 3.435809374 LYS HC H 0.122 1 rigid unit 3 3 1atomε in this rigid unit CE 3.699187756 7.518018246 2.469964743 LYS CT C -0.038 HE1 4.805956841 7.515174866 2.558616400 LYS 2 HC H 0.098 HE2 3.475801945 8.000639915 1.495867610 LYS 2 HC H 0.098 1 rigid unit 4 4 1atoms in this rigid unit 8.306216240 3.560437918 LYS 2 9.268757820 3.530759573 LYS 2 8.324481964 3.447653770 LYS 2 7.877095222 4.466163158 LYS 2 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586502 3.069634914 -0.000003353 Ibeginning of bond 1 1bonds out l lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 3.638167858 5.320005417 1.281187057 lending of outgoing bond ! rigid unit 1 0 1 2 -1 -1 lending of incoming bond and nn 3.218223095 3.829745770 1.231236458 Ibeginning of bond 1 1bondε out 2 lunit bonded to 0 1 -1 -1 1 beginning of outgoing bond and nn 3.153400660 6.084614754 2.516160011 lending of outgoing bond 1 rigid unit 2 0 1 2 -1 -1 lending of incoming bond and nn 3.638167858 5.320005417 1.281187057 Ibeginning of bond 1 1bondε out 3 lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 3.699187756 7.518018246 2.469964743 lending of outgoing bond 1 rigid unit 3 0 1 2 -1 -1 lending of incoming bond and nn 3.153400660 6.084614754 2.516160011Ibeginning of bond 1 Ibondε out 4 lunit bonded to 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.098134756 8.306216240 3.560437918 lending of outgoing bond 1 rigid unit 4 0 1 2 3 -1 lending of incoming bond and nn 3.699187756 7.518018246 2.469964743 Ibeginning of bond 0 Ibondε out ************************************************************* DATA FILE FOR LEUCINE - L.DAT *************************************************************** ! The εide-chain structure file for Leucine 4 1rigid units in side-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atoms in this rigid unit CB 3.217977524 3.860693455 1.213688374 LEU 2 CT C -0.061 HB1 3.617908239 3.413237095 2.146348953 LEU 2 HC H 0.033 HB2 3.641148329 4.884153843 1.193638206 LEU 2 HC H 0.033 ! rigid unit 1 2 1atoms in this rigid unit CG 1.676206470 3.974944353 1.357627273 LEU 2 CT C -0.010 HG 1.273801684 2.962582827 1.570222020 LEU 2 HC H 0.031 1 rigid unit 2 4 1atoms in this rigid unit CDl 1.322771311 4.880306721 2.545703411 LEU 2 4.936426640 2.704123735 LEU 2 4.507015228 3.491832256 LEU 5.916738033 2.406197309 LEU 2 1 rigid unit 3 4 1atoms in thiε rigid unit CD2 0.998154640 4.504262924 0.083184890 LEU 2 CT C -0.107 HD21 -0.093163513 4.622812748 0.214309067 LEU 2 HC H 0.034 HD22 1.406615853 5.481475830 -0.234147355 LEU 2 HC H 0.034 HD23 1.130140185 3.802904606 -0.761629283 LEU 2 HC H 0.034 1 BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586502 3.069634438 -0.000003367 Ibeginning of bond 1 1bondε out 1 lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.676206470 3.974944353 1.357627273 1ending of outgoing bond 1 rigid unit 1 0 1 -1 -1 -1 lending of incoming bond and nn 3.184130907 3.905461311 1.203313947 Ibeginning of incoming bond 21 bondε out 2 lunit bonded to 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 1.322771311 4.880306721 2.545703411 lending of outgoing bond 3 lunit bonded to 0 1 -1 -1 -1 l beginning of outgoing bond and nn 0.998154640 4.504262924 0.083184890 lending of outgoing bond 1 rigid unit 2 0 1 2 3 -1 1ending of incoming bond and nn 1.676206470 3.974944353 1.357627273 Ibeginning of incoming bond 0 Ibondε out 1 rigid unit 3 0 1 2 3 -1 1ending of incoming bond and nn 1.676206470 3.974944353 1.357627273 [beginning of bond 0 !bondε out ************************************************************ DATA FILE FOR METHIONINE - M.DAT ************************************************************ 1 The εide-chain εtructure file for Methionine 4 1rigid unitε in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atomε in thiε rigid unit CB 3.219568014 3.840672970 1.225060582 MET 2 CT C -0.151 HB1 3.547865868 3.348565578 2.163037539 MET 2 HC H 0.027 HB2 3.671003819 4.850576401 1.262409329 MET 2 HC H 0.027 1 rigid unit 1 3 1atoms in thiε rigid unit CG 1.685955524 4.011272907 1.265707970 MET 2 CT C -0.054 HG1 1.291312337 4.382569790 0.302083224 MET 2 HC H 0.0652 HG2 1.199923158 3.034499168 1.452733874 MET 2 HC H 0.0652 1 rigid unit 2 3 1atomε in thiε rigid unit SD 1.234688163 5.162067413 2.574714422 MET 2 S S 0.737 LD1 1.486726403 6.202064514 2.319993973 MET 2 LP L -0.381 LD2 1.747960329 4.937880516 3.521441460 MET 2 LP L -0.381 1 rigid unit 3 4 latomε in thiε rigid unit CE -0.532971203 4.837210655 2.617241383 MET 2 CT C -0.134 HE1 -0.987815082 4.991072178 1.622043610 MET 2 HC H 0.0652 HE2 -1.033426285 5.510134220 3.335405111 MET 2 HC H 0.0652 HE3 -0.725545764 3.794905424 2.929581165 MET 2 HC H 0.0652 ! BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586502 3.069634438 -0.000003354 Ibeginning of bond 1 1 bonds out 1 lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.685955524 4.011272907 1.265707970 lending of outgoing bond 1 rigid unit 1 0 1 2 -1 -1 lending of incoming bond and nn 3.219568014 3.840672970 1.225060582 Ibeginning of bond 1 1bonds out 2 lunit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.234688163 5.162067413 2.574714422 lending of outgoing bond 1 rigid unit 2 0 1 2 -1 -1 lending of incoming bond and nn 1.685955524 4.011272907 1.265707970 Ibeginning of bond 1 1bonds out 3 lunit bonded to 0 1 2 -1 -1 ! beginning of outgoing bond and nn -0.532971203 4.837210655 2.617241383 lending of outgoing bond 1 rigid unit 3 0 1 2 3 -1 lending of incoming bond and nn 1.234688163 5.162067413 2.574714422Ibeginning of bond 0 1bondε out **************************************************************** DATA FILE FOR APSARAGINE - N.DAT ************************************************************** 1 The εide-chain εtructure file for Aεparagine 2 !rigid units in εide-chain ! ATOM INFORMATION ! rigid unit 0 3 !atomε in thiε rigid unit CB 3.222899199 3.830397844 1.236912012 ASN 2 CT C -0.086 HB1 3.611397266 3.364436865 2.163546562 ASN 2 HC H 0.038 HB2 3.616078854 4.863478184 1.264652491 ASN 2 HC H 0.038 1 rigid unit 1 5 1atomε in thiε rigid unit CG 1.698638678 3.892561436 1.381467938 ASN 2 C C 0.675 OD1 1.085211635 3.155725241 2.139311790 ASN 2 0 0 -0.470 ND2 1.031797171 4.746669292 0.652490914 ASN 2 N N -0.867 HD21 0.019928589 4.602556705 0.711063743 ASN 2 H H 0.344 HD22 1.562326550 5.282481670 -0.034363598 ASN 2 H H 0.344 ! BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003353 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 iε bonded to unit 1 0 1 2 -1 -1 ! beginning of outgoing bond and nn 1.698638678 3.892561436 1.381467938 lending of outgoing bond for unit 0 ! rigid unit 1 0 1 2 -1 -1 lending of incoming bond for unit 1 and nn 3.222899199 3.830397844 1.236912012 Ibeginning of bond for unit 1 0 Ibondε out from rigid unit l ************************************************************** DATA FILE FOR GLUTAMINE - Q.DAT **************************************************************** 1 The side-chain εtructure file for Glutamine 3 1rigid unitε in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atoms in thiε rigid unit CB 3.221223593 3.805351734 1.236027122 GLN 2 CT C -0.098 HB1 2.115758896 3.733683825 1.223282218 GLN 2 HC H 0.038 HB2 3.538368225 3.258102417 2.148239136 GLN 2 HC H 0.038 1 rigid unit 1 3 1atoms in thiε rigid unit CG 3.619170427 5.311230183 1.384292126 GLN 2 CT C -0.102 HG1 4.719832420 5.417502403 1.395145655 GLN 2 HC H 0.057 HG2 3.298108339 5.879051685 0.491232127 GLN 2 HC H 0.057 1 rigid unit 2 5 1atoms in this rigid unit CD 3.148421526 6.090956688 2.618209839 GLN 2 C C 0.675 OE1 3.471138716 7.255728722 2.789397001 GLN 2 0 0 -0.470 NE2 2.408394814 5.500250816 3.521779537 GLN 2 N N -0.867 HE21 2.231919527 4.508390427 3.353902817 GLN 2 H H 0.344 HE22 2.192787886 6.069860935 4.342392445 GLN 2 H H 0.344 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003353 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 iε bonded to unit 1 0 1 2 -1 -1 l beginning of outgoing bond and nn 3.619170427 5.311230183 1.384292126 lending of outgoing bond for unit 0 1 rigid unit 1 0 1 2 -1 -1 lending of incoming bond for unit 1 and nn 3.221223593 3.805351734 1.236027122 Ibeginning of bond for unit 1 1 Ibondε out from rigid unit 0 2 lunit 1 iε bonded to unit 2 0 1 2 -1 -1 1 beginning of outgoing bond and nn 3.148421526 6.090956688 2.618209839 lending of outgoing bond for unit 2 1 rigid unit 2 0 1 2 -1 -1 lending of incoming bond for unit 2 and nn 3.619170427 5.311230183 1.384292126 Ibeginning of bond for unit 2 0 Ibondε out from rigid unit 2 ************************************************************* DATA FILE FOR ARGININE - R.DAT ************************************************************** 1 The side-chain structure file for Arginine 4 1rigid unitε in side-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atoms in this rigid unit CB 3.207483053 3.819248199 1.232642174 ARG 2 CT C -0.080 HB1 2.121760130 3.616136551 1.319550753 ARG 2 HC H 0.056 HB2 3.644849300 3.393733978 2.159598827 ARG 2 HC H 0.056 1 rigid unit 1 3 1atoms in this rigid unit CG 3.412360668 5.357305527 1.216631651 ARG 2 CT C -0.103 HG1 4.487451553 5.614737511 1.132990837 ARG 2 HC H 0.074 HG2 2.938670874 5.796108723 0.315252036 ARG 2 HC H 0.074 ! rigid unit 2 3 !atomε in thiε rigid unit CD 2.850392818 6.038671017 2.471077681 ARG 2 CT C -0.228 HD1 1.769480824 5.816972256 2.580044270 ARG 2 HC H 0.133 HD2 3.353989840 5.649005413 3.379585028 ARG 2 HC H 0.133 1 rigid unit 3 9 latoms in thiε rigid unit NE 3.069616079 7.502031326 2.345978022 ARG 2 N2 N -0.324 HE 3.539865971 7.837357998 1.493146777 ARG 2 H3 H 0.269 CZ 2.710799694 8.413488388 3.240067959 ARG 2 CA C 0.760 NH1 2.972572088 9.643490791 2.971310854 ARG 2 N2 N -0.624 HH11 3.439955235 9.745957375 2.068439484 ARG 2 H3 H 0.361 HH12 2.697422743 10.348603249 3.651821136 ARG 2 H3 H 0.361 NH2 2.114365101 8.144207001 4.363539696 ARG 2 N2 N -0.624 HH21 1.888047814 8.930854797 4.969158173 ARG 2 H3 H 0.361 HH22 1.947107434 7.146794796 4.499028206 ARG 2 H3 H 0.361 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634914 -0.000003315 Ibeginning of bond for unit 0 1 Ibond out from rigid unit 0 1 lunit 0 is bonded to unit l 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.412360668 5.357305527 1.216631651 lending of outgoing bond for unit 0 ! rigid unit 1 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.207483053 3.819248199 1.232642174 Ibeginning of bond for unit 1 1 Ibond out from rigid unit l 2 lunit 1 is bonded to unit 2 0 1 2 -1 -1 ! beginning of outgoing bond and nn 2.850392818 6.038671017 2.471077681 lending of outgoing bond 1 rigid unit 2 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.412360668 5.357305527 1.216631651 Ibeginning of bond for unit 2 1 Ibond out from rigid unit 2 3 lunit 2 is bonded to unit 3 0 1 2 -1 -1 ! beginning of outgoing bond and nn 3.069616079 7.502031326 2.345978022 lending of outgoing bond ! rigid unit 3 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 2.850392818 6.038671017 2.471077681Ibeginning of bond for unit 3 0 Ibondε out from rigid unit 3 ************************************************************* DATA FILE FOR SERINE - S.DAT ************************************************************ ! The εide-chain structure file for Serine 2 !rigid units in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atoms in this rigid unit CB 3.203660250 3.871555328 1.191825747 SER 2 CT C 0.018 HB1 3.445731640 4.945727825 1.071671009 SER 2 HC H 0.119 HB2 2.097403765 3.828571320 1.202566266 SER 2 HC H 0.119 1 rigid unit 1 2 1atoms in this rigid unit OG 3.711599350 3.433972597 2.457015276 SER 2 OH 0 -0.550 HG 3.430009127 2.523327112 2.580434084 SER 2 HO H 0.310 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond for unit 0 and nn 3.783586502 3.069634438 -0.000003353 Ibeginning of bond for unit 0 1 Ibondε out from rigid unit 0 1 lunit 0 is bonded to unit 1 0 1 2 -1 -1 1 beginning of outgoing bond and nn 3.711599350 3.433972597 2.457015276 lending of outgoing bond for unit 0 1 rigid unit 1 0 1 -1 -1 -1 lending of incoming bond for unit 1 and nn 3.203660250 3.871555328 1.191825747 Ibeginning of bond for unit 1 0 1bonds out from rigid unit 1 ************************************************************ DATA FILE FOR THREONINE - T.DA ************************************************************ 1 The εide-chain εtructure file for Threonine 3 1rigid unitε in εide-chain 1 ATOM INFORMATION 1 rigid unit 0 2 [atoms in thiε rigid unit CB 3.220216751 3.864162445 1.226425409 THR 2 CT C 0.170 HB 3.504307270 3.322291374 2.154003382 THR 2 HC H 0.082 ! rigid unit 1 2 1atomε in thiε rigid unit OG1 1.802008867 3.940322876 1.161503792 THR 2 OH 0 -0.550 HG1 1.520381451 4.374082565 1.972538352 THR 2 HO H 0.310 1 rigid unit 2 4 !atomε in thiε rigid unit CG2 3.680637360 5.331728935 1.361316323 THR 2 CT C - 0 . 191 HG21 3.224400043 5.832503796 2.234619141 THR 2 HC H 0.065 HG22 4.774106026 5.420624733 1.502453089 THR 2 HC H 0.065 HG23 3.418393373 5.928008556 0.466874599 THR 2 HC H 0.065 ! BOND INFORMATION ! rigid unit 0 0 1 -1 -1 -1 lending of incoming bond and nn 3.783586502 3.069634438 -0.000003353 1beginning of bond 2 1bondε out 1 lunit 0 iε bonded 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 1.802008867 3.940322876 1.161503792 lending of outgoing bond for unit 0 2 lunit 0 iε bonded 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 3.680637360 5.331728935 1.361316323 lending of outgoing bond for unit 0 1 rigid unit 1 0 1 -1 -1 -1 lending of incoming bond and nn 3.220216751 3.864162445 1.226425409 Ibeginning of bond for unit 1 0 1bondε out 1 rigid unit 2 0 1 2 3 -1 1ending of incoming bond and nn 3.220216751 3.864162445 1.226425409 Ibeginning of bond for unit 1 0 Ibondε out *************************************************************** DATA FILE FOR VALINE - V.DAT **************************************************************** 1 The side-chain structure file for Valine 3 1rigid units in εide-chain 1 ATOM INFORMATION ! rigid unit 0 2 1atomε in thiε rigid unit CB 3.211601496 3.852613449 1.247815728 VAL 2 CT C -0.012 HB 3.447319269 3.248452187 2.150032282 VAL 2 HC H 0.024 1 rigid unit 1 4 1atoms in this rigid unit CGI 1.676198244 4.045934200 1.217347741 VAL 2 CT C -0.091 HG11 1.351996183 4.697401524 0.384493083 VAL 2 HC H 0.031 HG12 1.142809749 3.084587097 1.106773376 VAL 2 HC H 0.031 HG13 1.300095797 4.498250008 2.155061245 VAL 2 HC H 0.031 1 rigid unit 2 4 1atomε in this rigid unit CG2 3.797980547 5.269292355 1.500991821 VAL 2 CT C -0.091 HG21 3.634918213 5.953960419 0.647068620 VAL 2 HC H 0.031 HG22 3.359194279 5.751780510 2.395626068 VAL 2 HC H 0.031 HG23 4.886912346 5.247161865 1.696415067 VAL 2 HC H 0.031 1 BOND INFORMATION 1 rigid unit 0 0 l -l -l -l lending of incoming bond and nn 3.783586502 3.069634438 -0.000003354 [beginning of bond 2 1bonds out 1 lunit bonded to 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 1.676198244 4.045934200 1.2173477411ending of outgoing bond 2 lunit bonded to 0 1 -1 -1 -1 1 beginning of outgoing bond and nn 3.797980547 5.269292355 1.500991821lending of outgoing bond 1 rigid unit 1 0 1 2 3 -1 lending of incoming bond and nn 3.211601496 3.852613449 1.247815728 Ibeginning of outgoing bond 0 1bondε out 1 rigid unit 2 0 1 2 3 -1 lending of incoming bond and nn 3.211601496 3.852613449 1.247815728 Ibeginning of outgoing bond 0 1bonds out ***************************************************************** DATA FILE FOR TRYPTOPHAN - W.DAT ***************************************************************** ! The εide-chain εtructure file for Tryptophan 2 1rigid unitε in εide-chain ! ATOM INFORMATION 1 rigid unit 0 3 1atomε in thiε rigid unit CB 3.247885227 3.809360981 1.256884575 TRP 2 CT C -0.098 HB1 3.555066347 3.270197153 2.175767183 TRP 2 HC H 0.038 HB2 3.728011608 4.802421093 1.350249052 TRP 2 HC H 0.038 1 rigid unit 1 15 1atoms in thiε rigid unit CG 1.731538415 4.025276661 1.276940465 TRP 2 C + C -0.135 CDl 0.792832434 3.205200195 1.936712861 TRP 2 CW C 0.044 NE1 -0.527979255 3.628766537 1.692452073 TRP 2 NA N -0.352 CE2 -0.376119167 4.727549076 0.861387193 TRP 2 CN C 0.154 CD2 0.994750261 4.975831032 0.602216363 TRP 2 CB C 0.146 HD1 1.058894038 2.330861330 2.516448259 TRP 2 HC H 0.093 HE1 -1.402328849 3.197247982 2.011827707 TRP 2 H H 0 . 271 CE3 1.387488961 6.039774895 -0.250452638 TRP 2 CA C -0.173 HE3 2.430646658 6.226261139 -0.463923573 TRP 2 HC H 0.086 CZ3 0.392907262 6.841813087 -0.810243368 TRP 2 CA C -0.066 HZ3 0.674497783 7.661212444 -1.455789328 TRP 2 HC H 0.057 CH2 -0.963685811 6.602497578 -0.548699141 TRP 2 CA C -0.077 HH2 -1.710847259 7.243553162 -0.992942095 TRP 2 HC H 0.074 CZ2 -1.364877820 5.549452305 0.277642310 TRP 2 CA C -0.168 HZ2 -2.410887718 5.363564491 0.470484644 TRP 2 HC H 0.084 1 BOND INFORMATION 1 rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586740 3.069634914 -0.000003497 ibeginning of bond 1 1bonds out 1 lunit 0 iε bonded 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.731538415 4.025276661 1.2769404651ending of outgoing bond for unit 0 1 rigid unit 1 0 1 4 -1 -1 lending of incoming bond and nn 3.247885227 3.809360981 1.256884575 Ibeginning of bond for unit 1 0 1bonds out ************************************************************** DATA FILE FOR TYROSINE - Y.DAT ***************************************************************** ! The side-chain structure file for Tyrosine 3 !rigid unitε in side-chain 1 ATOM INFORMATION 1 rigid unit 0 3 1atoms in this rigid unit CB 3.293353796 3.842515945 1.259159327 TYR CT C -0.098 HB1 3.703839302 3.358918667 2.169649363 TYR HC H 0.038 HB2 3.749134064 4.852351665 1.277104497 TYR HC H 0.038 1 rigid unit 1 10 1atoms in this rigid unit CG 1.778211594 4.019127369 1.411828637 TYR CA C -0.030 CDl 1.068759203 3.196300983 2.292453527 TYR CA C -0.002 HD1 1.585003138 2.435774803 2.862824917 TYR HC H 0.064 CD2 1.095163584 4.989490032 0.672801077 TYR CA C -0.002 HD2 1.629922271 5.630218983 -0.014210327 TYR HC H 0.064 CE1 -0.309100747 3.338460445 2.427857637 TYR CA C -0.264 HE1 -0.845880806 2.691843510 3.105883360 TYR HC H 0.102 CZ -0.983952701 4.304777145 1.686211467 TYR 2 C C 0.462 CE2 -0.283983082 5.129064560 0.809688389 TYR 2 CA C -0.264 HE2 -0.814125061 5.873366833 0.234044328 TYR 2 HC H 0.102 1 rigid unit 1 2 1atoms in this rigid unit OH -2.337103367 4.443373203 1.815491915 TYR 2 OH O -0.528 HH -2.648404837 3.798558235 2.453088284 TYR 2 HO H 0.334 1 BOND INFORMATION ! rigid unit 0 0 1 2 -1 -1 lending of incoming bond and nn 3.783586264 3.069634914 -0.000003354 Ibeginning of bond 1 ibonds out 1 [unit bonded to 0 1 2 -1 -1 1 beginning of outgoing bond and nn 1.778211594 4.019127369 1.411828637lending of outgoing bond for unit 0 1 rigid unit 1 0 1 3 -1 -1 lending of incoming bond and nn 3.293353796 3.842515945 1.259159327 Ibeginning of bond for unit 1 1 1bonds out 2 lunit bonded to 7 5 8 -1 -1 1 beginning of outgoing bond and nn -2.337103367 4.443373203 1.815491915 lending of outgoing bond for unit 0 1 rigid unit 2 0 1 -1 -1 -1 lending of incoming bond and nn -0.983952701 4.304777145 1.686211467 Ibeginning of bond for unit 1 0 1bonds out ************************************************************ DATA FILE FOR INITIAL PROTOTYPE - CX6C.CAR ************************************************************ 1BIOSYM archive 3 PBC=0FF 1DATE Thu Mar 2 10:02:29 1995 SG 0.051616628 8.775964550 2.653307337 CYSn 1 S S 0.824 LG1 -0.116704460 8.906803991 3.732450018 CYSn 1 LP L -0.405 LG2 -0.816371929 8.216369655 2.274560255 CYSn 1 LP L -0.405 CB 1.625257994 7.970290997 2.280061368 CYSn 1 CT C -0.098 HB1 1.743097230 7.117856362 2.972980432 CYSn 1 HC H 0.050 HB2 2.457560406 8.667686711 2.506611212 CYSn 1 3.853622667 -4.520184621 GLY 4 4.691535216 •4 . 019658253 GLY 3.804217731 -5.170228610 GLY 2.789614618 ■ 5 .584558431 GLY 4.540755026 -5.994216851 GLY 4.050747291 -4.175561433 GLY 4.780583329 -4.436272241 GLY 3.450944950 • 3 . 006608050 GLY 2.844372268 ■ 2 . 879487738 GLY 3.689311240 -2.044877031 GLY 2.881830301 -2.144167698 GLY 4.658369322 -2.297948016 GLY 3.643619035 -0.629041435 GLY 5 2.676595378 -0.197242766 GLY 5 4.691871185 0.124033264 GLY 6 5.476492875 -0.348403798 GLY 6 4.647691975 1.492986659 GLY 6 4.010943092 1.515218779 GLY 6 4.194323221 2.125265975 GLY 6 6.023038258 1.963510280 GLY 6 7.036283245 1.285298717 GLY 6.077750863 3.136158080 GLY 5.133307510 3.640799839 GLY 7.407555656 3.591101372 GLY 7.303619509 4.286815466 GLY 7.847316876 4.127520148 GLY 8.258959996 2.434291753 GLY 9.494643783 2.487154063 GLY 7.605756209 1.358640986 CYSN 8 6.528240768 1.414418956 CYSN 8 8.428968216 0.240136508 CYSN 8 8.271042216 0.100059529 CYSN 8 8.018162291 -1.043072620 CYSN 8 9.902481747 0.610166221 CYSN 8 10.016688002 1.140264476 CYSN 8 10.541353385 -0.293951287 CYSN 8 10.532225816 1.688457720 CYSN 8 10.957145937 1.126774557 CYSN 8 11.329491558 2.359427872 CYSN 8 end end ************************************************************ *********************************************************** END OF LISTING **************************************************************** ***************************************************************** ************************************************************** *********************************************************** DATA FILE WEINER FORCES - AMBER.FRC **************************************************************** ********************************************************* !BIOSYM forcefield 2 #version amber.frc 1.0 19-Oct-90 #verεion amber.frc 1.1 8-Aug-92 #define amber > Thiε iε the new format verεion of the amber forcefield Function Label atom_typeε amber equivalence amber hbond_definition amber quadratic_bond amber quadratic_angle amber torεion_3 amber out_of_plane amber nonbond(12-6) amber hydrogen_bond(10-12) amber #atom_types amber > Atom type definitions for any variant of amber > Masses from CRC 1973/74 pages B-250. IVer Ref Type Masε Element Comment 1.0 1 C 12.000000 Kollman'ε Field: Maεεes from CRC 1973/74 pageε B-250. 1.0 1 C^ 12.000000 parameter aεεignment 1.0 1 n$ 14.003070 N Nitrogen atom for automatic parameter aεεignment 1.0 1 0$ 15.994910 0 Oxygen atom for automatic parameter aεεignment 1.0 1 S$ 31.972070 S Sulfur atom for automatic parameter asεignment 1.0 1 p$ 30.993760 Phosphorous atom for automatic parameter aεεignment #equivalence amber > Equivalence table for any variant of amber #hbond_definition amber 1.0 1 distance 2.5000 1.0 1 angle 90.0000 1.0 1 donorε H HO H2 H3 HS 1.0 1 acceptors NB NC 02 O OH SH #quadratic_bond amber > E = K2 * (R - R0) * 2 R0 K2 H h-» H H H H I-- t-- l- , H H H l-» H H H H- l-» M H UJ UJ W O O O f P K IB W W a K li! X Cθ 33 M HJ i τJ CO O O ' J C< J ^J t 33 33 33 33 Q n n n n n n o n M *0 »tf fl B W tn O O l? 2 a 2 « 2 5! S! 2 2 1ϊ K tn n o o 5| 33 X W H! u W H M * > to O n 33 Co 33 w t t o> o <τ» cn •(» UJ Ui H H 00 00 o o o o o o o H H H H t-- l-- >-- »-- l- J H I-- l-- H H M H O O O O O O O O O O O O H H M M I H H H it* it* ,t* ιt ιt>- - n n π π π n n π n π n n π o o 33 n w n o w Λ <Λ o -ϋ o* <o -o> -ty> <o -ϋ -v> -v> co o π co co n n n n n H M Ul tO H UJ tO M in UJ tO I-' cn co co c 3j w 2j 2! 2! o o o n n n n n O 21 21 25 0 0 0 0 Λ <Λ <0 <Λ -t/> Λ *t> -lO 0 -V> -CΛ /> CO n π n 0 0 W M W H O O ω ω H H UI tO H UJ tO I-' Ul UJ tO I-- -> in ui to ui to to to UJ σ» to vo in 0 0 0 0 00 oo ui o o o o 0 0 o 0 0 0 1 C2 C2 C2 0 1 C2 C2 CH 0 1 C2 C2 N 0 1 C2 C2 N2 0 1 C2 C2 N3 0 1 C2 C2 NT 1.0 1 C2 C2 OS 1.0 1 C2 C2 S 1.0 1 C2 CA CA 1.0 1 C2 CA CD 1.0 1 C2 CC CF 1.0 1 C2 CC CG .0 1 C2 CC CV .0 1 C2 CC CW .0 1 C2 CC NA .0 1 C2 CC NB ,0 1 C2 CH C3 0 1 C2 CH CH .0 1 C2 CH N .0 1 C2 CH N* 0 1 C2 CH NT 0 1 C2 CH OH .0 1 C2 CH OS ,0 1 C2 N CH 1.0 1 C2 N H 1.0 1 C2 N2 CA 1.0 1 C2 N2 H2 1.0 1 C2 N2 H3 1.0 1 C2 N3 H3 1.0 1 C2 NT H2 1.0 1 C2 OH HO 1.0 1 C2 OS C2 1.0 1 C2 OS C3 1.0 1 C2 OS HO 1.0 1 C2 OS P 1.0 1 C2 S C3 1.0 3 C2 S LP 1.0 1 C2 S S 1.0 1 C2 SH HS »-* M H H I-* i-* - l -> * M H -> * r-> O O O O O O o o o o o r-> 1-* r-> o o n n o o n n π π n r) π n r. π π n Q n n Q Q Q Q π π 33 33 33 33 33 33 θ Q θ θ Ω Ω 'ii , τ] f ιj w w w ϋ o b i_5 d σ π n n : n n Q n n o n to o to o ci ci n S S § § n n n Z 2: π n n * * * 2 D u w !> o o o o o 5 33 n n n 3 -a n n 2! 33 n n 2: n n n n o Q n n 33 33 3 10 » tj y « !o t) •H 33 : σ a σ 3 θ W ' H H H H t-» H o H IO H to o o O O O o o t to to ui to to to to t o o vo to Ul o σ σi -J VD 00 in ui ui -J 00 00 10 o o σ- o o o in ui Ul ι^ O O ιt* σ> UJ UJ UJ cn VO --J UJ UJ VO UJ 00 00 03 0 0 tO O O O UJ UJ O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O 125.3000 35.0000 120.0000 35.0000 120.0000 35.0000 109.5000 35.0000 120.0000 35.0000 120.0000 35.0000 109.5000 35.0000 123.0000 35.0000 123.0000 35.0000 119.1000 35.0000 115.4000 35.0000 120.0000 35.0000 120.0000 35.0000 109.5000 35.5000 109.5000 38.0000 109.5000 35.0000 109.5000 35.0000 109.5000 35.0000 109.5000 35.0000 109.5000 35.0000 109.5000 35.0000 109.5000 35.0000 120.0000 35.0000 120.0000 35.0000 104.5000 47.0000 108.5000 45.0000 92.1000 35.0000 96.7000 150.0000 160.0000 150.0000 96.7000 150.0000 160.0000 150.0000 122.9000 80.0000 115.4000 70.0000 118.6000 70.0000 120.9000 80.0000 126.2000 70.0000 113.9000 70.0000 109.5000 80.0000 113.9000 70.0000 1.0 3 * CB CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C C2 * 0.0000 0.0 0.0000 0.0 0.0000 180.0 1.0 1 * C CA * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C CB * 0.0000 0.0 4.4000 180.0 0.0000 0.0 1.0 1 * C CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C CH * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C CJ * 0.0000 0.0 3.1000 180.0 0.0000 0.0 1.0 1 * C CM * 0.0000 0.0 3.1000 180.0 0.0000 0.0 1.0 1 * C CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C N * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * C N* * 0.0000 0.0 5.8000 180.0 0.0000 0.0 1.0 1 * C NA * 0.0000 0.0 5.4000 180.0 0.0000 0.0 1.0 1 * C NC * 0.0000 0.0 8.0000 180.0 0.0000 0.0 1.0 1 * C OH * 0.0000 0.0 1.8000 180.0 0.0000 0.0 1.0 1 * C* C2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C* CB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * C* CG * 0.0000 0.0 23.6000 180.0 0.0000 0.0 1.0 1 * C* CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C* CW * 0.0000 0.0 23.6000 180.0 0.0000 0.0 1.0 1 * C2 C2 * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * C2 CA * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 CC * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 CH * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * C2 N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 N2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 N3 * 0.0000 0.0 0 . 0000 0 . 0 1 . 4000 0 . 0 1.0 1 * C2 NT * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * C2 OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * C2 OS * 0.0000 0.0 0.0000 0.0 1.4500 0.0 1.0 1 * C2 S * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * C2 SH * 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 * CA CA * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CA CB * 0.0000 0.0 10.2000 180.0 0.0000 0.0 1.0 1 * CA CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CA CJ * 0.0000 0.0 3.7000 180.0 0.0000 0.0 1.0 1 * CA CM * 0.0000 0.0 3.7000 180.0 0.0000 0.0 1.0 1 * CA CN * 0.0000 0.0 10.6000 180.0 0.0000 0.0 1.0 1 * CA CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CA N2 * 0.0000 0.0 6.8000 180.0 0.0000 0.0 1.0 1 * CA NA * 0.0000 0.0 6.0000 180.0 0.0000 0.0 1.0 1 * CA NC * 0.0000 0.0 9.6000 180.0 0.0000 0.0 1.0 1 * CB CB * 0.0000 0.0 16.3000 180.0 0.0000 0.0 1.0 1 * CB CN * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CB N* * 0.0000 0.0 6.6000 180.0 0.0000 0.0 1.0 1 * CB NB * 0.0000 0.0 5.1000 180.0 0.0000 0.0 1.0 3 * CB NC * 0.0000 0.0 8.3000 180.0 0.0000 0.0 1.0 1 * CC CF * 0.0000 0.0 14.3000 180.0 0.0000 0.0 1.0 1 * CC CG * 0.0000 0.0 15.9000 180.0 0.0000 0.0 1.0 1 * CC CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CC CV * 0.0000 0.0 14.3000 180.0 0.0000 0.0 1.0 1 * CC CW * 0.0000 0.0 15.9000 180.0 0.0000 0.0 1.0 1 * CC NA * 0.0000 0.0 5.6000 180.0 0.0000 0.0 1.0 1 * CC NB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * CD CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CD CN * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CE N* * 0.0000 0.0 6.7000 180.0 0.0000 0.0 1.0 1 * CE NB * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CF NB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * CG NA * 0.0000 0.0 6.0000 180.0 0.0000 0.0 1.0 1 * CH CH * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * CH N * 0.0000 0.0 o.oooo o.o o.ooαo o.o 1.0 1 * CH N* * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CH NT * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * CH OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * CH OS * 0.0000 0.0 0 . 0000 0 . 0 1 . 4500 0 . 0 1.0 1 * CI NC * 0.0000 0.0 13.5000 180.0 0.0000 0.0 1.0 1 * CJ CJ * 0.0000 0.0 24.4000 180.0 0.0000 0.0 1.0 1 * CJ CM * 0.0000 0.0 24.4000 180.0 0.0000 O.C 1.0 1 * CJ N* * 0.0000 0.0 7.4000 180.0 0.0000 0.0 1.0 1 * CK N* * 0.0000 0.0 6.7000 180.0 0.0000 0.0 1.0 1 * CK NB * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CM CM * 0.0000 0.0 24.4000 180.0 0.0000 0.0 1.0 1 * CM CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CM N* * 0.0000 0.0 7.4000 180.0 0.0000 0.0 1.0 1 * CN NA * 0.0000 0.0 12.2000 180.0 0.0000 0.0 1.0 1 * CP NA * 0.0000 0.0 9.3000 180.0 0.0000 0.0 1.0 1 * CP NB * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * CQ NC * 0.0000 0.0 13.5000 180.0 0.0000 0.0 1.0 1 * CR NA * 0.0000 0.0 9.3000 180.0 0.0000 0.0 1.0 1 * CR NB * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * CT CT * 0.0000 0.0 0.0000 0.0 1.3000 0.0 1.0 1 * CT N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N* * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N3 * 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.0 1 * CT OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * CT OS * 0.0000 0.0 0.0000 0.0 1.1500 0.0 1.0 1 * CT S * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * CT SH * 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 * CV NB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * CW NA * 0.0000 0.0 6.0000 180.0 0.0000 0.0 1.0 1 * OH P * 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 * OS P * 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 O C C2 N 0.0000 0.0 0.0000 0.0 0.2000 180.0 1.0 1 O C CH C2 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 O C CH N 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 O C CH CH 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 OS C2 C2 OH 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 2 OH C2 C2 OH 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 1 OS C2 C2 OS 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 1 OS C2 CH OS 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OS C2 CH OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OH C2 CH OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 C2 C2 S LP 0.0000 0.0 0 . 0000 0 . 0 0 . 0000 0 . 0 1.0 1 CH C2 SH LP 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 OS CH C2 OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OH CH CH OH 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 OS CH CH OH 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 OS CH CH OS 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 HC CM CM CT 0.0000 0.0 1.7100 180.0 0.0000 0.0 1.0 1 C CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N* CM CM CT 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 CA CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N* CM CM CA 0.0000 0.0 9.5100 180.0 0.0000 0.0 1.0 1 HC CM CM HC 0.0000 0.0 1.7100 180.0 0.0000 0.0 1.0 1 N* CM CM C 0.0000 0.0 9.5100 180.0 0.0000 0.0 1.0 1 N* CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N CT C O 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 HC CT C O 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 CT CT C O 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 CT OS CT CT 0.0000 0.0 0.2000 180.0 0.3830 0.0 1.0 1 OS CT CT OS 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 OS CT CT OH 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 OH CT CT OH 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 H N C 0 0.6500 0.0 2.5000 180.0 0.0000 0.0 1.0 1 C2 OS C2 C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C2 OS C2 C2 0.0000 0.0 0.1000 0.0 1.4500 0.0 1.0 1 C3 OS C2 C3 0.0000 0.0 0.1000 0.0 1.4500 0.0 1.0 1 CH OS CH C2 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 CH OS CH CH 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C2 OS CH C2 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C3 OS CH C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 CH OS CH N* 0.0000 0.0 0.0000 0.0 0.7250 0.0 1.0 1 C2 OS CH C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 OH P OS C3 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OS P OS C2 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OH P OS C2 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OS P OS CT 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OS P OS CH 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OS P OS C3 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OH P OS CH 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 OH P OS CT 0.0000 0.0 0.7500 0.0 0.2500 0.0 1.0 1 LP S S LP 0.0000 0.0 0 . 0000 0 . 0 0 . 0000 0 . 0 1.0 1 LP S S C2 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 C2 S S C2 0.0000 0.0 3.5000 0.0 0.6000 0.0 1.0 1 CT S S CT 0.0000 0.0 3.5000 0.0 0.6000 0.0 1.0 1 LP S S CT 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * CS CS * 0.0000 0.0 0.0000 0.0 1.0210 0.0 1.1 4 * CS CT * 0.0000 0.0 0.0000 0.0 1.0210 0.0 1.1 4 * AC CS * 0.0000 0.0 0.0000 0.0 1.0210 0.0 1.1 4 * BC CS * 0.0000 0.0 0.0000 0.0 1.0210 0.0 1.1 4 * CS OT * 0.0000 0.0 0.0000 0.0 0.4430 0.0 1.1 4 * CS OE * 0.0000 0.0 0.0000 0.0 0.9280 0.0 1.1 4 * AC OE * 0.0000 0.0 0.0000 0.0 0.9280 0.0 1.1 4 * BC OE * 0.0000 0.0 0.0000 0.0 0.9280 0.0 1.1 4 * AC OA * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * BC OB * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * CS OA * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * CS OB * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * CS N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 * C N * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.1 4 * C CS * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.1 4 OE AC OA CS 2.1500 300.0 0.0000 0.0 0.0000 0.0 1.1 4 AH AC OA CS 0.0000 0.0 1.7500 60.0 0.0000 0.0 1.1 4 CS AC OA CS 0.0000 0.0 0.0000 0.0 0.8500 0.0 1.1 4 OE AC OA HY 2.1500 300.0 0.0000 0.0 0.0000 0.0 1.1 4 AH AC OA HY 0.0000 0.0 1.7500 60.0 0.0000 0.0 1.1 4 CS AC OA HY 0.0000 0.0 0.0000 0.0 0.8500 0.0 1.1 4 OE BC OB CS -1.0500 0.0 0.0000 0.0 0.0000 0.0 1.1 4 BH BC OB CS 0.0000 0.0 1.2500 240.0 0.0000 0.0 1.1 4 CS BC OB CS 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 OE BC OB HY -1.0500 0.0 0.0000 0.0 0.0000 0.0 1.1 4 BH BC OB HY 0.0000 0.0 1.2500 240.0 0.0000 0.0 1.1 4 CS BC OB HY 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 HT AC OA CS 0.0000 0.0 0.0000 0.0 0.8500 0.0 1.1 4 HT BC OB CS 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 H N C O 0.6500 0.0 2.5000 180.0 0.0000 0.0 1.1 4 HT CS C O 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 $$ C$1 C$1 $$ 0.0000 0.0 0.0000 0.0 1.3000 0.0 1.0 1 $$ C$2 C$2 $$ 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 $$ C$3 C$3 $$ 0.0000 0.0 16.3000 180.0 0.0000 0.0 1.0 1 $$ C$5 C$5 $$ 0.0000 0.0 0.0000 180.0 0.0000 0.0 1.0 1 $$ C$1 0$1 $$ 0.0000 0.0 0.0000 0.0 1.1000 0.0 1.0 1 $$ C$1 N$l $$ 0.0000 0.0 0.0000 0.0 0.3000 0.0 1.0 1 $$ C$2 N$2 $$ 0.0000 0.0 5.8000 180.0 0.0000 0.0 1.0 1 $$ C$3 N$3 $$ 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 $$ C$1 S$l $$ 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 $$ S$l S$l $$ 0.0000 0.0 3.5000 0.0 0.6000 0.0 1.0 1 $$ 0$1 0$1 $$ 0.0000 0.0 0.0000 0.0 1.1000 0.0 1.0 1 $$ 0$1 N$l $$ 0.0000 0.0 0.0000 0.0 1.1000 0.0 1.0 1 $$ 0$1 P$l $$ 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 $$ N$l N$l $$ 0.0000 0.0 0.0000 0.0 0.3000 0.0 #out_of_plane amber > E = Kchi * [ 1 + coε(n*Chi - ChiO) ] !Ver Ref I J K L Kchi n ChiO 1.0 3 NA CA CA 0.0000 180.0000 1.0 1 N3 CH C2 7.0000 180.0000 1.0 1 C3 CA CH C3 7.0000 180.0000 1.0 1 NT CH C3 14.0000 180.0000 1.0 1 N3 CH CH 7.0000 180.0000 1.0 1 H2 N2 CH H2 0.0000 180.0000 14.0000 3 14.0000 3 0.0000 2 0.0000 2 14.0000 3 1.0000 2 1.0000 2 1.0000 2 10.5000 2 10.5000 2 14.0000 3 14.0000 3 10.5000 2 0.0000 2 0.0000 2 0.0000 2 0.0000 2 0.0000 2 0.0000 2 0.0000 2 H H r* Y-> * H H M H H t-> -> M M H H H H M M ιn uι uι uι uι uι uι σι in σ σι cn σι σι σι σ σι σ σι iπ σι σ cn σι ιπ σ n π 25 3 o n -t ) 3 o ω n n n o w ω w n o o o 5 π « td i n « w * s o o ω co ω co π o o o n π co ω H + co a n π o 3 3 θ Q ffi o o o o o o o p s5 33 ω 33 33 33 33 n o BJ ifc- rø tø * * W H * S M W W H ro ro H H 33 M H '^ '^ o I I I I I I I I I I I o o o o o o o o o o o o o o o o o o o o o Ul O O UJ t0 t-» l0 H UJ | tJ I0 t0 t0 t0 l0 l0 H H I-' I-- ιt* ιt* ιt* H tO Cn O tO UJ Ul UJ Ul OO OO O O O Ul Ul Ul Ul Ul O O O O O O O O OO o 01 0 0 Ul UJ O ιt* UJ O O O O O O O O O O O O O O O O O UJ o I I I I I I I I I I I I I o o o o o o o o o o o o o o o o Ul O O UJ t H KJ H UJ t tO tO tO tO IO tO tO H H H H H ιt* ιt* ιt* H tO σ o to U ui UJ in OO OO O O O Ul Ul Ul Ul UI O O O O O O O O OO o σi o o ui UJ O ιt* UJ O O O O O O O O O O O O O O O O UJ o 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 1.1 5 •Preference 1 creation of file •preference 2 Lone pair lp had incorrect mass of 0.001097. Angle CT-C-02 was by error included twice. Torsion OH-C2-C2-OH was written as two separate lines Hence only one of the energy terms waε included. ©Author Jon Hurley ©Date 13-December-90 •preference 3 parameter set modified with the addtional parameters from kollman's parm89a rev a force field file note that the HW...OW hydrogen bond parameters and the HW van der waals parameters are not included in the files since they are equal to zero in parm89a. ©Author torn thacher ©Date 11-March-92 •preference 4 homans' carbohydrate potential ©Author Tom Thacher ©Date 7-July-1992 •preference 5 bond increments ©Author Tom Thacher ©Date 7-July-1992 #end ****************************************************** ******************************************************* END OF LISTING ********************************************************** ********************************************************* ******************************************************* DATA FILE FOR H BOND FORCES HBOND.DAT ******************************************************** 47 !data items BIOSYM forcefield 2 version amber.frc 1.0 19-Oct-90 version amber.frc 1.1 8-Aug-92 define amber This is the new format version of the amber forcefield hbond_definition amber 1.0 l distance 2.5000 1.0 l angle 90.0000 1.0 l donors H HO H2 H3 HS 1.0 l acceptors NB NC 02 0 OH SH hydrogen_bond(10-12) amber E = Aij/r *** 12 - Bij/r A 10 Ver Ref I J B ********************************************************** DATA FILE FOR LENNARD JONES FORCES - LJ_PARAM.DAT ************************************************************ 74 !total atoms BIOSYM forcefield 2 version amber.frc 1.0 19-Oct-90 version amber.frc 1.1 8-Aug-92 define amber Thiε is the new format verεion of the amber forcefield nonbond(12-6) amber type r-epε combination arithmetic E = EPSij * { (Rij*/Rij) * 12 - 2 (Rij*/Rij) *** 6 } where EPSij = sqrt ( EPSi * EPSj) Rij* = (Ri* + Rj*) /2 Ver Ref I Ri* EPSi > l-> *-> ^ H H H H O O O O O O CO TJ O O O O t3 25 25 2J 25 25 25 2: 2! tr' S3 S3 S3 S3 33 33 θ q π n π S3 K H τj n 63 uJ to * j co o π uj t s < H .-σ o UJ UI UJ UJ UJ UJ UJ UJ UJ UJ UJ UJ UJ IO tO tO UJ tO tO tO UJ UI UJ Ul UI O KJ UJ UJ to KJ O O o o o o o o o o o 00 o o o o o o o IO tO H H J O O Ul Ul o o o o o o o o o o o o o o o o ******************************************************* DATA FILE FOR TORSION FORCES - TORSION.DAT ******************************************************* 179 ! total entries in thiε data file 1BIOSYM forcefield 2 Iversion amber.frc 1.0 19-Oct-90 !version amber.frc 1.1 8-Aug-92 !define amber ! This is the new format version of the amber forcefield !torsion_3 amber ! E = SUM(n=l,3) { V(n) * [ 1 + cos(n*Phi - PhiO(n) ) ] } !Ver Ref I J K L VI PhiO V2 PhiO V3 PhiO 1.0 1 O C C2 N 0.0000 0.0 0.0000 0.0 0.2000 180.0 1.0 1 O C CH C2 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 0 C CH N 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 0 C CH CH 0.0000 0.0 0.0000 0.0 0.1000 180.0 1.0 1 OS C2 C2 OH 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 2 OH C2 C2 OH 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 1 OS C2 C2 OS 0.0000 0.0 0.5000 0.0 2.0000 0.0 1.0 1 OS C2 CH OS 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OS C2 CH OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OH C2 CH OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 C2 C2 S LP 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 CH C2 SH LP 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 OS CH C2 OH 0.0000 0.0 0.5000 0.0 1.0000 0.0 1.0 1 OH CH CH OH 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 OS CH CH OH 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 OS CH CH OS 0.0000 0.0 0.5000 0.0 0.5000 0.0 1.0 1 HC CM CM CT 0.0000 0.0 1.7100 180.0 0.0000 0.0 1.0 1 C CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N* CM CM CT 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 CA CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N* CM CM CA 0.0000 0.0 9.5100 180.0 0.0000 0.0 1.0 1 HC CM CM HC 0.0000 0.0 1.7100 180.0 0.0000 0.0 1.0 1 N* CM CM C 0.0000 0.0 9.5100 180.0 0.0000 0.0 1.0 1 N* CM CM HC 0.0000 0.0 6.5900 180.0 0.0000 0.0 1.0 1 N CT C 0 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 HC CT C 0 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 CT CT C 0 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 1 CT OS CT CT 0.0000 0.0 0.2000 180.0 0.3830 0.0 1.0 1 OS CT CT OS 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 OS CT CT OH 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 OH CT CT OH 0.0000 0.0 0.5000 0.0 0.1440 0.0 1.0 1 H N C O 0.6500 0.0 2.5000 180.0 0.0000 0.0 1.0 1 C2 OS C2 C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C2 OS C2 C2 0.0000 0.0 0.1000 0.0 1.4500 0.0 1.0 1 C3 OS C2 C3 0.0000 0.0 0.1000 0.0 1.4500 0.0 1.0 1 CH OS CH C2 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 CH OS CH CH 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C2 OS CH C2 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 C3 OS CH C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 1.0 1 CH OS CH N* 0.0000 0.0 0.0000 0.0 0.7250 0.0 1.0 1 C2 OS CH C3 0.0000 0.0 0.1000 0.0 0.7250 0.0 0 . 0000 0 . 0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 0.0000 0.0 2.1500 300.0 0.0000 0.0 0.0000 0.0 2.1500 300.0 0.0000 0.0 0.0000 0.0 -1.0500 0.0 0 . 0000 0 . 0 0 . 0000 0 . 0 1.1 4 BH BC OB CS 0.0000 0.0 1.2500 240.0 0.0000 0.0 1.1 4 CS BC OB CS 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 OE BC OB HY -1.0500 0.0 0.0000 0.0 0.0000 0.0 1.1 4 BH BC OB HY 0.0000 0.0 1.2500 240.0 0.0000 0.0 1.1 4 CS BC OB HY 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 HT AC OA CS 0.0000 0.0 0.0000 0.0 0.8500 0.0 1.1 4 HT BC OB CS 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.1 4 H N C 0 0.6500 0.0 2.5000 180.0 0.0000 0.0 1.1 4 HT CS C 0 0.0000 0.0 0.0000 0.0 0.0670 180.0 1.0 3 * CB CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C C2 * 0.0000 0.0 0.0000 0.0 0.0000 180.0 1.0 1 * C CA * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C CB * 0.0000 0.0 4.4000 180.0 0.0000 0.0 1.0 1 * C CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * C CH * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C CJ * 0.0000 0.0 3.1000 180.0 0.0000 0.0 1.0 1 * C CM * 0.0000 0.0 3.1000 180.0 0.0000 0.0 1.0 1 * C CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C N * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * C N* * 0.0000 0.0 5.8000 180.0 0.0000 0.0 1.0 1 * C NA * 0.0000 0.0 5.4000 180.0 0.0000 0.0 1.0 1 * C NC * 0.0000 0.0 8.0000 180.0 0.0000 0.0 1.0 1 * C OH * 0.0000 0.0 1.8000 180.0 0.0000 0.0 1.0 1 * C* C2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C* CB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * C* CG * 0.0000 0.0 23.6000 180.0 0.0000 0.0 1.0 1 * C* CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C* CW * 0.0000 0.0 23.6000 180.0 0.0000 0.0 1.0 1 * C2 C2 * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * C2 CA * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 CC * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 CH * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * C2 N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 N2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * C2 N3 * 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.0 1 * C2 NT * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * C2 OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * C2 OS * 0.0000 0.0 0.0000 0.0 1.4500 0.0 1.0 1 * C2 S * 0.0000 0.0 0 . 0000 0 . 0 1 . 0000 0 . 0 1.0 1 * C2 SH * 0.0000 0.0 0.0000 0.0 0.7500 0.0 1.0 1 * CA CA * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CA CB * 0.0000 0.0 10.2000 180.0 0.0000 O.C 1.0 1 * CA CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CA CJ * 0.0000 0.0 3.7000 180.0 0.0000 0.0 1.0 1 * CA CM * 0.0000 0.0 3.7000 180.0 0.0000 0.0 1.0 1 * CA CN * 0.0000 0.0 10.6000 180.0 0.0000 0.0 1.0 1 * CA CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CA N2 * 0.0000 0.0 6.8000 180.0 0.0000 0.0 1.0 1 * CA NA * 0.0000 0.0 6.0000 180.0 0.0000 0.0 1.0 1 * CA NC * 0.0000 0.0 9.6000 180.0 0.0000 0.0 1.0 1 * CB CB * 0.0000 0.0 16.3000 180.0 0.0000 0.0 1.0 1 * CB CN * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CB N* * 0.0000 0.0 6.6000 180.0 0.0000 0.0 1.0 1 * CB NB * 0.0000 0.0 5.1000 180.0 0.0000 0.0 1.0 3 * CB NC * 0.0000 0.0 8.3000 180.0 0.0000 0.0 1.0 1 * CC CF * 0.0000 0.0 14.3000 180.0 0.0000 0.0 1.0 1 * CC CG * 0.0000 0.0 15.9000 180.0 0.0000 0.0 1.0 1 * CC CT * 0.0000 0.0 0.0000 0.0 , 0.0000 0.0 1.0 1 * CC CV * 0 . 0000 0 . 0 14.3000 180.0 0.0000 0.0 1.0 1 * CC CW * 0.0000 0.0 15.9000 180.0 0.0000 0.0 1.0 1 * CC NA * 0.0000 0.0 5.6000 180.0 0.0000 0.0 1.0 1 * CC NB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * CD CD * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CD CN * 0.0000 0.0 5.3000 180.0 0.0000 0.0 1.0 1 * CE N* * 0.0000 0.0 6.7000 180.0 0.0000 0.0 1.0 1 * CE NB * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CF NB * 0.0000 0.0 4.8000 180.0 0.0000 0.0 1.0 1 * CG NA * 0.0000 0.0 6.0000 180.0 0.0000 0.0 1.0 1 * CH CH * 0.0000 0.0 0.0000 0.0 2.0000 0.0 1.0 1 * CH N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CH N* * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CH NT * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * CH OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * CH OS * 0.0000 0.0 0.0000 0.0 1.4500 0.0 1.0 1 * CI NC * 0.0000 0.0 13.5000 180.0 0.0000 0.0 1.0 1 * CJ CJ * 0.0000 0.0 24.4000 180.0 0.0000 0.0 1.0 1 * CJ CM * 0.0000 0.0 24.4000 180.0 0.0000 0.0 1.0 1 * CJ N* * 0.0000 0.0 7.4000 180.0 0.0000 0.0 1.0 1 * CK N* * 0.0000 0.0 6.7000 180.0 0.0000 0.0 1.0 1 * CK NB * 0.0000 0.0 20.0000 180.0 0.0000 0.0 1.0 1 * CM CM * 0.0000 0.0 24.4000 180.0 0.0000 0.0 1.0 1 * CM CT * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CM N* * 0.0000 0.0 7.4000 180.0 0.0000 0.0 1.0 1 * CN NA * 0.0000 0.0 12.2000 180.0 0.0000 0.0 1.0 1 * CP NA * 0.0000 0.0 9.3000 180.0 0.0000 0.0 1.0 1 * CP NB * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * CQ NC * 0.0000 0.0 13.5000 180.0 0.0000 0.0 1.0 1 * CR NA * 0.0000 0.0 9.3000 180.0 0.0000 0.0 1.0 1 * CR NB * 0.0000 0.0 10.0000 180.0 0.0000 0.0 1.0 1 * CT CT * 0.0000 0.0 0.0000 0.0 1.3000 0.0 1.0 1 * CT N * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N* * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N2 * 0.0000 0.0 0.0000 0.0 0.0000 0.0 1.0 1 * CT N3 * 0.0000 0.0 0.0000 0.0 1.4000 0.0 1.0 1 * CT OH * 0.0000 0.0 0.0000 0.0 0.5000 0.0 1.0 1 * CT OS * 0.0000 0.0 0.0000 0.0 1.1500 0.0 1.0 1 * CT S * 0.0000 0.0 0.0000 0.0 1.0000 0.0 1.0 1 * 0.0000 0.0 1.0 1 * 4.8000 180.0 1.0 1 * 6.0000 180.0 1.0 1 * 0.0000 0.0 1.0 1 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 0.0000 0.0 1.1 4 * 10.0000 180.0 1.1 4 * 0.0000 0.0 0.0000 0.0 1.0 1 * CT NT 0.0000 0.0 0.0000 0.0 1.8000 0.0 ******************************************************* DATA FILE - CX6C.CAR ******************************************************** !BIOSYM archive 3 PBC=OFF IDATE Thu Mar 2 10:02:29 1995 2.653307337 CYSn 1 3.732450018 CYSn 1 2.274560255 CYSn 1 2.280061368 CYSn 1 2.972980432 CYSn 1 2.506611212 CYSn 1 0.811322158 CYSn 1 0.469159517 CYSn 1 0.003030230 CYSn 1 0.616111991 CYSn 1 1.414398016 CYSn 1 0.464156147 GLY -1.099457509 GLY •0.652902307 GLY 2 -0.212395307 GLY 2 -0.116611463 GLY 2 -2.120728786 GLY 2 -2.957020570 GLY 2 -2.456098946 GLY 3 -1.646836012 GLY 3 -3.875321662 GLY 3 -3.972773051 GLY 3 -4.323795441 GLY 3 -4.547627543 GLY 3 -5.101282348 GLY 3 -4.520184621 GLY 4 -4.019658253 GLY 4 -5.170228610 GLY 4 -5.584558431 GLY 4 -5.994216851 GLY 4 -4.175561433 GLY 4 -4.436272241 GLY 4 -3.006608050 GLY 5 -2.879487738 GLY 5 3.689311240 -2.044877031 GLY 2.881830301 -2.144167698 GLY 4.658369322 • 2 . 297948016 GLY 3.643619035 -0.629041435 GLY 2.676595378 0.197242766 GLY 4.691871185 0.124033264 GLY 5.476492875 -0.348403798 GLY 4.647691975 1.492986659 GLY 4.010943092 1.515218779 GLY 4.194323221 2.125265975 GLY 6.023038258 1.963510280 GLY 7.036283245 1.285298717 GLY 6.077750863 3.136158080 GLY 7 5.133307510 3.640799839 GLY 7 7.407555656 3.591101372 GLY 7 7.303619509 4.286815466 GLY 7 7.847316876 4.127520148 GLY 7 8.258959996 2.434291753 GLY 7 9.494643783 2.487154063 GLY 7 7.605756209 1.358640986 CYSN 8 6.528240768 1.414418956 CYSN 8 8.428968216 0.240136508 CYSN 8 8.271042216 0.100059529 CYSN 8 8.018162291 -1.043072620 CYSN 8 9.902481747 0.610166221 CYSN 8 10.016688002 1.140264476 CYSN 8 10.541353385 -0.293951287 CYSN 8 10.532225816 1.688457720 CYSN 8 10.957145937 1.126774557 CYSN 8 11.329491558 2.359427872 CYSN 8 SEQUENCE LISTING (1) GENERAL INFORMATION: (i) APPLICANT: Deem, Michael . Rothberg, Jonathan M. Went, Gregory T. (ii) TITLE OF INVENTION: CONSENSUS CONFIGURATIONAL BIAS MONTE CARLO METHOD AND SYSTEM FOR PHARMACOPHORE STRUCTURE DETERMINATION (iii) NUMBER OF SEQUENCES: 10 (iv) CORRESPONDENCE ADDRESS: (A) ADDRESSEE: Peπnie & Edmonds (B) STREET: 1155 Avenue of the Americas (C) CITY: New York (D) STATE: New York (E) COUNTRY: USA (F) ZIP: 10036-2711 (v) COMPUTER READABLE FORM: (A) MEDIUM TYPE: Floppy disk (B) COMPUTER: IBM PC compatible (C) OPERATING SYSTEM: PC-DOS/MS-DOS (D) SOFTWARE: PatentIn Release #1.0, Version #1.30 (vi) CURRENT APPLICATION DATA: (A) APPLICATION NUMBER: To Be Assigned (B) FILING DATE: On Even Date Herewith (C) CLASSIFICATION: (viii) ATTORNEY/AGENT INFORMATION: (A) NAME: Miβrock, S. Leslie (B) REGISTRATION.NUMBER: 18,872 (C) REFERENCE/DOCKET NUMBER: 7934-007 (ix) TELECOMMUNICATION INFORMATION: (A) TELEPHONE: (212) 790-9090 (B) TELEFAX: (212) 869-9741/8864 (C) TELEX: 66141 PENNIE (2) INFORMATION FOR SEQ ID NO:l: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 6 amino acids (B) TYPE: amino acid (D) TOPOLOGY: unknown (ii) MOLECULE TYPE: peptide (ix) FEATURE: (A) NAME/KEY: Diβulfide-bond (B) LOCATION: 1..8 (D) OTHER INFORMATION: /note= "A disulfide bond is formed between the cysteine residueβ." (xi) SEQUENCE DESCRIPTION: SEQ ID NO:l: Cys Xaa Xaa Xaa Xaa Xaa Xaa Cys 1 5 (2) INFORMATION FOR SEQ ID NO:2: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 102 base pairs (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: linear (li) MOLECULE TYPE: DNA (xi) SEQUENCE DESCRIPTION: SEQ ID NO:2: ACTTCGAAAT TAATACGACT CACTATAGGG AGACCACAAC GGTTTCCCTC CAGAAATAAT 60 TTTGTTTAAC TTTAACTTTA AGAAGGAGAT ATACATATGC AT 102 (2) INFORMATION FOR SEQ ID NO:3: (l) SEQUENCE CHARACTERISTICS: (A) LENGTH: 83 base pairs (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: linear (li) MOLECULE TYPE: DNA (Xl) SEQUENCE DESCRIPTION: SEQ ID NO:3: CCCAGACCCG CCCCCAGCAT TGTGGGTTCC AACGCCCTCT AGACAMNNMN NMNNKNNMNN 60 MNNACAATGT ATATCTCCTT CTT 83 (2) INFORMATION FOR SEQ ID NO: : (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 48 base pairs (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: linear (li) MOLECULE TYPE: DNA (Xl) SEQUENCE DESCRIPTION: SEQ ID NO:4: TCGTCTGACC TGCCTCAACC TCCCCACAAT GCTGGCGGCG GCTCTGGT 48 (2) INFORMATION FOR SEQ ID NO:5: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 42 base pairs (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: linear (ii) MOLECULE TYPE: DNA (xi) SEQUENCE DESCRIPTION: SEQ ID NO: 5: ATCAAGTTTG CCTTTACCAG CATTGTGGAG CGCGTTTTCA TC 42 (2) INFORMATION FOR SEQ ID NO: 6: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 10 amino acide (B) TYPE: amino acid (D) TOPOLOGY: unknown (ii) MOLECULE TYPE: peptide (xi) SEQUENCE DESCRIPTION: SEQ ID NO:6: Met Hie Cys Xaa Xaa Xaa Xaa Xaa Xaa Cys 1 5 10 (2) INFORMATION FOR SEQ ID NO:7: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 8 amino acids (B) TYPE: amino acid (D) TOPOLOGY: unknown (ii) MOLECULE TYPE: peptide (xi) SEQUENCE DESCRIPTION: SEQ ID NO:7: Cys Gly Gly Gly Gly Gly Gly Cys 1 5 (2) INFORMATION FOR SEQ ID NO:8: <i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 30 base pairβ (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: unknown (ii) MOLECULE TYPE: DNA (xi) SEQUENCE DESCRIPTION: SEQ ID NO:8: NNKNNKNNKN NKNNKNNKNN KNN NNKNNK 30 (2) INFORMATION FOR SEQ ID NO:9: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 47 base pairs (B) TYPE: nucleic acid (C) STRANDEDNESS: single (D) TOPOLOGY: linear (ii) MOLECULE TYPE: DNA (xi) SEQUENCE DESCRIPTION: SEQ ID NO:9: ACTTCGAAAT TAATACGACT CACTATAGGG AGACCACAAC GGTTTCC (2) INFORMATION FOR SEQ ID NO: 10: (i) SEQUENCE CHARACTERISTICS: (A) LENGTH: 9 amino acids (B) TYPE: amino acid (D) TOPOLOGY: unknown (ii) MOLECULE TYPE: peptide (xi) SEQUENCE DESCRIPTION: SEQ ID NO: 10: Cys Aβn Thr Leu Lys Gly Asp Cys Gly 1 5

Claims: WHAT IS CLAIMED IS: 1. A method of determining a consensus pharmacophore structure comprising the steps of: (a) identifying from one or more diversity libraries a plurality of compounds that bind to a target molecule, (b) measuring one or more distances in one or more of the compounds, and (c) determining a consensus pharmacophore structure for the compounds. 2. The method of claim 1 wherein said compounds are peptides, peptide derivatives, or peptide analogs. 3. The method of claim 2 wherein said compounds are peptides containing one or more cystines. 4. The method of claim 3 wherein the peptides comprise the sequence CX 6 C (SEQ ID N0:1). 5. The method of claim 1 further comprising a step of selecting a plurality of candidate pharmacophores based on rules of chemical homology, the selected plurality of candidate pharmacophores being used in step (c) to determine the consensus pharmacophore structure. 6. The method of claim 5 wherein the rules of homology determine that two candidate pharmacophores are homologous if they have chemically similar side chains. 7. The method of claim 1 which further comprises after said identifying step, a screening step involving a genetic selection technique. 8. The method of claim 1 wherein the step of measuring distance comprises making solid phase nuclear magnetic resonance measurements on selected nuclei in a nuclear magnetic resonance spectrometer upon a sample comprising one of the compounds. 59. The method of claim 8 wherein the step of measuring distances further comprises making rotational echo double resonance nuclear magnetic resonance measurements of internuclear dipole-dipole interaction strength between selected nuclei in the compound in the sample. 10 10. The method of claim 8 wherein the sample further comprises a substrate having a surface to which the compound is attached. 1511. The method of claim 8 wherein the sample iε cooled below room temperature. 12. The method of claim 8 wherein the compound is bound to the target molecule. 20 13. The method of claim 10 wherein a plurality of the compound is attached to the surface at a surface density such that the inter-nuclear dipole-dipole interactions between different molecules is less than 10% of the 25 inter-nuclear dipole-dipole interaction within one molecule. 14. The method of claim 10 wherein the substrate has pores of sufficient size to permit the target to diffuse and bind 30 to the compound in the sample. 15. The method of claim 9 wherein rotational echo double resonance nuclear magnetic resonance measurements can be made on the compound bound to the target or hydrated or 35 in a dry nitrogen atmosphere. 16. The method of claim 10 wherein the compound is a peptide, and a plurality of the peptide is attached to the substrate surface, which has a purity of the peptide of at least 95% and wherein the surface density of the 5 peptide is no more than one peptide per 100 A 2 of substrate surface. 17. The method of claim 10 wherein the substrate is selected from the group consisting of p-MethylBenzhydrilamine 10 resin, divinylbenzyl polystyrene resin, and glass beads. 18. The method of claim 8 wherein the selected nuclei are selected from the group consisting of l3 C, 15 N, ,9 F, and 31 P. 1519. The method of claim 9 wherein the nuclear magnetic resonance spectrometer comprises magnetic excitation means, a sample rotor, and free induction decay observing means, and the step of making rotational echo double resonance nuclear magnetic resonance measurementε further 20 comprises the steps of: (a) spinning the sample in the sample rotor, (b) initially exciting magnetically the selected nuclei to be observed, (c) providing subsequently one v spin flip magnetic 25 excitation during each rotor period to each of the selected nuclei, the pulses to the different nuclei having fixed phase delays, (d) observing the free induction decay signal as a function of the number of rotor periods; and 30 (e) finding the dipole-dipole strength between the selected nuclei, whereby the internuclear distance between the selected nuclei can be obtained. 20. The method of claim 1 wherein the step of measuring 35 distances comprises making liquid phase nuclear magnetic resonance measurement . 21. A method of determining a consensus pharmacophore structure comprising the steps of: (a) identifying from one or more diversity libraries a plurality of compounds that bind to a target molecule, (b) determining a consensus pharmacophore structure for the compounds. 22. A method of determining a consensus pharmacophore structure comprising the steps of: (a) measuring one or more distances in one or more compounds that bind to a target molecule, and (b) determining a consensus pharmacophore structure for the compounds. 23. The method of claim 21 or 22 further comprising a step of selecting a plurality of candidate pharmacophores based on rules of chemical homology, the selected plurality of candidate pharmacophores being used in step (b) to determine the consensus pharmacophore structure. 24. The method of claim 23 wherein the compounds have limited conformational degrees of freedom at the temperature of interest, and wherein the step of determining a consensus pharmacophore structure for each compound further comprises, performing a consensus configurational bias Monte Carlo method, said Monte Carlo method comprising the steps of: (a) generating a proposed structure for a compound identified from said one or more diversity libraries by making conformational alterations consistent with the conformational degrees of freedom, the alterations being made to a representation of the compound's current chemical and conformational structure to generate a proposed representation, the proposed structure being generated with a bias toward more acceptable configurations of lower energy, whereby the method is made more efficient, (b) accepting and storing the proposed structure according to a probability depending on an energy determined for the proposed structure, and (c) repeating these steps until sufficient structures have been stored for each compound to permit statistically significant determination of an equilibrium structure for each compound. 25. A method of determining one or more lead compounds for use as a drug that binds to a target molecule comprising the steps of: (a) identifying from one or more diversity libraries a plurality of compounds that bind to a target molecule; (b) determining a consensus pharmacophore structure for the compounds; and (c) determining one or more lead compounds for use as a drug which share a pharmacophore specification with the determined consensus pharmacophore structure. 26. A method of determining one or more lead compounds for use as a drug that binds to a target molecule comprising the steps of: (a) measuring one or more distances in one or more compounds that bind to a target molecule; (b) determining a consensus pharmacophore structure for the compounds; and (c) determining one or more lead compounds for use as a drug which share a pharmacophore specification with the determined consensus pharmacophore structure. 27. The method according to claim 25 or 26 wherein said step of determining one or more lead compounds comprises modifying a compound identified as binding to the target molecule, said modification being done outside of the pharmacophore structure, to render the compound more attractive for use as a drug. 28. The method of claim 5 wherein the compounds have limited conformational degrees of freedom at a temperature of interest, and wherein the step of determining a consensus pharmacophore structure for the compounds further comprises performing a consensus configurational bias Monte Carlo method, said Monte Carlo method comprising the steps of: (a) generating a proposed structure for a compound identified from said one or more diversity libraries by making conformational alterations consistent with the conformational degrees of freedom, the alterations being made to a representation of the compound's current chemical and conformational structure to generate a proposed representation, the proposed structure being generated with a bias toward more acceptable configurations of lower energy, (b) accepting and storing the proposed structure according to a probability depending on an energy determined for the proposed structure, and (c) repeating these steps until sufficient structures have been stored for each compound to permit statistically significant determination of an equilibrium structure for each compound. 29. The method of claim 28 wherein the limited conformational degrees of freedom comprise torsional rotations about mutual bonds between otherwise rigid subunits of the compound, each rigid unit's representation comprising its interconnections and atomic composition, each atom's representation comprising its type and position, the torsional rotations respecting any conformational constraints present. 30. The method of claim 28 wherein the compound is a peptide, peptide derivative, or peptide analog. 31. The method of claim 28 wherein the conformational alterations comprise constrained, concerted torsional rotations or removal of a side chain and regrowth of the side chain with a new torsional conformation. 32. The method of claim 31 wherein the constrained, concerted torsional rotations are constrained so that no more than four rigid units are spatially displaced. 33. The method of claim 28 wherein determining the energy for the proposed structure of one compound comprises including one or more constraint terms which represent knowledge of measured structure for the compound. 34. The method of claim 33 wherein the constraint terms comprise a weighted sum of squares of differences of the actual and measured structures. 35. The method of claim 28 wherein the energy is determined for the proposed structure of one compound by a method comprising including consensus terms which represent knowledge that the identified compounds all bind to the same target, the compounds being otherwise treated independently by the method. 36. The method of claim 35 wherein the consensus terms are a weighted sum of squares of differences in the atomic positions of a candidate pharmacophore from the average values of these positions in all the compounds. 37. The method of claim 35 wherein the step of determining the consensus pharmacophore structure comprises determining from the plurality of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are relatively small compared to the total energy. 38. The method of claim 35 wherein the step of determining 5 the consensus pharmacophore structure comprises determining from the plurality of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are minimum compared to other selected regions. 10 39. The method of claim 28 wherein the equilibrium εtructure is determined by a method comprising averaging selected generated and accepted structures for each compound. 1540. The method of claim 39 wherein the averaging of structures comprises clustering selected generated and accepted structures into sets of similar structureε and averaging these sets for each member. 2041. A method of identifying a compound that bindε to a target molecule comprising the following steps in the order stated: (a) contacting compounds of a phage display or polysome- based diversity library with a target molecule; 25 (b) identifying one or more compounds in the library that bind to the target molecule; (c) contacting one or more first fusion proteins, each first fusion protein comprising an identified compound, with a second fusion protein comprising 30 the target molecule or a binding portion thereof, in which binding of the first fusion protein to the second fusion protein results in an increase in activity or activation of a transcriptional promoter or an origin of replication; and 35 (d) identifying one or more of the compounds that when present in said first fusion protein result in said increase in activity or activation. 42. A method of making solid state nuclear magnetic resonance measurements comprising measuring internuclear dipole- dipole interaction strengths between selected nuclei in a compound, said compound being attached to the surface of a substrate. 43. The method of claim 42 which further comprises before said measuring step the step of synthesizing a plurality of said compound on the surface of the substrate. 44. The method of claim 43 wherein said plurality of the compound is at least 95% pure. 45. The method of claim 42 wherein a plurality of said compound is attached to the substrate surface, with at least 10 A spacing between molecules of the compound. 46. The method of claim 42 wherein the substrate has poreε of sufficient size to permit a molecule to diffuse and bind to the compound. 47. The method of claim 42 wherein the substrate has a surface density of the compound such that the inter¬ nuclear dipole-dipole interactions between different moleculeε of the compound iε less than 10% of the inter¬ nuclear dipole-dipole interaction within one molecule of the compound. 48. The method of claim 42 wherein the compound is a peptide, peptide derivative, or peptide analog. 49. The method of claim 42 wherein the substrate is selected from the group consisting of p-MethylBenzhydrilamine resin, divinylbenzyl polystyrene resin, and a glass bead. 50. The method of claim 42 wherein said measuring step comprises using a nuclear magnetic resonance spectrometer, said spectrometer comprising magnetic excitation means, a sample rotor, and free induction decay observing means; and said measurement of internuclear dipole-dipole interaction is done by a method comprising the steps of: (a) spinning the sample in the sample rotor; (b) initially exciting magnetically the selected nuclei to be observed; (c) providing subsequently one or more n spin flip magnetic excitations during each rotor period to one or both of the selected nuclei, wherein pulses to the different nuclei have fixed phase delays; (d) observing a free induction decay signal as a function of the number of rotor periods; and (e) determining the dipole-dipole εtrength between the selected nuclei, whereby the internuclear distance between the selected nuclei can be obtained. 51. A method of configurational bias Monte Carlo determination of the structure of a compound having limited conformational degrees of freedom at a temperature of interest, the method comprising the steps of: (a) generating a proposed structure for the compound by making conformational alterations consistent with the conformational degrees of freedom, the alterations being made to a representation of the compound's current chemical and conformational structure to generate a proposed representation; (b) accepting and storing the proposed structure according to a probability depending on an energy determined for the proposed structure; and (c) repeating these steps until sufficient structures have been stored to permit statistically significant determination of an equilibrium structure. 52. The method of claim 51 wherein the conformational degrees of freedom comprise torsional rotations about mutual bonds between otherwise rigid subunits of the compound, each rigid unit's representation comprising its 5 interconnections and atomic composition, each atom's representation comprising its type and position, the torsional rotations respecting any conformational constraints present. 1053. The method of claim 51 wherein the compound is a peptide, peptide derivative, or peptide analog. 54. The method of claim 51 wherein the conformational alterations comprise constrained, concerted torεional 15 rotations. 55. The method of claim 54 wherein the constrained, concerted torsional rotations are constrained so that no more than four rigid units are spatially displaced. 20 56. The method of claim 51 wherein the conformational alterations comprise removal of a side chain and regrowth of the side chain with a new torsional conformation. 2557. The method of claim 51 wherein the proposed structureε are generated with a bias toward more acceptable configurations of lower energy. 58. The method of claim 51 wherein the energy is determined 30 for the proposed structure by a method comprising including constraint terms which represent knowledge of measured structure for the compound. 59. The method of claim 58 wherein the constraint terms 35 comprise a weighted sum of squares of differences of the actual and measured structures. 60. The method of claim 51 applied to a plurality of compounds of limited conformational degrees of freedom all of which bind to the same target molecule wherein the method further comprises a step of selecting a plurality 5 of candidate pharmacophores based on rules of chemical homology. 61. The method of claim 60 wherein the energy is determined for the proposed structure of one of the plurality of 10 compounds by a method comprising including consensus terms which represent knowledge that the compounds all bind to the same target molecule. 62. The method of claim 61 wherein the consensus terms are a 15 weighted sum of squares of differences in the atomic positions of a candidate pharmacophore of said one of the plurality of compounds from the average values of these positions in all the compounds. 2063. The method of claim 61 which further comprises a step of determining a consensus pharmacophore structure by determining from the plurality of selected candidate pharmacophores that candidate pharmacophore for which the consensus terms are minimum compared to other candidate 25 pharmacophores. 64. The method of claim 60 which further comprises a step of determining a consensus pharmacophore structure by determining from the plurality of selected candidate 30 pharmacophores that candidate pharmacophore for which the consensus terms are relatively small compared to the total energy. 65. The method of claim 63 or 64 which further comprises a 35 step of determining one or more lead compounds for use as a drug which share a pharmacophore specification with the determined consensus pharmacophore structure. 66. The method of claim 51 wherein the equilibrium structure is determined by a method comprising averaging selected generated and accepted structures. 567. The method of claim 66 wherein the averaging of structures comprises clustering selected generated and accepted structures into sets of similar structures and averaging these sets. 1068. An apparatus for configurational bias Monte Carlo determination of the structure of a compound having limited conformational degrees of freedom at a temperature of interest, the apparatus comprising: (a) memory means for storing 15 (i) data structures representing the compound's chemical and conformational structure consistently with the compound's degreeε of freedom, (ii) similar data structures representing the 20 compound's proposed structure and prior structures, and (iii) parameters representing atomic interactions, and (b) processor means for executing programs for 25 (i) generating a proposed structure by making conformational alterations consistent with the conformational degrees of freedom and with a bias toward more acceptable configurations of lower energy, 30 (ii) accepting and storing the proposed structure according to a probability depending on an energy determined for the proposed structure, and (iii) repeating these steps until sufficient 35 structures have been stored to permit statistically significant determination of an equilibrium structure. 69. The apparatus of claim 68 wherein the conformational degrees of freedom comprise torsional rotations about mutual bonds between otherwise rigid subunits of the compound, each rigid unit's representation comprising its 5 interconnections and atomic composition, each atom's representation comprising its type and position, the torsional rotations respecting any conformational constraints present. 1070. The apparatus of claim 68 wherein the compound is a peptide, peptide derivative, or peptide analog. 71. The apparatus of claim 68 wherein the memory, procesεor, and control meanε are configured from a workεtation type 15 digital computer comprising RAM memory, disk memory, processor, and input and display devices. 72. The apparatus of claim 68 wherein the conformational alterations made by the processor means further comprise 20 constrained, concerted torsional rotations or removal of a side chain and regrowth of the side chain with a new torsional conformation. 73. The apparatus of claim 72 wherein the constrained, 25 concerted torsional rotations are constrained so that no more than four rigid units are spatially displaced. 74. The apparatus of claim 68 wherein the processor means determines an energy for the proposed structure by a 30 method comprising including constraint terms which represent knowledge of measured structure for the compound. 75. The apparatus of claim 74 wherein the constraint terms 35 comprise a weighted sum of squares of differences of the actual and measured structures. 76. The apparatus of claim 68 applied to a plurality of compounds of limited conformational degrees of freedom all of which bind to the same target molecule, and wherein the processor means further comprises programs 5 for selecting a plurality of candidate pharmacophores based on rules of chemical homology. 77. The apparatus of claim 76 wherein the processor means determines an energy for the proposed structure of any 10 one compound by a method comprising including consensus terms which represent knowledge that the compounds all bind to the same target molecule. 78. The apparatus of claim 77 wherein the consensus terms are 15 a weighted sum of squares of differences in the atomic positions of the candidate pharmacophore of said one compound from the average values of these positionε in all the compounds. 2079. The apparatus of claim 77 wherein the processor means further comprises programs for determining a consensus pharmacophore structure by determining from the plurality of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are minimum 25 compared to other candidate pharmacophores. 80. The apparatus of claim 77 wherein the processor means further comprises programs for determining a consensus pharmacophore structure by determining from the plurality 30 of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are relatively small compared to the total energy. 81. The apparatus of claim 79 or 80 wherein the processor 35 means further comprises programs for determining one or more lead compounds for use as a drug that share a pharmacophore specification with the consensus pharmacophore structure. 82. The apparatus of claim 68 wherein the processor means determines an equilibrium structure by a method comprising averaging selected generated and accepted structures. 83. The apparatus of claim 82 wherein the averaging of structures further comprises clustering selected generated and accepted structures into sets of εimilar εtructureε and averaging theεe sets. 84. In a digital computer, apparatus for configurational bias Monte Carlo determination of the structure of at least one compound having limited conformational degrees of freedom at a temperature of interest, said apparatus comprising: (a) firεt memory means for storing data structureε representing the compound's chemical and conformational structure consistently with the compound's degrees of freedom, (b) second memory means for storing similar data structures representing the compound's proposed structure, (c) third memory means for storing similar data structures representing the compound's prior structures, (d) first processor means for generating a proposed structure by making conformational alterations consistent with the conformational degrees of freedom and with a bias toward conformations of lower energy, (e) second processor means for accepting and storing the proposed structure according to a probability depending on an energy determined for the proposed structure, and (f) third processor means for controlling and repeating the generation and acceptance until sufficient structures have been stored to permit statistically significant determination of an equilibrium 5 structure. 85. The digital computer apparatus of claim 84 wherein the conformational degreeε of freedom comprise torsional rotations about mutual bonds between otherwise rigid 10 subunits of the compound, each rigid unit's representation comprising its interconnections and atomic composition, each atom's representation comprising its type and position, the torsional rotations reεpecting any conformational conεtraintε preεent. 15 86. The digital computer apparatuε of claim 84 wherein the compound iε a peptide, peptide derivative, or peptide analog. 2087. The digital computer apparatuε of claim 84 wherein the digital computer iε a workstation type digital computer comprising RAM memory, disk memory, processor, and input and display devices. 2588. The digital computer apparatus of claim 84 wherein the conformational alterations generated by the first processor means comprise constrained, concerted torsional rotations or removal of a side chain and regrowth of the side chain with a new torsional conformation. 30 89. The digital computer apparatus of claim 88 wherein the constrained, concerted torsional rotations are constrained so that no more than four rigid units are spatially displaced. 35 90. The digital computer apparatus of claim 84 wherein the second processor meanε determines an energy for the proposed structure by a method comprising including constraint terms which represent knowledge of measured structure for the compound. 591. The digital computer apparatus of claim 90 wherein the constraint terms comprise a weighted sum of squares of differences of the actual and measured structures. 92. The digital computer apparatus of claim 84 in which said 0 at least one compound is a plurality of compounds of limited conformational degrees of freedom all of which bind to the same target and wherein data are stored in said first memory means representing the chemical and conformational structure of said plurality of compounds 5 and wherein the apparatus further compriseε additional processor means for selecting a plurality of candidate pharmacophores based on rules of chemical homology. 93. The digital computer apparatuε of claim 92 wherein the 0 second processor means determines an energy for the proposed structure of one of said plurality of compounds by a method comprising including consensuε terms which represent knowledge that the compounds all bind to the same target molecule. 5 94. The digital computer apparatus of claim 92 wherein the consensus terms are a weighted sum of squares of differences in the atomic positions of a candidate pharmacophore of said one of the plurality of compounds 0 from the average values of these positions in all the compounds. 95. The digital computer apparatus of claim 93 wherein the apparatus further comprises processor means for 5 determining a consensus pharmacophore structure by determining from the plurality of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are relatively small compared to the total energy. 96. The digital computer apparatus of claim 93 wherein the apparatus further comprises processor means for determining a consensus pharmacophore structure by determining from the plurality of selected candidate pharmacophores a candidate pharmacophore for which the consensus terms are minimum compared to other candidate pharmacophores. 97. The digital computer apparatuε of claims 95 or 96 wherein the apparatus further compriεes proceεsor meanε for determining one or more lead compounds for uεe aε a drug that share a pharmacophore specification with the consensus pharmacophore structure. 98. The digital computer apparatuε of claim 84 wherein the third processor meanε determineε an equilibrium εtructure by a method comprising averaging selected generated and accepted structures. 99. The digital computer apparatus of claim 98 wherein the averaging of structures comprises clustering selected generated and accepted structures into sets of similar structures and averaging these sets. 100. In a digital computer, apparatus for configurational bias Monte Carlo determination of the structure of a plurality of compounds having limited conformational degrees of freedom, each compound having a backbone and side chains, said apparatus comprising: (a) first memory means for storing data structures representing each compound's chemical and conformational structure consistently with that compound's degrees of freedom and constraints, (b) second memory means for storing similar data structures representing a proposed structure for one or more of the compounds, (c) third memory means for storing similar data structures representing prior structures of the plurality of compounds, (d) first processor means for generating a proposed structure of a randomly selected compound by making conformational alterations consistent with the conformational degrees of freedom, the conformational alterations being randomly distributed between alterationε that alter the εtructure of a randomly εelected εide chain of the εelected compound and alterationε that alter the structure of a randomly selected region of the backbone of the selected compound, the proposed structure being stored in the second memory means, the proposed structure being generated with a bias toward more acceptable structureε of lower energy, whereby the method iε made more efficient, (e) second processor means for accepting a proposed structure according to a probability depending on an energy determined for the proposed εtructure, the energy including terms repreεenting physical interactions and terms representing heuristic information about the compound's structure, the heuristic information comprising knowledge about measured distances in one or more compounds of said plurality and about the plurality of the compounds binding to a same target molecule, (f) third processor means for controlling and repeating these steps until sufficient structures have been generated and accepted to permit statistically significant determination of an equilibrium structure. 101. The digital computer of claim 100 wherein the conformational degrees of freedom comprise torsional rotations about mutual bonds between otherwise rigid subunits of the compound, each rigid unit's 5 representation comprising its interconnections and atomic composition, each atom's representation comprising its type and position, the torsional rotations respecting any conformational constraints present. 10102. The digital computer of claim 100 wherein the compound is a peptide, peptide derivative, or peptide analog. 103. A method of configurational bias Monte Carlo determination of the structure of a compound selected 15 from the group consiεting of a peptide, peptide derivative, and peptide analog, the method compriεing the steps of: (a) representing the conformation of the compound by interconnected rigid units capable of torsional 20 rotation about common bondε, each rigid unit'ε representation comprising its interconnections and atomic composition, each atom'ε repreεentation compriεing itε type and poεition, (b) generating a proposed structure by making 25 conformational alterations consiεtent with the compound's structure, (c) accepting a proposed structure according to a probability depending on an energy determined for the proposed structure, and 30 (d) repeating these steps until sufficient structures have been generated and accepted to permit statistically significant determination of an equilibrium structure. 35104. An apparatus for configurational bias Monte Carlo determination of the structure of a compound selected from the group consisting of a peptide, peptide derivative, and peptide analog, the apparatus comprising: (a) memory means for storing (i) data structures representing the compound's conformation as interconnected rigid unitε capable of torsional rotation about common bonds, each rigid unit's representation comprising its interconnections and atomic composition, each atom'ε repreεentation comprising its type and position, (ii) εimilar data structures representing the compound's proposed εtructure and prior structures, and (iii) parameters representing atomic interactions, and (b) processor means for executing programs for (i) generating a propoεed εtructure by making conformational alterationε conεiεtent with the compound's εtructure and with a bias toward more acceptable configurations of lower energy, (ii) accepting a proposed structure according to a probability depending on an energy determined for the proposed εtructure, and (iii) repeating these steps until sufficient structures have been generated and accepted to permit statistically significant determination of an equilibrium structure. 105. In a digital computer, apparatus for configurational bias Monte Carlo determination of the structure of a compound selected from the group consisting of a peptide, peptide derivative, and peptide analog, said apparatus comprising: (a) first memory means for storing data structures representing the compound's structure as interconnected rigid units capable of torsional rotation about common bonds, each rigid unit's representation comprising its interconnections and atomic composition, each atom's representation comprising its type and position, (b) second memory means for storing similar data structures representing the compound's proposed structure, (c) third memory means for storing εimilar data structures representing the compound's prior structures, (d) first processor means for generating a propoεed εtructure by making conformational alterations consistent with the compound's structure and constraintε and with a biaε toward conformations of lower energy, (e) second processor meanε for accepting a propoεed structure according to a probability depending on an energy determined for the proposed structure, and (f) third processor means for controlling and repeating these steps until εufficient structures have been generated and accepted to permit statistically significant determination of an equilibrium structure. 106. In a digital computer, apparatus for configurational biaε Monte Carlo determination of the εtructure of a plurality of compoundε selected from the group consisting of peptides, peptide derivatives, and peptide analogs, each compound having a backbone and side chains, said apparatus comprising: (a) first memory means for storing data structures representing each compound's structure as interconnected rigid units capable of torsional rotation about common bonds, each rigid unit'ε representation comprising its interconnectionε and atomic composition, each atom's representation comprising its type and position, (b) second memory means for storing similar data structures representing a proposed εtructure for one or more of the compounds, (c) third memory meanε for εtoring εimilar data 5 structures representing prior structures of the plurality of the compounds, (d) first processor means for generating a proposed structure of a randomly selected compound by making conformational alterations consistent with the 10 compound's structure, the conformational alterations being randomly distributed between alterations that alter the structure of a randomly selected side chain of the selected compound and alterationε that alter the structure of a randomly selected region of 15 the backbone of the εelected compound, the propoεed structure being stored in the second memory means, the proposed structure being generated with a bias toward more acceptable structureε of lower energy, (e) εecond proceεsor means for accepting a propoεed 20 structure according to a probability depending on an energy determined for the proposed structure, the energy including terms representing physical interactions and terms representing heuriεtic information about the compound'ε εtructure, the 25 heuristic information comprising knowledge about measured distances in one or more compounds of said plurality and about the plurality of the compoundε binding to a same target molecule, (f) third procesεor meanε for controlling and repeating 30 these steps until sufficient structureε have been generated and accepted to permit statistically significant determination of an equilibrium structure. 35107. The method of claim 42 wherein the nuclear magnetic resonance is rotational echo double reεonance. The method of claim 1 wherein the diversity libraries are structurally constrained organic diversity libraries.

Inventors: DEEM MICHAEL W, ROTHBERG JONATHAN M, WENT GREGORY T, DEEM, MICHAEL, W., ROTHBERG, JONATHAN, M., WENT, GREGORY, T.
Applicants: CURAGEN CORP, CURAGEN CORPORATION
Application year: 1996
Main classification: G06F17
IPC codes: C07B61, C07K1, G01N33, G06F17