Trp-cage haMSM Construction and Analysis

Binder

For these examples, we’ll be constructing an haMSM from simulations of Trp-cage unfolding.

[1]:
from msm_we import modelWE
import numpy as np
import ray

Prep

First, let’s set some parameters for haMSM building.

[3]:
h5file_paths = ['../tests/reference/1000ns_ntl9/west.h5']

# Number of MSM microstates to initially put in each stratum/WE bin
clusters_per_stratum = 25

dimreduce_method = 'pca'

# Boundaries of the basis/target, in progress coordinate space
pcoord_bounds = {
    'basis': [[0, 0.15]],
    'target': [[0.7, 100]]
}

model_name = 'NaCl Sample'

# Reference structure
ref_file = 'data/2JOF.pdb'

# WESTPA resampling time
tau = 1e-9

Define MSM featurization

The function processCoordinates defines a transformation that’s applied to the coordinates in auxdata/coord before dimensionality reduction/clustering.

The inputs are the coordinates (read from auxdata/coord) for each segment in the loaded iteration(s), and it should return an array of features for each.

We could just use full XYZ coordinates for our MSM features. This would be a very simple (and very poor) choice – it doesn’t capture some of the translational invariance that something like pairwise distances might.

[4]:
def processCoordinates(self, coords):

    return coords.reshape(coords.shape[0], -1)

modelWE.processCoordinates = processCoordinates

So, let’s use pairwise distances instead, at the cost of a more expensive calculation.

Note that because of how work is serialized for parallelization, we have to define the Universe objects within processCoordinates. Otherwise, there would be multiple workers acting on the same object.

[5]:
import MDAnalysis as mda
from MDAnalysis.analysis import distances

def processCoordinates(self, coords):

    u_ref = mda.Universe(ref_file)
    u_check = mda.Universe(ref_file)

    dist_out = []

    u_check.load_new(coords)

    for frame in u_check.trajectory:

        dists = distances.dist(
            u_check.select_atoms('backbone'),
            u_ref.select_atoms('backbone')
        )[2]

        dist_out.append(dists)

    dist_out = np.array(dist_out)

    return dist_out

modelWE.processCoordinates = processCoordinates

Model-building with build_analyze_model()

You can construct an haMSM (and validation haMSMs) with one call to build_analyze_model()

[6]:
model = modelWE()

model.build_analyze_model(
    file_paths=h5file_paths,
    # ref_struct=basis_ref_dict,
    ref_struct=ref_file,
    modelName=model_name,
    basis_pcoord_bounds=pcoord_bounds['basis'],
    target_pcoord_bounds=pcoord_bounds['target'],
    dimreduce_method=dimreduce_method,
    n_clusters=clusters_per_stratum,
    tau=tau
)
2022-10-10 10:41:57,299 INFO worker.py:1509 -- Started a local
Ray instance. View the dashboard at 127.0.0.1:8265 
INFO     Be aware: Number of cluster centers   _clustering.py:141
         is an important parameter, and can                      
         drastically affect model quality. We                    
         recommend examining block-validation                    
         results with a range of numbers of                      
         clusters, to check for overfitting.                     
INFO     Beginning stratified clustering.      _clustering.py:148
INFO     Obtaining bin definitions from        _clustering.py:568
         iteration 2 in file                                     
         ../tests/reference/1000ns_ntl9/west.h                   
         5                                                       
INFO     Loading pickled bin mapper from H5    _clustering.py:572
         for stratified clustering...                            
INFO     Doing stratified clustering  stratified_clustering.py:66
         with 300 total clusters                                 
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
(do_stratified_ray_discretization pid=185903) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185910) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185906) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185908) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185913) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185916) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185904) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185915) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185911) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185914) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185912) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185909) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185907) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185902) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185905) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
(do_stratified_ray_discretization pid=185917) Warning: importing
'simtk.openmm' is deprecated.  Import 'openmm' instead.
INFO     Discretization complete              _clustering.py:1204
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 108                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
/home/jd/msm_we/msm_we/_hamsm/_clustering.py:1532:
VisibleDeprecationWarning: Creating an ndarray from ragged nested
sequences (which is a list-or-tuple of lists-or-tuples-or
ndarrays with different lengths or shapes) is deprecated. If you
meant to do this, you must specify 'dtype=object' when creating
the ndarray.
  self.targetRMSD_all =
np.array(cluster_pcoord_all)[pcoord_sort_indices]
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO                                             _analysis.py:170
         Flux converged to 1.8830e+06 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181
INFO     Beginning analysis of cross-validation     msm_we.py:926
         group 1/2.                                              
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 128                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO                                             _analysis.py:170
         Flux converged to 5.5930e+05 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181
INFO     Beginning analysis of cross-validation     msm_we.py:926
         group 2/2.                                              
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 123                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO                                             _analysis.py:170
         Flux converged to 2.8846e+06 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181

Model-building step by step

build_analyze_model() is just a convenient wrapper around the following steps.

You can run them manually if you want to observe each step of the process.

