Documentation

April 7, 2025 ยท View on GitHub

Modules

from puckepy.confsampling import Peptide, PeptideAxes       # Peptide sampling
from puckepy.confsampling import Fivering, FiveringAxes     # Five-membered ring sampling
from puckepy.confsampling import Sixring, SixringAxes       # Six-membered ring sampling
from puckepy.geometry import bondlength, bondangle, dihedral    # Geometry calculations

from puckepy.formalism import CP5, AS, CP6, SP              # Puckering Formalisms
from puckepy.formalism import Pdb, Xyz                      # Input with implemented Filetypes
from puckepy.formalism import write_to_pdb, write_to_xyz    # Output with implemented Filetypes


Conformational sampling

Sample Peptide

from puckepy.confsampling import Peptide, PeptideAxes
pepspace = Peptide(37)
for phi, psi in zip(pepspace.phi, pepspace.psi): 
    print(phi, psi)

pepaxes = PeptideAxes(37)
for x, y in zip(pepaxes.x, pepaxes.y): 
    print(x, y)

Sample Five-membered ring

from puckepy.confsampling import Fivering, FiveringAxes
fivespace = Fivering(21)
for nu1, nu3 in zip(fivespace.nu1, fivespace.nu3): 
    print(nu1, nu3)

fiveaxes = FiveringAxes(21)
for zx, zy in zip(fiveaxes.zx, fiveaxes.zy): 
    print(zx, zy)

Sample Six-membered ring

from puckepy.confsampling import Sixring, SixringAxes
sixspace = Sixring(21)
for a1, a2, a3 in zip(sixspace.alpha1, sixspace.alpha2, sixspace.alpha3): 
    print(a1, a2, a3)

sixaxes = SixringAxes(21)
for theta, phi in zip(sixaxes.theta, sixaxes.phi): 
    print(sixaxes.rho, theta, phi)


Puckering formalism

Calculate pucker of a five-membered ring by Cremer-Pople from a pdb

from puckepy.formalism import Pdb, CP5
pdb = Pdb("./fivering_3endo.pdb").parse()
amplitude, phaseangle = CP5().from_atomnames(pdb=pdb,
                                             query_names=["O4'","C1'", "C2'", "C3'", "C4'"]
                                             )
print(amplitude, phaseangle)
>>>  0.352266 85.6

Calculate pucker of a five-membered ring by Cremer-Pople from an xyz

from puckepy.formalism import Xyz, CP5
xyz = Xyz("./fivering_3endo.xyz").parse()
amplitude, phaseangle = CP5().from_indices(coordinates=xyz,
                                             indices=[8, 9, 28, 26, 6]
                                             )
print(amplitude, phaseangle)
>>>  0.352266 85.6

Calculate pucker of a five-membered ring by Altona-Sundaralingam from an xyz

from puckepy.formalism import Xyz, AS
xyz = Xyz("./fivering_3endo.xyz").parse()
amplitude, phaseangle = AS().from_indices(coordinates=xyz,
                                             indices=[8, 9, 28, 26, 6]
                                             )
print(amplitude, phaseangle)
>>>  0.352266 355.6

Calculate pucker of a six-membered ring by Cremer-Pople from a pdb

from puckepy.formalism import Pdb, CP6
pdb = Pdb("./sixring_chair.pdb").parse()
amplitude, phaseangle, theta = CP6().from_atomnames(pdb=pdb,
                                             query_names=["O5'","C1'", "C2'", "C3'", "C4'", "C5'"]
                                             )
print(amplitude, phaseangle, theta)
>>>  0.6587 120.7 1.2

Calculate pucker of a six-membered ring by Strauss-Pickett from a pdb

from puckepy.formalism import Pdb, CP6
pdb = Pdb("./sixring_chair.pdb").parse()
alphas, betas = SP().from_atomnames(pdb=pdb,
                                    query_names=["O5'","C1'", "C2'", "C3'", "C4'", "C5'"]
                                    )
print(alphas[0], alphas[1], alphas[2])
>>>  139.8816 146.5372 139.8816

Calculate pucker of a double stranded helix of five-membered ring residues by Cremer-Pople from a pdb

from puckepy.formalism import Pdb, CP5
listOfPdb = Pdb("./fivering_3endo.pdb").parse_by_monomers()
for pdbMonomer in listOfPdb :
    amplitude, phaseangle = CP5().from_atomnames(pdb=pdbMonomer,
                                                 query_names=["O4'","C1'", "C2'", "C3'", "C4'"]
    print(amplitude, phaseangle)
>>>  0.352266 85.6
>>>  0.368456 87.1
>>>  ...      ...


Invert puckering coordinates

Invert Cremer-Pople coordinates of a five-membered ring

  from puckepy import formalism
  cp5 = formalism.CP5(0.35, 90.)
  inversion = cp5.invert()
  
  formalism.write_to_pdb("inverted_fivering", inversion, "FIV")

Invert Cremer-Pople coordinates of a six-membered ring

  from puckepy import formalism
  cp6 = formalism.CP6(0.67, 120., 1.5)
  inversion = cp6.invert()
  
  formalism.write_to_pdb("inverted_sixring", inversion, "SIX")


Basic geometry operations

Calculate geometry properties of the desired molecule

from puckepy.formalism import Xyz
from puckepy import geometry
coordinates = Xyz("fivering_3endo.xyz").parse()

# Calculate dihedral
dihedral = geometry.dihedral(coordinates[10],
                             coordinates[11],
                             coordinates[12],
                             coordinates[13]
                             )

# Calculate bondangle
angle = geometry.angle(coordinates[10],
                       coordinates[11],
                       coordinates[12]
                       )

# Calculate bondlength
bondlength = geometry.bondlength(coordinates[10],
                                 coordinates[11]
                                 )

Calculate geometry properties from arbitrary data

from puckepy import geometry

# Calculate dihedral
dihedral = geometry.dihedral([2.23, 0.23, 1.],
                             [3.23, -0.23, 1.],
                             [5.76, 0.01, 2.69],
                             [0.25, 3.44 , 1.93]
                             )

# Calculate bondangle
bondangle = geometry.bondangle([2.23, 0.23, 1.],
                               [3.23, -0.23, 1.],
                               [5.76, 0.01, 2.69]
                               )

# Calculate bondlength
bondlength = geometry.bondlength([2.23, 0.23, 1.],
                                 [3.23, -0.23, 1.]
                                 )