Coverage for examples/analyze_dynamics.py: 90%
41 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-14 15:55 +0200
1""" Analyze and plot dynamics computed from a .h5 file
2 Usage:
4 analyze_dynamics filename
5"""
7import matplotlib.pyplot as plt
8import gamdpy as gp
9import numpy as np
10import sys
11import pickle
13argv = sys.argv.copy()
14argv.pop(0) # remove scriptname
15if __name__ == "__main__":
16 if argv:
17 filename = argv.pop(0) # get filename (.h5 added by script)
18 else:
19 filename = 'Data/LJ_r0.973_T0.70_toread' # Used in testing
20else:
21 filename = 'Data/LJ_r0.973_T0.70_toread' # Used in testing
23# Load existing data
24output = gp.tools.TrajectoryIO(filename+'.h5').get_h5()
26dynamics = gp.tools.calc_dynamics(output, 0, qvalues=7.5)
27with open(filename+'_dynamics.pkl', 'wb') as f:
28 pickle.dump(dynamics, f)
29print(f"Wrote: {filename+'_dynamics.pkl'}")
31fig, axs = plt.subplots(3, 1, figsize=(8, 9), sharex=True)
32fig.subplots_adjust(hspace=0.00) # Remove vertical space between axes
33axs[0].set_ylabel('MSD')
34axs[1].set_ylabel('Non Gaussian parameter')
35axs[2].set_ylabel('Intermediate scattering function')
36axs[2].set_xlabel('Time')
37axs[0].grid(linestyle='--', alpha=0.5)
38axs[1].grid(linestyle='--', alpha=0.5)
39axs[2].grid(linestyle='--', alpha=0.5)
41num_types = dynamics['msd'].shape[1]
42for i in range(num_types):
43 axs[0].loglog(dynamics['times'], dynamics['msd'][:,i], 'o--', label=f'{i}')
44 axs[1].semilogx(dynamics['times'], dynamics['alpha2'][:,i], 'o--')
45 axs[2].semilogx(dynamics['times'], dynamics['Fs'][:,i], 'o--', label=f'{i}, q={dynamics["qvalues"][i]}')
46factor = np.array([1, 30])
47axs[0].loglog(dynamics['times'][0]*factor, np.max(dynamics['msd'][0,:])*factor**2, 'k--', alpha=0.5, label='Slope 2')
48axs[0].loglog(dynamics['times'][-1]/factor, np.min(dynamics['msd'][-1,:])/factor, 'k-.', alpha=0.5, label='Slope 1')
50axs[0].set_title(filename)
51axs[0].legend()
52axs[2].legend()
53fig.savefig(filename+'_dynamics.pdf')
54print(f"Wrote: {filename+'_dynamics.pdf'}")
56if __name__ == "__main__":
57 plt.show(block=True)