It’s helpful to start off by running step-by-step while you’re starting analysis for a system, to fine-tune parameters without re-running the entire workflow.

First, we launch Ray, which is the backend for the parallel work manager.

[7]:
ray.init(ignore_reinit_error=True)
2022-10-10 10:42:47,151 INFO worker.py:1351 -- Calling ray.init()
again after it has already been called.
[7]:

Ray

Python version: 3.9.13
Ray version: 2.0.0
Dashboard: http://127.0.0.1:8265
[8]:
model = modelWE()
[9]:
model.initialize(
    fileSpecifier=['../tests/reference/1000ns_ntl9/west.h5'],
    refPDBfile=ref_file,
    modelName=model_name,
    basis_pcoord_bounds=pcoord_bounds['basis'],
    target_pcoord_bounds=pcoord_bounds['target'],
    dim_reduce_method=dimreduce_method,
    tau=tau
)
[11]:
model.get_iterations()
model.get_coordSet(last_iter = model.maxIter, streaming=True)
[13]:
model.dimReduce()
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.

store_validation_model=True is necessary for block validation. It enables caching the model immediately after discretization in model.post_cluster_model, so that the blocks can be efficiently created later.

[14]:
model.cluster_coordinates(
    n_clusters=clusters_per_stratum,
    use_ray=True,
    stratified=True,
    store_validation_model=True, # Required for block validation
    random_state=1337,
)
INFO     Be aware: Number of cluster centers   _clustering.py:141
         is an important parameter, and can                      
         drastically affect model quality. We                    
         recommend examining block-validation                    
         results with a range of numbers of                      
         clusters, to check for overfitting.                     
INFO     Beginning stratified clustering.      _clustering.py:148
INFO     Obtaining bin definitions from        _clustering.py:568
         iteration 2 in file                                     
         ../tests/reference/1000ns_ntl9/west.h                   
         5                                                       
INFO     Loading pickled bin mapper from H5    _clustering.py:572
         for stratified clustering...                            
ERROR    Stratified clustering currently MUST  _clustering.py:608
         run in streaming mode (and with ray                     
         enabled for discretization). Enabling                   
         both and continuing...                                  
INFO     Doing stratified clustering  stratified_clustering.py:66
         with 300 total clusters                                 
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Discretization complete              _clustering.py:1204
[16]:
model.get_fluxMatrix(n_lag=0)

It’s likely our flux matrix isn’t strongly connected. This cleaning step removes all clusters that aren’t in the largest connected set, then rediscretizes all the trajectories according to the new, reduced set of clusters.

[18]:
model.organize_fluxMatrix()
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 109                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
[19]:
if generate_test_files:
    with open('../tests/reference/1000ns_ntl9/models/organized.obj', 'wb') as outfile:
        pickle.dump(model, outfile)
    np.save('../tests/reference/1000ns_ntl9/models/fluxmatrix.npy', model.fluxMatrix)

Transition matrix estimation

[20]:
model.get_Tmatrix()
[21]:
model.Tmatrix
[21]:
array([[0.32293215, 0.30579927, 0.01005867, ..., 0.        , 0.33022179,
        0.        ],
       [0.27769355, 0.31023711, 0.0148812 , ..., 0.        , 0.2590533 ,
        0.        ],
       [0.28155956, 0.24801922, 0.00295366, ..., 0.        , 0.26514922,
        0.        ],
       ...,
       [0.        , 0.        , 0.        , ..., 0.        , 0.        ,
        0.32410505],
       [0.31693347, 0.27896914, 0.0031783 , ..., 0.        , 0.35730547,
        0.        ],
       [0.        , 0.        , 0.        , ..., 0.        , 1.        ,
        0.        ]])
[22]:
model.get_steady_state()
INFO                                             _analysis.py:170
         Flux converged to 2.0346e+06 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181
[23]:
model.get_steady_state_target_flux()

Model validation

This block validation step

[25]:
model.do_block_validation(
    cross_validation_groups=2,
    cross_validation_blocks=4
)
INFO     Beginning analysis of cross-validation     msm_we.py:926
         group 1/2.                                              
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 127                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO                                             _analysis.py:170
         Flux converged to 1.6309e+06 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181
INFO     Beginning analysis of cross-validation     msm_we.py:926
         group 2/2.                                              
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO     Started with 300 clusters, and       _clustering.py:1020
         removed 119                                             
WARNING  All clusters were cleaned from bins  _clustering.py:1036
         {11}                                                    
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Using cached model for               _clustering.py:1132
         discretization                                          
INFO     Discretization complete              _clustering.py:1204
INFO     Using Ray cluster with 16.0 CPUs!          msm_we.py:450
INFO     Fluxmatrices all obtained             _fluxmatrix.py:497
INFO                                             _analysis.py:170
         Flux converged to 4.4589e+06 after 1                    
         iterations of inverse iteration.                        
INFO     Done with steady-state estimation.      _analysis.py:181

Generate lists of structures in each cluster

[26]:
model.update_cluster_structures()

Save model

[28]:
with open('data/pickled_model', 'wb') as of:
    pickle.dump(model, of)
[ ]: