private String tryModels() {
   String message = "";
   try {
     SubstitutionModel[] defaultSubstList = {new Kimura3(), new Dayhoff()};
     for (SubstitutionModel model : defaultSubstList) {
       try {
         model.acceptable(manager.inputData.seqs);
         selectModel(model);
         break;
       } catch (RecognitionError e) {
       }
     }
     if (manager.inputData.model == null) {
       double max = 0.0;
       int wrong = 0;
       for (Class<? extends SubstitutionModel> cl : substModels) {
         SubstitutionModel m;
         try {
           m = cl.newInstance();
           if (m.acceptable(manager.inputData.seqs) > max) {
             manager.inputData.model = m;
             max = m.acceptable(manager.inputData.seqs);
             selectModel(m);
           }
         } catch (RecognitionError e) {
           wrong++;
           message += e.message;
         }
       }
     }
   } catch (Exception e) {
     JOptionPane.showMessageDialog(
         this,
         e.getLocalizedMessage(),
         "Error accessing substitution models",
         JOptionPane.ERROR_MESSAGE);
   }
   return message;
 }
  /**
   * An ActioListener is implemented, so we have to implement this function. It handles actions on
   * the menu bar.
   */
  @Override
  public void actionPerformed(ActionEvent ev) {
    if (ev.getActionCommand() == "Add sequence(s)...") {
      addSequences();
    } else if (ev.getActionCommand() == "Exit") {
      System.exit(0);
    } else if (ev.getActionCommand() == "Preferences...") {
      // System.out.println("here!!!");
      op = new OutputPreferences(this);
    } else if (ev.getActionCommand() == "Settings") {
      mcmcSettingsDlg.display(this);
    } else if (ev.getActionCommand() == "Set up and run") {
      if (manager.inputData.seqs.sequences.size() < 2) {
        JOptionPane.showMessageDialog(
            this,
            "At least two sequences are needed!!!",
            "Not enough sequences",
            JOptionPane.ERROR_MESSAGE);
        //    			manager.finished();
        return;
      }
      // disableAllButtons();
      mcmcSettingsDlg.display(this);
      // start();

    } else if (ev.getActionCommand() == "Pause") {
      pauseItem.setEnabled(false);
      pauseButton.setEnabled(false);

      resumeItem.setEnabled(true);
      resumeButton.setEnabled(true);
      setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
      final String savTit = getTitle();
      setTitle("Pausing...");
      manager.thread.suspendSoft();
      setTitle(savTit);
      setCursor(Cursor.getDefaultCursor());
    } else if (ev.getActionCommand() == "Resume") {
      manager.thread.resumeSoft();
      pauseItem.setEnabled(true);
      pauseButton.setEnabled(true);
      resumeItem.setEnabled(false);
      resumeButton.setEnabled(false);
    } else if (ev.getActionCommand() == "Stop") {
      setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
      final String savTit = getTitle();
      setTitle("Stopping...");
      manager.thread.stopSoft();
      finished();
      setTitle(savTit);
      setCursor(Cursor.getDefaultCursor());
    } else if (ev.getActionCommand() == "RNA mode") {
      if (rnaButton.isSelected()) {
        dlg = new RNASettingsDlg(this);
        dlg.display(this);

        // manager.inputgui = input.inputgui;
        // manager.inputgui.updateSequences();
        // tab.addTab(input.getTabName(), input.getIcon(), input.getJPanel(), input.getTip());
        manager.inputgui = input.inputgui;
        manager.inputgui.updateSequences();
        // System.out.println("SELECTED!!!");

        manager.postProcMan.rnaMode = true;
        // manager.postProcMan.reload();

        int count = tab.getTabCount();
        for (Postprocess plugin : pluginTabs) {
          // System.out.println(plugin.getTabName() + ": " + plugin.screenable);
          if (plugin.rnaAssociated) {
            tabPluginMap.put(count, plugin);
            tab.addTab(plugin.getTabName(), plugin.getIcon(), plugin.getJPanel(), plugin.getTip());
            count++;
          }

          // manager.postProcMan.init();
        }

      } else {

        manager.postProcMan.rnaMode = false;
        // System.out.println("NOT SELECTED!!!");
        manager.inputgui = input.inputgui;
        manager.inputgui.updateSequences();

        int count = 0;
        for (Postprocess plugin : pluginTabs) {
          if (plugin.rnaAssociated) {
            tabPluginMap.remove(plugin);
            String removePlugin = tab.getTitleAt(count + 1);
            tab.remove(count + 1);
            count--;
          }

          count++;
        }
      }

    } else if (ev.getActionCommand() == "About...") {
      new HelpWindow(
          this, "About", getClass().getClassLoader().getResource("doc/about/index.html"), false);
    } else if (ev.getActionCommand() == "Html doc for developers") {
      new HelpWindow(
          this, "Html doc for Developers", ClassLoader.getSystemResource("doc/index.html"), true);
    } else if (ev.getActionCommand() == "Description of plugins") {
      new HelpWindow(
          this,
          "Description of plugins",
          ClassLoader.getSystemResource("doc/plugin_description/index.html"),
          true);

    } else if (ev.getActionCommand() == "Help for users") {
      helpUsers();
    } else { // new substitution model selected
      for (Class<? extends SubstitutionModel> cl : substModels) {
        try {
          if (ev.getActionCommand().equals(SubstitutionModel.getMenuName(cl))) {
            try {
              SubstitutionModel model = cl.newInstance();
              model.acceptable(manager.inputData.seqs);
              manager.inputData.model = model;
              break;
            } catch (RecognitionError e) {
              selectModel(manager.inputData.model);
              JOptionPane.showMessageDialog(
                  this, e.message, "Cannot apply this model...", JOptionPane.ERROR_MESSAGE);
              break;
            }
          }
        } catch (Exception e) {
          ErrorMessage.showPane(this, e, true);
        }
      }
    }
  }