import scipy.optimize
import mixtape.featurizer, mixtape.tica, mixtape.cluster, mixtape.markovstatemodel, mixtape.ghmm, mixtape.ntica
import numpy as np
import mdtraj as md
from parameters import load_trajectories, build_full_featurizer
import sklearn.pipeline, sklearn.externals.joblib
import mixtape.utils

stride = 1
trj0, trajectories, filenames = load_trajectories(stride=stride)
trj0 = md.load("./system.subset.pdb")
trj = trajectories[0]

rmsd0 = md.rmsd(trj, trj0, 0)
rmsd1 = md.rmsd(trj, trj, 0)

mean(rmsd0[0:-1] * rmsd1[1:])
mean(rmsd1[0:-1] * rmsd0[1:])

X = [np.array([rmsd0, rmsd1]).T]

ntica = mixtape.ntica.NtICA()
#ntica._lambda = lam
#ntica._lambda = np.array([-0.1, 0.1])
ntica.fit(X)
ntica.offset_correlation_

X0, X1 = ntica.X0, ntica.X1

lam = np.zeros(2)
Q0 = np.exp(-X0.dot(lam))
import mixtape.featurizer, mixtape.tica, mixtape.cluster, mixtape.markovstatemodel, mixtape.datasets, mixtape.subset_featurizer, mixtape.feature_selection
import numpy as np
import sklearn.pipeline, sklearn.externals.joblib
import mixtape.utils
from parameters import load_trajectories


n_iter = 5000
n_choose = 10
lag_time = 1

trj0, trajectories, filenames = load_trajectories()
train = trajectories

featurizer = mixtape.subset_featurizer.guess_featurizers(trajectories[0], n_choose)
tica_optimizer = mixtape.feature_selection.TICAOptimizer(featurizer, lag_time=lag_time)
tica_optimizer.optimize(n_iter, train)

#sklearn.externals.joblib.dump(tica_optimizer.featurizer, "./featurizer-%d.job" % n_choose, compress=True)