diff --git a/Tutorial/DCD/RUN00/frame0.dcd b/Tutorial/DCD/RUN00/frame0.dcd new file mode 100644 index 00000000..7e373e63 Binary files /dev/null and b/Tutorial/DCD/RUN00/frame0.dcd differ diff --git a/Tutorial/DCD/RUN01/frame0.dcd b/Tutorial/DCD/RUN01/frame0.dcd new file mode 100644 index 00000000..587925f9 Binary files /dev/null and b/Tutorial/DCD/RUN01/frame0.dcd differ diff --git a/Tutorial/DCD/RUN02/frame0.dcd b/Tutorial/DCD/RUN02/frame0.dcd new file mode 100644 index 00000000..48395676 Binary files /dev/null and b/Tutorial/DCD/RUN02/frame0.dcd differ diff --git a/Tutorial/DCD/RUN03/frame0.dcd b/Tutorial/DCD/RUN03/frame0.dcd new file mode 100644 index 00000000..f3766e49 Binary files /dev/null and b/Tutorial/DCD/RUN03/frame0.dcd differ diff --git a/Tutorial/DCD/RUN04/frame0.dcd b/Tutorial/DCD/RUN04/frame0.dcd new file mode 100644 index 00000000..07c08743 Binary files /dev/null and b/Tutorial/DCD/RUN04/frame0.dcd differ diff --git a/Tutorial/DCD/RUN05/frame0.dcd b/Tutorial/DCD/RUN05/frame0.dcd new file mode 100644 index 00000000..9aa81f19 Binary files /dev/null and b/Tutorial/DCD/RUN05/frame0.dcd differ diff --git a/Tutorial/DCD/RUN06/frame0.dcd b/Tutorial/DCD/RUN06/frame0.dcd new file mode 100644 index 00000000..324357c9 Binary files /dev/null and b/Tutorial/DCD/RUN06/frame0.dcd differ diff --git a/Tutorial/DCD/RUN07/frame0.dcd b/Tutorial/DCD/RUN07/frame0.dcd new file mode 100644 index 00000000..e1def4e4 Binary files /dev/null and b/Tutorial/DCD/RUN07/frame0.dcd differ diff --git a/Tutorial/DCD/RUN08/frame0.dcd b/Tutorial/DCD/RUN08/frame0.dcd new file mode 100644 index 00000000..21ef0231 Binary files /dev/null and b/Tutorial/DCD/RUN08/frame0.dcd differ diff --git a/Tutorial/DCD/RUN09/frame0.dcd b/Tutorial/DCD/RUN09/frame0.dcd new file mode 100644 index 00000000..468150cf Binary files /dev/null and b/Tutorial/DCD/RUN09/frame0.dcd differ diff --git a/Tutorial/DCD/RUN10/frame0.dcd b/Tutorial/DCD/RUN10/frame0.dcd new file mode 100644 index 00000000..700c9e8c Binary files /dev/null and b/Tutorial/DCD/RUN10/frame0.dcd differ diff --git a/Tutorial/DCD/RUN11/frame0.dcd b/Tutorial/DCD/RUN11/frame0.dcd new file mode 100644 index 00000000..394401f1 Binary files /dev/null and b/Tutorial/DCD/RUN11/frame0.dcd differ diff --git a/Tutorial/DCD/RUN12/frame0.dcd b/Tutorial/DCD/RUN12/frame0.dcd new file mode 100644 index 00000000..e7b60c5e Binary files /dev/null and b/Tutorial/DCD/RUN12/frame0.dcd differ diff --git a/Tutorial/DCD/RUN13/frame0.dcd b/Tutorial/DCD/RUN13/frame0.dcd new file mode 100644 index 00000000..b06868ac Binary files /dev/null and b/Tutorial/DCD/RUN13/frame0.dcd differ diff --git a/Tutorial/DCD/RUN14/frame0.dcd b/Tutorial/DCD/RUN14/frame0.dcd new file mode 100644 index 00000000..7e0bb8cc Binary files /dev/null and b/Tutorial/DCD/RUN14/frame0.dcd differ diff --git a/Tutorial/DCD/RUN15/frame0.dcd b/Tutorial/DCD/RUN15/frame0.dcd new file mode 100644 index 00000000..2caf1cb7 Binary files /dev/null and b/Tutorial/DCD/RUN15/frame0.dcd differ diff --git a/Tutorial/DCD/RUN16/frame0.dcd b/Tutorial/DCD/RUN16/frame0.dcd new file mode 100644 index 00000000..a7bd9fea Binary files /dev/null and b/Tutorial/DCD/RUN16/frame0.dcd differ diff --git a/Tutorial/DCD/RUN17/frame0.dcd b/Tutorial/DCD/RUN17/frame0.dcd new file mode 100644 index 00000000..e99beeac Binary files /dev/null and b/Tutorial/DCD/RUN17/frame0.dcd differ diff --git a/Tutorial/DCD/RUN18/frame0.dcd b/Tutorial/DCD/RUN18/frame0.dcd new file mode 100644 index 00000000..7e6f2dce Binary files /dev/null and b/Tutorial/DCD/RUN18/frame0.dcd differ diff --git a/Tutorial/DCD/RUN19/frame0.dcd b/Tutorial/DCD/RUN19/frame0.dcd new file mode 100644 index 00000000..9b9d689a Binary files /dev/null and b/Tutorial/DCD/RUN19/frame0.dcd differ diff --git a/Tutorial/DCD/RUN20/frame0.dcd b/Tutorial/DCD/RUN20/frame0.dcd new file mode 100644 index 00000000..9a679020 Binary files /dev/null and b/Tutorial/DCD/RUN20/frame0.dcd differ diff --git a/Tutorial/DCD/RUN21/frame0.dcd b/Tutorial/DCD/RUN21/frame0.dcd new file mode 100644 index 00000000..102565b5 Binary files /dev/null and b/Tutorial/DCD/RUN21/frame0.dcd differ diff --git a/Tutorial/DCD/RUN22/frame0.dcd b/Tutorial/DCD/RUN22/frame0.dcd new file mode 100644 index 00000000..342a8504 Binary files /dev/null and b/Tutorial/DCD/RUN22/frame0.dcd differ diff --git a/Tutorial/DCD/RUN23/frame0.dcd b/Tutorial/DCD/RUN23/frame0.dcd new file mode 100644 index 00000000..812d18be Binary files /dev/null and b/Tutorial/DCD/RUN23/frame0.dcd differ diff --git a/Tutorial/DCD/RUN24/frame0.dcd b/Tutorial/DCD/RUN24/frame0.dcd new file mode 100644 index 00000000..006243fc Binary files /dev/null and b/Tutorial/DCD/RUN24/frame0.dcd differ diff --git a/Tutorial/DCD/RUN25/frame0.dcd b/Tutorial/DCD/RUN25/frame0.dcd new file mode 100644 index 00000000..6e58fd62 Binary files /dev/null and b/Tutorial/DCD/RUN25/frame0.dcd differ diff --git a/Tutorial/DCD/RUN26/frame0.dcd b/Tutorial/DCD/RUN26/frame0.dcd new file mode 100644 index 00000000..8c1f9744 Binary files /dev/null and b/Tutorial/DCD/RUN26/frame0.dcd differ diff --git a/Tutorial/DCD/RUN27/frame0.dcd b/Tutorial/DCD/RUN27/frame0.dcd new file mode 100644 index 00000000..c17b8497 Binary files /dev/null and b/Tutorial/DCD/RUN27/frame0.dcd differ diff --git a/Tutorial/DCD/RUN28/frame0.dcd b/Tutorial/DCD/RUN28/frame0.dcd new file mode 100644 index 00000000..f1112eda Binary files /dev/null and b/Tutorial/DCD/RUN28/frame0.dcd differ diff --git a/Tutorial/DCD/RUN29/frame0.dcd b/Tutorial/DCD/RUN29/frame0.dcd new file mode 100644 index 00000000..ca206a8f Binary files /dev/null and b/Tutorial/DCD/RUN29/frame0.dcd differ diff --git a/Tutorial/DCD/RUN30/frame0.dcd b/Tutorial/DCD/RUN30/frame0.dcd new file mode 100644 index 00000000..cf6eb0f9 Binary files /dev/null and b/Tutorial/DCD/RUN30/frame0.dcd differ diff --git a/Tutorial/DCD/RUN31/frame0.dcd b/Tutorial/DCD/RUN31/frame0.dcd new file mode 100644 index 00000000..12a8638b Binary files /dev/null and b/Tutorial/DCD/RUN31/frame0.dcd differ diff --git a/Tutorial/DCD/RUN32/frame0.dcd b/Tutorial/DCD/RUN32/frame0.dcd new file mode 100644 index 00000000..236e3970 Binary files /dev/null and b/Tutorial/DCD/RUN32/frame0.dcd differ diff --git a/Tutorial/DCD/RUN33/frame0.dcd b/Tutorial/DCD/RUN33/frame0.dcd new file mode 100644 index 00000000..75f1deec Binary files /dev/null and b/Tutorial/DCD/RUN33/frame0.dcd differ diff --git a/Tutorial/DCD/RUN34/frame0.dcd b/Tutorial/DCD/RUN34/frame0.dcd new file mode 100644 index 00000000..d4390ef2 Binary files /dev/null and b/Tutorial/DCD/RUN34/frame0.dcd differ diff --git a/Tutorial/DCD/RUN35/frame0.dcd b/Tutorial/DCD/RUN35/frame0.dcd new file mode 100644 index 00000000..34e0fa36 Binary files /dev/null and b/Tutorial/DCD/RUN35/frame0.dcd differ diff --git a/Tutorial/DCD/RUN36/frame0.dcd b/Tutorial/DCD/RUN36/frame0.dcd new file mode 100644 index 00000000..7e4fe26f Binary files /dev/null and b/Tutorial/DCD/RUN36/frame0.dcd differ diff --git a/Tutorial/DCD/RUN37/frame0.dcd b/Tutorial/DCD/RUN37/frame0.dcd new file mode 100644 index 00000000..bfcc9578 Binary files /dev/null and b/Tutorial/DCD/RUN37/frame0.dcd differ diff --git a/Tutorial/DCD/RUN38/frame0.dcd b/Tutorial/DCD/RUN38/frame0.dcd new file mode 100644 index 00000000..65faa320 Binary files /dev/null and b/Tutorial/DCD/RUN38/frame0.dcd differ diff --git a/Tutorial/DCD/RUN39/frame0.dcd b/Tutorial/DCD/RUN39/frame0.dcd new file mode 100644 index 00000000..d86c6dad Binary files /dev/null and b/Tutorial/DCD/RUN39/frame0.dcd differ diff --git a/Tutorial/DCD/RUN40/frame0.dcd b/Tutorial/DCD/RUN40/frame0.dcd new file mode 100644 index 00000000..abaec31e Binary files /dev/null and b/Tutorial/DCD/RUN40/frame0.dcd differ diff --git a/Tutorial/DCD/RUN41/frame0.dcd b/Tutorial/DCD/RUN41/frame0.dcd new file mode 100644 index 00000000..5a9428e1 Binary files /dev/null and b/Tutorial/DCD/RUN41/frame0.dcd differ diff --git a/Tutorial/DCD/RUN42/frame0.dcd b/Tutorial/DCD/RUN42/frame0.dcd new file mode 100644 index 00000000..38040860 Binary files /dev/null and b/Tutorial/DCD/RUN42/frame0.dcd differ diff --git a/Tutorial/DCD/RUN43/frame0.dcd b/Tutorial/DCD/RUN43/frame0.dcd new file mode 100644 index 00000000..beff9dbd Binary files /dev/null and b/Tutorial/DCD/RUN43/frame0.dcd differ diff --git a/Tutorial/DCD/RUN44/frame0.dcd b/Tutorial/DCD/RUN44/frame0.dcd new file mode 100644 index 00000000..8b53817f Binary files /dev/null and b/Tutorial/DCD/RUN44/frame0.dcd differ diff --git a/Tutorial/DCD/RUN45/frame0.dcd b/Tutorial/DCD/RUN45/frame0.dcd new file mode 100644 index 00000000..b7dc6127 Binary files /dev/null and b/Tutorial/DCD/RUN45/frame0.dcd differ diff --git a/Tutorial/DCD/RUN46/frame0.dcd b/Tutorial/DCD/RUN46/frame0.dcd new file mode 100644 index 00000000..a67d5dd9 Binary files /dev/null and b/Tutorial/DCD/RUN46/frame0.dcd differ diff --git a/Tutorial/DCD/RUN47/frame0.dcd b/Tutorial/DCD/RUN47/frame0.dcd new file mode 100644 index 00000000..5aeff87b Binary files /dev/null and b/Tutorial/DCD/RUN47/frame0.dcd differ diff --git a/Tutorial/DCD/RUN48/frame0.dcd b/Tutorial/DCD/RUN48/frame0.dcd new file mode 100644 index 00000000..ab361822 Binary files /dev/null and b/Tutorial/DCD/RUN48/frame0.dcd differ diff --git a/Tutorial/DCD/RUN49/frame0.dcd b/Tutorial/DCD/RUN49/frame0.dcd new file mode 100644 index 00000000..fd50ee44 Binary files /dev/null and b/Tutorial/DCD/RUN49/frame0.dcd differ diff --git a/Tutorial/DCD/RUN50/frame0.dcd b/Tutorial/DCD/RUN50/frame0.dcd new file mode 100644 index 00000000..2bd7dbe1 Binary files /dev/null and b/Tutorial/DCD/RUN50/frame0.dcd differ diff --git a/Tutorial/DCD/RUN51/frame0.dcd b/Tutorial/DCD/RUN51/frame0.dcd new file mode 100644 index 00000000..93ce172d Binary files /dev/null and b/Tutorial/DCD/RUN51/frame0.dcd differ diff --git a/Tutorial/DCD/RUN52/frame0.dcd b/Tutorial/DCD/RUN52/frame0.dcd new file mode 100644 index 00000000..665b08d4 Binary files /dev/null and b/Tutorial/DCD/RUN52/frame0.dcd differ diff --git a/Tutorial/DCD/RUN53/frame0.dcd b/Tutorial/DCD/RUN53/frame0.dcd new file mode 100644 index 00000000..8348017b Binary files /dev/null and b/Tutorial/DCD/RUN53/frame0.dcd differ diff --git a/Tutorial/DCD/RUN54/frame0.dcd b/Tutorial/DCD/RUN54/frame0.dcd new file mode 100644 index 00000000..39418c82 Binary files /dev/null and b/Tutorial/DCD/RUN54/frame0.dcd differ diff --git a/Tutorial/DCD/RUN55/frame0.dcd b/Tutorial/DCD/RUN55/frame0.dcd new file mode 100644 index 00000000..3cbb022a Binary files /dev/null and b/Tutorial/DCD/RUN55/frame0.dcd differ diff --git a/Tutorial/DCD/RUN56/frame0.dcd b/Tutorial/DCD/RUN56/frame0.dcd new file mode 100644 index 00000000..f318104c Binary files /dev/null and b/Tutorial/DCD/RUN56/frame0.dcd differ diff --git a/Tutorial/DCD/RUN57/frame0.dcd b/Tutorial/DCD/RUN57/frame0.dcd new file mode 100644 index 00000000..bdada486 Binary files /dev/null and b/Tutorial/DCD/RUN57/frame0.dcd differ diff --git a/Tutorial/DCD/RUN58/frame0.dcd b/Tutorial/DCD/RUN58/frame0.dcd new file mode 100644 index 00000000..8b891817 Binary files /dev/null and b/Tutorial/DCD/RUN58/frame0.dcd differ diff --git a/Tutorial/DCD/RUN59/frame0.dcd b/Tutorial/DCD/RUN59/frame0.dcd new file mode 100644 index 00000000..2407ea51 Binary files /dev/null and b/Tutorial/DCD/RUN59/frame0.dcd differ diff --git a/Tutorial/DCD/RUN60/frame0.dcd b/Tutorial/DCD/RUN60/frame0.dcd new file mode 100644 index 00000000..82189a64 Binary files /dev/null and b/Tutorial/DCD/RUN60/frame0.dcd differ diff --git a/Tutorial/DCD/RUN61/frame0.dcd b/Tutorial/DCD/RUN61/frame0.dcd new file mode 100644 index 00000000..e060ea5b Binary files /dev/null and b/Tutorial/DCD/RUN61/frame0.dcd differ diff --git a/Tutorial/DCD/RUN62/frame0.dcd b/Tutorial/DCD/RUN62/frame0.dcd new file mode 100644 index 00000000..6fd9bcdf Binary files /dev/null and b/Tutorial/DCD/RUN62/frame0.dcd differ diff --git a/Tutorial/DCD/RUN63/frame0.dcd b/Tutorial/DCD/RUN63/frame0.dcd new file mode 100644 index 00000000..e3be5f33 Binary files /dev/null and b/Tutorial/DCD/RUN63/frame0.dcd differ diff --git a/Tutorial/DCD/RUN64/frame0.dcd b/Tutorial/DCD/RUN64/frame0.dcd new file mode 100644 index 00000000..b4d90ec8 Binary files /dev/null and b/Tutorial/DCD/RUN64/frame0.dcd differ diff --git a/Tutorial/DCD/RUN65/frame0.dcd b/Tutorial/DCD/RUN65/frame0.dcd new file mode 100644 index 00000000..45dcd06b Binary files /dev/null and b/Tutorial/DCD/RUN65/frame0.dcd differ diff --git a/Tutorial/DCD/RUN66/frame0.dcd b/Tutorial/DCD/RUN66/frame0.dcd new file mode 100644 index 00000000..afde81a8 Binary files /dev/null and b/Tutorial/DCD/RUN66/frame0.dcd differ diff --git a/Tutorial/DCD/RUN67/frame0.dcd b/Tutorial/DCD/RUN67/frame0.dcd new file mode 100644 index 00000000..5d69bd92 Binary files /dev/null and b/Tutorial/DCD/RUN67/frame0.dcd differ diff --git a/Tutorial/DCD/RUN68/frame0.dcd b/Tutorial/DCD/RUN68/frame0.dcd new file mode 100644 index 00000000..714e0445 Binary files /dev/null and b/Tutorial/DCD/RUN68/frame0.dcd differ diff --git a/Tutorial/DCD/RUN69/frame0.dcd b/Tutorial/DCD/RUN69/frame0.dcd new file mode 100644 index 00000000..50b50da0 Binary files /dev/null and b/Tutorial/DCD/RUN69/frame0.dcd differ diff --git a/Tutorial/DCD/RUN70/frame0.dcd b/Tutorial/DCD/RUN70/frame0.dcd new file mode 100644 index 00000000..72701462 Binary files /dev/null and b/Tutorial/DCD/RUN70/frame0.dcd differ diff --git a/Tutorial/DCD/RUN71/frame0.dcd b/Tutorial/DCD/RUN71/frame0.dcd new file mode 100644 index 00000000..71739c9f Binary files /dev/null and b/Tutorial/DCD/RUN71/frame0.dcd differ diff --git a/Tutorial/DCD/RUN72/frame0.dcd b/Tutorial/DCD/RUN72/frame0.dcd new file mode 100644 index 00000000..2f498526 Binary files /dev/null and b/Tutorial/DCD/RUN72/frame0.dcd differ diff --git a/Tutorial/DCD/RUN73/frame0.dcd b/Tutorial/DCD/RUN73/frame0.dcd new file mode 100644 index 00000000..44efe8d8 Binary files /dev/null and b/Tutorial/DCD/RUN73/frame0.dcd differ diff --git a/Tutorial/DCD/RUN74/frame0.dcd b/Tutorial/DCD/RUN74/frame0.dcd new file mode 100644 index 00000000..2a50ff79 Binary files /dev/null and b/Tutorial/DCD/RUN74/frame0.dcd differ diff --git a/Tutorial/DCD/RUN75/frame0.dcd b/Tutorial/DCD/RUN75/frame0.dcd new file mode 100644 index 00000000..857200e9 Binary files /dev/null and b/Tutorial/DCD/RUN75/frame0.dcd differ diff --git a/Tutorial/DCD/RUN76/frame0.dcd b/Tutorial/DCD/RUN76/frame0.dcd new file mode 100644 index 00000000..641b3a93 Binary files /dev/null and b/Tutorial/DCD/RUN76/frame0.dcd differ diff --git a/Tutorial/DCD/RUN77/frame0.dcd b/Tutorial/DCD/RUN77/frame0.dcd new file mode 100644 index 00000000..d853bfb7 Binary files /dev/null and b/Tutorial/DCD/RUN77/frame0.dcd differ diff --git a/Tutorial/DCD/RUN78/frame0.dcd b/Tutorial/DCD/RUN78/frame0.dcd new file mode 100644 index 00000000..6e269ceb Binary files /dev/null and b/Tutorial/DCD/RUN78/frame0.dcd differ diff --git a/Tutorial/DCD/RUN79/frame0.dcd b/Tutorial/DCD/RUN79/frame0.dcd new file mode 100644 index 00000000..65f70277 Binary files /dev/null and b/Tutorial/DCD/RUN79/frame0.dcd differ diff --git a/Tutorial/DCD/RUN80/frame0.dcd b/Tutorial/DCD/RUN80/frame0.dcd new file mode 100644 index 00000000..39f85029 Binary files /dev/null and b/Tutorial/DCD/RUN80/frame0.dcd differ diff --git a/Tutorial/DCD/RUN81/frame0.dcd b/Tutorial/DCD/RUN81/frame0.dcd new file mode 100644 index 00000000..860777e5 Binary files /dev/null and b/Tutorial/DCD/RUN81/frame0.dcd differ diff --git a/Tutorial/DCD/RUN82/frame0.dcd b/Tutorial/DCD/RUN82/frame0.dcd new file mode 100644 index 00000000..98fa0311 Binary files /dev/null and b/Tutorial/DCD/RUN82/frame0.dcd differ diff --git a/Tutorial/DCD/RUN83/frame0.dcd b/Tutorial/DCD/RUN83/frame0.dcd new file mode 100644 index 00000000..60136a99 Binary files /dev/null and b/Tutorial/DCD/RUN83/frame0.dcd differ diff --git a/Tutorial/DCD/RUN84/frame0.dcd b/Tutorial/DCD/RUN84/frame0.dcd new file mode 100644 index 00000000..4b3ffe37 Binary files /dev/null and b/Tutorial/DCD/RUN84/frame0.dcd differ diff --git a/Tutorial/DCD/RUN85/frame0.dcd b/Tutorial/DCD/RUN85/frame0.dcd new file mode 100644 index 00000000..dc082bf5 Binary files /dev/null and b/Tutorial/DCD/RUN85/frame0.dcd differ diff --git a/Tutorial/DCD/RUN86/frame0.dcd b/Tutorial/DCD/RUN86/frame0.dcd new file mode 100644 index 00000000..e12ecf56 Binary files /dev/null and b/Tutorial/DCD/RUN86/frame0.dcd differ diff --git a/Tutorial/DCD/RUN87/frame0.dcd b/Tutorial/DCD/RUN87/frame0.dcd new file mode 100644 index 00000000..bd80958e Binary files /dev/null and b/Tutorial/DCD/RUN87/frame0.dcd differ diff --git a/Tutorial/DCD/RUN88/frame0.dcd b/Tutorial/DCD/RUN88/frame0.dcd new file mode 100644 index 00000000..cebb9646 Binary files /dev/null and b/Tutorial/DCD/RUN88/frame0.dcd differ diff --git a/Tutorial/DCD/RUN89/frame0.dcd b/Tutorial/DCD/RUN89/frame0.dcd new file mode 100644 index 00000000..d5663652 Binary files /dev/null and b/Tutorial/DCD/RUN89/frame0.dcd differ diff --git a/Tutorial/DCD/RUN90/frame0.dcd b/Tutorial/DCD/RUN90/frame0.dcd new file mode 100644 index 00000000..78b31b9a Binary files /dev/null and b/Tutorial/DCD/RUN90/frame0.dcd differ diff --git a/Tutorial/DCD/RUN91/frame0.dcd b/Tutorial/DCD/RUN91/frame0.dcd new file mode 100644 index 00000000..66adfcfa Binary files /dev/null and b/Tutorial/DCD/RUN91/frame0.dcd differ diff --git a/Tutorial/DCD/RUN92/frame0.dcd b/Tutorial/DCD/RUN92/frame0.dcd new file mode 100644 index 00000000..e2daf19f Binary files /dev/null and b/Tutorial/DCD/RUN92/frame0.dcd differ diff --git a/Tutorial/DCD/RUN93/frame0.dcd b/Tutorial/DCD/RUN93/frame0.dcd new file mode 100644 index 00000000..e9dcd3ab Binary files /dev/null and b/Tutorial/DCD/RUN93/frame0.dcd differ diff --git a/Tutorial/DCD/RUN94/frame0.dcd b/Tutorial/DCD/RUN94/frame0.dcd new file mode 100644 index 00000000..4d62a28f Binary files /dev/null and b/Tutorial/DCD/RUN94/frame0.dcd differ diff --git a/Tutorial/DCD/RUN95/frame0.dcd b/Tutorial/DCD/RUN95/frame0.dcd new file mode 100644 index 00000000..79122ef4 Binary files /dev/null and b/Tutorial/DCD/RUN95/frame0.dcd differ diff --git a/Tutorial/DCD/RUN96/frame0.dcd b/Tutorial/DCD/RUN96/frame0.dcd new file mode 100644 index 00000000..4e0224e6 Binary files /dev/null and b/Tutorial/DCD/RUN96/frame0.dcd differ diff --git a/Tutorial/DCD/RUN97/frame0.dcd b/Tutorial/DCD/RUN97/frame0.dcd new file mode 100644 index 00000000..5197e8bc Binary files /dev/null and b/Tutorial/DCD/RUN97/frame0.dcd differ diff --git a/Tutorial/DCD/RUN98/frame0.dcd b/Tutorial/DCD/RUN98/frame0.dcd new file mode 100644 index 00000000..96d3ae01 Binary files /dev/null and b/Tutorial/DCD/RUN98/frame0.dcd differ diff --git a/Tutorial/DCD/RUN99/frame0.dcd b/Tutorial/DCD/RUN99/frame0.dcd new file mode 100644 index 00000000..1f6e0b9d Binary files /dev/null and b/Tutorial/DCD/RUN99/frame0.dcd differ diff --git a/Tutorial/Dihedrals.h5 b/Tutorial/Dihedrals.h5 new file mode 100644 index 00000000..c563b04f Binary files /dev/null and b/Tutorial/Dihedrals.h5 differ diff --git a/Tutorial/F_test.dat b/Tutorial/F_test.dat new file mode 100644 index 00000000..4539bbf2 --- /dev/null +++ b/Tutorial/F_test.dat @@ -0,0 +1,3 @@ +0 +1 +2 diff --git a/Tutorial/GetDihedrals.py b/Tutorial/GetDihedrals.py new file mode 100644 index 00000000..ba3afbe1 --- /dev/null +++ b/Tutorial/GetDihedrals.py @@ -0,0 +1,175 @@ + +def GetAtomIndicesAndPosition(C1): + a=C1["AtomNames"] + aC=np.where(a=="C")[0] + aN=np.where(a=="N")[0] + aCA=np.where(a=="CA")[0] + X=C1["XYZ"] + NumResi=C1.GetNumberOfResidues() + return(NumResi,a,aC,aN,aCA,X) + + +def GetAllPsi(C1,NumResi=None,a=None,aC=None,aN=None,aCA=None,X=None): + if a==None: + NumResi,a,aC,aN,aCA,X=GetAtomIndicesAndPosition(C1) + Data=[] + for i in xrange(NumResi-1): + print(i) + x0=X[aN[i]] + x1=X[aCA[i+1]] + x2=X[aC[i+1]] + x3=X[aN[i+1]] + Psi=Torsion(x0,x1,x2,x3) + Data.append(Psi) + return(np.array(Data)) + + +def GetAllPhi(C1,NumResi=None,a=None,aC=None,aN=None,aCA=None,X=None): + if a==None: + NumResi,a,aC,aN,aCA,X=GetAtomIndicesAndPosition(C1) + Data=[] + for i in xrange(NumResi-1): + print(i) + x0=X[aC[i]] + x1=X[aN[i+1]] + x2=X[aCA[i+1]] + x3=X[aC[i+1]] + Phi=Torsion(x0,x1,x2,x3) + Data.append(Phi) + return(np.array(Data)) + +def GetAllPsiDipeptide(C1,NumResi=None,a=None,aC=None,aN=None,aCA=None,X=None): + if a==None: + NumResi,a,aC,aN,aCA,X=GetPsiAtomIndicesAndPosition(C1) + + a0=aN[0] + a1=aCA[0]#Corrected because resi 0 has no CA + a2=aC[1] + a3=aN[1] + x0=X[a0] + x1=X[a1] + x2=X[a2] + x3=X[a3] + Psi=Torsion(x0,x1,x2,x3) + return(np.array([Psi])) + +def GetAllPhiDipeptide(C1,NumResi=None,a=None,aC=None,aN=None,aCA=None,X=None): + if a==None: + NumResi,a,aC,aN,aCA,X=GetPhiAtomIndicesAndPosition(C1) + a0=aC[0] + a1=aN[0] + a2=aCA[0]#Corrected because resi 0 has no CA + a3=aC[1] + x0=X[a0] + x1=X[a1] + x2=X[a2] + x3=X[a3] + Phi=Torsion(x0,x1,x2,x3) + return(np.array([Phi])) + +def Torsion(x0,x1,x2,x3,Degrees=True): + """Calculate the signed dihedral angle between 4 positions.""" + #Calculate Bond Vectors b1, b2, b3 + b1=x1-x0 + b2=x2-x1 + b3=x3-x2 + + #Calculate Normal Vectors c1,c2. This numbering scheme is idiotic, so care. + c1=np.cross(b2,b3) + c2=np.cross(b1,b2) + + Arg1=np.dot(b1,c1) + Arg1*=np.linalg.norm(b2) + + Arg2=np.dot(c2,c1) + + phi=np.arctan2(Arg1,Arg2) + + if Degrees==True: + phi*=180./np.pi + return(phi) + +def get_angles(pdb_path = "./native.pdb", project_path = "./ProjectInfo.yaml", assignments_path = "./Macro4/MacroAssignments.h5", + samplesPerState = 10): + # Load conformation and project + C1=Conformation.load_from_pdb(pdb_path) + P1=Project.load_from(project_path) + + # Extract information from the topology file + NumResi,a,aC,aN,aCA,X=GetAtomIndicesAndPosition(C1) + + + def GetPhi(X): + return GetAllPhiDipeptide(C1,NumResi=NumResi,a=a,aC=aC,aN=aN,aCA=aCA,X=X) + def GetPsi(X): + return GetAllPsiDipeptide(C1,NumResi=NumResi,a=a,aC=aC,aN=aN,aCA=aCA,X=X) + + # Load assignments + assign = io.loadh(assignments_path, "arr_0") + numStates = assign.max() - assign.min() + 1 + + # Lambda function to get max number of conformations per macrostate + max_per_state = lambda x: len(np.where(assign == x)[0]) + # Number of conformations to sample + if samplesPerState < 0: + num_confs = [max_per_state(i) for i in xrange(numStates)] + else: + num_confs = [min(samplesPerState, max_per_state(i)) for i in xrange(numStates)] + # Total number of conformations + num_confs_tot = sum(num_confs) + + print(num_confs) + + # Sample conformations + confs = P1.get_random_confs_from_states(assign, range(numStates), num_confs, replacement = False) + + # Initialize arrays + phi = np.zeros(num_confs_tot) + psi = np.zeros(num_confs_tot) + ind = np.array(num_confs, dtype=np.int) + + # Loop through conformations and get phi and psi angles + i_tot = 0 + for c in confs: + cxyz = c["XYZList"] + for i_conf in xrange(len(cxyz)): + phi[i_tot] = GetPhi(c["XYZList"][i_conf]) + psi[i_tot] = GetPsi(c["XYZList"][i_conf]) + i_tot+=1 + + io.saveh("Dihedrals.h5", Phi = phi, Psi = psi, StateIndex = ind) + + return phi, psi + + +import numpy as np +from msmbuilder import Conformation,Project,io +from argparse import ArgumentParser +import os + + +def main(): + parser = ArgumentParser(os.path.split(__file__)[1], description = ''' + A simple script to extract Phi and Psi angles for Alanine dipeptide. + This script will only work with Alanine dipeptide due to its unique naming convention.''') + + parser.add_argument('--pdb', dest = 'pdb_path', + help = 'The path to the topology file. Default: native.pdb', + default = 'native.pdb', metavar = 'pdb_path') + parser.add_argument('-p', '--project', dest='project_path', + help = 'MSMBuilder project file. Default: ProjectInfo.yaml', + default = 'ProjectInfo.yaml', metavar = 'project') + parser.add_argument('-a', dest='assignments_path', + help = 'Path to Macrostate assignments. Default: Macro4/MacroAssignments.h5', + default = 'Macro4/MacroAssignments.h5', metavar = 'assignments') + parser.add_argument('-n', dest = 'samples', + help = 'The number of states to sample per macrostate. Use -1 for all. Default: 1000', + default=1000, metavar = 'samples', type=int) + + args = parser.parse_args() + get_angles(pdb_path = args.pdb_path, project_path = args.project_path, + assignments_path = args.assignments_path, samplesPerState = args.samples) + +if __name__ == '__main__': + main() + diff --git a/Tutorial/PlotMacrostateImpliedTimescales.py b/Tutorial/PlotMacrostateImpliedTimescales.py new file mode 100644 index 00000000..fb8a9c01 --- /dev/null +++ b/Tutorial/PlotMacrostateImpliedTimescales.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + +from numpy import * +from matplotlib import * +from matplotlib.pyplot import * + +Unit = "ps" +NumStates = 4 +DataDir = "./Macro4/" +LagTime = 1 + +x,y = LagTime*loadtxt(DataDir+"/ImpliedTimescales.dat").transpose() + +plot(x,y,'o') + +title("Implied Timescales") +xlabel("Lagtime") +ylabel("Implied Timescale") + +K = loadtxt(DataDir+"/Rate.dat") +lam,ev = linalg.eig(K) +lam = sort(abs(lam)) +for i in range(1,NumStates): + plot(x,LagTime/lam[i]*(x*0+1),'g-') + + +plot([],[],'g-',label="SCRE") +plot([],[],'bo',label="Fixed Lagtime") +xlabel("Lagtime [%s]"%Unit) +ylabel("Implied Timescale [%s]"%Unit) +legend(loc=0,numpoints=1) + +axis([0,26,0,26]) + +show() diff --git a/Tutorial/U_test.dat b/Tutorial/U_test.dat new file mode 100644 index 00000000..4b1a95d5 --- /dev/null +++ b/Tutorial/U_test.dat @@ -0,0 +1,2 @@ +71 +72 diff --git a/Tutorial/XTC.tar b/Tutorial/XTC.tar new file mode 100644 index 00000000..af708092 Binary files /dev/null and b/Tutorial/XTC.tar differ diff --git a/docs/sphinx/_static/Voelz2012Molecular-TOC-half.gif b/docs/sphinx/_static/Voelz2012Molecular-TOC-half.gif new file mode 100644 index 00000000..6885bdb8 Binary files /dev/null and b/docs/sphinx/_static/Voelz2012Molecular-TOC-half.gif differ diff --git a/reference/hub_ref/README b/reference/hub_ref/README new file mode 100644 index 00000000..6d1e92dc --- /dev/null +++ b/reference/hub_ref/README @@ -0,0 +1,28 @@ + +HUB SCORE REFERENCE DATA FOR UNIT TEST +-------------------------------------- + +Data provided by Alex Dickson, deposted by TJL (9.14.12). Here is his msg +regarding the format of the data. + +"Here's a test case. It is a 11-node network with cuu = 0.5. + +node_1.csv and edge_1.csv are data files to plot the network, +hub_msm_1.dat has the hub scores (format: "node weight hubscore"), +hub_msm_data_1.dat has the h_c values (format: "node from to fraction"), +ratemat_1.dat is the rate matrix (column index = "to", row index = "from"). + +(for the purposes of the paper, index 0 is the "folded" state) + +Let me know if you have any problems, or if everything turns out well :) + +-Alex" + +TJL renamed the following files: + +hub_msm_1.dat --> hub_scores.dat +hub_msm_data_1.dat --> fraction_visited.dat + +which is a little clearer in his mind. + + diff --git a/reference/hub_ref/edge_1.csv b/reference/hub_ref/edge_1.csv new file mode 100644 index 00000000..e3f78e1f --- /dev/null +++ b/reference/hub_ref/edge_1.csv @@ -0,0 +1,65 @@ +Source Target num +0 1 1.000000e-04 +0 2 1.000000e-04 +0 3 1.000000e-04 +0 4 1.000000e-04 +0 5 1.000000e-04 +0 6 1.000000e-04 +0 7 1.000000e-04 +0 8 1.000000e-04 +0 9 1.000000e-04 +0 10 1.000000e-04 +1 0 2.500000e-02 +1 5 2.315625e-01 +1 6 2.315625e-01 +1 9 2.315625e-01 +1 10 2.315625e-01 +2 0 2.500000e-02 +2 3 3.087500e-01 +2 4 3.087500e-01 +2 9 3.087500e-01 +3 0 2.500000e-02 +3 2 3.087500e-01 +3 4 3.087500e-01 +3 6 3.087500e-01 +4 0 2.500000e-02 +4 2 1.323214e-01 +4 3 1.323214e-01 +4 5 1.323214e-01 +4 6 1.323214e-01 +4 8 1.323214e-01 +4 9 1.323214e-01 +4 10 1.323214e-01 +5 0 2.500000e-02 +5 1 2.315625e-01 +5 4 2.315625e-01 +5 6 2.315625e-01 +5 8 2.315625e-01 +6 0 2.500000e-02 +6 1 1.543750e-01 +6 3 1.543750e-01 +6 4 1.543750e-01 +6 5 1.543750e-01 +6 9 1.543750e-01 +6 10 1.543750e-01 +7 0 2.500000e-02 +7 8 4.631250e-01 +7 10 4.631250e-01 +8 0 2.500000e-02 +8 4 1.852500e-01 +8 5 1.852500e-01 +8 7 1.852500e-01 +8 9 1.852500e-01 +8 10 1.852500e-01 +9 0 2.500000e-02 +9 1 1.852500e-01 +9 2 1.852500e-01 +9 4 1.852500e-01 +9 6 1.852500e-01 +9 8 1.852500e-01 +10 0 2.500000e-02 +10 1 1.852500e-01 +10 4 1.852500e-01 +10 6 1.852500e-01 +10 7 1.852500e-01 +10 8 1.852500e-01 diff --git a/reference/hub_ref/fraction_visited.dat b/reference/hub_ref/fraction_visited.dat new file mode 100644 index 00000000..e8103998 --- /dev/null +++ b/reference/hub_ref/fraction_visited.dat @@ -0,0 +1,990 @@ +0 1 2 0.17688555988482 +0 1 3 0.175026050227199 +0 1 4 0.103026214904448 +0 1 5 0.107894059628 +0 1 6 0.0869933784146871 +0 1 7 0.20143200007046 +0 1 8 0.127957409171904 +0 1 9 0.102860526244937 +0 1 10 0.106400939911827 +0 2 1 0.166728628061974 +0 2 3 0.121108345475593 +0 2 4 0.0757812589448342 +0 2 5 0.165028117123867 +0 2 6 0.117618727535261 +0 2 7 0.254107200690173 +0 2 8 0.153361819564569 +0 2 9 0.100696739650035 +0 2 10 0.15825867314751 +0 3 1 0.165566221583426 +0 3 2 0.121868307630545 +0 3 4 0.0763540954490924 +0 3 5 0.160018779808994 +0 3 6 0.0933997479643875 +0 3 7 0.253420796941178 +0 3 8 0.157116859772802 +0 3 9 0.128563900357007 +0 3 10 0.154157580068491 +0 4 1 0.110051389541576 +0 4 2 0.094198939248786 +0 4 3 0.0939793826846393 +0 4 5 0.0930402096802766 +0 4 6 0.0773049057425156 +0 4 7 0.157621533622214 +0 4 8 0.0916881371680697 +0 4 9 0.0833716387914884 +0 4 10 0.094204733889798 +0 5 1 0.108577224883943 +0 5 2 0.175839012374958 +0 5 3 0.170179722455259 +0 5 4 0.0865800661597552 +0 5 6 0.0900954421197755 +0 5 7 0.199314656049574 +0 5 8 0.107338643918777 +0 5 9 0.120978690196703 +0 5 10 0.124180128059071 +0 6 1 0.0934111678949088 +0 6 2 0.134504059842956 +0 6 3 0.109979236208532 +0 6 4 0.0765583059975678 +0 6 5 0.0957986510618205 +0 6 7 0.175262224306738 +0 6 8 0.113434215646968 +0 6 9 0.0910489816589408 +0 6 10 0.097807800874923 +0 7 1 0.175733828576573 +0 7 2 0.239487402191105 +0 7 3 0.238138746908417 +0 7 4 0.123650057890169 +0 7 5 0.172915382443336 +0 7 6 0.142694916309212 +0 7 8 0.084079458759359 +0 7 9 0.158872189458226 +0 7 10 0.0838043179854657 +0 8 1 0.127211735431136 +0 8 2 0.162968168204164 +0 8 3 0.165960625736769 +0 8 4 0.0837352966144916 +0 8 5 0.105891339920233 +0 8 6 0.106395764784994 +0 8 7 0.111878344876777 +0 8 9 0.101567500360045 +0 8 10 0.0920651763388573 +0 9 1 0.105969261484605 +0 9 2 0.114737728476048 +0 9 3 0.141430260529779 +0 9 4 0.0793366803562327 +0 9 5 0.123353431710619 +0 9 6 0.0877868310206028 +0 9 7 0.187919471973107 +0 9 8 0.105446155511266 +0 9 10 0.119930661458945 +0 10 1 0.106044258973394 +0 10 2 0.168188879784522 +0 10 3 0.163415831220458 +0 10 4 0.0866909701333095 +0 10 5 0.123160187159557 +0 10 6 0.0910588981749156 +0 10 7 0.112012292575048 +0 10 8 0.0924786271926782 +0 10 9 0.116519911212134 +1 0 2 0.467760862803113 +1 0 3 0.467314480431004 +1 0 4 0.335918281820228 +1 0 5 0.442495769991102 +1 0 6 0.354696206233222 +1 0 7 0.516365013218283 +1 0 8 0.393678222663996 +1 0 9 0.391291235673431 +1 0 10 0.395748090972132 +1 2 0 0.485564033631372 +1 2 3 0.235322076521299 +1 2 4 0.168513815012163 +1 2 5 0.402557178400456 +1 2 6 0.263218713944294 +1 2 7 0.505086435492975 +1 2 8 0.352301699837184 +1 2 9 0.205186763393277 +1 2 10 0.380708834794894 +1 3 0 0.484017603534222 +1 3 2 0.235561083656953 +1 3 4 0.17175937559587 +1 3 5 0.388498284042761 +1 3 6 0.183210176567013 +1 3 7 0.504961973711716 +1 3 8 0.364241911271488 +1 3 9 0.294561536289208 +1 3 10 0.369840512354849 +1 4 0 0.319652307118692 +1 4 2 0.171517944627649 +1 4 3 0.174551695983651 +1 4 5 0.276543042806683 +1 4 6 0.214479779931048 +1 4 7 0.315850188148351 +1 4 8 0.221238017443941 +1 4 9 0.231200350728495 +1 4 10 0.260386623324172 +1 5 0 0.440745040244925 +1 5 2 0.402412253762079 +1 5 3 0.388563877835662 +1 5 4 0.275872598836144 +1 5 6 0.301318018067273 +1 5 7 0.419694817874832 +1 5 8 0.289207250898931 +1 5 9 0.388381461530282 +1 5 10 0.390786113489868 +1 6 0 0.33699596318848 +1 6 2 0.26333087860023 +1 6 3 0.185156663731781 +1 6 4 0.213488655512053 +1 6 5 0.301228533079062 +1 6 7 0.354570736288932 +1 6 8 0.295727800471188 +1 6 9 0.275910563044818 +1 6 10 0.293206530400959 +1 7 0 0.55813932568364 +1 7 2 0.506943397337049 +1 7 3 0.506858783221823 +1 7 4 0.316334172376594 +1 7 5 0.419704402159603 +1 7 6 0.356875087722868 +1 7 8 0.188752604342003 +1 7 9 0.391987829136485 +1 7 10 0.156552274038342 +1 8 0 0.395278238972626 +1 8 2 0.352317838348544 +1 8 3 0.364055980742494 +1 8 4 0.220778110627038 +1 8 5 0.289162263775624 +1 8 6 0.296767523363274 +1 8 7 0.196010097332139 +1 8 9 0.270792107274798 +1 8 10 0.235609439253737 +1 9 0 0.383398078820145 +1 9 2 0.20772549650595 +1 9 3 0.295189871470941 +1 9 4 0.2304692479885 +1 9 5 0.388138797809048 +1 9 6 0.276148245123462 +1 9 7 0.390583076271411 +1 9 8 0.270703303703492 +1 9 10 0.364725869638401 +1 10 0 0.396645925544298 +1 10 2 0.380464524139662 +1 10 3 0.369756623638625 +1 10 4 0.260057618877092 +1 10 5 0.390943224884077 +1 10 6 0.293698342474132 +1 10 7 0.165015369044032 +1 10 8 0.235701720830863 +1 10 9 0.365234724362805 +2 0 1 0.359736985518997 +2 0 3 0.436661261523162 +2 0 4 0.249774801972982 +2 0 5 0.357941214400445 +2 0 6 0.299786595571548 +2 0 7 0.428659004511757 +2 0 8 0.330080360496263 +2 0 9 0.31338413162174 +2 0 10 0.330327466344882 +2 1 0 0.34346144579511 +2 1 3 0.377305284295546 +2 1 4 0.167567799563339 +2 1 5 0.185846110495543 +2 1 6 0.153565631042054 +2 1 7 0.285461346296681 +2 1 8 0.22508751209992 +2 1 9 0.170360202602926 +2 1 10 0.183144681143872 +2 3 0 0.434912599151231 +2 3 1 0.376994896846499 +2 3 4 0.283257023019879 +2 3 5 0.365435420970789 +2 3 6 0.27956076622737 +2 3 7 0.424540089454678 +2 3 8 0.379796642904506 +2 3 9 0.394194397455084 +2 3 10 0.362751947867346 +2 4 0 0.207919752976551 +2 4 1 0.164620720036265 +2 4 3 0.283371252583258 +2 4 5 0.11939004470715 +2 4 6 0.147605146530624 +2 4 7 0.139408314349714 +2 4 8 0.124886190154253 +2 4 9 0.204570568132888 +2 4 10 0.11960795518645 +2 5 0 0.340559816785794 +2 5 1 0.185934621185386 +2 5 3 0.365926128892596 +2 5 4 0.121877878935247 +2 5 6 0.160238918766157 +2 5 7 0.281248850421081 +2 5 8 0.185996385745193 +2 5 9 0.218561204112119 +2 5 10 0.21553190308874 +2 6 0 0.268595534429873 +2 6 1 0.153490765576831 +2 6 3 0.281435732073493 +2 6 4 0.149736118267929 +2 6 5 0.160007727184944 +2 6 7 0.224219985463797 +2 6 8 0.200410449824172 +2 6 9 0.19298287674547 +2 6 10 0.161387615460125 +2 7 0 0.448017623519412 +2 7 1 0.283949749447137 +2 7 3 0.424863087770325 +2 7 4 0.140552427671415 +2 7 5 0.279643105094363 +2 7 6 0.224009967292438 +2 7 8 0.119254170788187 +2 7 9 0.230954631495388 +2 7 10 0.125052203786325 +2 8 0 0.314320094250985 +2 8 1 0.225080379527407 +2 8 3 0.379918640102119 +2 8 4 0.127381175882895 +2 8 5 0.185858991529935 +2 8 6 0.201157989083318 +2 8 7 0.12614730414251 +2 8 9 0.184360368811519 +2 8 10 0.1581325490424 +2 9 0 0.282799401481334 +2 9 1 0.1681805070978 +2 9 3 0.392450009998918 +2 9 4 0.204538799694276 +2 9 5 0.216035510492855 +2 9 6 0.190914537341469 +2 9 7 0.229693859734681 +2 9 8 0.18207700194038 +2 9 10 0.209802017504854 +2 10 0 0.314441837341602 +2 10 1 0.183305518835827 +2 10 3 0.363203181377377 +2 10 4 0.122461408154421 +2 10 5 0.2156857504143 +2 10 6 0.161934665476427 +2 10 7 0.132024788238212 +2 10 8 0.158364594971837 +2 10 9 0.212603697252935 +3 0 1 0.361759810628785 +3 0 2 0.441850191292702 +3 0 4 0.251805858069845 +3 0 5 0.360540414321676 +3 0 6 0.287553764491964 +3 0 7 0.430519152429974 +3 0 8 0.331975740031257 +3 0 9 0.325914056923977 +3 0 10 0.331897416173958 +3 1 0 0.346447253934619 +3 1 2 0.387250029258375 +3 1 4 0.171913792078628 +3 1 5 0.19006005002778 +3 1 6 0.136880277622456 +3 1 7 0.287368466294932 +3 1 8 0.225557273390838 +3 1 9 0.18588459824588 +3 1 10 0.186517102326192 +3 2 0 0.443603991421647 +3 2 1 0.387560434881602 +3 2 4 0.286469229862199 +3 2 5 0.39452340447308 +3 2 6 0.381614593153288 +3 2 7 0.431583923300201 +3 2 8 0.367957173376649 +3 2 9 0.280515450346405 +3 2 10 0.386935161958747 +3 4 0 0.211490547194245 +3 4 1 0.169156335694872 +3 4 2 0.28635348924307 +3 4 5 0.134190450000442 +3 4 6 0.18716018269093 +3 4 7 0.141706796379681 +3 4 8 0.116785899199722 +3 4 9 0.15757603739757 +3 4 10 0.131512475433813 +3 5 0 0.343722071471776 +3 5 1 0.190018223063649 +3 5 2 0.394024916683656 +3 5 4 0.136319485744331 +3 5 6 0.154212601506524 +3 5 7 0.282725794847498 +3 5 8 0.189018161241613 +3 5 9 0.229569867014152 +3 5 10 0.22292091519417 +3 6 0 0.251778926926532 +3 6 1 0.135358022745647 +3 6 2 0.379421298315063 +3 6 4 0.187506264105673 +3 6 5 0.152665483720993 +3 6 7 0.200693158964712 +3 6 8 0.189084644276998 +3 6 9 0.182958846876762 +3 6 10 0.154927107070588 +3 7 0 0.450842821412172 +3 7 1 0.285814498551527 +3 7 2 0.431254439820962 +3 7 4 0.142612229579688 +3 7 5 0.281186907787345 +3 7 6 0.201849085636446 +3 7 8 0.124580416820922 +3 7 9 0.253918031133646 +3 7 10 0.121370834438778 +3 8 0 0.317656947811045 +3 8 1 0.225699387622077 +3 8 2 0.367836188468763 +3 8 4 0.119265496108249 +3 8 5 0.189168712284219 +3 8 6 0.191592780959648 +3 8 7 0.131560099656764 +3 8 9 0.186173478306852 +3 8 10 0.159609639871432 +3 9 0 0.302175112091215 +3 9 1 0.185425501264915 +3 9 2 0.281992266462386 +3 9 4 0.159190648790006 +3 9 5 0.228999945755782 +3 9 6 0.184199380979749 +3 9 7 0.254281786509008 +3 9 8 0.185491297966789 +3 9 10 0.21943906772661 +3 10 0 0.316710367330607 +3 10 1 0.186569836610219 +3 10 2 0.386466132380436 +3 10 4 0.134046106536007 +3 10 5 0.223113642778814 +3 10 6 0.156876058806886 +3 10 7 0.128435566374536 +3 10 8 0.159590777792982 +3 10 9 0.220291522401699 +4 0 1 0.556661941307739 +4 0 2 0.661003372566232 +4 0 3 0.659020954077797 +4 0 5 0.580048986467952 +4 0 6 0.501120841851842 +4 0 7 0.624675385179427 +4 0 8 0.53319769077601 +4 0 9 0.537200622046389 +4 0 10 0.52969158801406 +4 1 0 0.574792607369919 +4 1 2 0.661514454335905 +4 1 3 0.654112040431257 +4 1 5 0.364286428486586 +4 1 6 0.311586063159679 +4 1 7 0.537160315380957 +4 1 8 0.463218704251331 +4 1 9 0.366309106406153 +4 1 10 0.360814051086421 +4 2 0 0.712072479336733 +4 2 1 0.666265355214121 +4 2 3 0.430204403474334 +4 2 5 0.73603305695068 +4 2 6 0.595981632446605 +4 2 7 0.783733362597689 +4 2 8 0.706601517901804 +4 2 9 0.455051584778207 +4 2 10 0.724476071143109 +4 3 0 0.708040509540815 +4 3 1 0.658514095185822 +4 3 2 0.430343559217052 +4 3 5 0.703864583865441 +4 3 6 0.459891564112033 +4 3 7 0.780841182440674 +4 3 8 0.727645670286145 +4 3 9 0.602432563793406 +4 3 10 0.697488932639918 +4 5 0 0.599174399270204 +4 5 1 0.365069710344178 +4 5 2 0.731449489070674 +4 5 3 0.700060216123656 +4 5 6 0.385404120206229 +4 5 7 0.560323425084442 +4 5 8 0.415589952433174 +4 5 9 0.519827891375844 +4 5 10 0.494690252039535 +4 6 0 0.503751956680241 +4 6 1 0.312850604497263 +4 6 2 0.591917090967626 +4 6 3 0.45932286031696 +4 6 5 0.385695779095222 +4 6 7 0.512207829768924 +4 6 8 0.484956746094057 +4 6 9 0.392147861621423 +4 6 10 0.387816472992891 +4 7 0 0.688200669297682 +4 7 1 0.536610409973123 +4 7 2 0.782117874978673 +4 7 3 0.779573556622083 +4 7 5 0.558961081314309 +4 7 6 0.513278390579363 +4 7 8 0.2311471131906 +4 7 9 0.550742372061384 +4 7 10 0.235028680333168 +4 8 0 0.557852118948606 +4 8 1 0.463887470230586 +4 8 2 0.701895431093296 +4 8 3 0.72289592174306 +4 8 5 0.415313534670025 +4 8 6 0.48582624934564 +4 8 7 0.242723971769263 +4 8 9 0.429036486358476 +4 8 10 0.348380458584991 +4 9 0 0.55059732526166 +4 9 1 0.367265199795716 +4 9 2 0.455097247128273 +4 9 3 0.599528595004809 +4 9 5 0.519617677218665 +4 9 6 0.3921559783294 +4 9 7 0.550449672588657 +4 9 8 0.429229838469172 +4 9 10 0.500831946139261 +4 10 0 0.552377151631037 +4 10 1 0.36120803695533 +4 10 2 0.719094204939003 +4 10 3 0.692824685794546 +4 10 5 0.494413509366249 +4 10 6 0.387546808252495 +4 10 7 0.246311587415599 +4 10 8 0.348276365237059 +4 10 9 0.500903167889156 +5 0 1 0.449267131746683 +5 0 2 0.470854236001941 +5 0 3 0.473642053679643 +5 0 4 0.329241280298416 +5 0 6 0.359534956573426 +5 0 7 0.520391681633126 +5 0 8 0.3990404882749 +5 0 9 0.393541919316944 +5 0 10 0.397191063650573 +5 1 0 0.451014275235937 +5 1 2 0.411700926562507 +5 1 3 0.421393593833847 +5 1 4 0.35949949780282 +5 1 6 0.291470460602764 +5 1 7 0.434223517742436 +5 1 8 0.407931642987505 +5 1 9 0.294448933745439 +5 1 10 0.297464540160811 +5 2 0 0.489937623623072 +5 2 1 0.41155735954445 +5 2 3 0.239857042222116 +5 2 4 0.144170719172973 +5 2 6 0.26945527490768 +5 2 7 0.51140837803659 +5 2 8 0.36824290895058 +5 2 9 0.221870649669229 +5 2 10 0.372842488228477 +5 3 0 0.492046450080557 +5 3 1 0.421460729996027 +5 3 2 0.24024463797804 +5 3 4 0.161545402980784 +5 3 6 0.203819483378672 +5 3 7 0.517021799726042 +5 3 8 0.394142029550814 +5 3 9 0.306304304780764 +5 3 10 0.371883899250209 +5 4 0 0.31202362644465 +5 4 1 0.358724516798521 +5 4 2 0.147086657296403 +5 4 3 0.1640218818086 +5 4 6 0.239443248040486 +5 4 7 0.315374028752623 +5 4 8 0.270883687837118 +5 4 9 0.211725049990953 +5 4 10 0.241196132379561 +5 6 0 0.344103877995526 +5 6 1 0.291557521946311 +5 6 2 0.269794191252 +5 6 3 0.205759390519559 +5 6 4 0.239219401117085 +5 6 7 0.362932609842343 +5 6 8 0.348849167731452 +5 6 9 0.236555159323607 +5 6 10 0.252413241331801 +5 7 0 0.563680742103202 +5 7 1 0.434220471871537 +5 7 2 0.513392253505244 +5 7 3 0.518918086496314 +5 7 4 0.316573443567655 +5 7 6 0.365124441171253 +5 7 8 0.163451599980947 +5 7 9 0.391534303121316 +5 7 10 0.189233940975508 +5 8 0 0.402688857155761 +5 8 1 0.407987731260584 +5 8 2 0.368449776204765 +5 8 3 0.393902349056102 +5 8 4 0.271109196075111 +5 8 6 0.349941099740444 +5 8 7 0.17185981053198 +5 8 9 0.280994581545774 +5 8 10 0.243505728020534 +5 9 0 0.38826764259802 +5 9 1 0.294658045785928 +5 9 2 0.224448313134355 +5 9 3 0.306996871431545 +5 9 4 0.211869154284566 +5 9 6 0.236910401045932 +5 9 7 0.390455753958897 +5 9 8 0.281062905432027 +5 9 10 0.305952113601761 +5 10 0 0.399447679525621 +5 10 1 0.297323673653385 +5 10 2 0.372628845364498 +5 10 3 0.371630603458954 +5 10 4 0.241400164343639 +5 10 6 0.252634550412712 +5 10 7 0.196707620616978 +5 10 8 0.243425696371037 +5 10 9 0.306040732436842 +6 0 1 0.554386968537806 +6 0 2 0.57144509603242 +6 0 3 0.607724245442638 +6 0 4 0.42191500715576 +6 0 5 0.54691886751503 +6 0 7 0.587971180946258 +6 0 8 0.480410765063615 +6 0 9 0.493720425146236 +6 0 10 0.494035855295458 +6 1 0 0.57361591690345 +6 1 2 0.58312634977135 +6 1 3 0.678285075283839 +6 1 4 0.474534880545534 +6 1 5 0.407263988350025 +6 1 7 0.521798027739573 +6 1 8 0.45808326271515 +6 1 9 0.409525524899206 +6 1 10 0.403344761494545 +6 2 0 0.608545134066701 +6 2 1 0.583270100443792 +6 2 3 0.337943121226628 +6 2 4 0.255771297432662 +6 2 5 0.570461839654763 +6 2 7 0.632431379680091 +6 2 8 0.491511716330686 +6 2 9 0.321468750204728 +6 2 10 0.548078481774416 +6 3 0 0.650130201000691 +6 3 1 0.681107160845042 +6 3 2 0.340023731162454 +6 3 4 0.35279749840898 +6 3 5 0.643137564804765 +6 3 7 0.690415690755243 +6 3 8 0.584885450015816 +6 3 9 0.525665643566087 +6 3 10 0.626124230299522 +6 4 0 0.419349662375801 +6 4 1 0.473064278426041 +6 4 2 0.258993989656607 +6 4 3 0.353319233911562 +6 4 5 0.374978108878312 +6 4 7 0.384530812758662 +6 4 8 0.290288930131106 +6 4 9 0.328186083880176 +6 4 10 0.358029336686574 +6 5 0 0.563624639408503 +6 5 1 0.407162545153757 +6 5 2 0.570037515181791 +6 5 3 0.640407555830291 +6 5 4 0.375264605252194 +6 5 7 0.509133641229174 +6 5 8 0.360221630768297 +6 5 9 0.489974505459079 +6 5 10 0.479700604166971 +6 7 0 0.64562692734689 +6 7 1 0.519292475190371 +6 7 2 0.632704658336453 +6 7 3 0.688884172503263 +6 7 4 0.383514606807268 +6 7 5 0.506766299929051 +6 7 8 0.217597033679272 +6 7 9 0.482115267971755 +6 7 10 0.194068415200039 +6 8 0 0.498389595285877 +6 8 1 0.456846910721209 +6 8 2 0.490346554438794 +6 8 3 0.580932202771552 +6 8 4 0.289573974749926 +6 8 5 0.359118916555376 +6 8 7 0.227418339967753 +6 8 9 0.346090008380917 +6 8 10 0.294394979318136 +6 9 0 0.50373926944937 +6 9 1 0.409235512111746 +6 9 2 0.324379699264518 +6 9 3 0.523606143077485 +6 9 4 0.328175834581794 +6 9 5 0.489483276579242 +6 9 7 0.48275479386166 +6 9 8 0.346907657863478 +6 9 10 0.462921843196499 +6 10 0 0.513771793841209 +6 10 1 0.402766502636702 +6 10 2 0.547075928374152 +6 10 3 0.622649010217952 +6 10 4 0.358292766118209 +6 10 5 0.479407978625038 +6 10 7 0.205786621586802 +6 10 8 0.295122189452224 +6 10 9 0.463249270160073 +7 0 1 0.291283565654429 +7 0 2 0.323451479584596 +7 0 3 0.322531605465627 +7 0 4 0.226481288924193 +7 0 5 0.28953431421379 +7 0 6 0.246117838243334 +7 0 8 0.226586575683892 +7 0 9 0.264059141843883 +7 0 10 0.226639371439838 +7 1 0 0.257825656089157 +7 1 2 0.2086611589779 +7 1 3 0.206878184559584 +7 1 4 0.146882762044367 +7 1 5 0.146077137248095 +7 1 6 0.123188261510716 +7 1 8 0.159461756173522 +7 1 9 0.140856077312906 +7 1 10 0.112594539966724 +7 2 0 0.306484921033141 +7 2 1 0.20988995996459 +7 2 3 0.143791818006253 +7 2 4 0.0767581851902766 +7 2 5 0.207803169161223 +7 2 6 0.143389003429142 +7 2 8 0.142684154746405 +7 2 9 0.119050131874798 +7 2 10 0.154033262008343 +7 3 0 0.304777188758321 +7 3 1 0.208128187085039 +7 3 2 0.143953736700285 +7 3 4 0.0773682384187749 +7 3 5 0.200682270573596 +7 3 6 0.108731450857722 +7 3 8 0.151301173639617 +7 3 9 0.157657659943968 +7 3 10 0.145225381862618 +7 4 0 0.180854045703078 +7 4 1 0.147162457362529 +7 4 2 0.0774319469287235 +7 4 3 0.0778959695193124 +7 4 5 0.124683173417696 +7 4 6 0.103035057316322 +7 4 8 0.124313635684106 +7 4 9 0.107910564116373 +7 4 10 0.129562335014314 +7 5 0 0.254991336736055 +7 5 1 0.146078893347904 +7 5 2 0.206502821234608 +7 5 3 0.199465482019658 +7 5 4 0.124081983110426 +7 5 6 0.127494364159458 +7 5 8 0.116834370903166 +7 5 9 0.165889767952223 +7 5 10 0.1541768432707 +7 6 0 0.203636950315929 +7 6 1 0.124279201504655 +7 6 2 0.143243126820044 +7 6 3 0.109430435249762 +7 6 4 0.103433090995009 +7 6 5 0.128550110698729 +7 6 8 0.147692243880916 +7 6 9 0.119442363187715 +7 6 10 0.115892558743898 +7 8 0 0.175940795046017 +7 8 1 0.153301096900728 +7 8 2 0.135026417788811 +7 8 3 0.143445432143616 +7 8 4 0.117508194329582 +7 8 5 0.110759033134685 +7 8 6 0.140684116011091 +7 8 9 0.111862589516887 +7 8 10 0.181905315912974 +7 9 0 0.226525202049614 +7 9 1 0.141569319949502 +7 9 2 0.119796501324154 +7 9 3 0.157404912539118 +7 9 4 0.108025732977729 +7 9 5 0.16651768351409 +7 9 6 0.119174080940343 +7 9 8 0.118792447521609 +7 9 10 0.150061692969535 +7 10 0 0.175258444747164 +7 10 1 0.106473363577407 +7 10 2 0.146092444363015 +7 10 3 0.137381206317889 +7 10 4 0.122755653541322 +7 10 5 0.148023096692229 +7 10 6 0.10859496775285 +7 10 8 0.181875524988699 +7 10 9 0.143153405699106 +8 0 1 0.47877408476039 +8 0 2 0.5106980514557 +8 0 3 0.505546053406182 +8 0 4 0.378398223390048 +8 0 5 0.494420297328117 +8 0 6 0.409379201665277 +8 0 7 0.668410919824239 +8 0 9 0.443590106802525 +8 0 10 0.453911418035529 +8 1 0 0.477102684729647 +8 1 2 0.422596134734572 +8 1 3 0.410321554012315 +8 1 4 0.315723898021497 +8 1 5 0.302881840584411 +8 1 6 0.245826428500452 +8 1 7 0.645949469959875 +8 1 9 0.291251086522492 +8 1 10 0.303847232576795 +8 2 0 0.528709402993221 +8 2 1 0.422614950016461 +8 2 3 0.252197978562306 +8 2 4 0.168026863271215 +8 2 5 0.445835149910461 +8 2 6 0.307790182899346 +8 2 7 0.73228515201902 +8 2 9 0.238421042695248 +8 2 10 0.44011371049205 +8 3 0 0.521864813541242 +8 3 1 0.410132122904401 +8 3 2 0.252294327355202 +8 3 4 0.15513290699803 +8 3 5 0.416761543340614 +8 3 6 0.22533219016811 +8 3 7 0.718351708461049 +8 3 9 0.319403232995006 +8 3 10 0.409867504263742 +8 4 0 0.355305857483695 +8 4 1 0.315149921393372 +8 4 2 0.171213893610815 +8 4 3 0.158282172055706 +8 4 5 0.313674891089094 +8 4 6 0.224375230946577 +8 4 7 0.634835996426397 +8 4 9 0.267298628971967 +8 4 10 0.333914521403527 +8 5 0 0.490621321727446 +8 5 1 0.302831750955532 +8 5 2 0.445618027526064 +8 5 3 0.417009379201887 +8 5 4 0.313428163019008 +8 5 6 0.290439876028365 +8 5 7 0.712481666586127 +8 5 9 0.407744956423948 +8 5 10 0.44027916627616 +8 6 0 0.392096248787856 +8 6 1 0.246750347243077 +8 6 2 0.308779121651466 +8 6 3 0.228182465512869 +8 6 4 0.224980972743181 +8 6 5 0.291432749441036 +8 6 7 0.626746692007672 +8 6 9 0.26728604468018 +8 6 10 0.301237393284779 +8 7 0 0.734479752044149 +8 7 1 0.656562419836007 +8 7 2 0.744654690003808 +8 7 3 0.730821496932057 +8 7 4 0.649545912517919 +8 7 5 0.724667113591189 +8 7 6 0.639928195871824 +8 7 9 0.708374272083635 +8 7 10 0.409044744787072 +8 9 0 0.433298345477538 +8 9 1 0.291346771717629 +8 9 2 0.24120328674683 +8 9 3 0.320378999326507 +8 9 4 0.267140098033544 +8 9 5 0.407664730897568 +8 9 6 0.266579738817003 +8 9 7 0.694144171963806 +8 9 10 0.418376076855697 +8 10 0 0.452687484336487 +8 10 1 0.303736564997094 +8 10 2 0.439686090994563 +8 10 3 0.40990298809166 +8 10 4 0.334017738845148 +8 10 5 0.440392149710386 +8 10 6 0.300499084138773 +8 10 7 0.409095195836629 +8 10 9 0.418706153865012 +9 0 1 0.504094575925747 +9 0 2 0.576772787075785 +9 0 3 0.537469715775017 +9 0 4 0.381096805648859 +9 0 5 0.484167586755779 +9 0 6 0.416719683639716 +9 0 7 0.557139924842896 +9 0 8 0.4528780227759 +9 0 10 0.444967186973378 +9 1 0 0.512404890228337 +9 1 2 0.622455495682358 +9 1 3 0.519087063717933 +9 1 4 0.402874481095469 +9 1 5 0.317294651499592 +9 1 6 0.314461178105565 +9 1 7 0.46823153604348 +9 1 8 0.438008597104099 +9 1 10 0.322180149728566 +9 2 0 0.612018276885519 +9 2 1 0.626099466119904 +9 2 3 0.326225169388577 +9 2 4 0.340391630068705 +9 2 5 0.561378252241931 +9 2 6 0.486798431337799 +9 2 7 0.651064135625043 +9 2 8 0.578834896255135 +9 2 10 0.555256390312745 +9 3 0 0.564738034811571 +9 3 1 0.51984651895728 +9 3 2 0.32461931500007 +9 3 4 0.239533583013297 +9 3 5 0.464470609656532 +9 3 6 0.290934478608363 +9 3 7 0.588138994210747 +9 3 8 0.494838021153854 +9 3 10 0.457151434882806 +9 4 0 0.368447050421831 +9 4 1 0.401885068839164 +9 4 2 0.340344966060767 +9 4 3 0.241746615910443 +9 4 5 0.268567587495467 +9 4 6 0.279660951467823 +9 4 7 0.341563860118237 +9 4 8 0.303563616538023 +9 4 10 0.268721408605725 +9 5 0 0.489697777394708 +9 5 1 0.317078650581367 +9 5 2 0.557721431325269 +9 5 3 0.463662772972635 +9 5 4 0.268396928032643 +9 5 6 0.273347332872892 +9 5 7 0.44335969061987 +9 5 8 0.311229323490599 +9 5 10 0.351418491434702 +9 6 0 0.40701655704405 +9 6 1 0.314719325446145 +9 6 2 0.483465605697744 +9 6 3 0.29263999287244 +9 6 4 0.279670515482551 +9 6 5 0.273735658434577 +9 6 7 0.397950641096458 +9 6 8 0.386143852469508 +9 6 10 0.280599595228559 +9 7 0 0.606500245287525 +9 7 1 0.466771221074194 +9 7 2 0.649444660951396 +9 7 3 0.5886001288091 +9 7 4 0.341298333442297 +9 7 5 0.442243101943505 +9 7 6 0.398566793498045 +9 7 8 0.178358942145476 +9 7 10 0.200579407250882 +9 8 0 0.463251204534833 +9 8 1 0.437896656398164 +9 8 2 0.575108808086636 +9 8 3 0.493712610025837 +9 8 4 0.303732048610686 +9 8 5 0.311300252343017 +9 8 6 0.386997815118087 +9 8 7 0.188532301776487 +9 8 10 0.266054787183148 +9 10 0 0.453062719999485 +9 10 1 0.321702947545118 +9 10 2 0.551099780012897 +9 10 3 0.455917139106048 +9 10 4 0.268668515426869 +9 10 5 0.351316164711676 +9 10 6 0.280338825654099 +9 10 7 0.209581016691896 +9 10 8 0.265787570902071 +10 0 1 0.498048603877919 +10 0 2 0.505383373725955 +10 0 3 0.508317707102005 +10 0 4 0.379221655008397 +10 0 5 0.479186251917054 +10 0 6 0.411210878278446 +10 0 7 0.668326836141919 +10 0 8 0.453816442057707 +10 0 9 0.436788459353865 +10 1 0 0.497119043215022 +10 1 2 0.436313726792634 +10 1 3 0.443700164297793 +10 1 4 0.378963613832905 +10 1 5 0.311672550766509 +10 1 6 0.303239479881963 +10 1 7 0.723521605873687 +10 1 8 0.46048513863909 +10 1 9 0.31284301437591 +10 2 0 0.523552973781715 +10 2 1 0.436049462615489 +10 2 3 0.250139823329891 +10 2 4 0.155407903762452 +10 2 5 0.411546306953181 +10 2 6 0.290345811372143 +10 2 7 0.715171776558225 +10 2 8 0.401646020347346 +10 2 9 0.234107242870417 +10 3 0 0.525622946962193 +10 3 1 0.443614860209026 +10 3 2 0.250506083280807 +10 3 4 0.170498571195826 +10 3 5 0.405096001003251 +10 3 6 0.218441216643196 +10 3 7 0.727505596573593 +10 3 8 0.430535855442338 +10 3 9 0.32305921244216 +10 4 0 0.357959466187822 +10 4 1 0.378564361824328 +10 4 2 0.158966214019138 +10 4 3 0.173632995249544 +10 4 5 0.264261288163611 +10 4 6 0.254263876766475 +10 4 7 0.626044931674008 +10 4 8 0.31775433087595 +10 4 9 0.23041441702286 +10 5 0 0.476847273708249 +10 5 1 0.311814211640857 +10 5 2 0.411764020100528 +10 5 3 0.405366995944657 +10 5 4 0.264043649483054 +10 5 6 0.267808920461834 +10 5 7 0.650536578348165 +10 5 8 0.316251113877405 +10 5 9 0.342588777464384 +10 6 0 0.392237672215659 +10 6 1 0.303741070239424 +10 6 2 0.291180554795098 +10 6 3 0.220981853612461 +10 6 4 0.254051433589899 +10 6 5 0.268040995317237 +10 6 7 0.680010408870766 +10 6 8 0.403952866377686 +10 6 9 0.256321842424729 +10 7 0 0.73537057946 +10 7 1 0.735896036193631 +10 7 2 0.727684164038001 +10 7 3 0.740133051344761 +10 7 4 0.640379548287934 +10 7 5 0.661365593658756 +10 7 6 0.695729793456027 +10 7 8 0.409065350345407 +10 7 9 0.654637142211542 +10 8 0 0.455042710839641 +10 8 1 0.460616367621702 +10 8 2 0.402056879156334 +10 8 3 0.430495606415342 +10 8 4 0.317650502632495 +10 8 5 0.316149887284338 +10 8 6 0.404794162079204 +10 8 7 0.409011255717699 +10 8 9 0.315391842878077 +10 9 0 0.428753235634224 +10 9 1 0.313312402458095 +10 9 2 0.237134129644848 +10 9 3 0.324150712290039 +10 9 4 0.23046082417682 +10 9 5 0.342683861347934 +10 9 6 0.25657117709848 +10 9 7 0.64204487420242 +10 9 8 0.315681234991705 diff --git a/reference/hub_ref/hub_scores.dat b/reference/hub_ref/hub_scores.dat new file mode 100644 index 00000000..a448669d --- /dev/null +++ b/reference/hub_ref/hub_scores.dat @@ -0,0 +1,11 @@ +0 0.961538 0.127561240333834 +1 0.003495 0.327221304618492 +2 0.002653 0.244425440259976 +3 0.002651 0.246784484757239 +4 0.006068 0.530770608051258 +5 0.003492 0.330886177246401 +6 0.005205 0.465790558886866 +7 0.001803 0.161474382329264 +8 0.004372 0.411696613266602 +9 0.004353 0.409082458195911 +10 0.004370 0.411140791735592 diff --git a/reference/hub_ref/hub_simulator.py b/reference/hub_ref/hub_simulator.py new file mode 100644 index 00000000..cc1130a0 --- /dev/null +++ b/reference/hub_ref/hub_simulator.py @@ -0,0 +1,62 @@ + +""" +A simple (dumb) simulator to check the hub score calculation. +""" + +import sys + +import numpy as np +from msmbuilder import msm_analysis + +# manual parameters +steps = 10**6 # sample steps +triples = [ (0, 1, 2), # (waypoint, source, sink) to test + (0, 1, 3), + (0, 1, 4) ] + + +# load in the transition matrx +N = 11 +T = np.transpose( np.genfromtxt('mat_1.dat')[:,:-3] ) +print T +print T.shape +print T.sum(1) + +# sample from it +print "Making a len: %d traj" % steps +traj = msm_analysis.sample(T, np.random.randint(11), steps, force_dense=True) +print "Generated traj" + +# count the fraction visits + +n_visited_waypoint = 0 +n_notvisited_waypoint = 0 + +started = False +visited = False + +for (waypoint, source, sink) in triples: + + for n,i in enumerate(traj): + + if n % 10000 == 0: + print "%d/%d" % (n, steps) + + if i == source: + started = True + visited = False + + elif i == waypoint: + visited = True + + elif i == sink: + if started: + if visited: n_visited_waypoint += 1 + else: n_notvisited_waypoint += 1 + started = False + + hc = float(n_visited_waypoint) / float(n_visited_waypoint + n_notvisited_waypoint) + + print "For triple:", (waypoint, source, sink) + print "hc =", hc + \ No newline at end of file diff --git a/reference/hub_ref/mat_1.dat b/reference/hub_ref/mat_1.dat new file mode 100644 index 00000000..5babbd96 --- /dev/null +++ b/reference/hub_ref/mat_1.dat @@ -0,0 +1,11 @@ +0.999 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 colsum = 1 +0.0001 0.04875 0 0 0 0.2315625 0.154375 0 0 0.18525 0.18525 colsum = 1 +0.0001 0 0.04875 0.30875 0.132321428571429 0 0 0 0 0.18525 0 colsum = 1 +0.0001 0 0.30875 0.04875 0.132321428571429 0 0.154375 0 0 0 0 colsum = 1 +0.0001 0 0.30875 0.30875 0.04875 0.2315625 0.154375 0 0.18525 0.18525 0.18525 colsum = 1 +0.0001 0.2315625 0 0 0.132321428571429 0.04875 0.154375 0 0.18525 0 0 colsum = 1 +0.0001 0.2315625 0 0.30875 0.132321428571429 0.2315625 0.04875 0 0 0.18525 0.18525 colsum = 1 +0.0001 0 0 0 0 0 0 0.04875 0.18525 0 0.18525 colsum = 1 +0.0001 0 0 0 0.132321428571429 0.2315625 0 0.463125 0.04875 0.18525 0.18525 colsum = 1 +0.0001 0.2315625 0.30875 0 0.132321428571429 0 0.154375 0 0.18525 0.04875 0 colsum = 1 +0.0001 0.2315625 0 0 0.132321428571429 0 0.154375 0.463125 0.18525 0 0.04875 colsum = 1 diff --git a/reference/hub_ref/node_1.csv b/reference/hub_ref/node_1.csv new file mode 100644 index 00000000..056f79e7 --- /dev/null +++ b/reference/hub_ref/node_1.csv @@ -0,0 +1,12 @@ +ID Label weight hubscore +0 0 0.961538 2.350599e-01 +1 1 0.003495 5.109082e-01 +2 2 0.002653 4.186528e-01 +3 3 0.002651 4.202933e-01 +4 4 0.006068 6.920195e-01 +5 5 0.003492 5.133543e-01 +6 6 0.005205 6.401438e-01 +7 7 0.001803 3.140007e-01 +8 8 0.004372 5.849143e-01 +9 9 0.004353 5.869488e-01 +10 10 0.004370 5.837044e-01 diff --git a/reference/hub_ref/ratemat_1.dat b/reference/hub_ref/ratemat_1.dat new file mode 100644 index 00000000..5cc72130 --- /dev/null +++ b/reference/hub_ref/ratemat_1.dat @@ -0,0 +1,11 @@ +-0.001 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 0.025 +0.0001 -0.95125 0 0 0 0.2315625 0.154375 0 0 0.18525 0.18525 +0.0001 0 -0.95125 0.30875 0.132321428571429 0 0 0 0 0.18525 0 +0.0001 0 0.30875 -0.95125 0.132321428571429 0 0.154375 0 0 0 0 +0.0001 0 0.30875 0.30875 -0.951250000000003 0.2315625 0.154375 0 0.18525 0.18525 0.18525 +0.0001 0.2315625 0 0 0.132321428571429 -0.95125 0.154375 0 0.18525 0 0 +0.0001 0.2315625 0 0.30875 0.132321428571429 0.2315625 -0.95125 0 0 0.18525 0.18525 +0.0001 0 0 0 0 0 0 -0.95125 0.18525 0 0.18525 +0.0001 0 0 0 0.132321428571429 0.2315625 0 0.463125 -0.95125 0.18525 0.18525 +0.0001 0.2315625 0.30875 0 0.132321428571429 0 0.154375 0 0.18525 -0.95125 0 +0.0001 0.2315625 0 0 0.132321428571429 0 0.154375 0.463125 0.18525 0 -0.95125 diff --git a/scripts/CalculateProjectSASA.py b/scripts/CalculateProjectSASA.py old mode 100755 new mode 100644 index fcc3d02a..e49685d0 --- a/scripts/CalculateProjectSASA.py +++ b/scripts/CalculateProjectSASA.py @@ -21,63 +21,59 @@ import mdtraj as md from mdtraj import io from msmbuilder import Project, arglib +import os import logging logger = logging.getLogger('msmbuilder.scripts.CalculateProjectSASA') parser = arglib.ArgumentParser(description="""Calculates the Solvent Accessible Surface Area -of all atoms in a given trajectory, or for all trajectories in the project. The -output is a hdf5 file which contains the SASA for each atom in each frame -in each trajectory (or the single trajectory you passed in.""" ) + of all atoms in a subset of the trajectories, or for all trajectories in the project. The + output is a hdf5 file which contains the SASA for each atom in each frame + in each trajectory (or the single trajectory you passed in.""" ) parser.add_argument('project') -parser.add_argument('atom_indices', help='Indices of atoms to calculate SASA', - default='all') -parser.add_argument('output', help='''hdf5 file for output. Note this will - be THREE dimensional: ( trajectory, frame, atom ), unless you just ask for - one trajectory, in which case it will be shape (frame, atom).''', - default='SASA.h5') -parser.add_argument('traj_fn', help='''Pass a trajectory file if you only - want to calclate the SASA for a single trajectory''', default='all' ) - - -def run(project, atom_indices=None, traj_fn = 'all'): +parser.add_argument('outdir', help=r"""Output directory to save .h5 files for each trajectory. + Each will be named sasa.h5 where corresponds to the project's index for that + trajectory""", default='sasa') +parser.add_argument('which', help="""which trajectories to calculate the SASA for. + This script saves a separate file for each trajectory.""", default=[0, np.inf], + nargs=2, type=int) - n_atoms = project.load_conf().n_atoms - - if traj_fn.lower() == 'all': +def run(project, outdir, which): - SASA = np.ones((project.n_trajs, np.max(project.traj_lengths), n_atoms)) * -1 + which[0] = np.max([0, which[0]]) + which[1] = np.min([project.n_trajs, which[1]]) - for traj_ind in xrange(project.n_trajs): - traj_asa = [] - logger.info("Working on Trajectory %d", traj_ind) - traj_fn = project.traj_filename(traj_ind) - chunk_ind = 0 - for traj_chunk in md.iterload(traj_fn, atom_indices=atom_indices, chunk=1000): - traj_asa.extend(md.shrake_rupley(traj_chunk)) - chunk_ind += 1 - SASA[traj_ind, 0:project.traj_lengths[traj_ind]] = traj_asa + n_atoms = project.load_conf().n_atoms - else: + for traj_ind in xrange(*which): + logger.info("Working on Trajectory %d", traj_ind) traj_asa = [] - for traj_chunk in Trajectory.enum_chunks_from_lhdf( traj_fn, AtomIndices=atom_indices ): - traj_asa.extend( asa.calculate_asa( traj_chunk ) ) + out_fn = os.path.join(args.outdir, 'sasa%d.h5' % traj_ind) + if os.path.exists(out_fn): + logger.warn("!!!!! Path (%s) exists, so I am skipping this trajectory. Remove %s to recalculate" % (out_fn, out_fn)) + continue + + traj_fn = project.traj_filename(traj_ind) + for traj_chunk in md.iterload(traj_fn, chunk=1000): + traj_asa.extend(md.shrake_rupley(traj_chunk)) - SASA = np.array(traj_asa) + traj_asa = np.array(traj_asa) + io.saveh(out_fn, traj_asa) - return SASA + return -def entry_point(): + +def entry_point() args = parser.parse_args() - arglib.die_if_path_exists(args.output) - if args.atom_indices.lower() == 'all': - atom_indices = None - else: - atom_indices = np.loadtxt(args.atom_indices).astype(int) + if not os.path.exists(args.outdir): + os.mkdir(args.outdir) + + if not os.path.isdir(args.outdir): + raise Exception("output directory (%s) exists but is not a directory!" % args.outdir) project = Project.load_from(args.project) - SASA = run(project, atom_indices, args.traj_fn) - io.saveh(args.output, SASA) + run(project, args.outdir, args.which) + if __name__ == '__main__': entry_point() diff --git a/scripts/Interactive-SCRE.py b/scripts/Interactive-SCRE.py new file mode 100755 index 00000000..b82ba845 --- /dev/null +++ b/scripts/Interactive-SCRE.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +"""Interactively estimate a rate matrix usign SCRE. +""" + +import os, sys +import scipy.io +from mdtraj import io +from msmbuilder import MSMLib, SCRE, arglib +import numpy as np +import string +import matplotlib +import logging +logger = logging.getLogger('msmbuilder.scripts.Interactive-SCRE') + +parser = arglib.ArgumentParser(description=__doc__) +parser.add_argument('output_dir') +parser.add_argument('assignments') + + +def interactive_scre(assignments): + Counts = MSMLib.get_count_matrix_from_assignments(assignments, lag_time=1) + CountsAfterTrimming,Mapping = MSMLib.ErgodicTrim(Counts) + MSMLib.ApplyMappingToAssignments(assignments,Mapping) + ReversibleCounts = MSMLib.EstimateReversibleCountMatrix(CountsAfterTrimming) + T = MSMLib.EstimateTransitionMatrix(ReversibleCounts).toarray() + populations = np.array(ReversibleCounts.sum(0)).flatten() + populations /= populations.sum() + + K0=SCRE.ConvertTIntoK(T) + M,X=SCRE.get_parameter_mapping(K0) + + while len(X) > 0: + lagtime_list = get_lagtimes() + KList = scre_iteration(assignments,K0,lagtime_list,M,X,populations) + matplotlib.pyplot.show() + if len(X) > 1: + i,j,lagtime = get_input() + SCRE.FixEntry(M,X,populations,K0,i,j,KList[lagtime][i,j]) + else: + lagtime = get_lagtime() + return KList[lagtime] + + +def get_lagtime(): + try: + lagtime = int(raw_input("Enter a lagtime (int), in units of the data storage step.\n")) + except ValueError: + lagtimes = get_lagtimes() + return lagtime - 1 + +def get_lagtimes(): + try: + max_lagtime = int(raw_input("Enter a maximum lagtime (int), in units of the data storage step.\n")) + lagtimes = np.arange(1,max_lagtime) + except ValueError: + lagtimes = get_lagtimes() + + return lagtimes + + +def get_input(): + try: + s = raw_input("Enter i,j,lagtime (int, int, int), where lagtime is in units of the data storage step.\n") + i,j,lagtime = np.array(string.split(s,','),'int') + except ValueError: + i,j,lagtime = get_input() + + return i,j,lagtime - 1 + +def scre_iteration(assignments,K0,lagtime_list,M,X,populations): + KList=[] + counts_list = [] + for LagTime in lagtime_list: + logger.info("Estimating rates at lagtime %d", LagTime) + K=K0.copy() * float(LagTime) + C0=MSMLib.get_count_matrix_from_assignments(assignments, lag_time=LagTime).toarray() + Counts=C0.sum(1) + Counts/=LagTime + X2=SCRE.MaximizeRateLikelihood(X,M,populations,C0,K) + K=SCRE.ConstructRateFromParams(X2,M,populations,K) + K/=(LagTime) + KList.append(K) + counts_list.append(Counts) + + KList=np.array(KList) + SCRE.PlotRates(KList,lagtime_list,counts_list) + return KList + +run = interactive_scre + +if __name__ == "__main__": + args = parser.parse_args() + + try: + assignments = io.loadh(args.assignments, 'arr_0') + except KeyError: + assignments = io.loadh(args.assignments, 'Data') + + K = run(assignments) + + T = scipy.linalg.matfuncs.expm(K) + + np.savetxt(os.path.join(args.output_dir, "Rate.dat"), K) + scipy.io.mmwrite(os.path.join(args.output_dir, "tProb.mtx.tl"), T) diff --git a/scripts/SampleTrajectory.py b/scripts/SampleTrajectory.py old mode 100755 new mode 100644 diff --git a/scripts/SaveStructures.py b/scripts/SaveStructures.py old mode 100755 new mode 100644 diff --git a/scripts/msmb b/scripts/msmb new file mode 100755 index 00000000..97887e57 --- /dev/null +++ b/scripts/msmb @@ -0,0 +1,64 @@ +#!/usr/bin/env python +"""MSMBuilder: Analyzing conformational dynamics via the construction of Markov state models. +""" + +############################################################################## +# Imports +############################################################################## + +import re +import os +import sys +import inspect +import warnings +import argparse +from mdtraj.utils import import_ +from msmbuilder import scripts + +parser = argparse.ArgumentParser(description=__doc__, usage='msmb [subcommand]') + +############################################################################## +# Code +############################################################################## + +def main(): + subparsers = parser.add_subparsers(dest="subparser_name") + scriptfiles = {} + argv = sys.argv[:] + if len(argv) == 1: + argv.append('-h') + + for scriptname in scripts.__all__: + # get the name and first sentence of the description from each of the + # msmbuilder commands + with warnings.catch_warnings(): + warnings.filterwarnings("ignore") + script = import_('msmbuilder.scripts.%s' % scriptname) + scriptparser = getattr(script, 'parser', None) + scriptfiles[scriptname] = script.__file__ + + try: + description = scriptparser.description + except: + description = scriptparser.parser.description + + # http://stackoverflow.com/a/17124446/1079728 + first_sentence = ' '.join(' '.join(re.split(r'(?<=[.:;])\s', description)[:1]).split()) + subparsers.add_parser(scriptname, help=first_sentence) + + sys.argv = argv[0:2] + args = parser.parse_args() + scriptfile = scriptfiles[args.subparser_name] + if os.path.splitext(scriptfile)[1] == '.pyc': + scriptfile = os.path.splitext(scriptfile)[0] + '.py' + + sys.argv = argv[1:] + if not os.path.exists(scriptfile): + raise IOError('Script not found') + + return scriptfile + +if __name__ == '__main__': + __scriptfile__ = main() + with open(__scriptfile__, "r") as __fh__: + exec(__fh__.read(), globals(), locals()) diff --git a/tests/test_metrics.py b/tests/test_metrics.py new file mode 100644 index 00000000..c516cbda --- /dev/null +++ b/tests/test_metrics.py @@ -0,0 +1,276 @@ +""" +Tests for msmbuilder.metrics.fast_cdist and msmbuilder.metrics.fast_pdist +""" + +import numpy as np + +from scipy.spatial.distance import pdist, cdist +from msmbuilder.metrics.core import fast_pdist, fast_cdist +from msmbuilder.testing import * +import time + +class test_pdist(): + def setUp(self): + np.random.seed(42) + self.Xd = np.random.randn(1000, 10) + self.Xb = np.asarray(np.random.randint(2, size=(1000, 10)), dtype=np.bool) + + def test_seuclidean_1(self): + reference = pdist(self.Xd, metric='seuclidean') + testing = fast_pdist(self.Xd, metric='seuclidean') + eq(reference, testing) + + def test_seuclidean_2(self): + V = np.random.randn(self.Xd.shape[1]) + reference = pdist(self.Xd, metric='seuclidean', V=V) + testing = fast_pdist(self.Xd, metric='seuclidean', V=V) + eq(reference, testing) + + def test_mahalanobis_1(self): + reference = pdist(self.Xd, metric='mahalanobis') + testing = fast_pdist(self.Xd, metric='mahalanobis') + eq(reference, testing) + + def test_mahalanobis_2(self): + VI = np.random.randn(self.Xd.shape[0], self.Xd.shape[0]) + reference = pdist(self.Xd, metric='mahalanobis', VI=VI) + testing = fast_pdist(self.Xd, metric='mahalanobis', VI=VI) + eq(reference, testing) + + def test_minkowski(self): + p = np.random.randint(10) + reference = pdist(self.Xd, metric='minkowski', p=p) + testing = fast_pdist(self.Xd, metric='minkowski', p=p) + eq(reference, testing) + + def test_cosine(self): + reference = pdist(self.Xd, metric='cosine') + testing = fast_pdist(self.Xd, metric='cosine') + eq(reference, testing) + + def test_cityblock(self): + reference = pdist(self.Xd, metric='cityblock') + testing = fast_pdist(self.Xd, metric='cityblock') + eq(reference, testing) + + def test_correlation(self): + reference = pdist(self.Xd, metric='correlation') + testing = fast_pdist(self.Xd, metric='correlation') + eq(reference, testing) + + def test_euclidean(self): + reference = pdist(self.Xd, metric='euclidean') + testing = fast_pdist(self.Xd, metric='euclidean') + eq(reference, testing) + + def test_sqeuclidean(self): + reference = pdist(self.Xd, metric='sqeuclidean') + testing = fast_pdist(self.Xd, metric='sqeuclidean') + eq(reference, testing) + + def test_chebychev(self): + reference = pdist(self.Xd, metric='chebychev') + testing = fast_pdist(self.Xd, metric='chebychev') + eq(reference, testing) + + def test_hamming_1(self): + reference = pdist(self.Xd, metric='hamming') + testing = fast_pdist(self.Xd, metric='hamming') + eq(reference, testing) + + def test_hamming_2(self): + reference = pdist(self.Xb, metric='hamming') + testing = fast_pdist(self.Xb, metric='hamming') + eq(reference, testing) + + def test_jaccard_1(self): + reference = pdist(self.Xd, metric='jaccard') + testing = fast_pdist(self.Xd, metric='jaccard') + eq(reference, testing) + + def test_jaccard_2(self): + reference = pdist(self.Xb, metric='jaccard') + testing = fast_pdist(self.Xb, metric='jaccard') + eq(reference, testing) + + @expected_failure + def test_canberra(self): + reference = pdist(self.Xd, metric='canberra') + testing = fast_pdist(self.Xd, metric='canberra') + eq(reference, testing) + + def test_braycurtis(self): + reference = pdist(self.Xd, metric='braycurtis') + testing = fast_pdist(self.Xd, metric='braycurtis') + eq(reference, testing) + + def test_yule(self): + reference = pdist(self.Xb, metric='yule') + testing = fast_pdist(self.Xb, metric='yule') + eq(reference, testing) + + def test_matching(self): + reference = pdist(self.Xb, metric='matching') + testing = fast_pdist(self.Xb, metric='matching') + eq(reference, testing) + + def test_kulsinski(self): + reference = pdist(self.Xb, metric='kulsinski') + testing = fast_pdist(self.Xb, metric='kulsinski') + eq(reference, testing) + + def test_dice(self): + reference = pdist(self.Xb, metric='dice') + testing = fast_pdist(self.Xb, metric='dice') + eq(reference, testing) + + def test_rogerstanimoto(self): + reference = pdist(self.Xb, metric='rogerstanimoto') + testing = fast_pdist(self.Xb, metric='rogerstanimoto') + eq(reference, testing) + + def test_russellrao(self): + reference = pdist(self.Xb, metric='russellrao') + testing = fast_pdist(self.Xb, metric='russellrao') + eq(reference, testing) + + def test_sokalmichener(self): + reference = pdist(self.Xb, metric='sokalmichener') + testing = fast_pdist(self.Xb, metric='sokalmichener') + eq(reference, testing) + + def test_sokalsneath(self): + reference = pdist(self.Xb, metric='sokalsneath') + testing = fast_pdist(self.Xb, metric='sokalsneath') + eq(reference, testing) + + +class test_cdist(): + def setUp(self): + np.random.seed(42) + self.Xd1 = np.random.randn(1000, 10) + self.Xd2 = np.random.randn(1, 10) + self.Xb1 = np.asarray(np.random.randint(2, size=(1000, 10)), dtype=np.bool) + self.Xb2 = np.asarray(np.random.randint(2, size=(1, 10)), dtype=np.bool) + + def test_seuclidean_2(self): + V = np.random.randn(self.Xd1.shape[1]) + reference = cdist(self.Xd1, self.Xd2, metric='seuclidean', V=V) + testing = fast_cdist(self.Xd1, self.Xd2, metric='seuclidean', V=V) + eq(reference, testing) + + def test_mahalanobis_2(self): + VI = np.random.randn(self.Xd1.shape[0], self.Xd1.shape[0]) + reference = cdist(self.Xd1, self.Xd2, metric='mahalanobis', VI=VI) + testing = fast_cdist(self.Xd1, self.Xd2, metric='mahalanobis', VI=VI) + eq(reference, testing) + + def test_minkowski(self): + p = np.random.randint(10) + reference = cdist(self.Xd1, self.Xd2, metric='minkowski', p=p) + testing = fast_cdist(self.Xd1, self.Xd2, metric='minkowski', p=p) + eq(reference, testing) + + def test_cosine(self): + reference = cdist(self.Xd1, self.Xd2, metric='cosine') + testing = fast_cdist(self.Xd1, self.Xd2, metric='cosine') + eq(reference, testing) + + def test_cityblock(self): + reference = cdist(self.Xd1, self.Xd2, metric='cityblock') + testing = fast_cdist(self.Xd1, self.Xd2, metric='cityblock') + eq(reference, testing) + + def test_correlation(self): + reference = cdist(self.Xd1, self.Xd2, metric='correlation') + testing = fast_cdist(self.Xd1, self.Xd2, metric='correlation') + eq(reference, testing) + + def test_euclidean(self): + reference = cdist(self.Xd1, self.Xd2, metric='euclidean') + testing = fast_cdist(self.Xd1, self.Xd2, metric='euclidean') + eq(reference, testing) + + def test_sqeuclidean(self): + reference = cdist(self.Xd1, self.Xd2, metric='sqeuclidean') + testing = fast_cdist(self.Xd1, self.Xd2, metric='sqeuclidean') + eq(reference, testing) + + def test_chebychev(self): + reference = cdist(self.Xd1, self.Xd2, metric='chebychev') + testing = fast_cdist(self.Xd1, self.Xd2, metric='chebychev') + eq(reference, testing) + + def test_hamming_1(self): + reference = cdist(self.Xd1, self.Xd2, metric='hamming') + testing = fast_cdist(self.Xd1, self.Xd2, metric='hamming') + eq(reference, testing) + + def test_hamming_2(self): + reference = cdist(self.Xb1, self.Xb2, metric='hamming') + testing = fast_cdist(self.Xb1, self.Xb2, metric='hamming') + eq(reference, testing) + + @skip('jaccard not implemented in fast_cdist') + def test_jaccard_1(self): + reference = cdist(self.Xd1, self.Xd2, metric='jaccard') + testing = fast_cdist(self.Xd1, self.Xd2, metric='jaccard') + eq(reference, testing) + + @skip('jaccard not implemented in fast_cdist') + def test_jaccard_2(self): + reference = cdist(self.Xb1, self.Xb2, metric='jaccard') + testing = fast_cdist(self.Xb1, self.Xb2, metric='jaccard') + eq(reference, testing) + + @skip('canberra is not working') + def test_canberra(self): + reference = cdist(self.Xd1, self.Xd2, metric='canberra') + testing = fast_cdist(self.Xd1, self.Xd2, metric='canberra') + eq(reference, testing) + + def test_braycurtis(self): + reference = cdist(self.Xd1, self.Xd2, metric='braycurtis') + testing = fast_cdist(self.Xd1, self.Xd2, metric='braycurtis') + eq(reference, testing) + + def test_yule(self): + reference = cdist(self.Xb1, self.Xb2, metric='yule') + testing = fast_cdist(self.Xb1, self.Xb2, metric='yule') + eq(reference, testing) + + def test_matching(self): + reference = cdist(self.Xb1, self.Xb2, metric='matching') + testing = fast_cdist(self.Xb1, self.Xb2, metric='matching') + eq(reference, testing) + + @skip('kulsinski not implemented in fast_cdist') + def test_kulsinski(self): + reference = cdist(self.Xb1, self.Xb2, metric='kulsinski') + testing = fast_cdist(self.Xb1, self.Xb2, metric='kulsinski') + eq(reference, testing) + + def test_dice(self): + reference = cdist(self.Xb1, self.Xb2, metric='dice') + testing = fast_cdist(self.Xb1, self.Xb2, metric='dice') + eq(reference, testing) + + def test_rogerstanimoto(self): + reference = cdist(self.Xb1, self.Xb2, metric='rogerstanimoto') + testing = fast_cdist(self.Xb1, self.Xb2, metric='rogerstanimoto') + eq(reference, testing) + + def test_russellrao(self): + reference = cdist(self.Xb1, self.Xb2, metric='russellrao') + testing = fast_cdist(self.Xb1, self.Xb2, metric='russellrao') + eq(reference, testing) + + def test_sokalmichener(self): + reference = cdist(self.Xb1, self.Xb2, metric='sokalmichener') + testing = fast_cdist(self.Xb1, self.Xb2, metric='sokalmichener') + eq(reference, testing) + + def test_sokalsneath(self): + reference = cdist(self.Xb1, self.Xb2, metric='sokalsneath') + testing = fast_cdist(self.Xb1, self.Xb2, metric='sokalsneath') + eq(reference, testing)