Skip to content

Unexpected behaviour of ProgressMeter in some analysis methods #2084

@IAlibay

Description

@IAlibay

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:

  1. density_from_Universe
  2. HydrogenBondAutoCorrel
  3. 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)

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions