Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def ChooseDirections(self, coords):
"""
Calculate the direction each monomer subunit should be pointing at:
"""
N = len(coords)
self.direction_vects = [[0.0, 0.0, 0.0] for i in range(0, N + 1)]
if self.settings.is_circular:
for i in range(0, N):
# By default, the direction that monomer "i" is pointing is
# determined by the position of the monomers before and after it
# (at index i-1, and i+1). More generally, we allow the user
# to choose what these offsets are ("dir_index_offsets[")
ia = WrapPeriodic.Wrap(i + self.settings.dir_index_offsets[0],
N)
ib = WrapPeriodic.Wrap(i + self.settings.dir_index_offsets[1],
N)
for d in range(0, 3):
self.direction_vects[i][d] = coords[ib][d] - coords[ia][d]
else:
for i in range(1, N - 1):
for d in range(0, 3):
self.direction_vects[i][d] = coords[
i + self.settings.dir_index_offsets[1]][d] - coords[
i + self.settings.dir_index_offsets[0]][d]
for d in range(0, 3):
self.direction_vects[0][d] = coords[1][d] - coords[0][d]
self.direction_vects[N-1][d] = coords[N-1][d] - coords[N-2][d]
assert(len(self.settings.bonds_name) ==
len(self.settings.bonds_type) ==
len(self.settings.bonds_atoms) ==
len(self.settings.bonds_index_offsets))
if len(self.settings.bonds_type) > 0:
outfile.write("\n"
"\n"
"write(\"Data Bonds\") {\n")
WrapPeriodic.bounds_err = False
for i in range(0, N):
test = False
for b in range(0, len(self.settings.bonds_type)):
I = i + self.settings.bonds_index_offsets[b][0]
J = i + self.settings.bonds_index_offsets[b][1]
I = WrapPeriodic.Wrap(I, N)
J = WrapPeriodic.Wrap(J, N)
if WrapPeriodic.bounds_err:
WrapPeriodic.bounds_err = False
if not self.settings.connect_ends:
continue
outfile.write(
" $bond:" + self.settings.bonds_name[b] + str(i + 1))
if len(self.settings.bonds_type) > 1:
outfile.write("_" + str(b + 1))
outfile.write(" @bond:" + self.settings.bonds_type[b] + " $atom:mon[" + str(I) + "]/" + self.settings.bonds_atoms[
b][0] + " $atom:mon[" + str(J) + "]/" + self.settings.bonds_atoms[b][1] + "\n")
if len(self.settings.bonds_type) > 0:
outfile.write("} # write(\"Data Bonds\") {...\n\n\n")
assert(len(self.settings.angles_name) ==
len(self.settings.angles_type) ==
len(self.settings.impropers_type) ==
len(self.settings.impropers_atoms) ==
len(self.settings.impropers_index_offsets))
if len(self.settings.impropers_type) > 0:
outfile.write("\n"
"\n"
"write(\"Data Impropers\") {\n")
for i in range(0, N):
for b in range(0, len(self.settings.impropers_type)):
I = i + self.settings.impropers_index_offsets[b][0]
J = i + self.settings.impropers_index_offsets[b][1]
K = i + self.settings.impropers_index_offsets[b][2]
L = i + self.settings.impropers_index_offsets[b][3]
I = WrapPeriodic.Wrap(I, N)
J = WrapPeriodic.Wrap(J, N)
K = WrapPeriodic.Wrap(K, N)
L = WrapPeriodic.Wrap(L, N)
if WrapPeriodic.bounds_err:
WrapPeriodic.bounds_err = False
if not self.settings.connect_ends:
continue
outfile.write(" $improper:" +
self.settings.impropers_name[b] + str(i + 1))
if len(self.settings.impropers_type) > 1:
outfile.write("_" + str(b + 1))
outfile.write(" @improper:" + self.settings.impropers_type[b] +
" $atom:mon[" + str(I) + "]/" + self.settings.impropers_atoms[b][0] +
" $atom:mon[" + str(J) + "]/" + self.settings.impropers_atoms[b][1] +
" $atom:mon[" + str(K) + "]/" + self.settings.impropers_atoms[b][2] +
" $atom:mon[" + str(L) + "]/" + self.settings.impropers_atoms[b][3] +
"\n")
if len(self.settings.impropers_type) > 0:
assert(len(self.settings.dihedrals_name) ==
len(self.settings.dihedrals_type) ==
len(self.settings.dihedrals_atoms) ==
len(self.settings.dihedrals_index_offsets))
if len(self.settings.dihedrals_type) > 0:
outfile.write("\n"
"\n"
"write(\"Data Dihedrals\") {\n")
for i in range(0, N):
for b in range(0, len(self.settings.dihedrals_type)):
I = i + self.settings.dihedrals_index_offsets[b][0]
J = i + self.settings.dihedrals_index_offsets[b][1]
K = i + self.settings.dihedrals_index_offsets[b][2]
L = i + self.settings.dihedrals_index_offsets[b][3]
I = WrapPeriodic.Wrap(I, N)
J = WrapPeriodic.Wrap(J, N)
K = WrapPeriodic.Wrap(K, N)
L = WrapPeriodic.Wrap(L, N)
if WrapPeriodic.bounds_err:
WrapPeriodic.bounds_err = False
if not self.settings.connect_ends:
continue
outfile.write(" $dihedral:" +
self.settings.dihedrals_name[b] + str(i + 1))
if len(self.settings.dihedrals_type) > 1:
outfile.write("_" + str(b + 1))
outfile.write(" @dihedral:" + self.settings.dihedrals_type[b] +
" $atom:mon[" + str(I) + "]/" + self.settings.dihedrals_atoms[b][0] +
" $atom:mon[" + str(J) + "]/" + self.settings.dihedrals_atoms[b][1] +
" $atom:mon[" + str(K) + "]/" + self.settings.dihedrals_atoms[b][2] +
" $atom:mon[" + str(L) + "]/" + self.settings.dihedrals_atoms[b][3] +
"\n")
len(self.settings.dihedrals_atoms) ==
len(self.settings.dihedrals_index_offsets))
if len(self.settings.dihedrals_type) > 0:
outfile.write("\n"
"\n"
"write(\"Data Dihedrals\") {\n")
for i in range(0, N):
for b in range(0, len(self.settings.dihedrals_type)):
I = i + self.settings.dihedrals_index_offsets[b][0]
J = i + self.settings.dihedrals_index_offsets[b][1]
K = i + self.settings.dihedrals_index_offsets[b][2]
L = i + self.settings.dihedrals_index_offsets[b][3]
I = WrapPeriodic.Wrap(I, N)
J = WrapPeriodic.Wrap(J, N)
K = WrapPeriodic.Wrap(K, N)
L = WrapPeriodic.Wrap(L, N)
if WrapPeriodic.bounds_err:
WrapPeriodic.bounds_err = False
if not self.settings.connect_ends:
continue
outfile.write(" $dihedral:" +
self.settings.dihedrals_name[b] + str(i + 1))
if len(self.settings.dihedrals_type) > 1:
outfile.write("_" + str(b + 1))
outfile.write(" @dihedral:" + self.settings.dihedrals_type[b] +
" $atom:mon[" + str(I) + "]/" + self.settings.dihedrals_atoms[b][0] +
" $atom:mon[" + str(J) + "]/" + self.settings.dihedrals_atoms[b][1] +
" $atom:mon[" + str(K) + "]/" + self.settings.dihedrals_atoms[b][2] +
" $atom:mon[" + str(L) + "]/" + self.settings.dihedrals_atoms[b][3] +
"\n")
if len(self.settings.dihedrals_type) > 0:
outfile.write("} # write(\"Data Dihedrals\") {...\n\n\n")
Calculate the direction each monomer subunit should be pointing at:
"""
N = len(coords)
self.direction_vects = [[0.0, 0.0, 0.0] for i in range(0, N + 1)]
if self.settings.is_circular:
for i in range(0, N):
# By default, the direction that monomer "i" is pointing is
# determined by the position of the monomers before and after it
# (at index i-1, and i+1). More generally, we allow the user
# to choose what these offsets are ("dir_index_offsets[")
ia = WrapPeriodic.Wrap(i + self.settings.dir_index_offsets[0],
N)
ib = WrapPeriodic.Wrap(i + self.settings.dir_index_offsets[1],
N)
for d in range(0, 3):
self.direction_vects[i][d] = coords[ib][d] - coords[ia][d]
else:
for i in range(1, N - 1):
for d in range(0, 3):
self.direction_vects[i][d] = coords[
i + self.settings.dir_index_offsets[1]][d] - coords[
i + self.settings.dir_index_offsets[0]][d]
for d in range(0, 3):
self.direction_vects[0][d] = coords[1][d] - coords[0][d]
self.direction_vects[N-1][d] = coords[N-1][d] - coords[N-2][d]
# Optional: normalize the direction vectors
assert(len(self.settings.dihedrals_name) ==
len(self.settings.dihedrals_type) ==
len(self.settings.dihedrals_atoms) ==
len(self.settings.dihedrals_index_offsets))
if len(self.settings.dihedrals_type) > 0:
outfile.write("\n"
"\n"
"write(\"Data Dihedrals\") {\n")
for i in range(0, N):
for b in range(0, len(self.settings.dihedrals_type)):
I = i + self.settings.dihedrals_index_offsets[b][0]
J = i + self.settings.dihedrals_index_offsets[b][1]
K = i + self.settings.dihedrals_index_offsets[b][2]
L = i + self.settings.dihedrals_index_offsets[b][3]
I = WrapPeriodic.Wrap(I, N)
J = WrapPeriodic.Wrap(J, N)
K = WrapPeriodic.Wrap(K, N)
L = WrapPeriodic.Wrap(L, N)
if WrapPeriodic.bounds_err:
WrapPeriodic.bounds_err = False
if not self.settings.connect_ends:
continue
outfile.write(" $dihedral:" +
self.settings.dihedrals_name[b] + str(i + 1))
if len(self.settings.dihedrals_type) > 1:
outfile.write("_" + str(b + 1))
outfile.write(" @dihedral:" + self.settings.dihedrals_type[b] +
" $atom:mon[" + str(I) + "]/" + self.settings.dihedrals_atoms[b][0] +
" $atom:mon[" + str(J) + "]/" + self.settings.dihedrals_atoms[b][1] +
" $atom:mon[" + str(K) + "]/" + self.settings.dihedrals_atoms[b][2] +
" $atom:mon[" + str(L) + "]/" + self.settings.dihedrals_atoms[b][3] +