def test_compute_bond(trajectory): # 1. Compute the bond distance between atoms 0 and 1 for the trajectory. # Test if the first frame's bond length is correct. ai.compute_bond(trajectory, "R01", 0, 1) assert trajectory.frames[0].properties["R01"] == pt.approx( 1.282298373, rel=1e-10) # 0767554
def test_major_trajectory_operations(tmp_path, trajectory): # 1. Plot Bond Distances (Spaghetti + Blur) # Compute the a bond distance property for all Frames in traj ai.compute_bond(trajectory, "R01", 0, 1) ai.plot_scalar( tmp_path / "R.pdf", trajectory, "R01", ylabel=r"$R_{CC} [\AA{}]$", time_units="fs", state_colors=["r", "b"], plot_average=True, ) # Blur the bond distance (convolve) R = np.linspace(0.5, 3.0, 50) ai.blur_property(trajectory, "R01", "Rblur", R, alpha=8.0) # Plot the heat map of blurred bond distance ai.plot_vector( tmp_path / "Rblur.pdf", trajectory, "Rblur", y=R, ylabel=r"$R [\AA{}]$", time_units="fs", nlevel=64, ) # 2. Plot of Torsion Angle (Spaghetti + Blur) # Compute the a torsion angle property for all Frames in traj ai.compute_torsion(trajectory, "T0123", 0, 1, 2, 3) ai.unwrap_property(trajectory, "T0123", 360.0) ai.plot_scalar( tmp_path / "T.pdf", trajectory, "T0123", ylabel=r"$\Theta [^{\circ{}}]$", time_units="fs", state_colors=["r", "b"], plot_average=True, ) # Blur the torsion T = np.linspace(-180.0, +180.0, 100) ai.blur_property(trajectory, "T0123", "Tblur", T, alpha=0.02) # Plot the heat map of blurred torison ai.plot_vector( tmp_path / "Tblur.pdf", trajectory, "Tblur", y=T, ylabel=r"$Theta [^{\circ{}}]$", time_units="fs", nlevel=64, ) # 3. UED Cross Section # Compute the "simple" form of the UED cross section in R R = np.linspace(1.0, 6.0, 50) ai.compute_ued_simple(trajectory, "UED", R=R, alpha=8.0) # Plot the heat map of the UED cross section detailed above ai.plot_vector( tmp_path / "UED.pdf", trajectory, "UED", y=R, ylabel=r"$R [\AA{}]$", time_units="fs", diff=True, )
x) for x in [1, 2, 3] ] # Merge the trajectories into one super-big Bundle with uniform weights traj = ai.Bundle.merge(trajs, ws=[1.0 / len(trajs)] * len(trajs), labels=[1, 2, 3]) print((traj.labels)) # Compute properties at ~1 fs intervals, removing nonsense due to adaptive timesteps ts = np.arange(0.0, max(traj.ts), 40.0) # TODO: Cleaner edges traj = traj.interpolate_nearest(ts) # => Showoff Plot of Bond Distances (Spaghetti + Blur) <= # # Compute the a bond distance property for all Frames in traj # This particular bond is the one that leads to a three-ring complex ai.compute_bond(traj, "R01", 7, 8) # Blur the bond distance R = np.linspace(1.0, 6.0, 50) ai.blur_property(traj, "R01", "Rblur", R, alpha=8.0) # Plot the heat map of blurred bond distance # ai.plot_vector('R2.pdf', traj, 'Rblur', y=R, ylabel=r'$R [\AA{}]$', time_units='fs', twosided=False, cmap=plt.get_cmap('viridis')) ai.plot_vector("R.pdf", traj, "Rblur", y=R, ylabel=r"$R [\AA{}]$", time_units="fs", nlevel=64) ai.plot_scalar(