Common setups
OpenPathSampling is very flexible and simplifies many different approaches to path sampling. Since it is easy to get lost under all those options, here we summarize the most common setups of networks and move schemes for transition path sampling and transition interface sampling.
Throughout the following, we assume that A
, B
, and C
are
volumes that represent states. We assume that interfacesA
is a list of
interfaces leaving state A
, and that interfacesAB
is a list of
interfaces leaving state A
in the expected direction of B
.
Similarly, we expect orderparameterA
is a collective variable describing
the process of leaving A
, and orderparameterAB
is a CV for leaving
A
toward B
.
Transition Path Sampling
Transition networks for TPS
For all transition path sampling setups, you can use either fixed path
length ensembles or flexible path length ensembles. The fixed path length
ensembles are created with the FixedLengthTPSNetwork
, while the
flexible path length ensembles are created with the TPSNetwork
.
The interfaces to these classes are the same, except that any method to
create a FixedLengthTPSNetwork
requires an extra length
parameter. The same network classes are used for both multiple state TPS
and 2-state TPS.
Unidirectional two-state TPS
The standard initialization of the TPS network objects takes the parameters
initial_states
and final_states
. If you want a TPSNetwork
from state A
to state B
, that can be created with:
network = paths.TPSNetwork(initial_states=A, final_states=B)
This will only sample the \(A\to B\) transitions. The TPS examples for alanine dipeptide give practical illustrations of this for both fixed-length and flexible-length ensembles.
Bidirectional two-state TPS
If you want to sample both the \(A\to B\) transitions and the \(B\to A\) transitions in one TPS simulation, then you can achieve the desired sampling ensemble in several ways.
First, you could use the approach as above, but using
initial_states=[A,B]
and final_states=[A,B]
. But there is a shortcut
for this (particularly useful when there are many states) with
network = paths.TPSNetwork.from_states_all_to_all([A,B])
Both of these approaches ignore the self-transitions (\(A\to A\) and
\(B\to B\)). You can also explicitly create the transitions with the
TPSNetwork.from_state_pairs()
method:
network = paths.TPSNetwork.from_state_pairs([(A,B), (B,A)])
Multiple-state TPS
The approaches for bidirectional 2-state TPS can be directly generalized to
multiple states. By default, the multiple state ensemble ignores
self-transitions (\(A\to A\)) if created with either the standard
initialization or with from_states_all_to_all
. If you would
like to include the self-transitions (not likely), then add the parameter
allow_self_transitions=True
to either the standard initialization or to
from_states_all_to_all
.
The method from_state_pairs()
will allow self-transitions if you
explicitly include them. In practice, from_state_pairs()
is most
useful when you only want to include certain transitions. For example, if
you have states A
, B
, and C
, but only want to include the
transitions \(A\to B\), \(A\to C\), and \(B\to C\), this is the
method to use. You’d create the network with
network = paths.TPSNetwork.from_state_pairs([(A,B), (A,C), (B,C)])
Move schemes for TPS
Often, when using TPS (and especially when using flexible-length TPS), the
entire move scheme consists of a single shooting mover. A move scheme
consisting of a single one-way shooting move can be created with the
OneWayShootingMoveScheme
. The common way to set this up is:
scheme = paths.OneWayShootingScheme(network, selector, engine)
where network
would be the (TPS) network, selector
is a shooting point
selector (usually an instance of UniformSelector
), and engine
is the desired dynamics engine.
Transition Interface Sampling
Transition networks for TIS
As with TPS, the 2-state system in TIS is just a special case of the multiple-state approach, so we use the same network classes to create 2-state systems as multiple-state systems.
Unidirectional two-state TIS
For unidirectional 2-state TIS (only studying the transition \(A\to B\),
not \(B\to A\)), we use the MISTISNetwork
with only one
transition listed:
network = paths.MISTISNetwork([(A, interfacesAB, B)])
This will sample the transition from A
to B
using the
InterfaceSet
interfaces
.
Bidirectional two-state TIS
For bidirectional 2-state TIS (simultaneously studying both the \(A\to
B\) transition and the \(B\to A\) transition), you could use a
MISTISNetwork
as in the unidirectional case, but giving both
transitions instead. However, using the MSTISNetwork
is a little
simpler, and gives completely equivalent results:
network = paths.MSTISNetwork([(A, interfacesA),
(B, interfacesB)])
Multiple-state TIS
The network for the standard multiple state TIS, where there is one set of interfaces for each state, is given by straightforward extension of the bidirectional 2-state case to more states. Illustrations of this are in the toy model MSTIS example, and in the alanine dipeptide MSTIS example.
If you wish to only focus on certain final states from a particular initial states, or if you want to use more than one interface set per initial state, then you need to use the multiple interface set variant of multiple state TIS. This is given by straightforward extension of the unidirectional case to more transitions. An illustration of this is in the toy model MISTIS example.
More details on the distinctions between the MSTIS network and the MISTIS networks are in the “Which network should I use” section.
Move schemes for TIS
Here we’ll discuss some standard and simple move schemes for TIS, which tend
to be significantly more complicated than for TPS. If you want a much more
complicated move scheme, it is usually good to start with one of these basic
move schemes, and then to use the MoveStrategy
objects to modify
the scheme.
Standard TIS scheme
The default TIS scheme includes one-way shooting (uniform shooting point selection) for each TIS and multiple state ensemble, path reversal movers on those same ensembles, a minus mover for each state, and nearest-neighbor replica exchange. The probabilities of choosing each move type are designed such that, for each ensemble, path reversal and replica exchange are tried half as frequently as shooting. The minus move is tried 1/5 as frequently as shooting.
This move scheme is generated with
scheme = paths.DefaultScheme(network, engine)