public static void main(String argv[]) {
    boolean reverse = false;
    modshogun.init_shogun_with_defaults();
    int order = 3;
    int gap = 4;

    String[] fm_train_dna = Load.load_dna("../data/fm_train_dna.dat");

    StringCharFeatures charfeat = new StringCharFeatures(fm_train_dna, DNA);
    StringWordFeatures feats = new StringWordFeatures(charfeat.get_alphabet());
    feats.obtain_from_char(charfeat, order - 1, order, gap, reverse);

    PositionalPWM ppwm = new PositionalPWM();
    ppwm.set_sigma(5.0);
    ppwm.set_mean(10.0);
    DoubleMatrix pwm =
        new DoubleMatrix(
            new double[][] {
              {0.0, 0.5, 0.1, 1.0}, {0.0, 0.5, 0.5, 0.0}, {1.0, 0.0, 0.4, 0.0}, {0.0, 0.0, 0.0, 0.0}
            });
    ppwm.set_pwm(logi(pwm));
    ppwm.compute_w(20);
    DoubleMatrix w = ppwm.get_w();
    modshogun.exit_shogun();
  }
  public static void main(String argv[]) {
    boolean reverse = false;
    modshogun.init_shogun_with_defaults();
    int N = 1;
    int M = 512;
    double pseudo = 1e-5;
    int order = 3;
    int gap = 0;

    String[] fm_train_dna = Load.load_cubes("../data/fm_train_cube.dat");

    StringCharFeatures charfeat = new StringCharFeatures(fm_train_dna, CUBE);
    StringWordFeatures feats = new StringWordFeatures(charfeat.get_alphabet());
    feats.obtain_from_char(charfeat, order - 1, order, gap, reverse);

    HMM hmm = new HMM(feats, N, M, pseudo);
    hmm.train();
    hmm.baum_welch_viterbi_train(BW_NORMAL);

    int num_examples = feats.get_num_vectors();
    int num_param = hmm.get_num_model_parameters();
    for (int i = 0; i < num_examples; i++)
      for (int j = 0; j < num_param; j++) {
        hmm.get_log_derivative(j, i);
      }

    int best_path = 0;
    int best_path_state = 0;
    for (int i = 0; i < num_examples; i++) {
      best_path += hmm.best_path(i);
      for (int j = 0; j < N; j++) best_path_state += hmm.get_best_path_state(i, j);
    }

    DoubleMatrix lik_example = hmm.get_log_likelihood();
    double lik_sample = hmm.get_log_likelihood_sample();

    modshogun.exit_shogun();
  }