unpacked
|
aspirin.class,
aspirin.java,
aterm.class,
aterm.java,
atom.class,
atom.java,
buckybal.class,
buckybal.java,
carbon.class,
carbon.java,
diamond.class,
diamond.java,
dl_atom.class,
dl_atom.java,
dl_bond.class,
dl_bond.java,
dlentry.class,
dlentry.java,
dlforce.class,
dlforce.java,
group.class,
group.java,
hydrogen.class,
hydrogen.java,
lrterm.class,
lrterm.java,
lterm.class,
lterm.java,
nanocad.class,
nanocad.java,
ncad.html,
nitrogen.class,
nitrogen.java,
oxygen.class,
oxygen.java,
propane.class,
propane.java,
term.class,
term.java,
tterm.class,
tterm.java,
tworings.class,
tworings.java,
view.class,
view.java,
water.class,
water.java,
wrapper.class,
wrapper.java
|
|
|
/**
* tterm.java - MM2-style torsion energy term
* Copyright (c) 1997 Will Ware, all rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* or its derived works must display the following acknowledgement:
* This product includes software developed by Will Ware.
*
* This software is provided "as is" and any express or implied warranties,
* including, but not limited to, the implied warranties of merchantability
* or fitness for any particular purpose are disclaimed. In no event shall
* Will Ware be liable for any direct, indirect, incidental, special,
* exemplary, or consequential damages (including, but not limited to,
* procurement of substitute goods or services; loss of use, data, or
* profits; or business interruption) however caused and on any theory of
* liability, whether in contract, strict liability, or tort (including
* negligence or otherwise) arising in any way out of the use of this
* software, even if advised of the possibility of such damage.
*/
import java.lang.Math;
import java.util.Vector;
import atom;
public class tterm extends term
{
public static final String rcsid =
"$Id: tterm.java,v 1.12 1997/10/17 14:49:09 wware Exp $";
private double v1, v2, v3;
public tterm (atom a1, atom a2, atom a3, atom a4)
{
int i;
boolean found;
myAtoms = new atom[4];
myAtoms[0] = a1;
myAtoms[1] = a2;
myAtoms[2] = a3;
myAtoms[3] = a4;
for (i = 0, found = false; i < torsionCoeffs.length && !found; i++)
if ((a1.atomicNumber () == torsionCoeffs[i][0] &&
a1.hybridization == torsionCoeffs[i][1] &&
a2.atomicNumber () == torsionCoeffs[i][2] &&
a2.hybridization == torsionCoeffs[i][3] &&
a3.atomicNumber () == torsionCoeffs[i][4] &&
a3.hybridization == torsionCoeffs[i][5] &&
a4.atomicNumber () == torsionCoeffs[i][6] &&
a4.hybridization == torsionCoeffs[i][7]) ||
(a1.atomicNumber () == torsionCoeffs[i][6] &&
a1.hybridization == torsionCoeffs[i][7] &&
a2.atomicNumber () == torsionCoeffs[i][4] &&
a2.hybridization == torsionCoeffs[i][5] &&
a3.atomicNumber () == torsionCoeffs[i][2] &&
a3.hybridization == torsionCoeffs[i][3] &&
a4.atomicNumber () == torsionCoeffs[i][0] &&
a4.hybridization == torsionCoeffs[i][1]))
{
found = true;
// convert table numbers from maJ to aJ (10^-18 joules)
v1 = 0.001 * torsionCoeffs[i][8];
v2 = 0.001 * torsionCoeffs[i][9];
v3 = 0.001 * torsionCoeffs[i][10];
}
if (!found)
v1 = v2 = v3 = 0.0;
}
// need these routines to make sure a bond doesn't already exist
public boolean redundant (tterm t)
{
if ((t.myAtoms[0] == myAtoms[0] &&
t.myAtoms[1] == myAtoms[1] &&
t.myAtoms[2] == myAtoms[2] &&
t.myAtoms[3] == myAtoms[3]) ||
(t.myAtoms[3] == myAtoms[0] &&
t.myAtoms[2] == myAtoms[1] &&
t.myAtoms[1] == myAtoms[2] &&
t.myAtoms[0] == myAtoms[3]))
return true;
return false;
}
public void enumerate (Vector atomList, Vector termList)
{
int i, j, k, l;
for (i = 0; i < atomList.size (); i++)
{
atom a1 = (atom) atomList.elementAt (i);
if (a1 != null)
for (j = 0; j < a1.bonds.size (); j++)
{
atom a2 = (atom) a1.bonds.elementAt (j);
if (a2 != null)
for (k = 0; k < a2.bonds.size (); k++)
{
atom a3 = (atom) a2.bonds.elementAt (k);
if (a3 != null)
for (l = 0; l < a3.bonds.size (); l++)
{
atom a4 = (atom) a3.bonds.elementAt (l);
if (a4 != null)
if (a1 != a2 && a1 != a3 && a2 != a3 &&
a1 != a4 && a2 != a4 && a3 != a4)
{
tterm t = new tterm (a1, a2, a3, a4);
if (!t.redundant (termList))
{
termList.addElement (t);
}
}
}
}
}
}
}
private final static double PI = 3.14159265258979;
// I found, much to my dismay, that I had been miscalculating torsion
// forces for years! How embarassing. Now I've decided to just steal the
// correct torsion code from the NAMD program and translate it from C++
// to Java.
public void computeForces ()
{
double r12[], r23[], r34[]; // Vectors between atoms
double f1[], f2[], f3[]; // Forces 1 through 3
double A[], B[], C[]; // Cross product vectors
double dcosdA[]; // Derivative d(cos(phi))/dA
double dcosdB[]; // Derivative d(cos(phi))/dB
double dsindC[]; // Derivative d(sin(phi))/dC
double dsindB[]; // Derivative d(sin(phi))/dB
double rA, rB, rC; // Length of vectors A, B, and C
double phi; // angle between the plans
double cos_phi; // cos(phi)
double sin_phi; // sin(phi)
double delta; // Phase shift of the current dihedral
double k; // Force constant of the current dihedral
int n; // Periodicity
double K, K1; // Calculated factor
double diff; // Difference between phi and phi0
int mult_num; // Current multiple we are calculating
if (v1 == 0.0 && v2 == 0.0 && v3 == 0.0)
return;
r12 = new double[3];
r23 = new double[3];
r34 = new double[3];
f1 = new double[3];
f2 = new double[3];
f3 = new double[3];
A = new double[3];
B = new double[3];
C = new double[3];
dcosdA = new double[3];
dcosdB = new double[3];
dsindC = new double[3];
dsindB = new double[3];
// Calculate the vectors between atoms
r12[0] = myAtoms[0].x[0] - myAtoms[1].x[0];
r12[1] = myAtoms[0].x[1] - myAtoms[1].x[1];
r12[2] = myAtoms[0].x[2] - myAtoms[1].x[2];
r23[0] = myAtoms[1].x[0] - myAtoms[2].x[0];
r23[1] = myAtoms[1].x[1] - myAtoms[2].x[1];
r23[2] = myAtoms[1].x[2] - myAtoms[2].x[2];
r34[0] = myAtoms[2].x[0] - myAtoms[3].x[0];
r34[1] = myAtoms[2].x[1] - myAtoms[3].x[1];
r34[2] = myAtoms[2].x[2] - myAtoms[3].x[2];
// Calculate the cross products
A[0] = r12[1]*r23[2] - r23[1]*r12[2];
A[1] = -r12[0]*r23[2] + r23[0]*r12[2];
A[2] = r12[0]*r23[1] - r23[0]*r12[1];
B[0] = r23[1]*r34[2] - r34[1]*r23[2];
B[1] = -r23[0]*r34[2] + r34[0]*r23[2];
B[2] = r23[0]*r34[1] - r34[0]*r23[1];
C[0] = r23[1]*A[2] - A[1]*r23[2];
C[1] = -r23[0]*A[2] + A[0]*r23[2];
C[2] = r23[0]*A[1] - A[0]*r23[1];
// Calculate the distances
rA = Math.sqrt(A[0]*A[0] + A[1]*A[1] + A[2]*A[2]);
rB = Math.sqrt(B[0]*B[0] + B[1]*B[1] + B[2]*B[2]);
rC = Math.sqrt(C[0]*C[0] + C[1]*C[1] + C[2]*C[2]);
// Calculate the sin and cos
// cos = A*B/(rA*rB)
// sin = C*B/(rC*rB)
cos_phi = (A[0]*B[0] + A[1]*B[1] + A[2]*B[2])/(rA*rB);
sin_phi = (C[0]*B[0] + C[1]*B[1] + C[2]*B[2])/(rC*rB);
// Normalize B
rB = 1/rB;
B[0] *= rB;
B[1] *= rB;
B[2] *= rB;
// Get phi, assign the sign based on the sine value
// Make sure that the cosine value is acceptable. With roundoff, you
// can get values like 1.0+2e-16, which makes acos puke. So instead,
// just set these kinds of values to exactly 1.0
// if (cos_phi>1.0)
// cos_phi = 1.0;
// else if (cos_phi < -1.0)
// cos_phi = -1.0;
// phi = acos(cos_phi);
// CHECK_DOMAIN();
// phi = -copysign(phi, sin_phi);
// I think atan2 will do all the above stuff accurately
// RKB
phi = -Math.atan2(sin_phi,cos_phi);
// CHECK_DOMAIN(); ??????
// if (fabs(sin_phi) > 0.1)
if (sin_phi > 0.1 || sin_phi < -0.1)
{
// Normalize A
rA = 1/rA;
A[0] *= rA;
A[1] *= rA;
A[2] *= rA;
dcosdA[0] = -rA*(B[0] - cos_phi*A[0]);
dcosdA[1] = -rA*(B[1] - cos_phi*A[1]);
dcosdA[2] = -rA*(B[2] - cos_phi*A[2]);
dcosdB[0] = -rB*(A[0] - cos_phi*B[0]);
dcosdB[1] = -rB*(A[1] - cos_phi*B[1]);
dcosdB[2] = -rB*(A[2] - cos_phi*B[2]);
}
else
{
// Normalize C
rC = 1/rC;
C[0] *= rC;
C[1] *= rC;
C[2] *= rC;
dsindC[0] = -rC*(B[0]-sin_phi*C[0]);
dsindC[1] = -rC*(B[1]-sin_phi*C[1]);
dsindC[2] = -rC*(B[2]-sin_phi*C[2]);
dsindB[0] = -rB*(C[0]-sin_phi*B[0]);
dsindB[1] = -rB*(C[1]-sin_phi*B[1]);
dsindB[2] = -rB*(C[2]-sin_phi*B[2]);
}
// Loop through the multiple parameter sets for this
// bond. We will only loop more than once if this
// has multiple parameter sets from Charmm22
for (mult_num=0; mult_num < 3; mult_num++)
{
switch (mult_num)
{
case 0:
n = 1;
k = v1;
break;
case 1:
n = 2;
k = -v2;
break;
default:
n = 3;
k = v3;
break;
}
delta = 0;
if (k != 0.0)
{
// Calculate the energy
K = k*(1+Math.cos(n*phi + delta));
K1 = -n*k*Math.sin(n*phi + delta);
// Next, we want to calculate the forces. In order
// to do that, we first need to figure out whether the
// sin or cos form will be more stable. For this,
// just look at the value of phi
// if (fabs(sin_phi) > 0.1)
if (sin_phi > 0.1 || sin_phi < -0.1)
{
// use the sin version to avoid 1/cos terms
K1 = K1/sin_phi;
f1[0] = K1*(r23[1]*dcosdA[2] - r23[2]*dcosdA[1]);
f1[1] = K1*(r23[2]*dcosdA[0] - r23[0]*dcosdA[2]);
f1[2] = K1*(r23[0]*dcosdA[1] - r23[1]*dcosdA[0]);
f3[0] = K1*(r23[2]*dcosdB[1] - r23[1]*dcosdB[2]);
f3[1] = K1*(r23[0]*dcosdB[2] - r23[2]*dcosdB[0]);
f3[2] = K1*(r23[1]*dcosdB[0] - r23[0]*dcosdB[1]);
f2[0] = K1*(r12[2]*dcosdA[1] - r12[1]*dcosdA[2]
+ r34[1]*dcosdB[2] - r34[2]*dcosdB[1]);
f2[1] = K1*(r12[0]*dcosdA[2] - r12[2]*dcosdA[0]
+ r34[2]*dcosdB[0] - r34[0]*dcosdB[2]);
f2[2] = K1*(r12[1]*dcosdA[0] - r12[0]*dcosdA[1]
+ r34[0]*dcosdB[1] - r34[1]*dcosdB[0]);
}
else
{
// This angle is closer to 0 or 180 than it is to
// 90, so use the cos version to avoid 1/sin terms
K1 = -K1/cos_phi;
f1[0] = K1*( (r23[1]*r23[1] + r23[2]*r23[2])*dsindC[0]
- r23[0]*r23[1]*dsindC[1] - r23[0]*r23[2]*dsindC[2]);
f1[1] = K1*( (r23[2]*r23[2] + r23[0]*r23[0])*dsindC[1]
- r23[1]*r23[2]*dsindC[2] - r23[1]*r23[0]*dsindC[0]);
f1[2] = K1*( (r23[0]*r23[0] + r23[1]*r23[1])*dsindC[2]
- r23[2]*r23[0]*dsindC[0] - r23[2]*r23[1]*dsindC[1]);
f3[0] = K1*(dsindB[1]*r23[2] - r23[1]*dsindB[2]);
f3[1] = K1*(dsindB[2]*r23[0] - r23[2]*dsindB[0]);
f3[2] = K1*(dsindB[0]*r23[1] - r23[0]*dsindB[1]);
f2[0] = K1*(-(r23[1]*r12[1] + r23[2]*r12[2])*dsindC[0]
+ (2.0*r23[0]*r12[1] - r12[0]*r23[1])*dsindC[1]
+ (2.0*r23[0]*r12[2] - r12[0]*r23[2])*dsindC[2]
+ dsindB[2]*r34[1] - dsindB[1]*r34[2]);
f2[1] = K1*(-(r23[2]*r12[2] + r23[0]*r12[0])*dsindC[1]
+(2.0*r23[1]*r12[2] - r12[1]*r23[2])*dsindC[2]
+(2.0*r23[1]*r12[0] - r12[1]*r23[0])*dsindC[0]
+dsindB[0]*r34[2] - dsindB[2]*r34[0]);
f2[2] = K1*(-(r23[0]*r12[0] + r23[1]*r12[1])*dsindC[2]
+(2.0*r23[2]*r12[0] - r12[2]*r23[0])*dsindC[0]
+(2.0*r23[2]*r12[1] - r12[2]*r23[1])*dsindC[1]
+dsindB[1]*r34[0] - dsindB[0]*r34[1]);
}
myAtoms[0].f[0] += f1[0];
myAtoms[0].f[1] += f1[1];
myAtoms[0].f[2] += f1[2];
myAtoms[1].f[0] += f2[0] - f1[0];
myAtoms[1].f[1] += f2[1] - f1[1];
myAtoms[1].f[2] += f2[2] - f1[2];
myAtoms[2].f[0] += f3[0] - f2[0];
myAtoms[2].f[1] += f3[1] - f2[1];
myAtoms[2].f[2] += f3[2] - f2[2];
myAtoms[3].f[0] -= f3[0];
myAtoms[3].f[1] -= f3[1];
myAtoms[3].f[2] -= f3[2];
}
}
}
private final static double[][] torsionCoeffs =
{
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, C, atom.SP3, 0.200, 0.270, 0.093 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, C, atom.SP2, 0.170, 0.270, 0.093 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, C, atom.SP, 0.200, -0.260, 0.093 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.267 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, O, atom.SP3, 0.100, 0.100, 0.180 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.100, 0.400, 0.500 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP2, 0.000, 0.000, 0.400 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.100, 0.400, 0.500 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, C, atom.SP2, 2.100, 0.270, 0.093 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, C, atom.SP, 0.000, 0.000, 0.093 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.500 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, O, atom.SP3, 0.000, 0.000, 0.180 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.180 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, N, atom.SP2, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.180 },
{ C, atom.SP, C, atom.SP3, C, atom.SP3, C, atom.SP, 1.000, 0.000, 0.093 },
{ C, atom.SP, C, atom.SP3, C, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.400 },
{ C, atom.SP, C, atom.SP3, C, atom.SP3, O, atom.SP3, 0.000, -0.400, 0.180 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.237 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, O, atom.SP3, 0.000, 0.000, 0.180 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, N, atom.SP3, -0.150, 0.000, 0.150 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, N, atom.SP2, 0.000, 0.000, 0.400 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, N, atom.SP3, -0.150, 0.000, 0.150 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP3, O, atom.SP2, 0.000, 0.000, 0.180 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP3, O, atom.SP3, 0.000, -0.600, 0.300 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.000 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP2, 0.000, 0.000, 0.000 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP3, 0.000, -0.600, 0.300 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP3, -0.400, -1.100, 1.200 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP3, N, atom.SP2, 1.170, -1.263, 2.064 },
{ N, atom.SP2, C, atom.SP3, C, atom.SP3, N, atom.SP2, 0.000, 0.000, -0.500 },
{ O, atom.SP2, C, atom.SP3, C, atom.SP3, O, atom.SP2, 0.000, -0.600, 0.300 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.400, 0.030, 0.500 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP2, -0.440, 0.240, 0.060 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP, -0.440, 0.240, 0.060 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.010 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP2, O, atom.SP3, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.300 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.100, 0.000, 0.500 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.600 },
{ C, atom.SP2, C, atom.SP3, C, atom.SP2, O, atom.SP3, 0.000, 0.000, 0.000 },
{ C, atom.SP, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.780 },
{ C, atom.SP, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.100 },
{ C, atom.SP, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.780 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.540 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.000, 0.000, -0.240 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP2, C, atom.SP, 0.000, 0.000, -0.240 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.520 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP2, O, atom.SP3, 0.000, 0.000, 0.540 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.000 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.000 },
{ O, atom.SP3, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.000 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.000 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.000 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP2, H, atom.NONE, 0.000, 0.000, 0.000 },
{ N, atom.SP3, C, atom.SP3, C, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.000 },
{ C, atom.SP3, C, atom.SP3, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ H, atom.NONE, C, atom.SP3, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ C, atom.SP3, C, atom.SP3, O, atom.SP3, C, atom.SP3, 0.400, 0.520, 0.467 },
{ C, atom.SP3, C, atom.SP3, O, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.400 },
{ C, atom.SP3, C, atom.SP3, O, atom.SP3, O, atom.SP3, 0.000, 0.000, 0.400 },
{ C, atom.SP2, C, atom.SP3, O, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.403 },
{ H, atom.NONE, C, atom.SP3, O, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.530 },
{ H, atom.NONE, C, atom.SP3, O, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.530 },
{ H, atom.NONE, C, atom.SP3, O, atom.SP3, O, atom.SP3, 0.000, 0.000, 0.465 },
{ O, atom.SP3, C, atom.SP3, O, atom.SP3, C, atom.SP3, -0.170, -1.200, 0.000 },
{ O, atom.SP3, C, atom.SP3, O, atom.SP3, O, atom.SP3, 0.000, 0.000, 0.403 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP3, C, atom.SP3, -0.200, 0.730, 0.800 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP3, N, atom.SP3, -0.200, 0.730, 0.800 },
{ C, atom.SP2, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP3, N, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.000 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.520 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.450 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.520 },
{ N, atom.SP3, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.350 },
{ N, atom.SP3, C, atom.SP3, N, atom.SP3, N, atom.SP3, 0.000, 0.000, 0.350 },
{ N, atom.SP3, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.350 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.910 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.000 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP2, C, atom.SP3, 0.000, 0.000, -0.200 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.000 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.650 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP3, C, atom.SP3, -0.200, 0.730, 0.800 },
{ C, atom.SP3, C, atom.SP3, N, atom.SP3, H, atom.NONE, 0.000, 0.120, 0.100 },
{ C, atom.SP2, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP3, N, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.000 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.520 },
{ H, atom.NONE, C, atom.SP3, N, atom.SP3, H, atom.NONE, 0.000, 0.000, 0.250 },
{ N, atom.SP3, C, atom.SP3, N, atom.SP3, C, atom.SP3, 0.000, 0.000, 0.350 },
{ C, atom.SP3, C, atom.SP3, O, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.400 },
{ H, atom.NONE, C, atom.SP3, O, atom.SP2, C, atom.SP2, 0.000, 0.000, 0.350 },
{ C, atom.SP3, C, atom.SP2, C, atom.SP2, C, atom.SP3, -0.100, 10.000, 0.000 },
{ C, atom.SP3, C, atom.SP2, C, atom.SP2, C, atom.SP2, -0.270, 10.000, 0.000 },
{ C, atom.SP3, C, atom.SP2, C, atom.SP2, H, atom.NONE, 0.000, 12.500, 0.000 },
{ C, atom.SP3, C, atom.SP2, C, atom.SP2, O, atom.SP3, -1.200, 16.250, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, C, atom.SP2, -0.930, 8.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, C, atom.SP, 0.000, 15.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, H, atom.NONE, 0.000, 9.000, -1.060 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, O, atom.SP3, 0.000, 16.250, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, N, atom.SP3, 0.000, 15.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, N, atom.SP2, 0.000, 12.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP2, O, atom.SP2, 0.000, 15.000, 0.000 },
{ C, atom.SP, C, atom.SP2, C, atom.SP2, H, atom.NONE, 0.000, 15.000, 0.000 },
{ H, atom.NONE, C, atom.SP2, C, atom.SP2, H, atom.NONE, 0.000, 15.000, 0.000 },
{ H, atom.NONE, C, atom.SP2, C, atom.SP2, O, atom.SP3, 0.000, 16.250, 0.000 },
{ H, atom.NONE, C, atom.SP2, C, atom.SP2, N, atom.SP3, 0.000, 15.000, 0.000 },
{ H, atom.NONE, C, atom.SP2, C, atom.SP2, N, atom.SP2, 0.000, 12.000, 0.000 },
{ H, atom.NONE, C, atom.SP2, C, atom.SP2, O, atom.SP2, 0.000, 15.000, 0.000 },
{ O, atom.SP3, C, atom.SP2, C, atom.SP2, O, atom.SP3, -2.000, 16.250, 0.000 },
{ O, atom.SP2, C, atom.SP2, C, atom.SP2, O, atom.SP2, -2.000, 15.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ C, atom.SP3, C, atom.SP2, O, atom.SP3, C, atom.SP3, 2.300, 4.000, 0.000 },
{ C, atom.SP3, C, atom.SP2, O, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, O, atom.SP3, C, atom.SP3, 3.530, 2.300, -3.530 },
{ C, atom.SP2, C, atom.SP2, O, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.000 },
{ H, atom.NONE, C, atom.SP2, O, atom.SP3, C, atom.SP3, 3.000, 3.100, 0.000 },
{ H, atom.NONE, C, atom.SP2, O, atom.SP3, C, atom.SP2, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, N, atom.SP3, C, atom.SP3, -1.570, 3.200, 0.000 },
{ H, atom.NONE, C, atom.SP2, N, atom.SP3, C, atom.SP3, 1.570, 1.690, 0.000 },
{ C, atom.SP2, C, atom.SP2, N, atom.SP2, C, atom.SP3, 0.000, 2.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, N, atom.SP2, C, atom.SP2, 0.000, 0.000, 1.490 },
{ N, atom.SP2, C, atom.SP2, N, atom.SP2, C, atom.SP3, 0.000, 0.000, 0.000 },
{ C, atom.SP2, C, atom.SP2, O, atom.SP2, C, atom.SP3, 0.000, 9.200, 0.000 },
{ C, atom.SP2, C, atom.SP2, O, atom.SP2, C, atom.SP2, 0.000, 8.300, -0.800 },
{ H, atom.NONE, C, atom.SP2, O, atom.SP2, C, atom.SP3, -0.820, 9.200, 3.700 },
{ H, atom.NONE, C, atom.SP2, O, atom.SP2, C, atom.SP2, -0.460, 2.700, 0.700 },
{ C, atom.SP3, C, atom.SP, C, atom.SP, C, atom.SP2, 0.000, 0.001, 0.000 },
{ C, atom.SP3, C, atom.SP, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ C, atom.SP2, C, atom.SP, C, atom.SP, C, atom.SP2, 0.000, 0.001, 0.000 },
{ C, atom.SP2, C, atom.SP, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ C, atom.SP2, C, atom.SP, C, atom.SP, H, atom.NONE, 0.000, 0.001, 0.000 },
{ C, atom.SP, C, atom.SP, C, atom.SP, C, atom.SP, 0.000, 0.001, 0.000 },
{ C, atom.SP3, O, atom.SP3, O, atom.SP3, C, atom.SP3, 2.095, -2.155, -0.113 },
{ C, atom.SP3, N, atom.SP3, N, atom.SP3, C, atom.SP3, 0.900, -6.800, 0.210 },
};
}
|