Brainstorming things to do before we can start using this code more reliably.
Tagging @jchodera @gregoryross, feel free to add points by editing (assuming you can) or replying.
[x] Clean up the repository
[x] docstrings
[x] unused files
[x] directory structure
[x] setup.py
[ ] conda package
using the usual devtools setup
[x] Add tests
[x] Basic integration tests
[x] unit tests
[x] Set up some simple test systems
[x] Investigate source of numerical instability in the tests
[x] continuous integration (Travis)
[x] Validate / fix NCMC implementation
[x] Turn on sterics before turning on electrostatics not changing sterics
Copy/pasta :it: from #15
[x] Add an optional argument to MonteCarloTitration constructor called maintainChargeNeutrality to select whether water molecules should be replaced with ions to maintain charge neutrality.
[x] Monovalent cation/anion parameters would be optionally set with cationName='Na+' and anionName='Cl-' which specifies name of atom in prmtop.topology from which to take (charge, sigma, epsilon) parameters from when waters are converted into monovalent ions to maintain charge neutrality. This would obviously only be used in explicit solvent.
[x] Build a list of water molecules.
[x] A class method nsteps_per_trial (optionally set during the MonteCarloTitration constructor) will control whether we are using instantaneous switching (0 steps) or NCMC (>= 1 steps).
[ ] Each MC update attempt, the original positions and velocities will be cached, and we will use the integrator described in this paper---where the Hamiltonian switching updates happen in between the middle of the timestep---to integrate dynamics. The NCMC criteria will be used to accept/reject the move, as in the recent Roux paper.
[ ] For now, I will assign a new momentum at the beginning of each NCMC switching iteration, but we can implement more clever approaches to avoid momentum reversal (e.g. those from Roux) later once we have benchmarking data.
[ ] If maintainChargeNeutrality=True and there are waters in the system, we will convert waters to/from monovalent ions to maintain charge neutrality during the switching process. We will only convert either waters or monovalent ions that have been converted from waters by the constant-pH facility---we will not modify any existing ions, since we can't easily convert those back into waters. We will keep the hydrogen masses constant, but turn off the electrostatics on the hydrogens as waters are converted into ions. Initially, we will just select waters or ions at random, but later, we may be able to select waters/ions based on electrostatics to increase acceptance probabilities.
[x] Update calibration code with the ncmc changes.
[x] Update SAMS code
[ ] Merge MBAR code into the same API as SAMS (low priority)
[ ] Validate that calibrations with SAMS works well enough
[x] Investigate convergence of ref. free energies.
Implict vs explict solvent calibrations
Effect of counterions in explicit calibration energies
Variance estimation
[x] Compare results with MBAR (they should match)
We need to implement some functions before we can use calibration:
[x] Set up a calibration tool that can run as part of the workflow (calibrate method)
[x] set up easy calibration at given pH for amino acids, based on pKa/pKb
[x] set up ligand system (solvation?) and calibrate automatically as well using Epik populations
[ ] System setup
[x] Add hydrogens (modeller)
[ ] Make sure that the max number of protons are defined in system
Brainstorming things to do before we can start using this code more reliably. Tagging @jchodera @gregoryross, feel free to add points by editing (assuming you can) or replying.
[x]
Turn on sterics before turning on electrostaticsnot changing stericsCopy/pasta :it: from #15
MonteCarloTitration
constructor calledmaintainChargeNeutrality
to select whether water molecules should be replaced with ions to maintain charge neutrality.cationName='Na+'
andanionName='Cl-'
which specifies name of atom inprmtop.topology
from which to take(charge, sigma, epsilon)
parameters from when waters are converted into monovalent ions to maintain charge neutrality. This would obviously only be used in explicit solvent.nsteps_per_trial
(optionally set during theMonteCarloTitration
constructor) will control whether we are using instantaneous switching (0 steps) or NCMC (>= 1 steps).maintainChargeNeutrality=True
and there are waters in the system, we will convert waters to/from monovalent ions to maintain charge neutrality during the switching process. We will only convert either waters or monovalent ions that have been converted from waters by the constant-pH facility---we will not modify any existing ions, since we can't easily convert those back into waters. We will keep the hydrogen masses constant, but turn off the electrostatics on the hydrogens as waters are converted into ions. Initially, we will just select waters or ions at random, but later, we may be able to select waters/ions based on electrostatics to increase acceptance probabilities.calibrate
method)Lower priority/ extra features: