-
Notifications
You must be signed in to change notification settings - Fork 825
Description
There are a couple of somewhat unrelated ProgressMeter bugs I identified whilst fixing #2078. For the sake of record keeping, I thought it might be best to report them in a separate issue.
I will hopefully fix them at the same time as #2078
Affected routines:
- density_from_Universe
- HydrogenBondAutoCorrel
- helanal
Expected behavior
The progress meter should have a similar behaviour to AnalysisBase derived classes such as RMSD (especially when setting the step keyword).
Code:
import MDAnalysis as mda
from MDAnalysis.analysis.rms import RMSD
from MDAnalysisTests.datafiles import PSF, DCD
def RMSDAnalysis():
u = mda.Universe(PSF, DCD)
RMSD(u, verbose=True).run(step=10)
if __name__ == '__main__':
print("Start RMSD")
RMSDAnalysis()
print("End RMSD")Output:
Start RMSD
RMSD 6.90 A at frame 10/10 [100.0%]
End RMSD
Actual behavior (density_from_Universe)
Code:
import MDAnalysis as mda
from MDAnalysis.analysis.density import density_from_Universe
from MDAnalysisTests.datafiles import PSF, DCD
def create_density_from_Universe():
u = mda.Universe(PSF, DCD)
D = density_from_Universe(u, atomselection="name O", delta=2.0, step=10, verbose=True)
if __name__ == '__main__':
print("Start Density")
create_density_from_Universe()
print("End Density")Output:
Start Density
End Densityng 213 atoms in frame 91/98 [ 92.9%]
Cause:
This seems to be down to the use of the step keyword. ProgressMeter in density_from_Universe is initialised with the total number of frames in a trajectory without accounting for the value of step. Additionally, ProgressMeter's echo is given the trajectory frame number n, instead nth analysed frame.
Actual behaviour (helanal):
Code:
import MDAnalysis as mda
from MDAnalysis.analysis.helanal import helanal_trajectory
from MDAnalysisTests.datafiles import PSF, DCD
def HelAnalysis():
u = mda.Universe(PSF, DCD)
helanal_trajectory(u, selection="name CA and resnum 161-187", finish=50, verbose=True)
if __name__ == '__main__':
print("Start HelAnalysis")
HelAnalysis()
print("End HelAnalysis")Output:
Start HelAnalysis
End HelAnalysis1: 51.0 ps
Cause:
ProgressMeter is initialised with the total number of frames in the trajectory rather than the number of frames which will be analysed.
Actual behaviour (HydrogenBondAutoCorrel):
Code:
import MDAnalysis as mda
from MDAnalysis.analysis.hbonds import HydrogenBondAutoCorrel as HBAC
from MDAnalysisTests.datafiles import TRZ_psf, TRZ
def HBondAutocorrel():
u = mda.Universe(TRZ_psf, TRZ)
hydrogens = u.atoms.select_atoms('type H')
nitrogens = u.atoms.select_atoms('type N')
oxygens = u.atoms.select_atoms('type O')
acceptors = u.atoms.select_atoms('type O')
hbond = HBAC(u,
hydrogens=hydrogens,
acceptors=oxygens,
donors=nitrogens,
bond_type='intermittent',
sample_time=0.06,
nruns=3,
)
hbond.run()
if __name__ == '__main__':
print("Start HBondAutocorrel")
HBondAutocorrel()
print("End HBondAutocorrel")Output:
Start HBondAutocorrel
/biggin/b131/bioc1523/Github/mdanalysis-develop/package/MDAnalysis/analysis/hbonds/hbond_autocorrel.py:402: RuntimeWarning: invalid value encountered in true_divide
results /= nbonds
Performing run 3/3[100.0%]
End HBondAutocorrel4/3[133.3%]
Cause:
The step being passed to ProgressMeter's echo is 1 based but offset is set at it's default value of 1 (assuming a zero based step instead).
Unknowns:
If the RuntimeWarning encountered is expected.
Currently version of MDAnalysis
- Which version are you using? (run
python -c "import MDAnalysis as mda; print(mda.__version__)")
0.18.1-dev - Which version of Python (
python -V)?
3.6 - Which operating system?
Linux (Ubuntu 16.04 LTS)