Skip to content

Commit 3b0f016

Browse files
committed
Merge pull request #227 from dwhswenson/networks
MSTIS Networks
2 parents 6be3656 + 1a10eaa commit 3b0f016

14 files changed

Lines changed: 1066 additions & 42 deletions

File tree

‎devtools/ci/ipythontests.sh‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ python ipynbtest.py "sliced_sequential_ensembles.ipynb" || testfail=1
88
python ipynbtest.py "toy_bootstrapping.ipynb" || testfail=1
99
python ipynbtest.py "toy_tis.ipynb" || testfail=1
1010
python ipynbtest.py "repex_networks.ipynb" || testfail=1
11+
python ipynbtest.py "multistate_system_setup.ipynb" || testfail=1
1112
python ipynbtest.py "langevin_integrator_check.ipynb" || testfail=1
1213
python ipynbtest.py "sliced_sequential_ensembles.ipynb" || testfail=1
1314
# needs to run after alanine since it need the trajectory.nc file

‎examples/ipython/.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
*.nc
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {
7+
"collapsed": true
8+
},
9+
"outputs": [],
10+
"source": [
11+
"%matplotlib inline\n",
12+
"import matplotlib.pyplot as plt\n",
13+
"import openpathsampling as paths\n",
14+
"import numpy as np\n",
15+
"\n",
16+
"from openpathsampling.analysis.tis_analysis import sampleset_sample_generator\n",
17+
"\n",
18+
"storage = paths.storage.Storage(\"mstis.nc\", mode=\"r\")"
19+
]
20+
},
21+
{
22+
"cell_type": "code",
23+
"execution_count": 2,
24+
"metadata": {
25+
"collapsed": false,
26+
"scrolled": true
27+
},
28+
"outputs": [
29+
{
30+
"ename": "TypeError",
31+
"evalue": "object.__new__(): not enough arguments",
32+
"output_type": "error",
33+
"traceback": [
34+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
35+
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
36+
"\u001b[0;32m<ipython-input-2-6388b15d781e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmstis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstorage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnetworks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
37+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/storage/object_storage.pyc\u001b[0m in \u001b[0;36minner\u001b[0;34m(self, idx, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1204\u001b[0m \u001b[0;31m# the class method directly it is not bound yet and so we need to include the self! Took me some time to\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1205\u001b[0m \u001b[0;31m# understand and figure that out\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1206\u001b[0;31m \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_idx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1207\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mobj\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1208\u001b[0m \u001b[0;31m# update cache there might have been a change due to naming\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
38+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/storage/object_storage.pyc\u001b[0m in \u001b[0;36minner\u001b[0;34m(self, idx, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1272\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1273\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1274\u001b[0;31m \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_idx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1275\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1276\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'idx'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
39+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/storage/object_storage.pyc\u001b[0m in \u001b[0;36mload\u001b[0;34m(self, idx)\u001b[0m\n\u001b[1;32m 546\u001b[0m '''\n\u001b[1;32m 547\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 548\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_json\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0midx_dimension\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m'_json'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0midx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 549\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 550\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclear_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
40+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/storage/object_storage.pyc\u001b[0m in \u001b[0;36mload_json\u001b[0;34m(self, name, idx)\u001b[0m\n\u001b[1;32m 921\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 922\u001b[0m \u001b[0msimplified\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0myaml\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjson_string\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 923\u001b[0;31m \u001b[0mobj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msimplifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msimplified\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 924\u001b[0m \u001b[0msetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'json'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mjson_string\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 925\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
41+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/storage/storage.pyc\u001b[0m in \u001b[0;36mbuild\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 571\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 572\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 573\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mStorableObjectJSON\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
42+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/todict.pyc\u001b[0m in \u001b[0;36mbuild\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 212\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'_cls'\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclass_list\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 213\u001b[0m \u001b[0mattributes\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuild\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'_dict'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 214\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclass_list\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'_cls'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mattributes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 215\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Cannot create obj of class \"'\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'_cls'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m+\u001b[0m \u001b[0;34m'\". Class is not registered as creatable!'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
43+
"\u001b[0;32m/Users/dwhs/Dropbox/msm-tis/openpathsampling/analysis/network.py\u001b[0m in \u001b[0;36mfrom_dict\u001b[0;34m(dct)\u001b[0m\n\u001b[1;32m 62\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 63\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mfrom_dict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdct\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 64\u001b[0;31m \u001b[0mnetwork\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMSTISNetwork\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__new__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 65\u001b[0m \u001b[0mnetwork\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_state\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdct\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'from_state'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mnetwork\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmovers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdct\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'movers'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
44+
"\u001b[0;31mTypeError\u001b[0m: object.__new__(): not enough arguments"
45+
]
46+
}
47+
],
48+
"source": [
49+
"mstis = storage.networks.load(0)"
50+
]
51+
},
52+
{
53+
"cell_type": "code",
54+
"execution_count": null,
55+
"metadata": {
56+
"collapsed": true
57+
},
58+
"outputs": [],
59+
"source": [
60+
"print mstis"
61+
]
62+
}
63+
],
64+
"metadata": {
65+
"kernelspec": {
66+
"display_name": "Python 2",
67+
"language": "python",
68+
"name": "python2"
69+
},
70+
"language_info": {
71+
"codemirror_mode": {
72+
"name": "ipython",
73+
"version": 2
74+
},
75+
"file_extension": ".py",
76+
"mimetype": "text/x-python",
77+
"name": "python",
78+
"nbconvert_exporter": "python",
79+
"pygments_lexer": "ipython2",
80+
"version": "2.7.9"
81+
}
82+
},
83+
"nbformat": 4,
84+
"nbformat_minor": 0
85+
}

‎examples/ipython/multistate_system_setup.ipynb‎

Lines changed: 507 additions & 0 deletions
Large diffs are not rendered by default.

‎examples/ipython/toy_plot_helpers.py‎

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ def __call__(self, x, y):
2525

2626
class ToyPlot(object):
2727
def __init__(self):
28-
range_x = np.arange(-1.1, 1.1, 0.05)
29-
range_y = np.arange(-1.1, 0.9, 0.05)
28+
range_x = np.arange(-1.1, 1.1, 0.01)
29+
range_y = np.arange(-1.1, 1.1, 0.01)
3030
self.extent = [range_x[0], range_x[-1], range_y[0], range_y[-1]]
3131
self.X, self.Y = np.meshgrid(range_x, range_y)
3232
pylab.rcParams['figure.figsize'] = 9, 6
3333
self.repcolordict = {0 : 'k-', 1 : 'r-', 2 : 'g-', 3 : 'b-',
34-
4 : 'r-', 5 : 'k-'}
34+
4 : 'r-'}
35+
36+
self.contour_range = np.arange(0.0, 1.5, 0.1)
3537

3638
self._states = None
3739
self._pes = None
@@ -46,9 +48,9 @@ def add_pes(self, pes):
4648
def add_states(self, states):
4749
if self._states is None:
4850
state = states[0]
49-
self._states = np.vectorize(CallableVolume(state))(self.X, self.Y)
51+
self._states = np.vectorize(CallableVolume(state))(self.X, -self.Y)
5052
for state in states[1:]:
51-
self._states += np.vectorize(CallableVolume(state))(self.X, self.Y)
53+
self._states += np.vectorize(CallableVolume(state))(self.X, -self.Y)
5254

5355
def add_interfaces(self, ifaces):
5456
if self._interfaces is None:
@@ -83,7 +85,7 @@ def plot(self, trajectories=[], bold=[]):
8385
aspect='auto')
8486
if self._pes is not None:
8587
plt.contour(self.X, self.Y, self._pes,
86-
levels=np.arange(0.0, 1.5, 0.1), colors='k')
88+
levels=self.contour_range, colors='k')
8789
if self._interfaces is not None:
8890
for iface in self._interfaces:
8991
plt.contour(self.X, self.Y, iface,
@@ -98,7 +100,7 @@ def plot(self, trajectories=[], bold=[]):
98100
zorder=1)
99101
for traj in trajectories:
100102
plt.plot(traj.xyz()[:,0,0], traj.xyz()[:,0,1],
101-
self.repcolordict[trajectories.index(traj)],
103+
self.repcolordict[trajectories.index(traj) % 5],
102104
zorder=2)
103105

104106
def reset(self):

‎examples/ipython/toy_tis.ipynb‎

Lines changed: 31 additions & 26 deletions
Large diffs are not rendered by default.

‎openpathsampling/__init__.py‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
ReversedTrajectoryEnsemble, SequentialEnsemble, VolumeEnsemble,
1010
SequentialEnsemble, IntersectionEnsemble, UnionEnsemble,
1111
SymmetricDifferenceEnsemble, RelativeComplementEnsemble,
12-
SingleFrameEnsemble, MinusInterfaceEnsemble, TISEnsemble
12+
SingleFrameEnsemble, MinusInterfaceEnsemble, TISEnsemble,
13+
OptionalEnsemble
1314
)
1415

1516
from snapshot import Snapshot, Configuration, Momentum
@@ -26,7 +27,7 @@
2627
PartialAcceptanceSequentialMover, ReplicaIDChangeMover, SequentialMover,
2728
ConditionalMover, FilterByReplica, RestrictToLastSampleMover,
2829
CollapseMove, PathSimulatorMover, PathReversalSet,
29-
NeighborEnsembleReplicaExchange
30+
NeighborEnsembleReplicaExchange, OneWayShootingMover
3031
)
3132

3233

@@ -62,6 +63,10 @@
6263
from analysis.tis_analysis import TISTransition, RETISTransition, Transition, \
6364
TPSTransition
6465

66+
from analysis.network import (
67+
MSTISNetwork
68+
)
69+
6570
from analysis.replica_network import (
6671
ReplicaNetwork, trace_ensembles_for_replica,
6772
trace_replicas_for_ensemble, condense_repeats,

0 commit comments

Comments
 (0)