scrubbing HMM classes on spike-mungo
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 13 Aug 2018 10:14:08 +0000 (11:14 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Mon, 13 Aug 2018 10:14:08 +0000 (11:14 +0100)
44 files changed:
src/jalview/datamodel/HMMNode.java [deleted file]
src/jalview/datamodel/HiddenMarkovModel.java [deleted file]
src/jalview/gui/DasSourceBrowser.java [deleted file]
src/jalview/hmmer/HMMAlign.java [deleted file]
src/jalview/hmmer/HMMBuild.java [deleted file]
src/jalview/hmmer/HMMERParamStore.java [deleted file]
src/jalview/hmmer/HMMERPreset.java [deleted file]
src/jalview/hmmer/HMMSearch.java [deleted file]
src/jalview/hmmer/HmmerCommand.java [deleted file]
src/jalview/io/HMMFile.java [deleted file]
src/jalview/schemes/HmmerColourScheme.java [deleted file]
src/jalview/schemes/HmmerGlobalBackground.java [deleted file]
src/jalview/schemes/HmmerLocalBackground.java [deleted file]
src/jalview/util/FileUtils.java [deleted file]
src/jalview/util/HMMProbabilityDistributionAnalyser.java [deleted file]
src/jalview/util/ProbabilityAnalyserKickstarter.java [deleted file]
src/jalview/workers/InformationThread.java [deleted file]
src/jalview/ws/DasSequenceFeatureFetcher.java [deleted file]
src/jalview/ws/dbsources/das/api/DasSourceRegistryI.java [deleted file]
src/jalview/ws/dbsources/das/api/jalviewSourceI.java [deleted file]
src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java [deleted file]
src/jalview/ws/dbsources/das/datamodel/DasSourceRegistry.java [deleted file]
src/jalview/ws/dbsources/das/datamodel/JalviewSource.java [deleted file]
src/jalview/ws/params/simple/DoubleParameter.java [deleted file]
src/jalview/ws/params/simple/FileParameter.java [deleted file]
src/jalview/ws/params/simple/LogarithmicParameter.java [deleted file]
src/jalview/ws/params/simple/RadioChoiceParameter.java [deleted file]
src/jalview/ws/params/simple/StringParameter.java [deleted file]
test/jalview/datamodel/HMMNodeTest.java [deleted file]
test/jalview/datamodel/HiddenMarkovModelTest.java [deleted file]
test/jalview/hmmer/HMMERTest.java [deleted file]
test/jalview/hmmer/testProps.jvprops [deleted file]
test/jalview/io/HMMFileTest.java [deleted file]
test/jalview/io/test_MADE1_hmm.txt [deleted file]
test/jalview/io/test_PKinase_hmm.txt [deleted file]
test/jalview/io/test_fn3_hmm.txt [deleted file]
test/jalview/schemes/HmmerGlobalBackgroundTest.java [deleted file]
test/jalview/schemes/HmmerLocalBackgroundTest.java [deleted file]
test/jalview/util/FileUtilsTest.java [deleted file]
test/jalview/util/HMMProbabilityDistributionAnalyserTest.java [deleted file]
test/jalview/util/Raw.csv [deleted file]
test/jalview/util/test_Fams_for_probability_analysis [deleted file]
test/jalview/util/test_hmms_for_probability_analysis [deleted file]
test/jalview/ws/seqfetcher/DasSequenceFetcher.java [deleted file]

diff --git a/src/jalview/datamodel/HMMNode.java b/src/jalview/datamodel/HMMNode.java
deleted file mode 100644 (file)
index b646eee..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-package jalview.datamodel;
-
-/**
- * stores data for each node in the hmm model
- * @author TZVanaalten
- *
- */
-public class HMMNode
-{
-  //contains the match emissions for each symbol 
-  double[] matchEmissions;
-
-  //contains the insert emissions for each symbol 
-  double[] insertEmissions;
-
-  // contains the state transitions for each possible transition. These are mm,
-  // mi, md, im, ii, dm and dd in order
-  double[] stateTransitions;
-  
-  //annotations
-  int residueNumber;
-  char consensusResidue;
-  char referenceAnnotation;
-  char maskValue;
-  char consensusStructure;
-
-  /**
-   * Constructor
-   */
-  public HMMNode()
-  {
-  }
-
-  public double[] getMatchEmissions()
-  {
-    return matchEmissions;
-  }
-
-  double getMatchEmission(int symbolIndex)
-  {
-    return matchEmissions[symbolIndex];
-  }
-
-  public void setMatchEmissions(double[] matches)
-  {
-    this.matchEmissions = matches;
-  }
-
-  public double[] getInsertEmissions()
-  {
-    return insertEmissions;
-  }
-
-  double getInsertEmission(int symbolIndex)
-  {
-    return insertEmissions[symbolIndex];
-  }
-
-  public void setInsertEmissions(double[] insertEmissionsL)
-  {
-    this.insertEmissions = insertEmissionsL;
-  }
-
-  public double[] getStateTransitions()
-  {
-    return stateTransitions;
-  }
-
-  double getStateTransition(int transition)
-  {
-    return stateTransitions[transition];
-  }
-
-  public void setStateTransitions(double[] stateTransitionsM)
-  {
-    this.stateTransitions = stateTransitionsM;
-  }
-
-  int getResidueNumber()
-  {
-    return residueNumber;
-  }
-  public void setResidueNumber(int resNo)
-  {
-    this.residueNumber = resNo;
-  }
-
-  char getConsensusResidue()
-  {
-    return consensusResidue;
-  }
-  public void setConsensusResidue(char consensusResidue)
-  {
-    this.consensusResidue = consensusResidue;
-  }
-
-  char getReferenceAnnotation()
-  {
-    return referenceAnnotation;
-  }
-  public void setReferenceAnnotation(char referenceAnnotation)
-  {
-    this.referenceAnnotation = referenceAnnotation;
-  }
-
-  char getMaskValue()
-  {
-    return maskValue;
-  }
-  public void setMaskValue(char maskValue)
-  {
-    this.maskValue = maskValue;
-  }
-
-  char getConsensusStructure()
-  {
-    return consensusStructure;
-  }
-  public void setConsensusStructure(char consensusStructure)
-  {
-    this.consensusStructure = consensusStructure;
-  }
-
-  /**
-   * Answers the symbol index of the symbol with the highest match emission
-   * probability (first symbol in case of a tie). Note this object stores
-   * probabilities, not the negative logarithms as in the HMM file.
-   * 
-   * @return
-   */
-  int getMaxMatchEmissionIndex()
-  {
-    int maxIndex = 0;
-    double max = 0D;
-
-    for (int i = 0; i < matchEmissions.length; i++)
-    {
-      if (matchEmissions[i] > max)
-      {
-        max = matchEmissions[i];
-        maxIndex = i;
-      }
-    }
-    return maxIndex;
-  }
-}
-   
-  
diff --git a/src/jalview/datamodel/HiddenMarkovModel.java b/src/jalview/datamodel/HiddenMarkovModel.java
deleted file mode 100644 (file)
index e3eb160..0000000
+++ /dev/null
@@ -1,637 +0,0 @@
-package jalview.datamodel;
-
-import jalview.io.HMMFile;
-import jalview.schemes.ResidueProperties;
-import jalview.util.Comparison;
-import jalview.util.MapList;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Data structure which stores a hidden Markov model
- * 
- * @author TZVanaalten
- * 
- */
-public class HiddenMarkovModel
-{
-  private static final char GAP_DASH = '-';
-
-  public final static String YES = "yes";
-
-  public final static String NO = "no";
-
-  public static final int MATCHTOMATCH = 0;
-
-  public static final int MATCHTOINSERT = 1;
-
-  public static final int MATCHTODELETE = 2;
-
-  public static final int INSERTTOMATCH = 3;
-
-  public static final int INSERTTOINSERT = 4;
-
-  public static final int DELETETOMATCH = 5;
-
-  public static final int DELETETODELETE = 6;
-
-  private static final double LOG2 = Math.log(2);
-
-  /*
-   * properties read from HMM file header lines
-   */
-  private Map<String, String> fileProperties = new HashMap<>();
-
-  private String fileHeader;
-  
-  /*
-   * the symbols used in this model e.g. "ACGT"
-   */
-  private String alphabet;
-
-  /*
-   * symbol lookup index into the alphabet for 'A' to 'Z'
-   */
-  private int[] symbolIndexLookup = new int['Z' - 'A' + 1];
-
-  /*
-   * Nodes in the model. The begin node is at index 0, and contains 
-   * average emission probabilities for each symbol.
-   */
-  private List<HMMNode> nodes = new ArrayList<>();
-
-  /*
-   * the aligned HMM consensus sequence extracted from the HMM profile
-   */
-  private SequenceI hmmSeq;
-
-  /*
-   * mapping from HMM nodes to residues of the hmm consensus sequence
-   */
-  private Mapping mapToHmmConsensus;
-
-  /**
-   * Constructor
-   */
-  public HiddenMarkovModel()
-  {
-  }
-
-  /**
-   * Copy constructor given a new aligned sequence with which to associate the
-   * HMM profile
-   * 
-   * @param hmm
-   * @param sq
-   */
-  public HiddenMarkovModel(HiddenMarkovModel hmm, SequenceI sq)
-  {
-    super();
-    this.fileProperties = new HashMap<>(hmm.fileProperties);
-    this.alphabet = hmm.alphabet;
-    this.nodes = new ArrayList<>(hmm.nodes);
-    this.symbolIndexLookup = hmm.symbolIndexLookup;
-    this.fileHeader = new String(hmm.fileHeader);
-    this.hmmSeq = sq;
-    if (sq.getDatasetSequence() == hmm.mapToHmmConsensus.getTo())
-    {
-      // same dataset sequence e.g. after realigning search results
-      this.mapToHmmConsensus = hmm.mapToHmmConsensus;
-    }
-    else
-    {
-      // different dataset sequence e.g. after loading HMM from project
-      this.mapToHmmConsensus = new Mapping(sq.getDatasetSequence(),
-              hmm.mapToHmmConsensus.getMap());
-    }
-  }
-
-  /**
-   * Returns the information content at a specified column, calculated as the
-   * sum (over possible symbols) of the log ratio
-   * 
-   * <pre>
-   *  log(emission probability / background probability) / log(2)
-   * </pre>
-   * 
-   * @param column
-   *          column position (base 0)
-   * @return
-   */
-  public float getInformationContent(int column)
-  {
-    float informationContent = 0f;
-
-    for (char symbol : getSymbols().toCharArray())
-    {
-      float freq = ResidueProperties.backgroundFrequencies
-              .get(getAlphabetType()).get(symbol);
-      float prob = (float) getMatchEmissionProbability(column, symbol);
-      informationContent += prob * Math.log(prob / freq);
-    }
-
-    informationContent = informationContent / (float) LOG2;
-
-    return informationContent;
-  }
-
-  /**
-   * Gets the file header of the .hmm file this model came from
-   * 
-   * @return
-   */
-  public String getFileHeader()
-  {
-    return fileHeader;
-  }
-
-  /**
-   * Sets the file header of this model.
-   * 
-   * @param header
-   */
-  public void setFileHeader(String header)
-  {
-    fileHeader = header;
-  }
-
-  /**
-   * Returns the symbols used in this hidden Markov model
-   * 
-   * @return
-   */
-  public String getSymbols()
-  {
-    return alphabet;
-  }
-  
-  /**
-   * Gets the node in the hidden Markov model at the specified position.
-   * 
-   * @param nodeIndex
-   *          The index of the node requested. Node 0 optionally contains the
-   *          average match emission probabilities across the entire model, and
-   *          always contains the insert emission probabilities and state
-   *          transition probabilities for the begin node. Node 1 contains the
-   *          first node in the HMM that can correspond to a column in the
-   *          alignment.
-   * @return
-   */
-  public HMMNode getNode(int nodeIndex)
-  {
-    return nodes.get(nodeIndex);
-  }
-
-  /**
-   * Returns the name of the sequence alignment on which the HMM is based.
-   * 
-   * @return
-   */
-  public String getName()
-  {
-    return fileProperties.get(HMMFile.NAME);
-  }
-  
-  /**
-   * Answers the string value of the property (parsed from an HMM file) for the
-   * given key, or null if the property is not present
-   * 
-   * @param key
-   * @return
-   */
-  public String getProperty(String key)
-  {
-    return fileProperties.get(key);
-  }
-
-  /**
-   * Answers true if the property with the given key is present with a value of
-   * "yes" (not case-sensitive), else false
-   * 
-   * @param key
-   * @return
-   */
-  public boolean getBooleanProperty(String key)
-  {
-    return YES.equalsIgnoreCase(fileProperties.get(key));
-  }
-
-  /**
-   * Returns the length of the hidden Markov model. The value returned is the
-   * LENG property if specified, else the number of nodes, excluding the begin
-   * node (which should be the same thing).
-   * 
-   * @return
-   */
-  public int getLength()
-  {
-    if (fileProperties.get(HMMFile.LENGTH) == null)
-    {
-      return nodes.size() - 1; // not counting BEGIN node
-    }
-    return Integer.parseInt(fileProperties.get(HMMFile.LENGTH));
-  }
-
-  /**
-   * Returns the value of mandatory property "ALPH" - "amino", "DNA", "RNA" are
-   * the options. Other alphabets may be added.
-   * 
-   * @return
-   */
-  public String getAlphabetType()
-  {
-    return fileProperties.get(HMMFile.ALPHABET);
-  }
-
-  /**
-   * Sets the model alphabet to the symbols in the given string (ignoring any
-   * whitespace), and returns the number of symbols
-   * 
-   * @param symbols
-   */
-  public int setAlphabet(String symbols)
-  {
-    String trimmed = symbols.toUpperCase().replaceAll("\\s", "");
-    int count = trimmed.length();
-    alphabet = trimmed;
-    symbolIndexLookup = new int['Z' - 'A' + 1];
-    Arrays.fill(symbolIndexLookup, -1);
-    int ignored = 0;
-
-    /*
-     * save the symbols in order, and a quick lookup of symbol position
-     */
-    for (short i = 0; i < count; i++)
-    {
-      char symbol = trimmed.charAt(i);
-      if (symbol >= 'A' && symbol <= 'Z'
-              && symbolIndexLookup[symbol - 'A'] == -1)
-      {
-        symbolIndexLookup[symbol - 'A'] = i;
-      }
-      else
-      {
-        System.err
-                .println(
-                        "Unexpected or duplicated character in HMM ALPHabet: "
-                                + symbol);
-        ignored++;
-      }
-    }
-    return count - ignored;
-  }
-
-  /**
-   * Answers the node of the model corresponding to an aligned column position
-   * (0...), or null if there is no such node
-   * 
-   * @param column
-   * @return
-   */
-  HMMNode getNodeForColumn(int column)
-  {
-    /*
-     * if the hmm consensus is gapped at the column,
-     * there is no corresponding node
-     */
-    if (Comparison.isGap(hmmSeq.getCharAt(column)))
-    {
-      return null;
-    }
-
-    /*
-     * find the node (if any) that is mapped to the
-     * consensus sequence residue position at the column
-     */
-    int seqPos = hmmSeq.findPosition(column);
-    int[] nodeNo = mapToHmmConsensus.getMap().locateInFrom(seqPos, seqPos);
-    if (nodeNo != null)
-    {
-      return getNode(nodeNo[0]);
-    }
-    return null;
-  }
-
-  /**
-   * Gets the match emission probability for a given symbol at a column in the
-   * alignment.
-   * 
-   * @param alignColumn
-   *          The index of the alignment column, starting at index 0. Index 0
-   *          usually corresponds to index 1 in the HMM.
-   * @param symbol
-   *          The symbol for which the desired probability is being requested.
-   * @return
-   * 
-   */
-  public double getMatchEmissionProbability(int alignColumn, char symbol)
-  {
-    HMMNode node = getNodeForColumn(alignColumn);
-    int symbolIndex = getSymbolIndex(symbol);
-    if (node != null && symbolIndex != -1)
-    {
-      return node.getMatchEmission(symbolIndex);
-    }
-    return 0D;
-  }
-
-  /**
-   * Gets the insert emission probability for a given symbol at a column in the
-   * alignment.
-   * 
-   * @param alignColumn
-   *          The index of the alignment column, starting at index 0. Index 0
-   *          usually corresponds to index 1 in the HMM.
-   * @param symbol
-   *          The symbol for which the desired probability is being requested.
-   * @return
-   * 
-   */
-  public double getInsertEmissionProbability(int alignColumn, char symbol)
-  {
-    HMMNode node = getNodeForColumn(alignColumn);
-    int symbolIndex = getSymbolIndex(symbol);
-    if (node != null && symbolIndex != -1)
-    {
-      return node.getInsertEmission(symbolIndex);
-    }
-    return 0D;
-  }
-  
-  /**
-   * Gets the state transition probability for a given symbol at a column in the
-   * alignment.
-   * 
-   * @param alignColumn
-   *          The index of the alignment column, starting at index 0. Index 0
-   *          usually corresponds to index 1 in the HMM.
-   * @param symbol
-   *          The symbol for which the desired probability is being requested.
-   * @return
-   * 
-   */
-  public double getStateTransitionProbability(int alignColumn,
-          int transition)
-  {
-    HMMNode node = getNodeForColumn(alignColumn);
-    if (node != null)
-    {
-      return node.getStateTransition(transition);
-    }
-    return 0D;
-  }
-  
-  /**
-   * Returns the sequence position linked to the node at the given index. This
-   * corresponds to an aligned column position (counting from 1).
-   * 
-   * @param nodeIndex
-   *          The index of the node, starting from index 1. Index 0 is the begin
-   *          node, which does not correspond to a column in the alignment.
-   * @return
-   */
-  public int getNodeMapPosition(int nodeIndex)
-  {
-    return nodes.get(nodeIndex).getResidueNumber();
-  }
-  
-  /**
-   * Returns the consensus residue at the specified node.
-   * 
-   * @param nodeIndex
-   *          The index of the specified node.
-   * @return
-   */
-  public char getConsensusResidue(int nodeIndex)
-  {
-   char value = nodes.get(nodeIndex).getConsensusResidue();
-   return value;
-  }
-  
-  /**
-   * Returns the reference annotation at the specified node.
-   * 
-   * @param nodeIndex
-   *          The index of the specified node.
-   * @return
-   */
-  public char getReferenceAnnotation(int nodeIndex)
-  {
-   char value = nodes.get(nodeIndex).getReferenceAnnotation();
-   return value;
-  }
-  
-  /**
-   * Returns the mask value at the specified node.
-   * 
-   * @param nodeIndex
-   *          The index of the specified node.
-   * @return
-   */
-  public char getMaskedValue(int nodeIndex)
-  {
-   char value = nodes.get(nodeIndex).getMaskValue();
-   return value;
-  }
-  
-  /**
-   * Returns the consensus structure at the specified node.
-   * 
-   * @param nodeIndex
-   *          The index of the specified node.
-   * @return
-   */
-  public char getConsensusStructure(int nodeIndex)
-  {
-   char value = nodes.get(nodeIndex).getConsensusStructure();
-   return value;
-  }
-  
-  /**
-   * Sets a property read from an HMM file
-   * 
-   * @param key
-   * @param value
-   */
-  public void setProperty(String key, String value)
-  {
-    fileProperties.put(key, value);
-  }
-
-  /**
-   * Temporary implementation, should not be used.
-   * 
-   * @return
-   */
-  public String getViterbi()
-  {
-    String value;
-    value = fileProperties.get(HMMFile.VITERBI);
-    return value;
-  }
-
-  /**
-   * Temporary implementation, should not be used.
-   * 
-   * @return
-   */
-  public String getMSV()
-  {
-    String value;
-    value = fileProperties.get(HMMFile.MSV);
-    return value;
-  }
-
-  /**
-   * Temporary implementation, should not be used.
-   * 
-   * @return
-   */
-  public String getForward()
-  {
-    String value;
-    value = fileProperties.get(HMMFile.FORWARD);
-    return value;
-  }
-
-  /**
-   * Constructs the consensus sequence based on the most probable symbol at each
-   * position. Gap characters are inserted for discontinuities in the node map
-   * numbering (if provided), else an ungapped sequence is generated.
-   * <p>
-   * A mapping between the HMM nodes and residue positions of the sequence is
-   * also built and saved.
-   * 
-   * @return
-   */
-  void buildConsensusSequence()
-  {
-    List<int[]> toResidues = new ArrayList<>();
-
-    /*
-     * if the HMM provided a map to sequence, use those start/end values,
-     * else just treat it as for a contiguous sequence numbered from 1
-     */
-    boolean hasMap = getBooleanProperty(HMMFile.MAP);
-    int start = hasMap ? getNode(1).getResidueNumber() : 1;
-    int endResNo = hasMap ? getNode(nodes.size() - 1).getResidueNumber()
-            : (start + getLength() - 1);
-    char[] sequence = new char[endResNo - start + 1];
-
-    int lastResNo = start - 1;
-    int seqOffset = 0;
-    int gapCount = 0;
-
-    for (int nodeNo = 1; nodeNo < nodes.size(); nodeNo++)
-    {
-      HMMNode node = nodes.get(nodeNo);
-      final int resNo = hasMap ? node.getResidueNumber() : lastResNo + 1;
-
-      /*
-       * insert gaps if map numbering is not continuous
-       */
-      while (resNo > lastResNo + 1)
-      {
-        sequence[seqOffset++] = '-';
-        lastResNo++;
-        gapCount++;
-      }
-      char consensusResidue = node.getConsensusResidue();
-      if (GAP_DASH == consensusResidue)
-      {
-        /*
-         * no residue annotation in HMM - scan for the symbol
-         * with the highest match emission probability
-         */
-        int symbolIndex = node.getMaxMatchEmissionIndex();
-        consensusResidue = alphabet.charAt(symbolIndex);
-        if (node.getMatchEmission(symbolIndex) < 0.5D)
-        {
-          // follow convention of lower case if match emission prob < 0.5
-          consensusResidue = Character.toLowerCase(consensusResidue);
-        }
-      }
-      sequence[seqOffset++] = consensusResidue;
-      lastResNo = resNo;
-    }
-
-    Sequence seq = new Sequence(getName(), sequence, start,
-            lastResNo - gapCount);
-    seq.createDatasetSequence();
-    seq.setHMM(this);
-    this.hmmSeq = seq;
-
-    /*
-     * construct and store Mapping of nodes to residues
-     * note as constructed this is just an identity mapping, 
-     * but it allows for greater flexibility in future
-     */
-    List<int[]> fromNodes = new ArrayList<>();
-    fromNodes.add(new int[] { 1, getLength() });
-    toResidues.add(new int[] { seq.getStart(), seq.getEnd() });
-    MapList mapList = new MapList(fromNodes, toResidues, 1, 1);
-    mapToHmmConsensus = new Mapping(seq.getDatasetSequence(), mapList);
-  }
-
-
-  /**
-   * Answers the aligned consensus sequence for the profile. Note this will
-   * return null if called before <code>setNodes</code> has been called.
-   * 
-   * @return
-   */
-  public SequenceI getConsensusSequence()
-  {
-    return hmmSeq;
-  }
-
-  /**
-   * Answers the index position (0...) of the given symbol, or -1 if not a valid
-   * symbol for this HMM
-   * 
-   * @param symbol
-   * @return
-   */
-  private int getSymbolIndex(char symbol)
-  {
-    /*
-     * symbolIndexLookup holds the index for 'A' to 'Z'
-     */
-    char c = Character.toUpperCase(symbol);
-    if ('A' <= c && c <= 'Z')
-    {
-      return symbolIndexLookup[c - 'A'];
-    }
-    return -1;
-  }
-
-  /**
-   * Sets the nodes of this HMM, and also extracts the HMM consensus sequence
-   * and a mapping between node numbers and sequence positions
-   * 
-   * @param nodeList
-   */
-  public void setNodes(List<HMMNode> nodeList)
-  {
-    nodes = nodeList;
-    if (nodes.size() > 1)
-    {
-      buildConsensusSequence();
-    }
-  }
-
-  /**
-   * Sets the aligned consensus sequence this HMM is the model for
-   * 
-   * @param hmmSeq
-   */
-  public void setHmmSeq(SequenceI hmmSeq)
-  {
-    this.hmmSeq = hmmSeq;
-  }
-}
-
diff --git a/src/jalview/gui/DasSourceBrowser.java b/src/jalview/gui/DasSourceBrowser.java
deleted file mode 100644 (file)
index 8570ac3..0000000
+++ /dev/null
@@ -1,864 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.gui;
-
-import jalview.jbgui.GDasSourceBrowser;
-import jalview.util.MessageManager;
-import jalview.util.TableSorter;
-import jalview.ws.dbsources.das.api.DasSourceRegistryI;
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-
-import java.awt.BorderLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import javax.swing.JCheckBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
-import javax.swing.SwingUtilities;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.table.AbstractTableModel;
-
-import org.biodas.jdas.schema.sources.CAPABILITY;
-import org.biodas.jdas.schema.sources.COORDINATES;
-import org.biodas.jdas.schema.sources.PROP;
-import org.biodas.jdas.schema.sources.VERSION;
-
-public class DasSourceBrowser extends GDasSourceBrowser
-        implements Runnable, ListSelectionListener
-{
-  DasSourceRegistryI sourceRegistry = null;
-
-  Vector<String> selectedSources;
-
-  public DasSourceBrowser(FeatureSettings featureSettings)
-  {
-    fs = featureSettings;
-    // TODO DasSourceRegistryProvider API
-    sourceRegistry = jalview.bin.Cache.getDasSourceRegistry();
-    String registry = sourceRegistry.getDasRegistryURL();
-
-    registryURL.setText(registry);
-
-    setSelectedFromProperties();
-
-    displayFullDetails(null);
-    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
-    filter1.addListSelectionListener(this);
-    filter2.addListSelectionListener(this);
-    filter3.addListSelectionListener(this);
-
-    // Ask to be notified of selection changes.
-    ListSelectionModel rowSM = table.getSelectionModel();
-    rowSM.addListSelectionListener(new ListSelectionListener()
-    {
-      @Override
-      public void valueChanged(ListSelectionEvent e)
-      {
-        ListSelectionModel lsm = (ListSelectionModel) e.getSource();
-        if (!lsm.isSelectionEmpty())
-        {
-          int selectedRow = lsm.getMinSelectionIndex();
-          displayFullDetails(table.getValueAt(selectedRow, 0).toString());
-        }
-      }
-    });
-
-    table.addMouseListener(new MouseAdapter()
-    {
-      @Override
-      public void mouseClicked(MouseEvent evt)
-      {
-        if (evt.getClickCount() == 2 || evt.isPopupTrigger())
-        {
-          editRemoveLocalSource(evt);
-        }
-      }
-    });
-
-    if (sourceRegistry.getSources() != null)
-    {
-      init();
-    }
-  }
-
-  FeatureSettings fs = null;
-
-  private boolean loadingDasSources;
-
-  public DasSourceBrowser()
-  {
-    this(null);
-  }
-
-  @Override
-  public void paintComponent(java.awt.Graphics g)
-  {
-    if (sourceRegistry == null)
-    {
-      Thread worker = new Thread(this);
-      worker.start();
-    }
-  }
-
-  void init()
-  {
-    List<jalviewSourceI> sources = sourceRegistry.getSources();
-    int dSize = sources.size();
-    Object[][] data = new Object[dSize][2];
-    for (int i = 0; i < dSize; i++)
-    {
-      data[i][0] = sources.get(i).getTitle(); // what's equivalent of nickname
-      data[i][1] = new Boolean(
-              selectedSources.contains(sources.get(i).getTitle()));
-    }
-
-    refreshTableData(data);
-    setCapabilities(sourceRegistry);
-
-    javax.swing.SwingUtilities.invokeLater(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        TableSorter sorter = (TableSorter) table.getModel();
-        sorter.setSortingStatus(1, TableSorter.DESCENDING);
-        sorter.setSortingStatus(1, TableSorter.NOT_SORTED);
-      }
-    });
-
-    progressBar.setIndeterminate(false);
-    progressBar.setVisible(false);
-    addLocal.setVisible(true);
-    refresh.setVisible(true);
-  }
-
-  public void refreshTableData(Object[][] data)
-  {
-    TableSorter sorter = new TableSorter(new DASTableModel(data));
-    sorter.setTableHeader(table.getTableHeader());
-    table.setModel(sorter);
-  }
-
-  void displayFullDetails(String nickName)
-  {
-
-    StringBuffer text = new StringBuffer(
-            "<HTML><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\">");
-
-    if (nickName == null)
-    {
-      fullDetails.setText(text + MessageManager
-              .getString("label.select_das_service_from_table"));
-      return;
-    }
-
-    int dSize = sourceRegistry.getSources().size();
-    for (jalviewSourceI ds : sourceRegistry.getSources())
-    {
-      if (!ds.getTitle().equals(nickName))
-      {
-        continue;
-      }
-
-      VERSION latest = ds.getVersion();
-      text.append(
-              "<font color=\"#0000FF\">Id:</font> " + ds.getUri() + "<br>");
-      text.append("<font color=\"#0000FF\">Nickname:</font> "
-              + ds.getTitle() + "<br>");
-
-      text.append("<font color=\"#0000FF\">URL:</font> <a href=\""
-              + ds.getSourceURL() + "\">" + ds.getSourceURL() + "</a>"
-              + "<br>");
-      if (!ds.isLocal())
-      {
-        if (ds.getDocHref() != null && ds.getDocHref().length() > 0)
-        {
-          text.append("<font color=\"#0000FF\">Site:</font> <a href=\""
-                  + ds.getDocHref() + "\">" + ds.getDocHref() + "</a>"
-                  + "<br>");
-        }
-
-        text.append("<font color=\"#0000FF\">Description:</font> "
-                + ds.getDescription() + "<br>");
-
-        text.append(
-                "<font color=\"#0000FF\">Admin Email:</font> <a href=\"mailto:"
-                        + ds.getEmail() + "\">" + ds.getEmail() + "</a>"
-                        + "<br>");
-
-        text.append("<font color=\"#0000FF\">Registered at:</font> "
-                + latest.getCreated() + "<br>");
-
-        // TODO: Identify last successful test date
-        // text.append("<font color=\"#0000FF\">Last successful test:</font> "
-        // + latest.dasSources[i].getLeaseDate() + "<br>");
-      }
-      else
-      {
-        text.append("Source was added manually.<br/>");
-      }
-      text.append("<font color=\"#0000FF\">Labels:</font> ");
-      boolean b = false;
-      for (PROP labl : latest.getPROP())
-      {
-        if (labl.getName().equalsIgnoreCase("LABEL"))
-        {
-          if (b)
-          {
-            text.append(",");
-          }
-          text.append(" ");
-
-          text.append(labl.getValue());
-          b = true;
-        }
-        ;
-      }
-      text.append("<br>");
-
-      text.append("<font color=\"#0000FF\">Capabilities:</font> ");
-      CAPABILITY[] scap = latest.getCAPABILITY().toArray(new CAPABILITY[0]);
-      for (int j = 0; j < scap.length; j++)
-      {
-        text.append(scap[j].getType());
-        if (j < scap.length - 1)
-        {
-          text.append(", ");
-        }
-      }
-      text.append("<br>");
-
-      text.append("<font color=\"#0000FF\">Coordinates:</font>");
-      int i = 1;
-      for (COORDINATES dcs : latest.getCOORDINATES())
-      {
-        text.append("<br/>" + i++ + ". ");
-        text.append(dcs.getAuthority() + " : " + dcs.getSource());
-        if (dcs.getTaxid() != null && dcs.getTaxid().trim().length() > 0)
-        {
-          text.append(" [TaxId:" + dcs.getTaxid() + "]");
-        }
-        if (dcs.getVersion() != null
-                && dcs.getVersion().trim().length() > 0)
-        {
-          {
-            text.append(" {v. " + dcs.getVersion() + "}");
-          }
-        }
-        text.append(" (<a href=\"" + dcs.getUri() + "\">" + dcs.getUri()
-                + "</a>)");
-      }
-      text.append("</font></html>");
-
-      break;
-    }
-
-    fullDetails.setText(text.toString());
-    javax.swing.SwingUtilities.invokeLater(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        fullDetailsScrollpane.getVerticalScrollBar().setValue(0);
-      }
-    });
-  }
-
-  @Override
-  public void run()
-  {
-    loadingDasSources = true;
-
-    addLocal.setVisible(false);
-    refresh.setVisible(false);
-    progressBar.setVisible(true);
-    progressBar.setIndeterminate(true);
-    setParentGuiEnabled(false);
-    // Refresh the source list.
-    sourceRegistry.refreshSources();
-
-    init();
-
-    setParentGuiEnabled(true);
-    loadingDasSources = false;
-
-  }
-
-  private void setParentGuiEnabled(boolean b)
-  {
-    if (fs != null)
-    {
-      fs.fetchDAS.setEnabled(b);
-      fs.saveDAS.setEnabled(b);
-    }
-  }
-
-  public Vector<jalviewSourceI> getSelectedSources()
-  {
-    // wait around if we're still loading.
-    while (sourceRegistry == null)
-    {
-      if (!loadingDasSources)
-      {
-        new Thread(this).start();
-        try
-        {
-          Thread.sleep(5);
-        } catch (Exception e)
-        {
-        }
-        ;
-        while (loadingDasSources)
-        {
-          try
-          {
-            Thread.sleep(5);
-          } catch (Exception e)
-          {
-          }
-          ;
-        }
-        ;
-      }
-    }
-
-    Vector<jalviewSourceI> selected = new Vector<jalviewSourceI>();
-    for (String source : selectedSources)
-    {
-      jalviewSourceI srce = sourceRegistry.getSource(source);
-      if (srce != null)
-      {
-        selected.addElement(srce);
-      }
-    }
-    return selected;
-  }
-
-  @Override
-  public void refresh_actionPerformed(ActionEvent e)
-  {
-    saveProperties(jalview.bin.Cache.applicationProperties);
-
-    Thread worker = new Thread(this);
-    worker.start();
-  }
-
-  private void setCapabilities(DasSourceRegistryI sourceRegistry2)
-  {
-    Vector<String> authority = new Vector<String>();
-    Vector<String> type = new Vector<String>();
-    Vector<String> label = new Vector<String>();
-    Vector<String> taxIds = new Vector<String>();
-    authority.add("Any");
-    type.add("Any");
-    label.add("Any");
-
-    for (jalviewSourceI ds : sourceRegistry2.getSources())
-    {
-      VERSION latest = ds.getVersion();
-
-      for (COORDINATES cs : latest.getCOORDINATES())
-      {
-        if (!type.contains(cs.getSource()))
-        {
-          type.add(cs.getSource()); // source==category
-        }
-
-        if (!authority.contains(cs.getAuthority()))
-        {
-          authority.add(cs.getAuthority());
-        }
-      }
-
-      for (PROP slabel : latest.getPROP())
-      {
-        if (slabel.getName().equalsIgnoreCase("LABEL")
-                && !label.contains(slabel.getValue()))
-        {
-          label.add(slabel.getValue());
-        }
-      }
-
-    }
-
-    filter1.setListData(authority);
-    filter2.setListData(type);
-    filter3.setListData(label);
-    // filter4 taxIds
-
-    javax.swing.SwingUtilities.invokeLater(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        filter1.setSelectedIndex(0);
-        filter2.setSelectedIndex(0);
-        filter3.setSelectedIndex(0);
-      }
-    });
-  }
-
-  @Override
-  public void amendLocal(boolean newSource)
-  {
-    String url = "http://localhost:8080/", nickname = "";
-    boolean seqsrc = false;
-    if (!newSource)
-    {
-      int selectedRow = table.getSelectionModel().getMinSelectionIndex();
-      nickname = table.getValueAt(selectedRow, 0).toString();
-      jalviewSourceI source = sourceRegistry.getSource(nickname);
-      url = source.getUri();
-      seqsrc = source.isSequenceSource();
-    }
-
-    JTextField nametf = new JTextField(nickname, 40);
-    JTextField urltf = new JTextField(url, 40);
-    JCheckBox seqs = new JCheckBox(
-            MessageManager.getString("label.sequence_source"));
-    seqs.setSelected(seqsrc);
-    JPanel panel = new JPanel(new BorderLayout());
-    JPanel pane12 = new JPanel(new BorderLayout());
-    pane12.add(new JLabel(MessageManager.getString("label.name:")),
-            BorderLayout.CENTER);
-    pane12.add(nametf, BorderLayout.EAST);
-    panel.add(pane12, BorderLayout.NORTH);
-    pane12 = new JPanel(new BorderLayout());
-    pane12.add(new JLabel(MessageManager.getString("label.url:")),
-            BorderLayout.NORTH);
-    pane12.add(seqs, BorderLayout.SOUTH);
-    pane12.add(urltf, BorderLayout.EAST);
-    panel.add(pane12, BorderLayout.SOUTH);
-
-    int reply = JvOptionPane.showInternalConfirmDialog(Desktop.desktop,
-            panel, MessageManager.getString("label.enter_local_das_source"),
-            JvOptionPane.OK_CANCEL_OPTION);
-
-    if (reply != JvOptionPane.OK_OPTION)
-    {
-      return;
-    }
-
-    if (!urltf.getText().endsWith("/"))
-    {
-      urltf.setText(urltf.getText() + "/");
-    }
-
-    jalviewSourceI local = sourceRegistry.createLocalSource(urltf.getText(),
-            nametf.getText(), seqs.isSelected(), true);
-    List sources = sourceRegistry.getSources();
-    int osize = sources.size();
-    int size = osize + (newSource ? 1 : 0);
-
-    Object[][] data = new Object[size][2];
-    DASTableModel dtm = (table != null)
-            ? (DASTableModel) ((TableSorter) table.getModel())
-                    .getTableModel()
-            : null;
-    for (int i = 0; i < osize; i++)
-    {
-      String osrc = (dtm == null || i >= osize) ? null
-              : (String) dtm.getValueAt(i, 0);
-      if (!newSource && osrc != null
-              && dtm.getValueAt(i, 0).equals(nickname))
-      {
-        data[i][0] = local.getTitle();
-        data[i][1] = new Boolean(true);
-      }
-      else
-      {
-        data[i][0] = osrc;
-        data[i][1] = new Boolean(selectedSources.contains(osrc));
-      }
-    }
-    // Always add a new source at the end
-    if (newSource)
-    {
-      data[osize][0] = local.getTitle();
-      data[osize][1] = new Boolean(true);
-      selectedSources.add(local.getTitle());
-    }
-
-    refreshTableData(data);
-
-    SwingUtilities.invokeLater(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        scrollPane.getVerticalScrollBar()
-                .setValue(scrollPane.getVerticalScrollBar().getMaximum());
-      }
-    });
-
-    displayFullDetails(local.getTitle());
-  }
-
-  public void editRemoveLocalSource(MouseEvent evt)
-  {
-    int selectedRow = table.getSelectionModel().getMinSelectionIndex();
-    if (selectedRow == -1)
-    {
-      return;
-    }
-
-    String nickname = table.getValueAt(selectedRow, 0).toString();
-
-    if (!sourceRegistry.getSource(nickname).isLocal())
-    {
-      JvOptionPane.showInternalMessageDialog(Desktop.desktop,
-              MessageManager.getString(
-                      "label.you_can_only_edit_or_remove_local_das_sources"),
-              MessageManager.getString("label.public_das_source"),
-              JvOptionPane.WARNING_MESSAGE);
-      return;
-    }
-
-    Object[] options = { "Edit", "Remove", "Cancel" };
-    int choice = JvOptionPane.showInternalOptionDialog(Desktop.desktop,
-            "Do you want to edit or remove " + nickname + "?",
-            "Edit / Remove Local DAS Source",
-            JvOptionPane.YES_NO_CANCEL_OPTION,
-            JvOptionPane.QUESTION_MESSAGE, null, options, options[2]);
-
-    switch (choice)
-    {
-    case 0:
-      amendLocal(false);
-      break;
-    case 1:
-      sourceRegistry.removeLocalSource(sourceRegistry.getSource(nickname));
-      selectedSources.remove(nickname);
-      Object[][] data = new Object[sourceRegistry.getSources().size()][2];
-      int index = 0, l = table.getRowCount();
-
-      for (int i = 0; i < l; i++)
-      {
-        String nm;
-        if ((nm = (String) table.getValueAt(i, 0)).equals(nickname))
-        {
-          continue;
-        }
-        else
-        {
-          data[index][0] = nm;
-          data[index][1] = new Boolean(selectedSources.contains(nm));
-          index++;
-        }
-      }
-      refreshTableData(data);
-      SwingUtilities.invokeLater(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          scrollPane.getVerticalScrollBar()
-                  .setValue(scrollPane.getVerticalScrollBar().getMaximum());
-        }
-      });
-
-      break;
-    }
-  }
-
-  @Override
-  public void valueChanged(ListSelectionEvent evt)
-  {
-    // Called when the MainTable selection changes
-    if (evt.getValueIsAdjusting())
-    {
-      return;
-    }
-
-    displayFullDetails(null);
-
-    // Filter the displayed data sources
-
-    ArrayList names = new ArrayList();
-    ArrayList selected = new ArrayList();
-
-    // The features filter is not visible, but we must still
-    // filter the das source list here.
-    // July 2006 - only 6 sources fo not serve features
-    Object[] dummyFeatureList = new Object[] { "features" };
-    List<jalviewSourceI> srcs = sourceRegistry.getSources();
-    for (jalviewSourceI ds : srcs)
-    {
-
-      VERSION v = ds.getVersion();
-      List<COORDINATES> coords = v.getCOORDINATES();
-      if (ds.isLocal() || ((coords == null || coords.size() == 0)
-              && filter1.getSelectedIndex() == 0
-              && filter2.getSelectedIndex() == 0
-              && filter3.getSelectedIndex() == 0))
-      {
-        // THIS IS A FIX FOR LOCAL SOURCES WHICH DO NOT
-        // HAVE COORDINATE SYSTEMS, INFO WHICH AT PRESENT
-        // IS ADDED FROM THE REGISTRY
-        names.add(ds.getTitle());
-        selected.add(new Boolean(selectedSources.contains(ds.getTitle())));
-        continue;
-      }
-
-      if (!selectedInList(dummyFeatureList, ds.getCapabilityList(v))
-              || !selectedInList(filter3.getSelectedValues(),
-                      ds.getLabelsFor(v)))
-      {
-        continue;
-      }
-
-      for (int j = 0; j < coords.size(); j++)
-      {
-        if (selectedInList(filter1.getSelectedValues(),
-                new String[]
-                { coords.get(j).getAuthority() })
-                && selectedInList(filter2.getSelectedValues(), new String[]
-                { coords.get(j).getSource() }))
-        {
-          names.add(ds.getTitle());
-          selected.add(
-                  new Boolean(selectedSources.contains(ds.getTitle())));
-          break;
-        }
-      }
-    }
-
-    int dSize = names.size();
-    Object[][] data = new Object[dSize][2];
-    for (int d = 0; d < dSize; d++)
-    {
-      data[d][0] = names.get(d);
-      data[d][1] = selected.get(d);
-    }
-
-    refreshTableData(data);
-  }
-
-  private boolean selectedInList(Object[] selection, String[] items)
-  {
-    for (int i = 0; i < selection.length; i++)
-    {
-      if (selection[i].equals("Any"))
-      {
-        return true;
-      }
-      if (items == null || items.length == 0)
-      {
-        return false;
-      }
-      String sel = (items[0].startsWith("das1:") ? "das1:" : "")
-              + selection[i];
-      for (int j = 0; j < items.length; j++)
-      {
-        if (sel.equals(items[j]))
-        {
-          return true;
-        }
-      }
-    }
-
-    return false;
-  }
-
-  void setSelectedFromProperties()
-  {
-    String active = jalview.bin.Cache.getDefault("DAS_ACTIVE_SOURCE",
-            "uniprot");
-    StringTokenizer st = new StringTokenizer(active, "\t");
-    selectedSources = new Vector();
-    while (st.hasMoreTokens())
-    {
-      selectedSources.addElement(st.nextToken());
-    }
-  }
-
-  @Override
-  public void reset_actionPerformed(ActionEvent e)
-  {
-    registryURL.setText(sourceRegistry.getDasRegistryURL());
-  }
-
-  /**
-   * set the DAS source settings in the given jalview properties.
-   * 
-   * @param properties
-   */
-  public void saveProperties(Properties properties)
-  {
-    if (registryURL.getText() == null || registryURL.getText().length() < 1)
-    {
-      properties.remove(jalview.bin.Cache.DAS_REGISTRY_URL);
-    }
-    else
-    {
-      properties.setProperty(jalview.bin.Cache.DAS_REGISTRY_URL,
-              registryURL.getText());
-    }
-
-    StringBuffer sb = new StringBuffer();
-    for (int r = 0; r < table.getModel().getRowCount(); r++)
-    {
-      if (((Boolean) table.getValueAt(r, 1)).booleanValue())
-      {
-        sb.append(table.getValueAt(r, 0) + "\t");
-      }
-    }
-
-    properties.setProperty(jalview.bin.Cache.DAS_ACTIVE_SOURCE,
-            sb.toString());
-
-    String sourceprop = sourceRegistry.getLocalSourceString();
-    properties.setProperty(jalview.bin.Cache.DAS_LOCAL_SOURCE, sourceprop);
-  }
-
-  class DASTableModel extends AbstractTableModel
-  {
-
-    public DASTableModel(Object[][] data)
-    {
-      this.data = data;
-    }
-
-    private String[] columnNames = new String[] {
-        MessageManager.getString("label.nickname"),
-        MessageManager.getString("label.use_source") };
-
-    private Object[][] data;
-
-    @Override
-    public int getColumnCount()
-    {
-      return columnNames.length;
-    }
-
-    @Override
-    public int getRowCount()
-    {
-      return data.length;
-    }
-
-    @Override
-    public String getColumnName(int col)
-    {
-      return columnNames[col];
-    }
-
-    @Override
-    public Object getValueAt(int row, int col)
-    {
-      return data[row][col];
-    }
-
-    /*
-     * JTable uses this method to determine the default renderer/ editor for
-     * each cell. If we didn't implement this method, then the last column would
-     * contain text ("true"/"false"), rather than a check box.
-     */
-    @Override
-    public Class getColumnClass(int c)
-    {
-      return getValueAt(0, c).getClass();
-    }
-
-    /*
-     * Don't need to implement this method unless your table's editable.
-     */
-    @Override
-    public boolean isCellEditable(int row, int col)
-    {
-      // Note that the data/cell address is constant,
-      // no matter where the cell appears onscreen.
-      return col == 1;
-
-    }
-
-    /*
-     * Don't need to implement this method unless your table's data can change.
-     */
-    @Override
-    public void setValueAt(Object value, int row, int col)
-    {
-      data[row][col] = value;
-      fireTableCellUpdated(row, col);
-
-      String name = getValueAt(row, 0).toString();
-      boolean selected = ((Boolean) value).booleanValue();
-
-      if (selectedSources.contains(name) && !selected)
-      {
-        selectedSources.remove(name);
-      }
-
-      if (!selectedSources.contains(name) && selected)
-      {
-        selectedSources.add(name);
-      }
-    }
-  }
-
-  public void initDasSources()
-  {
-
-    Thread thr = new Thread(new Runnable()
-    {
-      @Override
-      public void run()
-      {
-        // this actually initialises the das source list
-        paintComponent(null); // yuk
-      }
-    });
-    thr.start();
-    while (loadingDasSources || sourceRegistry == null)
-    {
-      try
-      {
-        Thread.sleep(10);
-      } catch (Exception e)
-      {
-      }
-      ;
-    }
-  }
-
-  /**
-   * disable or enable the buttons on the source browser
-   * 
-   * @param b
-   */
-  public void setGuiEnabled(boolean b)
-  {
-    refresh.setEnabled(b);
-    addLocal.setEnabled(b);
-  }
-}
diff --git a/src/jalview/hmmer/HMMAlign.java b/src/jalview/hmmer/HMMAlign.java
deleted file mode 100644 (file)
index b5f047e..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-package jalview.hmmer;
-
-import jalview.analysis.AlignmentSorter;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AlignmentOrder;
-import jalview.datamodel.AlignmentView;
-import jalview.datamodel.HiddenColumns;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.gui.JvOptionPane;
-import jalview.gui.SplitFrame;
-import jalview.io.DataSourceType;
-import jalview.io.StockholmFile;
-import jalview.util.FileUtils;
-import jalview.util.MessageManager;
-import jalview.viewmodel.seqfeatures.FeatureRendererSettings;
-import jalview.ws.params.ArgumentI;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import javax.swing.JInternalFrame;
-
-public class HMMAlign extends HmmerCommand
-{
-  static final String HMMALIGN = "hmmalign";
-
-  static final String ARG_TRIM = "--trim";
-
-  private final AlignmentI dataset;
-
-  /**
-   * Constructor for the HMMAlignThread
-   * 
-   * @param af
-   * @param args
-   */
-  public HMMAlign(AlignFrame af, List<ArgumentI> args)
-  {
-    super(af, args);
-    if (alignment.getDataset() != null)
-    {
-      dataset = alignment.getDataset();
-    }
-    else
-    {
-      dataset = null;
-    }
-  }
-
-  /**
-   * Runs the HMMAlignThread: the data on the alignment or group is exported,
-   * then the command is executed in the command line and then the data is
-   * imported and displayed in a new frame (if true). The command is executed
-   * for each segment of the alignment. Call this method directly to execute
-   * synchronously, or via start() in a new Thread for asynchronously.
-   */
-  @Override
-  public void run()
-  {
-    HiddenMarkovModel hmm = getHmmProfile();
-
-    long msgId = System.currentTimeMillis();
-    af.setProgressBar(MessageManager.getString("status.running_hmmalign"),
-            msgId);
-
-    AlignmentView msa = af.gatherSequencesForAlignment();
-    SequenceI[][] subAlignments = msa.getVisibleContigs(alignment.getGapCharacter());
-
-    List<AlignmentOrder> allOrders = new ArrayList<>();
-
-    SequenceI[][] allResults = new SequenceI[subAlignments.length][];
-    int job = 0;
-    for (SequenceI[] seqs : subAlignments)
-    {
-      Hashtable sequencesHash = stashSequences(seqs);
-      try
-      {
-        File modelFile = FileUtils.createTempFile("hmm", ".hmm");
-        File alignmentFile = FileUtils.createTempFile("output", ".sto");
-        File resultFile = FileUtils.createTempFile("input", ".sto");
-
-        exportStockholm(seqs, alignmentFile.getAbsoluteFile(), null);
-        exportHmm(hmm, modelFile.getAbsoluteFile());
-
-        boolean ran = runCommand(modelFile, alignmentFile, resultFile);
-        if (!ran)
-        {
-          JvOptionPane.showInternalMessageDialog(af, MessageManager
-                  .formatMessage("warn.command_failed", "hmmalign"));
-          return;
-        }
-
-        SequenceI[] result = importData(resultFile, allOrders);
-        recoverSequences(sequencesHash, result);
-        allResults[job] = result;
-        modelFile.delete();
-        alignmentFile.delete();
-        resultFile.delete();
-      } catch (IOException e)
-      {
-        e.printStackTrace();
-      }
-      job++;
-    }
-
-    String title = "hmmalign to " + hmm.getConsensusSequence().getName();
-    displayResults(allResults, allOrders, msa, title);
-
-    af.setProgressBar("", msgId);
-  }
-
-  /**
-   * Executes the hmmalign command and returns true if successful, false if an
-   * error is detected
-   * 
-   * @param modelFile
-   *          the HMM to align to
-   * @param alignmentFile
-   *          the sequences to align
-   * @param resultFile
-   *          the file to hold the results of alignment
-   * @return
-   * @throws IOException
-   */
-  private boolean runCommand(File modelFile, File alignmentFile,
-          File resultFile) throws IOException
-  {
-    String command = getCommandPath(HMMALIGN);
-    if (command == null)
-    {
-      return false;
-    }
-    List<String> args = new ArrayList<>();
-    args.add(command);
-
-    if (params != null)
-    {
-      for (ArgumentI arg : params)
-      {
-        String name = arg.getName();
-        if (MessageManager.getString("label.trim_termini").equals(name))
-        {
-          args.add(ARG_TRIM);
-        }
-      }
-    }
-    args.add("-o");
-    args.add(getFilePath(resultFile));
-    args.add(getFilePath(modelFile));
-    args.add(getFilePath(alignmentFile));
-    
-    return runCommand(args);
-  }
-
-  /**
-   * Imports the data from the file holding the output of hmmalign
-   * 
-   * @param resultFile
-   * @param allOrders
-   *          a list of alignment orders to add to
-   * 
-   * @return
-   * @throws IOException
-   */
-  private SequenceI[] importData(File resultFile,
-          List<AlignmentOrder> allOrders) throws IOException
-  {
-    StockholmFile file = new StockholmFile(getFilePath(resultFile),
-            DataSourceType.FILE);
-    SequenceI[] result = file.getSeqsAsArray();
-    AlignmentOrder msaorder = new AlignmentOrder(result);
-    AlignmentSorter.recoverOrder(result);
-    allOrders.add(msaorder);
-
-    return result;
-  }
-
-  /**
-   * Displays the results of all 'jobs' in a new frame
-   * 
-   * @param allResults
-   * 
-   * @param allOrders
-   * @param msa
-   * @param title
-   */
-  private void displayResults(SequenceI[][] allResults,
-          List<AlignmentOrder> allOrders, AlignmentView msa, String title)
-  {
-    AlignmentOrder[] arrOrders = allOrders
-            .toArray(new AlignmentOrder[allOrders.size()]);
-    Object[] newview = msa.getUpdatedView(allResults, arrOrders,
-            alignment.getGapCharacter());
-    SequenceI[] seqs = (SequenceI[]) newview[0];
-    HiddenColumns hidden = (HiddenColumns) newview[1];
-    Alignment al = new Alignment(seqs);
-    al.setProperty("Alignment Program", "hmmalign");
-    if (dataset != null)
-    {
-      al.setDataset(dataset);
-    }
-
-    displayInNewFrame(al, allOrders, hidden, title);
-  }
-
-  /**
-   * Displays the results in a new frame
-   * 
-   * @param al
-   *          The alignment containing the results
-   * @param alorders
-   *          The order of the sequences in the alignment on which the jobs were
-   *          run
-   * @param hidden
-   *          Hidden columns in the previous alignment
-   * @param title
-   */
-  private void displayInNewFrame(AlignmentI al,
-          List<AlignmentOrder> alorders, HiddenColumns hidden, String title)
-  {
-    AlignFrame alignFrame = new AlignFrame(al, hidden, AlignFrame.DEFAULT_WIDTH,
-            AlignFrame.DEFAULT_HEIGHT);
-    alignFrame.setTitle(title);
-
-    FeatureRendererSettings featureSettings = af.getFeatureRenderer()
-            .getSettings();
-    // initialise with same renderer settings as in parent alignframe.
-    alignFrame.getFeatureRenderer().transferSettings(featureSettings);
-
-    addSortByMenuItems(alignFrame, alorders);
-
-    // TODO: refactor retrieve and show as new splitFrame as Desktop method
-
-    /*
-     * If alignment was requested from one half of a SplitFrame, show in a
-     * SplitFrame with the other pane similarly aligned.
-     */
-    AlignFrame requestedBy = this.af;
-    if (requestedBy != null && requestedBy.getSplitViewContainer() != null
-            && requestedBy.getSplitViewContainer()
-                    .getComplement(requestedBy) != null)
-    {
-      AlignmentI complement = requestedBy.getSplitViewContainer()
-              .getComplement(requestedBy);
-      String complementTitle = requestedBy.getSplitViewContainer()
-              .getComplementTitle(requestedBy);
-      // becomes null if the alignment window was closed before the alignment
-      // job finished.
-      AlignmentI copyComplement = new Alignment(complement);
-      // todo should this be done by copy constructor?
-      copyComplement.setGapCharacter(complement.getGapCharacter());
-      // share the same dataset (and the mappings it holds)
-      copyComplement.setDataset(complement.getDataset());
-      copyComplement.alignAs(al);
-      if (copyComplement.getHeight() > 0)
-      {
-        alignFrame.setTitle(this.af.getTitle());
-        AlignFrame af2 = new AlignFrame(copyComplement,
-                AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
-        af2.setTitle(complementTitle);
-        String linkedTitle = MessageManager
-                .getString("label.linked_view_title");
-        JInternalFrame splitFrame = new SplitFrame(
-                al.isNucleotide() ? alignFrame : af2, al.isNucleotide() ? af2 : alignFrame);
-        Desktop.addInternalFrame(splitFrame, linkedTitle, -1, -1);
-        return;
-      }
-    }
-
-    /*
-     * Not from SplitFrame, or failed to created a complementary alignment
-     */
-    Desktop.addInternalFrame(alignFrame, alignFrame.getTitle(), AlignFrame.DEFAULT_WIDTH,
-            AlignFrame.DEFAULT_HEIGHT);
-  }
-
-  /**
-   * Adds sort order options to the AlignFrame menus
-   * 
-   * @param alignFrame
-   * @param alorders
-   */
-  protected void addSortByMenuItems(AlignFrame alignFrame,
-          List<AlignmentOrder> alorders)
-  {
-    // update orders
-    if (alorders.size() == 1)
-    {
-      alignFrame.addSortByOrderMenuItem("hmmalign" + " Ordering", alorders.get(0));
-    }
-    else
-    {
-      // construct a non-redundant ordering set
-      List<String> names = new ArrayList<>();
-      for (int i = 0, l = alorders.size(); i < l; i++)
-      {
-        String orderName = " Region " + i;
-        int j = i + 1;
-
-        while (j < l)
-        {
-          if (alorders.get(i).equals(alorders.get(j)))
-          {
-            alorders.remove(j);
-            l--;
-            orderName += "," + j;
-          }
-          else
-          {
-            j++;
-          }
-        }
-
-        if (i == 0 && j == 1)
-        {
-          names.add("");
-        }
-        else
-        {
-          names.add(orderName);
-        }
-      }
-      for (int i = 0, l = alorders.size(); i < l; i++)
-      {
-        alignFrame.addSortByOrderMenuItem("hmmalign" + (names.get(i)) + " Ordering",
-                alorders.get(i));
-      }
-    }
-  }
-}
diff --git a/src/jalview/hmmer/HMMBuild.java b/src/jalview/hmmer/HMMBuild.java
deleted file mode 100644 (file)
index 6de7029..0000000
+++ /dev/null
@@ -1,382 +0,0 @@
-package jalview.hmmer;
-
-import jalview.api.AlignViewportI;
-import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.JvOptionPane;
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.HMMFile;
-import jalview.util.FileUtils;
-import jalview.util.MessageManager;
-import jalview.ws.params.ArgumentI;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-/**
- * A class that runs the hmmbuild command as a separate process.
- * 
- * @author gmcarstairs
- *
- */
-public class HMMBuild extends HmmerCommand
-{
-  static final String ARG_AMINO = "--amino";
-
-  static final String ARG_DNA = "--dna";
-
-  static final String ARG_RNA = "--rna";
-
-  /**
-   * Constructor
-   * 
-   * @param alignFrame
-   * @param args
-   */
-  public HMMBuild(AlignFrame alignFrame, List<ArgumentI> args)
-  {
-    super(alignFrame, args);
-  }
-
-  /**
-   * Builds a HMM from an alignment (and/or groups), then imports and adds it to
-   * the alignment (and/or groups). Call this method directly to execute
-   * synchronously, or via start() in a new Thread for asynchronously.
-   */
-  @Override
-  public void run()
-  {
-    if (params == null || params.isEmpty())
-    {
-      Cache.log.error("No parameters to HMMBuild!|");
-      return;
-    }
-
-    long msgID = System.currentTimeMillis();
-    af.setProgressBar(MessageManager.getString("status.running_hmmbuild"),
-            msgID);
-
-    AlignViewportI viewport = af.getViewport();
-    try
-    {
-      /*
-       * run hmmbuild for alignment and/or groups as selected
-       */
-      List<AnnotatedCollectionI> runBuildFor = parseParameters(viewport);
-
-      for (AnnotatedCollectionI grp : runBuildFor)
-      {
-        runHMMBuild(grp);
-      }
-    } finally
-    {
-      af.setProgressBar("", msgID);
-      viewport.alignmentChanged(af.alignPanel);
-      af.buildColourMenu(); // to enable HMMER colour schemes
-    }
-  }
-
-  /**
-   * Scans the parameters to determine whether to run hmmmbuild for the whole
-   * alignment or specified subgroup(s) or both
-   * 
-   * @param viewport
-   * @return
-   */
-  protected List<AnnotatedCollectionI> parseParameters(
-          AlignViewportI viewport)
-  {
-    List<AnnotatedCollectionI> runBuildFor = new ArrayList<>();
-    boolean foundArg = false;
-
-    for (ArgumentI arg : params)
-    {
-      String name = arg.getName();
-      if (MessageManager.getString("label.hmmbuild_for").equals(name))
-      {
-        foundArg = true;
-        String value = arg.getValue();
-        if (MessageManager.getString("label.alignment").equals(value))
-        {
-          runBuildFor.add(alignment);
-        }
-        else if (MessageManager.getString("label.groups_and_alignment")
-                .equals(value))
-        {
-          runBuildFor.add(alignment);
-          runBuildFor.addAll(viewport.getAlignment().getGroups());
-        }
-        else if (MessageManager.getString("label.groups").equals(value))
-        {
-          runBuildFor.addAll(viewport.getAlignment().getGroups());
-        }
-        else if (MessageManager.getString("label.selected_group")
-                .equals(value))
-        {
-          runBuildFor.add(viewport.getSelectionGroup());
-        }
-      }
-      else if (MessageManager.getString("label.use_reference")
-              .equals(name))
-      {
-        // todo disable this option if no RF annotation on alignment
-        if (!af.getViewport().hasReferenceAnnotation())
-        {
-          JvOptionPane.showInternalMessageDialog(af, MessageManager
-                  .getString("warn.no_reference_annotation"));
-          // return;
-        }
-      }
-    }
-
-    /*
-     * default is to build for the whole alignment
-     */
-    if (!foundArg)
-    {
-      runBuildFor.add(alignment);
-    }
-
-    return runBuildFor;
-  }
-
-  /**
-   * Runs hmmbuild on the given sequences (alignment or group)
-   * 
-   * @param grp
-   */
-  private void runHMMBuild(AnnotatedCollectionI ac)
-  {
-    File hmmFile = null;
-    File alignmentFile = null;
-    try
-    {
-      hmmFile = FileUtils.createTempFile("hmm", ".hmm");
-      alignmentFile = FileUtils.createTempFile("output", ".sto");
-
-      if (ac instanceof Alignment)
-      {
-        AlignmentI al = (Alignment) ac;
-        // todo pad gaps in an unaligned SequenceGroup as well?
-        if (!al.isAligned())
-        {
-          al.padGaps();
-        }
-      }
-
-      deleteHmmSequences(ac);
-
-      List<SequenceI> copy = new ArrayList<>();
-      if (ac instanceof Alignment)
-      {
-        copy.addAll(ac.getSequences());
-      }
-      else
-      {
-        SequenceI[] sel = ((SequenceGroup) ac)
-                .getSelectionAsNewSequences((AlignmentI) ac.getContext());
-        for (SequenceI seq : sel)
-        {
-          copy.add(seq);
-        }
-      }
-
-      SequenceI[] copyArray = copy.toArray(new SequenceI[copy.size()]);
-      Hashtable sequencesHash = stashSequences(copyArray);
-
-      exportStockholm(copyArray, alignmentFile, ac);
-
-      recoverSequences(sequencesHash, copy.toArray(new SequenceI[] {}));
-
-      boolean ran = runCommand(alignmentFile, hmmFile, ac);
-      if (!ran)
-      {
-        JvOptionPane.showInternalMessageDialog(af, MessageManager
-                .formatMessage("warn.command_failed", "hmmbuild"));
-        return;
-      }
-      importData(hmmFile, ac);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    } finally
-    {
-      if (hmmFile != null)
-      {
-        hmmFile.delete();
-      }
-      if (alignmentFile != null)
-      {
-        alignmentFile.delete();
-      }
-    }
-  }
-
-  /**
-   * A helper method that deletes any HMM consensus sequence from the given
-   * collection, and from the parent alignment if <code>ac</code> is a subgroup
-   * 
-   * @param ac
-   */
-  void deleteHmmSequences(AnnotatedCollectionI ac)
-  {
-    List<SequenceI> hmmSeqs = ac.getHmmSequences();
-    for (SequenceI hmmSeq : hmmSeqs)
-    {
-      if (ac instanceof SequenceGroup)
-      {
-        ((SequenceGroup) ac).deleteSequence(hmmSeq, false);
-        AnnotatedCollectionI context = ac.getContext();
-        if (context != null && context instanceof AlignmentI)
-        {
-          ((AlignmentI) context).deleteSequence(hmmSeq);
-        }
-      }
-      else
-      {
-        ((AlignmentI) ac).deleteSequence(hmmSeq);
-      }
-    }
-  }
-
-  /**
-   * Constructs and executes the hmmbuild command as a separate process
-   * 
-   * @param sequencesFile
-   *          the alignment from which the HMM is built
-   * @param hmmFile
-   *          the output file to which the HMM is written
-   * @param group
-   *          alignment or group for which the hmm is generated
-   * 
-   * @return
-   * @throws IOException
-   */
-  private boolean runCommand(File sequencesFile, File hmmFile,
-          AnnotatedCollectionI group) throws IOException
-  {
-    String cmd = getCommandPath(HMMBUILD);
-    if (cmd == null)
-    {
-      return false; // executable not found
-    }
-    List<String> args = new ArrayList<>();
-    args.add(cmd);
-
-    /*
-     * HMM name (will be given to consensus sequence) is
-     * - as specified by an input parameter if set
-     * - else group name with _HMM appended (if for a group)
-     * - else align frame title with _HMM appended (if title is not too long)
-     * - else "Alignment_HMM" 
-     */
-    String name = "";
-
-    if (params != null)
-    {
-      for (ArgumentI arg : params)
-      {
-        String argName = arg.getName();
-        switch (argName)
-        {
-        case "HMM Name":
-          name = arg.getValue().trim();
-          break;
-        case "Use Reference Annotation":
-          args.add("--hand");
-          break;
-        }
-      }
-    }
-
-    if (group instanceof SequenceGroup)
-    {
-      name = ((SequenceGroup) group).getName() + "_HMM";
-    }
-
-    if ("".equals(name))
-    {
-      if (af != null && af.getTitle().length() < 15)
-      {
-        name = af.getTitle();
-      }
-      else
-      {
-        name = "Alignment_HMM";
-      }
-    }
-
-    args.add("-n");
-    args.add(name.replace(' ', '_'));
-    if (!alignment.isNucleotide())
-    {
-      args.add(ARG_AMINO); // TODO check for rna
-    }
-    else
-    {
-      args.add(ARG_DNA);
-    }
-
-    args.add(getFilePath(hmmFile));
-    args.add(getFilePath(sequencesFile));
-
-    return runCommand(args);
-  }
-
-  /**
-   * Imports the .hmm file produced by hmmbuild, and inserts the HMM consensus
-   * sequence (with attached HMM profile) as the first sequence in the alignment
-   * or group for which it was generated
-   * 
-   * @param hmmFile
-   * @param ac
-   *          (optional) the group for which the hmm was generated
-   * @throws IOException
-   */
-  private void importData(File hmmFile, AnnotatedCollectionI ac)
-          throws IOException
-  {
-    if (hmmFile.length() == 0L)
-    {
-      Cache.log.error("Error: hmmbuild produced empty hmm file");
-      return;
-    }
-
-    HMMFile file = new HMMFile(
-            new FileParse(hmmFile.getAbsolutePath(), DataSourceType.FILE));
-    SequenceI hmmSeq = file.getHMM().getConsensusSequence();
-
-    if (hmmSeq == null)
-    {
-      // hmmbuild failure not detected earlier
-      return;
-    }
-
-    if (ac instanceof SequenceGroup)
-    {
-      SequenceGroup grp = (SequenceGroup) ac;
-      char gapChar = alignment.getGapCharacter();
-      hmmSeq.insertCharAt(0, ac.getStartRes(), gapChar);
-      hmmSeq.insertCharAt(ac.getEndRes() + 1,
-              alignment.getWidth() - ac.getEndRes() - 1, gapChar);
-      SequenceI topSeq = grp.getSequencesInOrder(alignment)[0];
-      int topIndex = alignment.findIndex(topSeq);
-      alignment.insertSequenceAt(topIndex, hmmSeq);
-      ac.setSeqrep(hmmSeq);
-      grp.addSequence(hmmSeq, false);
-    }
-    else
-    {
-      alignment.insertSequenceAt(0, hmmSeq);
-    }
-  }
-}
diff --git a/src/jalview/hmmer/HMMERParamStore.java b/src/jalview/hmmer/HMMERParamStore.java
deleted file mode 100644 (file)
index 452097b..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-package jalview.hmmer;
-
-import jalview.bin.Cache;
-import jalview.datamodel.SequenceI;
-import jalview.gui.Preferences;
-import jalview.util.MessageManager;
-import jalview.viewmodel.AlignmentViewport;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.ParamDatastoreI;
-import jalview.ws.params.WsParamSetI;
-import jalview.ws.params.simple.BooleanOption;
-import jalview.ws.params.simple.DoubleParameter;
-import jalview.ws.params.simple.FileParameter;
-import jalview.ws.params.simple.IntegerParameter;
-import jalview.ws.params.simple.LogarithmicParameter;
-import jalview.ws.params.simple.Option;
-import jalview.ws.params.simple.RadioChoiceParameter;
-import jalview.ws.params.simple.StringParameter;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Scanner;
-
-public final class HMMERParamStore implements ParamDatastoreI
-{
-  private static final String HMMBUILD = "hmmbuild";
-
-  private static final String HMMALIGN = "hmmalign";
-
-  private static final String HMMSEARCH = "hmmsearch";
-
-  private String name;
-
-  private List<WsParamSetI> presets = new ArrayList<>();
-
-  private AlignmentViewport viewport;
-
-  private HMMERParamStore(String nam, AlignmentViewport av)
-  {
-    this.viewport = av;
-    this.name = nam;
-  }
-
-  public static HMMERParamStore forBuild(AlignmentViewport viewport)
-  {
-    return new HMMERParamStore(HMMBUILD, viewport);
-  }
-
-  public static HMMERParamStore forAlign(AlignmentViewport viewport)
-  {
-    return new HMMERParamStore(HMMALIGN, viewport);
-  }
-
-  public static HMMERParamStore forSearch(AlignmentViewport viewport)
-  {
-    return new HMMERParamStore(HMMSEARCH, viewport);
-  }
-
-  @Override
-  public List<WsParamSetI> getPresets()
-  {
-    return presets;
-  }
-
-  @Override
-  public WsParamSetI getPreset(String nam)
-  {
-    return null;
-  }
-
-  @Override
-  public List<ArgumentI> getServiceParameters()
-  {
-    List<ArgumentI> args = new ArrayList<>();
-    switch (name)
-    {
-    case HMMSEARCH:
-      getHMMSearchParams(args);
-      break;
-    case HMMALIGN:
-      getHMMAlignParams(args);
-      break;
-    case HMMBUILD:
-      getHMMBuildParams(args);
-      break;
-    default:
-    }
-
-    return args;
-  }
-
-  /**
-   * Answers default parameters for hmmsearch, taking into account any
-   * configured as user preferences
-   * 
-   * @param args
-   */
-  private void getHMMSearchParams(List<ArgumentI> args)
-  {
-    /*
-     * 'Options'
-     */
-    args.add(new BooleanOption(
-            MessageManager.getString(HMMSearch.AUTO_ALIGN_SEQS_KEY),
-            MessageManager.getString("label.auto_align_seqs_desc"), false,
-            false, false, null));
-    args.add(new BooleanOption(
-            MessageManager.getString(HMMSearch.USE_ACCESSIONS_KEY),
-            MessageManager.getString("label.use_accessions_desc"), false,
-            false, true, null));
-    args.add(new BooleanOption(
-            MessageManager.getString(HMMSearch.TRIM_TERMINI_KEY),
-            MessageManager.getString("label.trim_termini_desc"), false,
-            false, true, null));
-
-    /*
-     * 'Parameters'
-     */
-    addChoiceOfHmm(args);
-
-    // addChoiceOfDatabase(args);
-
-    String thisAlignment = MessageManager
-            .getString(HMMSearch.THIS_ALIGNMENT_KEY);
-    String database = MessageManager.getString("label.database");
-    args.add(new RadioChoiceParameter(
-            MessageManager.getString("action.search"), null,
-            Arrays.asList(thisAlignment,
-                    database),
-            thisAlignment));
-    args.add(new FileParameter(database, "", false, "", ""));
-    args.add(new IntegerParameter(
-            MessageManager.getString(HMMSearch.NUMBER_OF_RESULTS_KEY),
-            MessageManager.getString("label.number_of_results_desc"), true,
-            100, 0, 100000));
-    args.add(new RadioChoiceParameter(
-            MessageManager.getString(HMMSearch.REPORTING_CUTOFF_KEY), null,
-            Arrays.asList(HMMSearch.CUTOFF_NONE, HMMSearch.CUTOFF_EVALUE,
-                    HMMSearch.CUTOFF_SCORE),
-            HMMSearch.CUTOFF_EVALUE));
-    args.add(new LogarithmicParameter(
-            MessageManager.getString(HMMSearch.SEQ_EVALUE_KEY),
-            MessageManager.getString("label.seq_e_value_desc"), false, 1D,
-            1E-38, 10D));
-    args.add(new LogarithmicParameter(
-            MessageManager.getString(HMMSearch.DOM_EVALUE_KEY),
-            MessageManager.getString("label.dom_e_value_desc"), false, 1D,
-            1E-38, 10D));
-    args.add(
-            new DoubleParameter(
-                    MessageManager.getString(HMMSearch.SEQ_SCORE_KEY),
-                    MessageManager.getString("label.seq_score_desc"), false,
-                    0d, 0d, 1000d));
-    args.add(
-            new DoubleParameter(
-                    MessageManager.getString(HMMSearch.DOM_SCORE_KEY),
-                    MessageManager.getString("label.dom_score_desc"), false,
-                    0d, 0d, 1000d));
-  }
-
-  /**
-   * Constructs a choice parameter for database to search; always includes 'this
-   * alignment', and also includes any databases held under user preferences key
-   * "HMMSEARCH_DBS" as a comma-delimited list
-   * 
-   * @param args
-   */
-  protected void addChoiceOfDatabase(List<ArgumentI> args)
-  {
-    String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
-    if (names == null || names.isEmpty())
-    {
-      return;
-    }
-
-    List<String> filePaths = new ArrayList<>();
-    List<String> fileNames = new ArrayList<>();
-
-    String thisAlignment = MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY);
-    filePaths.add(thisAlignment);
-    fileNames.add(thisAlignment);
-
-    Scanner nameScanner = new Scanner(names);
-    nameScanner.useDelimiter(Preferences.COMMA);
-
-    while (nameScanner.hasNext())
-    {
-      String next = nameScanner.next();
-      if ("null".equals(next))
-      {
-        Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
-      }
-      else
-      {
-        filePaths.add(next);
-        int pos = next.lastIndexOf(File.separator);
-        String fileName = next.substring(pos + 1);
-        fileNames.add(fileName);
-      }
-    }
-    nameScanner.close();
-    ArgumentI databasesOption = new StringParameter(
-            MessageManager.getString(HMMSearch.DATABASE_KEY),
-            MessageManager.getString("label.database_for_hmmsearch"), true,
-            thisAlignment,
-            thisAlignment,
-            filePaths, fileNames);
-    args.add(databasesOption);
-  }
-
-  /**
-   * Answers default parameters for hmmalign, taking into account any configured
-   * as user preferences
-   * 
-   * @param args
-   */
-  private void getHMMAlignParams(List<ArgumentI> args)
-  {
-    addChoiceOfHmm(args);
-
-    boolean def = Cache.getDefault(Preferences.HMMALIGN_TRIM_TERMINI,
-            false);
-    args.add(new BooleanOption(
-            MessageManager.getString("label.trim_termini"),
-            MessageManager.getString("label.trim_termini_desc"),
-            false, false, def, null));
-  }
-
-  /**
-   * Adds an argument representing the choice of HMM sequences (profiles)
-   * against which to perform align or search, provided at least one is found
-   * 
-   * @param args
-   */
-  protected void addChoiceOfHmm(List<ArgumentI> args)
-  {
-    List<SequenceI> hmms = viewport.getAlignment().getHmmSequences();
-    if (!hmms.isEmpty())
-    {
-      List<String> options = new ArrayList<>();
-      for (SequenceI hmmSeq : hmms)
-      {
-        options.add(hmmSeq.getName());
-      }
-      String defseq = options.get(0);
-      ArgumentI arg = new StringParameter(
-              MessageManager.getString("label.use_hmm"), null, true, defseq,
-              defseq, options, null);
-      args.add(arg);
-    }
-  }
-
-  /**
-   * Answers default parameters for hmmbuild, taking into account any configured
-   * as user preferences
-   * 
-   * @param args
-   */
-  private void getHMMBuildParams(List<ArgumentI> args)
-  {
-    /*
-     * name to give the computed alignment HMM consensus sequence
-     * (Jalview constructs group HMM consensus sequence names)
-     */
-    String defValue = "Alignment_HMM";
-    StringParameter nameParam = new StringParameter(MessageManager.getString("label.hmm_name"),
-            MessageManager.getString("label.hmm_name_desc"), true, defValue,
-            defValue);
-    args.add(nameParam);
-
-    /*
-     * only enable Use Reference Annotation if RF is present
-     */
-    if (viewport.hasReferenceAnnotation())
-    {
-      args.add(new BooleanOption(
-              MessageManager.getString("label.use_reference"),
-              MessageManager.getString("label.use_reference_desc"), true,
-              true, true, null));
-    }
-
-    /*
-     * choice of whether to compute HMM for alignment and/or group(s)
-     * - only if there are any groups
-     */
-    if (!viewport.getAlignment().getGroups().isEmpty())
-    {
-      List<String> options = new ArrayList<>();
-      options.add(MessageManager.getString("label.alignment"));
-      options.add(MessageManager.getString("label.groups_and_alignment"));
-      options.add(MessageManager.getString("label.groups"));
-      options.add(MessageManager.getString("label.selected_group"));
-      args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
-              MessageManager.getString("label.hmmbuild_for_desc"), true,
-              MessageManager.getString("label.alignment"),
-              MessageManager.getString("label.alignment"), options, null));
-    }
-  }
-
-  @Override
-  public boolean presetExists(String forName)
-  {
-    return false;
-  }
-
-  @Override
-  public void deletePreset(String forName)
-  {
-  }
-
-  @Override
-  public void storePreset(String presetName, String text,
-          List<ArgumentI> jobParams)
-  {
-  }
-
-  @Override
-  public void updatePreset(String oldName, String presetName, String text,
-          List<ArgumentI> jobParams)
-  {
-  }
-
-  @Override
-  public WsParamSetI parseServiceParameterFile(String forName,
-          String description, String[] serviceURL, String parameters)
-          throws IOException
-  {
-    return null;
-  }
-
-  @Override
-  public String generateServiceParameterFile(WsParamSetI pset)
-          throws IOException
-  {
-    return null;
-  }
-
-}
diff --git a/src/jalview/hmmer/HMMERPreset.java b/src/jalview/hmmer/HMMERPreset.java
deleted file mode 100644 (file)
index 2712259..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-package jalview.hmmer;
-
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.WsParamSetI;
-
-import java.util.List;
-
-public class HMMERPreset implements WsParamSetI
-{
-
-  @Override
-  public String getName()
-  {
-    return null;
-  }
-
-  @Override
-  public String getDescription()
-  {
-    return null;
-  }
-
-  @Override
-  public String[] getApplicableUrls()
-  {
-    return null;
-  }
-
-  @Override
-  public String getSourceFile()
-  {
-    return null;
-  }
-
-  @Override
-  public void setSourceFile(String newfile)
-  {
-  }
-
-  @Override
-  public boolean isModifiable()
-  {
-    return false;
-  }
-
-  @Override
-  public List<ArgumentI> getArguments()
-  {
-    return null;
-  }
-
-  @Override
-  public void setArguments(List<ArgumentI> args)
-  {
-  }
-
-}
diff --git a/src/jalview/hmmer/HMMSearch.java b/src/jalview/hmmer/HMMSearch.java
deleted file mode 100644 (file)
index 6cda421..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-package jalview.hmmer;
-
-import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.gui.JvOptionPane;
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.StockholmFile;
-import jalview.util.FileUtils;
-import jalview.util.MessageManager;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.simple.BooleanOption;
-import jalview.ws.params.simple.Option;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Scanner;
-
-import javax.swing.JOptionPane;
-
-public class HMMSearch extends HmmerCommand
-{
-  static final String HMMSEARCH = "hmmsearch";
-
-  /*
-   * constants for i18n lookup of passed parameter names
-   */
-  static final String DATABASE_KEY = "label.database";
-
-  static final String THIS_ALIGNMENT_KEY = "label.this_alignment";
-
-  static final String USE_ACCESSIONS_KEY = "label.use_accessions";
-
-  static final String AUTO_ALIGN_SEQS_KEY = "label.auto_align_seqs";
-
-  static final String NUMBER_OF_RESULTS_KEY = "label.number_of_results";
-
-  static final String TRIM_TERMINI_KEY = "label.trim_termini";
-
-  static final String REPORTING_CUTOFF_KEY = "label.reporting_cutoff";
-
-  static final String CUTOFF_NONE = "None";
-
-  static final String CUTOFF_SCORE = "Score";
-
-  static final String CUTOFF_EVALUE = "E-Value";
-
-  static final String SEQ_EVALUE_KEY = "label.seq_evalue";
-
-  static final String DOM_EVALUE_KEY = "label.dom_evalue";
-
-  static final String SEQ_SCORE_KEY = "label.seq_score";
-
-  static final String DOM_SCORE_KEY = "label.dom_score";
-
-  boolean realign = false;
-
-  boolean trim = false;
-
-  int seqsToReturn = Integer.MAX_VALUE;
-
-  SequenceI[] seqs;
-
-  private String databaseName;
-
-  /**
-   * Constructor for the HMMSearchThread
-   * 
-   * @param af
-   */
-  public HMMSearch(AlignFrame af, List<ArgumentI> args)
-  {
-    super(af, args);
-  }
-
-  /**
-   * Runs the HMMSearchThread: the data on the alignment or group is exported,
-   * then the command is executed in the command line and then the data is
-   * imported and displayed in a new frame. Call this method directly to execute
-   * synchronously, or via start() in a new Thread for asynchronously.
-   */
-  @Override
-  public void run()
-  {
-    HiddenMarkovModel hmm = getHmmProfile();
-    if (hmm == null)
-    {
-      // shouldn't happen if we got this far
-      Cache.log.error("Error: no hmm for hmmsearch");
-      return;
-    }
-
-    SequenceI hmmSeq = hmm.getConsensusSequence();
-    long msgId = System.currentTimeMillis();
-    af.setProgressBar(MessageManager.getString("status.running_hmmsearch"),
-            msgId);
-
-    try
-    {
-      File hmmFile = FileUtils.createTempFile("hmm", ".hmm");
-      File hitsAlignmentFile = FileUtils.createTempFile("hitAlignment",
-              ".sto");
-      File searchOutputFile = FileUtils.createTempFile("searchOutput",
-              ".sto");
-
-      exportHmm(hmm, hmmFile.getAbsoluteFile());
-
-      boolean ran = runCommand(searchOutputFile, hitsAlignmentFile, hmmFile);
-      if (!ran)
-      {
-        JvOptionPane.showInternalMessageDialog(af, MessageManager
-                .formatMessage("warn.command_failed", "hmmsearch"));
-        return;
-      }
-
-      importData(hmmSeq, hitsAlignmentFile, hmmFile, searchOutputFile);
-      // TODO make realignment of search results a step at this level
-      // and make it conditional on this.realign
-    } catch (IOException | InterruptedException e)
-    {
-      e.printStackTrace();
-    }
-    finally
-    {
-      af.setProgressBar("", msgId);
-    }
-  }
-
-  /**
-   * Executes an hmmsearch with the given hmm as input. The database to be
-   * searched is a local file as specified by the 'Database' parameter, or the
-   * current alignment (written to file) if none is specified.
-   * 
-   * @param searchOutputFile
-   * @param hitsAlignmentFile
-   * @param hmmFile
-   * 
-   * @return
-   * @throws IOException
-   */
-  private boolean runCommand(File searchOutputFile, File hitsAlignmentFile,
-          File hmmFile) throws IOException
-  {
-    String command = getCommandPath(HMMSEARCH);
-    if (command == null)
-    {
-      return false;
-    }
-
-    List<String> args = new ArrayList<>();
-    args.add(command);
-    buildArguments(args, searchOutputFile, hitsAlignmentFile, hmmFile);
-
-    return runCommand(args);
-  }
-
-  /**
-   * Appends command line arguments to the given list, to specify input and
-   * output files for the search, and any additional options that may have been
-   * passed from the parameters dialog
-   * 
-   * @param args
-   * @param searchOutputFile
-   * @param hitsAlignmentFile
-   * @param hmmFile
-   * @throws IOException
-   */
-  protected void buildArguments(List<String> args, File searchOutputFile,
-          File hitsAlignmentFile, File hmmFile) throws IOException
-  {
-    args.add("-o");
-    args.add(getFilePath(searchOutputFile));
-    args.add("-A");
-    args.add(getFilePath(hitsAlignmentFile));
-
-    boolean dbFound = false;
-    String dbPath = "";
-    File databaseFile = null;
-
-    boolean useEvalueCutoff = false;
-    boolean useScoreCutoff = false;
-    String seqEvalueCutoff = null;
-    String domEvalueCutoff = null;
-    String seqScoreCutoff = null;
-    String domScoreCutoff = null;
-    databaseName = "Alignment";
-    boolean searchAlignment = false;
-
-    if (params != null)
-    {
-      for (ArgumentI arg : params)
-      {
-        String name = arg.getName();
-        if (MessageManager.getString(NUMBER_OF_RESULTS_KEY)
-                .equals(name))
-        {
-          seqsToReturn = Integer.parseInt(arg.getValue());
-        }
-        else if (MessageManager.getString("action.search").equals(name))
-        {
-          searchAlignment = arg.getValue().equals(
-                  MessageManager.getString(HMMSearch.THIS_ALIGNMENT_KEY));
-        }
-        else if (MessageManager.getString(DATABASE_KEY).equals(name))
-        {
-          dbPath = arg.getValue();
-          int pos = dbPath.lastIndexOf(File.separator);
-          databaseName = dbPath.substring(pos + 1);
-          databaseFile = new File(dbPath);
-        }
-        else if (MessageManager.getString(AUTO_ALIGN_SEQS_KEY)
-                .equals(name))
-        {
-          realign = true;
-        }
-        else if (MessageManager.getString(USE_ACCESSIONS_KEY)
-                .equals(name))
-        {
-          args.add("--acc");
-        }
-        else if (MessageManager.getString(REPORTING_CUTOFF_KEY)
-                .equals(name))
-        {
-          if (CUTOFF_EVALUE.equals(arg.getValue()))
-          {
-            useEvalueCutoff = true;
-          }
-          else if (CUTOFF_SCORE.equals(arg.getValue()))
-          {
-            useScoreCutoff = true;
-          }
-        }
-        else if (MessageManager.getString(SEQ_EVALUE_KEY).equals(name))
-        {
-          seqEvalueCutoff = arg.getValue();
-        }
-        else if (MessageManager.getString(SEQ_SCORE_KEY).equals(name))
-        {
-          seqScoreCutoff = arg.getValue();
-        }
-        else if (MessageManager.getString(DOM_EVALUE_KEY)
-                .equals(name))
-        {
-          domEvalueCutoff = arg.getValue();
-        }
-        else if (MessageManager.getString(DOM_SCORE_KEY).equals(name))
-        {
-          domScoreCutoff = arg.getValue();
-        }
-        else if (MessageManager.getString(TRIM_TERMINI_KEY)
-                .equals(name))
-        {
-          trim = true;
-        }
-        else if (MessageManager.getString(DATABASE_KEY).equals(name))
-        {
-          dbFound = true;
-          dbPath = arg.getValue();
-          if (!MessageManager.getString(THIS_ALIGNMENT_KEY)
-                  .equals(dbPath))
-          {
-            int pos = dbPath.lastIndexOf(File.separator);
-            databaseName = dbPath.substring(pos + 1);
-            databaseFile = new File(dbPath);
-          }
-        }
-      }
-    }
-
-    if (useEvalueCutoff)
-    {
-      args.add("-E");
-      args.add(seqEvalueCutoff);
-      args.add("--domE");
-      args.add(domEvalueCutoff);
-    }
-    else if (useScoreCutoff)
-    {
-      args.add("-T");
-      args.add(seqScoreCutoff);
-      args.add("--domT");
-      args.add(domScoreCutoff);
-    }
-
-//    if (!dbFound || MessageManager.getString(THIS_ALIGNMENT_KEY)
-//            .equals(dbPath))
-      if (searchAlignment)
-    {
-      /*
-       * no external database specified for search, so
-       * export current alignment as 'database' to search,
-       * excluding any HMM consensus sequences it contains
-       */
-      databaseFile = FileUtils.createTempFile("database", ".sto");
-      AlignmentI al = af.getViewport().getAlignment();
-      AlignmentI copy = new Alignment(al);
-      List<SequenceI> hmms = copy.getHmmSequences();
-      for (SequenceI hmmSeq : hmms)
-      {
-        copy.deleteSequence(hmmSeq);
-      }
-      exportStockholm(copy.getSequencesArray(), databaseFile, null);
-    }
-
-    args.add(getFilePath(hmmFile));
-    args.add(getFilePath(databaseFile));
-  }
-
-  /**
-   * Imports the data from the temporary file to which the output of hmmsearch
-   * was directed. The results are optionally realigned using hmmalign.
-   * 
-   * @param hmmSeq
-   */
-  private void importData(SequenceI hmmSeq, File inputAlignmentTemp,
-          File hmmTemp, File searchOutputFile)
-          throws IOException, InterruptedException
-  {
-    BufferedReader br = new BufferedReader(
-            new FileReader(inputAlignmentTemp));
-    try
-    {
-      if (br.readLine() == null)
-      {
-        JOptionPane.showMessageDialog(af,
-                MessageManager.getString("label.no_sequences_found"));
-        return;
-      }
-      StockholmFile file = new StockholmFile(new FileParse(
-              inputAlignmentTemp.getAbsolutePath(), DataSourceType.FILE));
-      seqs = file.getSeqsAsArray();
-
-      readTable(searchOutputFile);
-
-      int seqCount = Math.min(seqs.length, seqsToReturn);
-      SequenceI[] hmmAndSeqs = new SequenceI[seqCount + 1];
-      hmmAndSeqs[0] = hmmSeq;
-      System.arraycopy(seqs, 0, hmmAndSeqs, 1, seqCount);
-
-      if (realign)
-      {
-        realignResults(hmmAndSeqs);
-      }
-      else
-      {
-        AlignmentI al = new Alignment(hmmAndSeqs);
-        AlignFrame alignFrame = new AlignFrame(al, AlignFrame.DEFAULT_WIDTH,
-                AlignFrame.DEFAULT_HEIGHT);
-        String ttl = "hmmSearch of " + databaseName + " using "
-                + hmmSeq.getName();
-        Desktop.addInternalFrame(alignFrame, ttl, AlignFrame.DEFAULT_WIDTH,
-                AlignFrame.DEFAULT_HEIGHT);
-      }
-
-      hmmTemp.delete();
-      inputAlignmentTemp.delete();
-      searchOutputFile.delete();
-    } finally
-    {
-      if (br != null)
-      {
-        br.close();
-      }
-    }
-  }
-
-  /**
-   * Realigns the given sequences using hmmalign, to the HMM profile sequence
-   * which is the first in the array, and opens the results in a new frame
-   * 
-   * @param hmmAndSeqs
-   */
-  protected void realignResults(SequenceI[] hmmAndSeqs)
-  {
-    /*
-     * and align the search results to the HMM profile
-     */
-    AlignmentI al = new Alignment(hmmAndSeqs);
-    AlignFrame frame = new AlignFrame(al, 1, 1);
-    List<ArgumentI> alignArgs = new ArrayList<>();
-    String alignTo = hmmAndSeqs[0].getName();
-    List<String> options = Collections.singletonList(alignTo);
-    Option option = new Option(MessageManager.getString("label.use_hmm"),
-            "", true, alignTo, alignTo, options, null);
-    alignArgs.add(option);
-    if (trim)
-    {
-      alignArgs.add(new BooleanOption(
-              MessageManager.getString(TRIM_TERMINI_KEY),
-              MessageManager.getString("label.trim_termini_desc"), true,
-              true, true, null));
-    }
-    HmmerCommand hmmalign = new HMMAlign(frame, alignArgs);
-    hmmalign.run();
-  }
-
-  /**
-   * Reads in the scores table output by hmmsearch and adds annotation to
-   * sequences for E-value and bit score
-   * 
-   * @param inputTableTemp
-   * @throws IOException
-   */
-  void readTable(File inputTableTemp) throws IOException
-  {
-    BufferedReader br = new BufferedReader(new FileReader(inputTableTemp));
-    String line = "";
-    while (!line.startsWith("Query:"))
-    {
-      line = br.readLine();
-    }
-    for (int i = 0; i < 5; i++)
-    {
-      line = br.readLine();
-    }
-
-    int index = 0;
-    while (!"  ------ inclusion threshold ------".equals(line)
-            && !"".equals(line))
-    {
-      SequenceI seq = seqs[index];
-      Scanner scanner = new Scanner(line);
-      String str = scanner.next();
-      addScoreAnnotation(str, seq, "hmmsearch E-value",
-              "Full sequence E-value");
-      str = scanner.next();
-      addScoreAnnotation(str, seq, "hmmsearch Score",
-              "Full sequence bit score");
-      scanner.close();
-      line = br.readLine();
-      index++;
-    }
-
-    br.close();
-  }
-
-  /**
-   * A helper method that adds one score-only (non-positional) annotation to a
-   * sequence
-   * 
-   * @param value
-   * @param seq
-   * @param label
-   * @param description
-   */
-  protected void addScoreAnnotation(String value, SequenceI seq,
-          String label, String description)
-  {
-    try
-    {
-      AlignmentAnnotation annot = new AlignmentAnnotation(label,
-              description, null);
-      annot.setCalcId(HMMSEARCH);
-      double eValue = Double.parseDouble(value);
-      annot.setScore(eValue);
-      annot.setSequenceRef(seq);
-      seq.addAlignmentAnnotation(annot);
-    } catch (NumberFormatException e)
-    {
-      System.err.println("Error parsing " + label + " from " + value);
-    }
-  }
-
-}
diff --git a/src/jalview/hmmer/HmmerCommand.java b/src/jalview/hmmer/HmmerCommand.java
deleted file mode 100644 (file)
index f8f2cde..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-package jalview.hmmer;
-
-import jalview.analysis.SeqsetUtils;
-import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.JvOptionPane;
-import jalview.gui.Preferences;
-import jalview.io.HMMFile;
-import jalview.io.StockholmFile;
-import jalview.util.FileUtils;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.ws.params.ArgumentI;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-/**
- * Base class for hmmbuild, hmmalign and hmmsearch
- * 
- * @author TZVanaalten
- *
- */
-public abstract class HmmerCommand implements Runnable
-{
-  public static final String HMMBUILD = "hmmbuild";
-
-  protected final AlignFrame af;
-
-  protected final AlignmentI alignment;
-
-  protected final List<ArgumentI> params;
-
-  /**
-   * Constructor
-   * 
-   * @param alignFrame
-   * @param args
-   */
-  public HmmerCommand(AlignFrame alignFrame, List<ArgumentI> args)
-  {
-    af = alignFrame;
-    alignment = af.getViewport().getAlignment();
-    params = args;
-  }
-
-  /**
-   * Answers true if preference HMMER_PATH is set, and its value is the path to
-   * a directory that contains an executable <code>hmmbuild</code> or
-   * <code>hmmbuild.exe</code>, else false
-   * 
-   * @return
-   */
-  public static boolean isHmmerAvailable()
-  {
-    File exec = FileUtils.getExecutable(HMMBUILD,
-            Cache.getProperty(Preferences.HMMER_PATH));
-    return exec != null;
-  }
-
-  /**
-   * Uniquifies the sequences when exporting and stores their details in a
-   * hashtable
-   * 
-   * @param seqs
-   */
-  protected Hashtable stashSequences(SequenceI[] seqs)
-  {
-    return SeqsetUtils.uniquify(seqs, true);
-  }
-
-  /**
-   * Restores the sequence data lost by uniquifying
-   * 
-   * @param hashtable
-   * @param seqs
-   */
-  protected void recoverSequences(Hashtable hashtable, SequenceI[] seqs)
-  {
-    SeqsetUtils.deuniquify(hashtable, seqs);
-  }
-
-  /**
-   * Runs a command as a separate process and waits for it to complete. Answers
-   * true if the process return status is zero, else false.
-   * 
-   * @param commands
-   *          the executable command and any arguments to it
-   * @throws IOException
-   */
-  public boolean runCommand(List<String> commands)
-          throws IOException
-  {
-    List<String> args = Platform.isWindows() ? wrapWithCygwin(commands)
-            : commands;
-
-    try
-    {
-      ProcessBuilder pb = new ProcessBuilder(args);
-      pb.redirectErrorStream(true); // merge syserr to sysout
-      final Process p = pb.start();
-      new Thread(new Runnable()
-      {
-        @Override
-        public void run()
-        {
-          BufferedReader input = new BufferedReader(
-                  new InputStreamReader(p.getInputStream()));
-          try
-          {
-            String line = input.readLine();
-            while (line != null)
-            {
-              System.out.println(line);
-              line = input.readLine();
-            }
-          } catch (IOException e)
-          {
-            e.printStackTrace();
-          }
-        }
-      }).start();
-
-      p.waitFor();
-      int exitValue = p.exitValue();
-      if (exitValue != 0)
-      {
-        Cache.log.error("Command failed, return code = " + exitValue);
-        Cache.log.error("Command/args were: " + args.toString());
-      }
-      return exitValue == 0; // 0 is success, by convention
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-      return false;
-    }
-  }
-
-  /**
-   * Converts the given command to a Cygwin "bash" command wrapper. The hmmer
-   * command and any arguments to it are converted into a single parameter to the
-   * bash command.
-   * 
-   * @param commands
-   */
-  protected List<String> wrapWithCygwin(List<String> commands)
-  {
-    File bash = FileUtils.getExecutable("bash",
-            Cache.getProperty(Preferences.CYGWIN_PATH));
-    if (bash == null)
-    {
-      Cache.log.error("Cygwin shell not found");
-      return commands;
-    }
-
-    List<String> wrapped = new ArrayList<>();
-    wrapped.add(bash.getAbsolutePath());
-    wrapped.add("-c");
-
-    /*
-     * combine hmmbuild/search/align and arguments to a single string
-     */
-    StringBuilder sb = new StringBuilder();
-    for (String cmd : commands)
-    {
-      sb.append(" ").append(cmd);
-    }
-    wrapped.add(sb.toString());
-
-    return wrapped;
-  }
-
-  /**
-   * Exports an alignment, and reference (RF) annotation if present, to the
-   * specified file, in Stockholm format
-   * 
-   * @param seqs
-   * @param toFile
-   * @param annotated
-   * @throws IOException
-   */
-  public void exportStockholm(SequenceI[] seqs, File toFile,
-          AnnotatedCollectionI annotated) throws IOException
-  {
-    if (seqs == null)
-    {
-      return;
-    }
-    AlignmentI newAl = new Alignment(seqs);
-    if (!newAl.isAligned())
-    {
-      newAl.padGaps();
-    }
-
-    if (toFile != null && annotated != null)
-    {
-      AlignmentAnnotation[] annots = annotated.getAlignmentAnnotation();
-      if (annots != null)
-      {
-        for (AlignmentAnnotation annot : annots)
-        {
-          if (annot.label.contains("Reference") || "RF".equals(annot.label))
-          {
-            AlignmentAnnotation newRF;
-            if (annot.annotations.length > newAl.getWidth())
-            {
-              Annotation[] rfAnnots = new Annotation[newAl.getWidth()];
-              System.arraycopy(annot.annotations, 0, rfAnnots, 0,
-                      rfAnnots.length);
-              newRF = new AlignmentAnnotation("RF", "Reference Positions",
-                      rfAnnots);
-            }
-            else
-            {
-              newRF = new AlignmentAnnotation(annot);
-            }
-            newAl.addAnnotation(newRF);
-          }
-        }
-      }
-    }
-
-    StockholmFile file = new StockholmFile(newAl);
-    String output = file.print(seqs, false);
-    PrintWriter writer = new PrintWriter(toFile);
-    writer.println(output);
-    writer.close();
-  }
-
-  /**
-   * Answers the full path to the given hmmer executable, or null if file cannot
-   * be found or is not executable
-   * 
-   * @param cmd
-   *          command short name e.g. hmmalign
-   * @return
-   */
-  protected String getCommandPath(String cmd)
-  {
-    String binariesFolder = Cache.getProperty(Preferences.HMMER_PATH);
-    File file = FileUtils.getExecutable(cmd, binariesFolder);
-    if (file == null && af != null)
-    {
-      JvOptionPane.showInternalMessageDialog(af, MessageManager
-              .formatMessage("label.executable_not_found", cmd));
-    }
-
-    return file == null ? null : getFilePath(file);
-  }
-
-  /**
-   * Exports an HMM to the specified file
-   * 
-   * @param hmm
-   * @param hmmFile
-   * @throws IOException
-   */
-  public void exportHmm(HiddenMarkovModel hmm, File hmmFile)
-          throws IOException
-  {
-    if (hmm != null)
-    {
-      HMMFile file = new HMMFile(hmm);
-      PrintWriter writer = new PrintWriter(hmmFile);
-      writer.print(file.print());
-      writer.close();
-    }
-  }
-
-  /**
-   * Answers the HMM profile for the profile sequence the user selected (default
-   * is just the first HMM sequence in the alignment)
-   * 
-   * @return
-   */
-  protected HiddenMarkovModel getHmmProfile()
-  {
-    String alignToParamName = MessageManager.getString("label.use_hmm");
-    for (ArgumentI arg : params)
-    {
-      String name = arg.getName();
-      if (name.equals(alignToParamName))
-      {
-        String seqName = arg.getValue();
-        SequenceI hmmSeq = alignment.findName(seqName);
-        if (hmmSeq.hasHMMProfile())
-        {
-          return hmmSeq.getHMM();
-        }
-      }
-    }
-    return null;
-  }
-
-  /**
-   * Answers an absolute path to the given file, in a format suitable for
-   * processing by a hmmer command. On a Windows platform, the native Windows file
-   * path is converted to Cygwin format, by replacing '\'with '/' and drive letter
-   * X with /cygdrive/x.
-   * 
-   * @param resultFile
-   * @return
-   */
-  protected String getFilePath(File resultFile)
-  {
-    String path = resultFile.getAbsolutePath();
-    if (Platform.isWindows())
-    {
-      // the first backslash escapes '\' for the regular expression argument
-      path = path.replaceAll("\\" + File.separator, "/");
-      int colon = path.indexOf(':');
-      if (colon > 0)
-      {
-        String drive = path.substring(0, colon);
-        path = path.replaceAll(drive + ":", "/cygdrive/" + drive);
-      }
-    }
-
-    return path;
-  }
-}
diff --git a/src/jalview/io/HMMFile.java b/src/jalview/io/HMMFile.java
deleted file mode 100644 (file)
index 07f29c8..0000000
+++ /dev/null
@@ -1,716 +0,0 @@
-package jalview.io;
-
-import jalview.api.AlignExportSettingI;
-import jalview.api.AlignmentViewPanel;
-import jalview.datamodel.HMMNode;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-
-
-/**
- * Adds capability to read in and write out HMMER3 files. .
- * 
- * 
- * @author TZVanaalten
- *
- */
-public class HMMFile extends AlignFile
-        implements AlignmentFileReaderI, AlignmentFileWriterI
-{
-  private static final String TERMINATOR = "//";
-
-  /*
-   * keys to data in HMM file, used to store as properties of the HiddenMarkovModel
-   */
-  public static final String HMM = "HMM";
-
-  public static final String NAME = "NAME";
-
-  public static final String ACCESSION_NUMBER = "ACC";
-
-  public static final String DESCRIPTION = "DESC";
-
-  public static final String LENGTH = "LENG";
-
-  public static final String MAX_LENGTH = "MAXL";
-
-  public static final String ALPHABET = "ALPH";
-
-  public static final String DATE = "DATE";
-
-  public static final String COMMAND_LOG = "COM";
-
-  public static final String NUMBER_OF_SEQUENCES = "NSEQ";
-
-  public static final String EFF_NUMBER_OF_SEQUENCES = "EFFN";
-
-  public static final String CHECK_SUM = "CKSUM";
-
-  public static final String STATISTICS = "STATS";
-
-  public static final String COMPO = "COMPO";
-
-  public static final String GATHERING_THRESHOLD = "GA";
-
-  public static final String TRUSTED_CUTOFF = "TC";
-
-  public static final String NOISE_CUTOFF = "NC";
-
-  public static final String VITERBI = "VITERBI";
-
-  public static final String MSV = "MSV";
-
-  public static final String FORWARD = "FORWARD";
-
-  public static final String MAP = "MAP";
-
-  public static final String REFERENCE_ANNOTATION = "RF";
-
-  public static final String CONSENSUS_RESIDUE = "CONS";
-
-  public static final String CONSENSUS_STRUCTURE = "CS";
-
-  public static final String MASKED_VALUE = "MM";
-
-  private static final String ALPH_AMINO = "amino";
-
-  private static final String ALPH_DNA = "DNA";
-
-  private static final String ALPH_RNA = "RNA";
-
-  private static final String ALPHABET_AMINO = "ACDEFGHIKLMNPQRSTVWY";
-
-  private static final String ALPHABET_DNA = "ACGT";
-
-  private static final String ALPHABET_RNA = "ACGU";
-
-  private static final int NUMBER_OF_TRANSITIONS = 7;
-
-  private static final String SPACE = " ";
-
-  /*
-   * optional guide line added to an output HMMER file, purely for readability
-   */
-  private static final String TRANSITIONTYPELINE = "            m->m     m->i     m->d     i->m     i->i     d->m     d->d";
-
-  private static String NL = System.lineSeparator();
-
-  private HiddenMarkovModel hmm;
-
-  // number of symbols in the alphabet used in the hidden Markov model
-  private int numberOfSymbols;
-
-  /**
-   * Constructor that parses immediately
-   * 
-   * @param inFile
-   * @param type
-   * @throws IOException
-   */
-  public HMMFile(String inFile, DataSourceType type) throws IOException
-  {
-    super(inFile, type);
-  }
-
-  /**
-   * Constructor that parses immediately
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public HMMFile(FileParse source) throws IOException
-  {
-    super(source);
-  }
-
-  /**
-   * Default constructor
-   */
-  public HMMFile()
-  {
-  }
-
-  /**
-   * Constructor for HMMFile used for exporting
-   * 
-   * @param hmm
-   */
-  public HMMFile(HiddenMarkovModel markov)
-  {
-    hmm = markov;
-  }
-
-  /**
-   * Returns the HMM produced by parsing a HMMER3 file
-   * 
-   * @return
-   */
-  public HiddenMarkovModel getHMM()
-  {
-    return hmm;
-  }
-
-  /**
-   * Gets the name of the hidden Markov model
-   * 
-   * @return
-   */
-  public String getName()
-  {
-    return hmm.getName();
-  }
-
-  /**
-   * Reads the data from HMM file into the HMM model
-   */
-  @Override
-  public void parse()
-  {
-    try
-    {
-      hmm = new HiddenMarkovModel();
-      parseHeaderLines(dataIn);
-      parseModel(dataIn);
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
-  }
-
-  /**
-   * Reads the header properties from a HMMER3 file and saves them in the
-   * HiddeMarkovModel. This method exits after reading the next line after the
-   * HMM line.
-   * 
-   * @param input
-   * @throws IOException
-   */
-  void parseHeaderLines(BufferedReader input) throws IOException
-  {
-    boolean readingHeaders = true;
-    hmm.setFileHeader(input.readLine());
-    String line = input.readLine();
-    while (readingHeaders && line != null)
-    {
-      Scanner parser = new Scanner(line);
-      String next = parser.next();
-      if (ALPHABET.equals(next))
-      {
-        String alphabetType = parser.next();
-        hmm.setProperty(ALPHABET, alphabetType);
-        String alphabet = ALPH_DNA.equalsIgnoreCase(alphabetType)
-                ? ALPHABET_DNA
-                : (ALPH_RNA.equalsIgnoreCase(alphabetType) ? ALPHABET_RNA
-                        : ALPHABET_AMINO);
-        numberOfSymbols = hmm.setAlphabet(alphabet);
-      }
-      else if (HMM.equals(next))
-      {
-        readingHeaders = false;
-        String symbols = line.substring(line.indexOf(HMM) + HMM.length());
-        numberOfSymbols = hmm.setAlphabet(symbols);
-      }
-      else if (STATISTICS.equals(next))
-      {
-        parser.next();
-        String key;
-        String value;
-        key = parser.next();
-        value = parser.next() + SPACE + SPACE + parser.next();
-        hmm.setProperty(key, value);
-      }
-      else
-      {
-        String key = next;
-        String value = parser.next();
-        while (parser.hasNext())
-        {
-          value = value + SPACE + parser.next();
-        }
-        hmm.setProperty(key, value);
-      }
-      parser.close();
-      line = input.readLine();
-    }
-  }
-
-  /**
-   * Parses the model data from the HMMER3 file. The input buffer should be
-   * positioned at the (optional) COMPO line if there is one, else at the insert
-   * emissions line for the BEGIN node of the model.
-   * 
-   * @param input
-   * @throws IOException
-   */
-  void parseModel(BufferedReader input) throws IOException
-  {
-    /*
-     * specification says there must always be an HMM header (already read)
-     * and one more header (guide headings) which is skipped here
-     */
-    int nodeNo = 0;
-    String line = input.readLine();
-    List<HMMNode> nodes = new ArrayList<>();
-
-    while (line != null && !TERMINATOR.equals(line))
-    {
-      HMMNode node = new HMMNode();
-      nodes.add(node);
-      Scanner scanner = new Scanner(line);
-      String next = scanner.next();
-
-      /*
-       * expect COMPO (optional) for average match emissions
-       * or a node number followed by node's match emissions
-       */
-      if (COMPO.equals(next) || nodeNo > 0)
-      {
-        /*
-         * parse match emissions
-         */
-        double[] matches = parseDoubles(scanner, numberOfSymbols);
-        node.setMatchEmissions(matches);
-        if (!COMPO.equals(next))
-        {
-          int resNo = parseAnnotations(scanner, node);
-          if (resNo == 0)
-          {
-            /*
-             * no MAP annotation provided, just number off from 0 (begin node)
-             */
-            resNo = nodeNo;
-          }
-          node.setResidueNumber(resNo);
-        }
-        line = input.readLine();
-      }
-      scanner.close();
-
-      /*
-       * parse insert emissions
-       */
-      scanner = new Scanner(line);
-      double[] inserts = parseDoubles(scanner, numberOfSymbols);
-      node.setInsertEmissions(inserts);
-      scanner.close();
-
-      /*
-       * parse state transitions
-       */
-      line = input.readLine();
-      scanner = new Scanner(line);
-      double[] transitions = parseDoubles(scanner,
-              NUMBER_OF_TRANSITIONS);
-      node.setStateTransitions(transitions);
-      scanner.close();
-      line = input.readLine();
-
-      nodeNo++;
-    }
-
-    hmm.setNodes(nodes);
-  }
-
-  /**
-   * Parses the annotations on the match emission line and add them to the node.
-   * (See p109 of the HMMER User Guide (V3.1b2) for the specification.) Returns
-   * the residue position that the node maps to, if provided, else zero.
-   * 
-   * @param scanner
-   * @param node
-   */
-  int parseAnnotations(Scanner scanner, HMMNode node)
-  {
-    int mapTo = 0;
-
-    /*
-     * map from hmm node to sequence position, if provided
-     */
-    if (scanner.hasNext())
-    {
-      String value = scanner.next();
-      if (!"-".equals(value))
-      {
-        try
-        {
-          mapTo = Integer.parseInt(value);
-          node.setResidueNumber(mapTo);
-        } catch (NumberFormatException e)
-        {
-          // ignore
-        }
-      }
-    }
-
-    /*
-     * hmm consensus residue if provided, else '-'
-     */
-    if (scanner.hasNext())
-    {
-      node.setConsensusResidue(scanner.next().charAt(0));
-    }
-
-    /*
-     * RF reference annotation, if provided, else '-'
-     */
-    if (scanner.hasNext())
-    {
-      node.setReferenceAnnotation(scanner.next().charAt(0));
-    }
-
-    /*
-     * 'm' for masked position, if provided, else '-'
-     */
-    if (scanner.hasNext())
-    {
-      node.setMaskValue(scanner.next().charAt(0));
-    }
-
-    /*
-     * structure consensus symbol, if provided, else '-'
-     */
-    if (scanner.hasNext())
-    {
-      node.setConsensusStructure(scanner.next().charAt(0));
-    }
-
-    return mapTo;
-  }
-
-  /**
-   * Fills an array of doubles parsed from an input line
-   * 
-   * @param input
-   * @param numberOfElements
-   * @return
-   * @throws IOException
-   */
-  static double[] parseDoubles(Scanner input,
-          int numberOfElements) throws IOException
-  {
-    double[] values = new double[numberOfElements];
-    for (int i = 0; i < numberOfElements; i++)
-    {
-      if (!input.hasNext())
-      {
-        throw new IOException("Incomplete data");
-      }
-      String next = input.next();
-      if (next.contains("*"))
-      {
-        values[i] = Double.NEGATIVE_INFINITY;
-      }
-      else
-      {
-        double prob = Double.valueOf(next);
-        prob = Math.pow(Math.E, -prob);
-        values[i] = prob;
-      }
-    }
-    return values;
-  }
-
-  /**
-   * Returns a string to be added to the StringBuilder containing the entire
-   * output String.
-   * 
-   * @param initialColumnSeparation
-   *          The initial whitespace separation between the left side of the
-   *          file and first character.
-   * @param columnSeparation
-   *          The separation between subsequent data entries.
-   * @param data
-   *          The list of data to be added to the String.
-   * @return
-   */
-  String addData(int initialColumnSeparation,
-          int columnSeparation, List<String> data)
-  {
-    String line = "";
-    boolean first = true;
-    for (String value : data)
-    {
-      int sep = first ? initialColumnSeparation : columnSeparation;
-      line += String.format("%" + sep + "s", value);
-      first = false;
-    }
-    return line;
-  }
-
-  /**
-   * Converts list of characters into a list of Strings.
-   * 
-   * @param list
-   * @return Returns the list of Strings.
-   */
-  List<String> charListToStringList(List<Character> list)
-  {
-    List<String> strList = new ArrayList<>();
-    for (char value : list)
-    {
-      String strValue = Character.toString(value);
-      strList.add(strValue);
-    }
-    return strList;
-  }
-
-  /**
-   * Converts an array of doubles into a list of Strings, rounded to the nearest
-   * 5th decimal place
-   * 
-   * @param doubles
-   * @param noOfDecimals
-   * @return
-   */
-  List<String> doublesToStringList(double[] doubles)
-  {
-    List<String> strList = new ArrayList<>();
-    for (double value : doubles)
-    {
-      String strValue;
-      if (value > 0)
-      {
-        strValue = String.format("%.5f", value);
-      }
-      else if (value == -0.00000d)
-      {
-        strValue = "0.00000";
-      }
-      else
-      {
-        strValue = "*";
-      }
-      strList.add(strValue);
-    }
-    return strList;
-  }
-
-  /**
-   * Appends model data in string format to the string builder
-   * 
-   * @param output
-   */
-  void appendModelAsString(StringBuilder output)
-  {
-    output.append(HMM).append("  ");
-    String charSymbols = hmm.getSymbols();
-    for (char c : charSymbols.toCharArray())
-    {
-      output.append(String.format("%9s", c));
-    }
-    output.append(NL).append(TRANSITIONTYPELINE);
-
-    int length = hmm.getLength();
-
-    for (int nodeNo = 0; nodeNo <= length; nodeNo++)
-    {
-      String matchLine = String.format("%7s",
-              nodeNo == 0 ? COMPO : Integer.toString(nodeNo));
-
-      double[] doubleMatches = convertToLogSpace(
-              hmm.getNode(nodeNo).getMatchEmissions());
-      List<String> strMatches = doublesToStringList(doubleMatches);
-      matchLine += addData(10, 9, strMatches);
-
-      if (nodeNo != 0)
-      {
-        matchLine += SPACE + (hmm.getNodeMapPosition(nodeNo));
-        matchLine += SPACE + hmm.getConsensusResidue(nodeNo);
-        matchLine += SPACE + hmm.getReferenceAnnotation(nodeNo);
-        if (hmm.getFileHeader().contains("HMMER3/f"))
-        {
-          matchLine += SPACE + hmm.getMaskedValue(nodeNo);
-          matchLine += SPACE + hmm.getConsensusStructure(nodeNo);
-        }
-      }
-
-      output.append(NL).append(matchLine);
-      
-      String insertLine = "";
-
-      double[] doubleInserts = convertToLogSpace(
-              hmm.getNode(nodeNo).getInsertEmissions());
-      List<String> strInserts = doublesToStringList(doubleInserts);
-      insertLine += addData(17, 9, strInserts);
-
-      output.append(NL).append(insertLine);
-
-      String transitionLine = "";
-      double[] doubleTransitions = convertToLogSpace(
-              hmm.getNode(nodeNo).getStateTransitions());
-      List<String> strTransitions = doublesToStringList(
-              doubleTransitions);
-      transitionLine += addData(17, 9, strTransitions);
-
-      output.append(NL).append(transitionLine);
-    }
-  }
-
-  /**
-   * Appends formatted HMM file properties to the string builder
-   * 
-   * @param output
-   */
-  void appendProperties(StringBuilder output)
-  {
-    output.append(hmm.getFileHeader());
-
-    String format = "%n%-5s %1s";
-    appendProperty(output, format, NAME);
-    appendProperty(output, format, ACCESSION_NUMBER);
-    appendProperty(output, format, DESCRIPTION);
-    appendProperty(output, format, LENGTH);
-    appendProperty(output, format, MAX_LENGTH);
-    appendProperty(output, format, ALPHABET);
-    appendBooleanProperty(output, format, REFERENCE_ANNOTATION);
-    appendBooleanProperty(output, format, MASKED_VALUE);
-    appendBooleanProperty(output, format, CONSENSUS_RESIDUE);
-    appendBooleanProperty(output, format, CONSENSUS_STRUCTURE);
-    appendBooleanProperty(output, format, MAP);
-    appendProperty(output, format, DATE);
-    appendProperty(output, format, NUMBER_OF_SEQUENCES);
-    appendProperty(output, format, EFF_NUMBER_OF_SEQUENCES);
-    appendProperty(output, format, CHECK_SUM);
-    appendProperty(output, format, GATHERING_THRESHOLD);
-    appendProperty(output, format, TRUSTED_CUTOFF);
-    appendProperty(output, format, NOISE_CUTOFF);
-
-    if (hmm.getMSV() != null)
-    {
-      format = "%n%-19s %18s";
-      output.append(String.format(format, "STATS LOCAL MSV", hmm.getMSV()));
-
-      output.append(String.format(format, "STATS LOCAL VITERBI",
-              hmm.getViterbi()));
-
-      output.append(String.format(format, "STATS LOCAL FORWARD",
-              hmm.getForward()));
-    }
-  }
-
-  /**
-   * Appends 'yes' or 'no' for the given property, according to whether or not
-   * it is set in the HMM
-   * 
-   * @param output
-   * @param format
-   * @param propertyName
-   */
-  private void appendBooleanProperty(StringBuilder output, String format,
-          String propertyName)
-  {
-    boolean set = hmm.getBooleanProperty(propertyName);
-    output.append(String.format(format, propertyName,
-            set ? HiddenMarkovModel.YES : HiddenMarkovModel.NO));
-  }
-
-  /**
-   * Appends the value of the given property to the output, if not null
-   * 
-   * @param output
-   * @param format
-   * @param propertyName
-   */
-  private void appendProperty(StringBuilder output, String format,
-          String propertyName)
-  {
-    String value = hmm.getProperty(propertyName);
-    if (value != null)
-    {
-      output.append(String.format(format, propertyName, value));
-    }
-  }
-
-  @Override
-  public String print(SequenceI[] sequences, boolean jvsuffix)
-  {
-    if (sequences[0].getHMM() != null)
-    {
-      hmm = sequences[0].getHMM();
-    }
-    return print();
-  }
-
-  /**
-   * Prints the .hmm file to a String.
-   * 
-   * @return
-   */
-  public String print()
-  {
-    StringBuilder output = new StringBuilder();
-    appendProperties(output);
-    output.append(NL);
-    appendModelAsString(output);
-    output.append(NL).append(TERMINATOR).append(NL);
-    return output.toString();
-  }
-
-  /**
-   * Converts the probabilities contained in an array into log space
-   * 
-   * @param ds
-   */
-  double[] convertToLogSpace(double[] ds)
-  {
-    double[] converted = new double[ds.length];
-    for (int i = 0; i < ds.length; i++)
-    {
-      double prob = ds[i];
-      double logProb = -1 * Math.log(prob);
-
-      converted[i] = logProb;
-    }
-    return converted;
-  }
-
-  /**
-   * Returns the HMM sequence produced by reading a .hmm file.
-   */
-  @Override
-  public SequenceI[] getSeqsAsArray()
-  {
-    SequenceI hmmSeq = hmm.getConsensusSequence();
-    SequenceI[] seq = new SequenceI[1];
-    seq[0] = hmmSeq;
-    return seq;
-  }
-
-  @Override
-  public void setNewlineString(String newLine)
-  {
-    NL = newLine;
-  }
-
-  @Override
-  public void setExportSettings(AlignExportSettingI exportSettings)
-  {
-
-  }
-
-  @Override
-  public void configureForView(AlignmentViewPanel viewpanel)
-  {
-
-  }
-
-  @Override
-  public boolean hasWarningMessage()
-  {
-    return false;
-  }
-
-  @Override
-  public String getWarningMessage()
-  {
-    return "warning message";
-  }
-
-}
-
diff --git a/src/jalview/schemes/HmmerColourScheme.java b/src/jalview/schemes/HmmerColourScheme.java
deleted file mode 100644 (file)
index 0f81ec1..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-package jalview.schemes;
-
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceCollectionI;
-import jalview.datamodel.SequenceI;
-import jalview.util.ColorUtils;
-import jalview.util.Comparison;
-
-import java.awt.Color;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Base class for colour schemes based on a selected Hidden Markov Model. The
- * colour is with reference to an HMM consensus sequence and HMM profile
- * <ul>
- * <li>white for a gap</li>
- * <li>red for an insertion (position is gapped in the HMM consensus)</li>
- * <li>orange for negative information content</li>
- * <li>white to blue for increasing information content</li>
- * </ul>
- * where information content is the log ratio
- * 
- * <pre>
- *   log(profile match emission probability / residue background probability)
- * </pre>
- * 
- * Sub-class implementations use either global ('Uniprot') or local
- * ('alignment') background frequencies.
- * 
- * @author tzvanaalten
- * @author gmcarstairs
- */
-public abstract class HmmerColourScheme extends ResidueColourScheme
-{
-  private static final Color INSERTION_COLOUR = new Color(230, 0, 0); // reddish
-
-  /*
-   * the aligned HMM consensus sequence to use as reference for colouring
-   */
-  private SequenceI hmmSeq;
-
-  private HiddenMarkovModel hmm;
-
-  private Map<Character, Float> frequencies;
-
-  /**
-   * Constructor given a list of Hidden Markov Model consensus sequences. The
-   * first sequence provides the HMM profile from which we can read the emission
-   * probabilities that determine the colour.
-   * 
-   * @param hmmSeqs
-   */
-  public HmmerColourScheme(List<SequenceI> hmmSeqs)
-  {
-    hmmSeq = hmmSeqs.isEmpty() ? null : hmmSeqs.get(0);
-    hmm = hmmSeq == null ? null : hmmSeq.getHMM();
-  }
-
-  /**
-   * Default constructor (required by ColourSchemes.loadColourSchemes)
-   */
-  public HmmerColourScheme()
-  {
-  }
-
-  @Override
-  public Color findColour(char symbol, int column, SequenceI seq,
-          String consensusResidue, float pid)
-  {
-    return findColour(symbol, column);
-  }
-
-  /**
-   * Returns the colour at a particular symbol at a column in the alignment:
-   * <ul>
-   * <li>white for a gap</li>
-   * <li>red for an insertion</li>
-   * <li>orange for negative information content</li>
-   * <li>white to blue for increasing information content</li>
-   * </ul>
-   * 
-   * @param symbol
-   * @param column
-   * @return
-   */
-  private Color findColour(char symbol, int column)
-  {
-    if (getHmm() == null || Comparison.isGap(symbol))
-    {
-      return Color.white;
-    }
-    if (Comparison.isGap(hmmSeq.getCharAt(column)))
-    {
-      return INSERTION_COLOUR;
-    }
-    if (Character.isLowerCase(symbol))
-    {
-      symbol = Character.toUpperCase(symbol);
-    }
-
-    final double prob = getHmm().getMatchEmissionProbability(column,
-            symbol);
-
-    Float freq = 0f;
-
-    if (!frequencies.containsKey(symbol))
-    {
-      return Color.WHITE;
-    }
-    else
-    {
-      freq = frequencies.get(symbol);
-    }
-
-    /*
-     * Orange if match emission probability is less than background probability
-     */
-    double infoRatio = prob / freq.floatValue();
-    Color colour = Color.ORANGE;
-    if (infoRatio >= 1)
-    {
-      /*
-       * log-scale graduated shade of blue if prob is greater than background  
-       */
-      float infoLog = (float) Math.log(infoRatio);
-      colour = ColorUtils.getGraduatedColour(infoLog, 0, Color.WHITE,
-              getMaxInformationScore(), Color.blue);
-    }
-
-    return colour;
-  }
-
-  /**
-   * Answers the maximum possible value of information score (log ratio), for
-   * use in scaling a graduated colour range
-   * 
-   * @return
-   */
-  abstract float getMaxInformationScore();
-
-  /**
-   * Answers a new colour scheme instance based on the HMM of the first sequence
-   * in ac that has an HMM
-   */
-  @Override
-  public ColourSchemeI getInstance(AnnotatedCollectionI ac,
-          Map<SequenceI, SequenceCollectionI> hiddenRepSequences)
-  {
-    return newInstance(ac);
-  }
-
-  /**
-   * Answers a new instance of the colour scheme for the given HMM
-   * 
-   * @param ac
-   * @return
-   */
-  protected abstract HmmerColourScheme newInstance(AnnotatedCollectionI ac);
-
-  @Override
-  public boolean isSimple()
-  {
-    return false;
-  }
-
-  /**
-   * Answers true if the sequence collection has an HMM consensus sequence, else
-   * false
-   */
-  @Override
-  public boolean isApplicableTo(AnnotatedCollectionI ac)
-  {
-    return !ac.getHmmSequences().isEmpty();
-  }
-
-  protected Map<Character, Float> getFrequencies()
-  {
-    return frequencies;
-  }
-
-  protected void setFrequencies(Map<Character, Float> frequencies)
-  {
-    this.frequencies = frequencies;
-  }
-
-  protected HiddenMarkovModel getHmm()
-  {
-    return hmm;
-  }
-
-  protected SequenceI getHmmSequence()
-  {
-    return hmmSeq;
-  }
-}
diff --git a/src/jalview/schemes/HmmerGlobalBackground.java b/src/jalview/schemes/HmmerGlobalBackground.java
deleted file mode 100644 (file)
index 31bcadf..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-package jalview.schemes;
-
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.SequenceCollectionI;
-
-/**
- * An HMM colour scheme that uses global ('Uniprot') background frequencies for
- * residues
- * 
- * @author tzvanaalten
- */
-public class HmmerGlobalBackground extends HmmerColourScheme
-{
-  /*
-   * The highest possible log ratio is when match emission probability in
-   * the HMM model is 1, and background (for W) is 0.0109 giving
-   * log(1/0.0109) = log(91.743) = 4.519
-   */
-  private static final float MAX_LOG_RATIO = 4.519f;
-
-  /**
-   * Constructor given a sequence collection
-   * 
-   * @param ac
-   */
-  public HmmerGlobalBackground(SequenceCollectionI ac)
-  {
-    super(ac.getHmmSequences());
-    String alphabetType = getHmm() == null
-            ? ResidueProperties.ALPHABET_AMINO
-            : getHmm().getAlphabetType();
-    setFrequencies(
-            ResidueProperties.backgroundFrequencies.get(alphabetType));
-  }
-
-  /**
-   * Default constructor (required by ColourSchemes.loadColourSchemes)
-   */
-  public HmmerGlobalBackground()
-  {
-  }
-
-  @Override
-  public String getSchemeName()
-  {
-    return JalviewColourScheme.HMMERU.toString();
-  }
-
-  @Override
-  protected HmmerColourScheme newInstance(AnnotatedCollectionI ac)
-  {
-    return new HmmerGlobalBackground(ac);
-  }
-
-  @Override
-  float getMaxInformationScore()
-  {
-    return MAX_LOG_RATIO;
-  }
-
-}
diff --git a/src/jalview/schemes/HmmerLocalBackground.java b/src/jalview/schemes/HmmerLocalBackground.java
deleted file mode 100644 (file)
index 2fe775c..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-package jalview.schemes;
-
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.ResidueCount;
-import jalview.datamodel.SequenceCollectionI;
-import jalview.datamodel.SequenceI;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * An HMM colour scheme that uses local (alignment or sub-group) background
- * frequencies for residues
- * 
- * @author tzvanaalten
- */
-public class HmmerLocalBackground extends HmmerColourScheme
-{
-  float logTotalCount;
-
-  /**
-   * Constructor given a sequence collection
-   * 
-   * @param ac
-   */
-  public HmmerLocalBackground(AnnotatedCollectionI ac)
-  {
-    super(ac.getHmmSequences());
-    countFrequencies(ac);
-  }
-
-  /**
-   * Default constructor (required by ColourSchemes.loadColourSchemes)
-   */
-  public HmmerLocalBackground()
-  {
-  }
-
-  @Override
-  public String getSchemeName()
-  {
-    return JalviewColourScheme.HMMERA.toString();
-  }
-
-  /**
-   * Counts and stores the relative frequency of every residue in the alignment
-   * (apart from any HMM consensus sequences)
-   * 
-   * @param sc
-   */
-  public void countFrequencies(SequenceCollectionI sc)
-  {
-    // TODO or total counts in Consensus Profile (how do we get at it?)?
-    Map<Character, Float> freqs = new HashMap<>();
-
-    /*
-     * count symbols, excluding any HMM consensus sequences
-     */
-    ResidueCount counts = new ResidueCount();
-    List<SequenceI> seqs = sc.getSequences();
-    for (SequenceI seq : seqs)
-    {
-      if (!seq.hasHMMProfile())
-      {
-        for (char c : seq.getSequence())
-        {
-          counts.add(c);
-        }
-      }
-    }
-    int total = counts.getTotalResidueCount(); // excludes gaps
-
-    for (char symbol : counts.getSymbolCounts().symbols)
-    {
-      double freq = counts.getCount(symbol) / (double) total;
-      freqs.put(symbol, (float) freq);
-    }
-
-    setFrequencies(freqs);
-
-    logTotalCount = (float) Math.log(total);
-  }
-
-  @Override
-  float getMaxInformationScore()
-  {
-    return logTotalCount;
-  }
-
-  @Override
-  protected HmmerColourScheme newInstance(AnnotatedCollectionI ac)
-  {
-    return new HmmerLocalBackground(ac);
-  }
-}
diff --git a/src/jalview/util/FileUtils.java b/src/jalview/util/FileUtils.java
deleted file mode 100644 (file)
index 7e607ab..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-package jalview.util;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.DirectoryStream;
-import java.nio.file.FileSystems;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.PathMatcher;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Miscellaneous file-related functions
- */
-public final class FileUtils
-{
-
-  /**
-   * Answers the executable file for the given command, or null if not found or
-   * not executable. The path to the executable is the command name prefixed by
-   * the given folder path, optionally with .exe appended.
-   * 
-   * @param cmd
-   *          command short name, for example hmmbuild
-   * @param binaryPath
-   *          parent folder for the executable
-   * @return
-   */
-  public static File getExecutable(String cmd, String binaryPath)
-  {
-    File file = new File(binaryPath, cmd);
-    if (!file.canExecute())
-    {
-      file = new File(binaryPath, cmd + ".exe");
-      {
-        if (!file.canExecute())
-        {
-          file = null;
-        }
-      }
-    }
-    return file;
-  }
-
-  /**
-   * Answers the path to the folder containing the given executable file, by
-   * searching the PATH environment variable. Answers null if no such executable
-   * can be found.
-   * 
-   * @param cmd
-   * @return
-   */
-  public static String getPathTo(String cmd)
-  {
-    String paths = System.getenv("PATH");
-    // backslash is to escape regular expression argument
-    for (String path : paths.split("\\" + File.pathSeparator))
-    {
-      if (getExecutable(cmd, path) != null)
-      {
-        return path;
-      }
-    }
-    return null;
-  }
-
-  /**
-   * A convenience method to create a temporary file that is deleted on exit of
-   * the JVM
-   * 
-   * @param prefix
-   * @param suffix
-   * @return
-   * @throws IOException
-   */
-  public static File createTempFile(String prefix, String suffix)
-          throws IOException
-  {
-    File f = File.createTempFile(prefix, suffix);
-    f.deleteOnExit();
-    return f;
-  }
-
-  /**
-   * Answers a (possibly empty) list of file paths found by searching below
-   * <code>from</code> that match the supplied regular expression
-   * <code>pattern</code>. Results may include <code>from</code> itself if it
-   * matches. If an exception occurs it is written to syserr and any results up to
-   * that point are returned. Note that the regular expression match applies to
-   * the whole path of any matched file.
-   * <p>
-   * WARNING: because the whole directory tree below <code>from</code> is
-   * searched, this method may be slow if used for a high level directory, or may
-   * exit prematurely if security or other exceptions occur.
-   * 
-   * <pre>
-   * Example: 
-   *   findMatchingPaths(Paths.get("C:/Program Files"), ".*&#47chimera.exe$")
-   * </pre>
-   * 
-   * @param from
-   * @param pattern
-   * 
-   * @return
-   * @see https://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java/31685610#comment62441832_31685610
-   */
-  public static List<String> findMatchingPaths(Path from, String pattern)
-  {
-    List<String> matches = new ArrayList<>();
-    PathMatcher pathMatcher = FileSystems.getDefault()
-            .getPathMatcher("regex:" + pattern);
-    try
-    {
-      Files.walk(from).filter(pathMatcher::matches)
-              .forEach(m -> matches.add(m.toString()));
-    } catch (IOException e)
-    {
-      System.err.println(
-              "Error searching for " + pattern + " : " + e.toString());
-    }
-
-    return matches;
-  }
-
-  /**
-   * Answers a (possibly empty) list of paths to files below the given root path,
-   * that match the given pattern. The pattern should be a '/' delimited set of
-   * glob patterns, each of which is used to match child file names (not full
-   * paths). Note that 'directory spanning' glob patterns (**) are <em>not</em>
-   * supported by this method.
-   * <p>
-   * For example
-   * 
-   * <pre>
-   *   findMatches("C:\\", "Program Files*&#47Chimera*&#47bin/{chimera,chimera.exe}"
-   * </pre>
-   * 
-   * would match "C:\Program Files\Chimera 1.11\bin\chimera.exe" and "C:\Program
-   * Files (x86)\Chimera 1.10.1\bin\chimera"
-   * 
-   * @param root
-   * @param pattern
-   * @return
-   * @see https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#glob
-   */
-  public static List<String> findMatches(String root, String pattern)
-  {
-    List<String> results = new ArrayList<>();
-    try
-    {
-      Path from = Paths.get(root);
-      findMatches(results, from, Arrays.asList(pattern.split("/")));
-    } catch (Throwable e)
-    {
-      // Paths.get can throw IllegalArgumentException
-      System.err.println(String.format("Error searching %s for %s: %s",
-              root, pattern, e.toString()));
-    }
-
-    return results;
-  }
-
-  /**
-   * A helper method that performs recursive search of file patterns and adds any
-   * 'leaf node' matches to the results list
-   * 
-   * @param results
-   * @param from
-   * @param patterns
-   */
-  protected static void findMatches(List<String> results, Path from,
-          List<String> patterns)
-  {
-    if (patterns.isEmpty())
-    {
-      /*
-       * reached end of recursion with all components matched
-       */
-      results.add(from.toString());
-      return;
-    }
-
-    String pattern = patterns.get(0);
-    try (DirectoryStream<Path> dirStream = Files.newDirectoryStream(from,
-            pattern))
-    {
-      dirStream.forEach(p -> {
-
-        /*
-         * matched a next level file - search below it
-         * (ignore non-directory non-leaf matches)
-         */
-        List<String> subList = patterns.subList(1, patterns.size());
-        if (subList.isEmpty() || p.toFile().isDirectory())
-        {
-          findMatches(results, p, subList);
-        }
-      });
-    } catch (IOException e)
-    {
-      System.err.println(String.format("Error searching %s: %s", pattern,
-              e.toString()));
-    }
-  }
-}
diff --git a/src/jalview/util/HMMProbabilityDistributionAnalyser.java b/src/jalview/util/HMMProbabilityDistributionAnalyser.java
deleted file mode 100644 (file)
index 66ae552..0000000
+++ /dev/null
@@ -1,978 +0,0 @@
-package jalview.util;
-
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.HMMFile;
-import jalview.io.StockholmFile;
-import jalview.schemes.ResidueProperties;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Scanner;
-import java.util.Vector;
-
-/**
- * Processes probability data. The file indexes used in this program represent
- * the index of the location of a family or hmm in their respective files,
- * starting from 0.
- * 
- * @author TZVanaalten
- *
- */
-public class HMMProbabilityDistributionAnalyser
-{
-  AlignmentAnnotation reference = null;
-
-  Vector<SequenceI> sequences;
-
-  HiddenMarkovModel hmm;
-
-  // contains the raw data produced
-  List<ArrayList<Double>> raw = new ArrayList<>();
-
-  // contains binned data
-  Map<String, Double> binned = new HashMap<>();
-
-  // location of the family file
-  String families = "/media/sf_Shared_Folder/PFAM/Family/SeedFamilies.seed";
-
-  // location of the file containing the family-clan links
-  final static String FAMILIESTOCLAN = "/media/sf_Shared_Folder/PFAM/Family/Clanlinks.dat";
-
-  // location of the HMM file
-  String hmms = "/media/sf_Shared_Folder/PFAM/HMMs/Pfam-A.hmm";
-
-  // suffix for raw file
-  final static String RAW = "/Raw.csv";
-
-  // suffix for binned file
-  final static String BINNED = "/Binned.csv";
-
-  // normalisation scale
-  final static double SCALE = 1;
-
-  // current position in file
-  int currentFilePosition = 0;
-
-  final static String NL = "\n";
-
-  Random generator = new Random();
-
-  // current directory
-  String currentFolder;
-
-  boolean keepRaw = false;
-
-  /**
-   * Sets the working directory.
-   * 
-   * @param path
-   */
-  public void setFolder(String path)
-  {
-    currentFolder = path;
-  }
-
-  /**
-   * Moves a buffered reader forward in the file by a certain amount of entries.
-   * Each entry in the file is delimited by '//'.
-   * 
-   * @param index
-   *          The index of the location in the file.
-   * @param br
-   * @throws IOException
-   */
-  public void moveLocationBy(int index, BufferedReader br)
-          throws IOException
-  {
-    for (int i = 0; i < index; i++)
-    {
-      String line = br.readLine();
-      while (!"//".equals(line))
-      {
-        line = br.readLine();
-
-      }
-    }
-
-  }
-  
-  /**
-   * Analyses a specified number of families and then saves the data. Before
-   * analysing the data, the previous saved data will be imported and after
-   * analysing this, the data is exported back into the file. The file must be
-   * in flat file format.
-   * 
-   * @param increments
-   *          The number of families to read before saving.
-   * @throws IOException
-   */
-  public void run(int increments, boolean keepRawData) throws IOException
-  {
-    keepRaw = keepRawData;
-    try
-    {
-      readPreviousData(currentFolder);
-      BufferedReader posReader = new BufferedReader(
-              new FileReader(currentFolder + "/CurrentPosition.txt"));
-
-      String line = posReader.readLine();
-      posReader.close();
-      currentFilePosition = Integer.parseInt(line);
-    } catch (Exception e)
-    {
-      System.out.println("No previous data found");
-    }
-
-
-
-    BufferedReader inputSTO = new BufferedReader(new FileReader(families));
-    BufferedReader inputHMM = new BufferedReader(new FileReader(hmms));
-
-
-
-    moveLocationBy(currentFilePosition, inputHMM);
-    moveLocationBy(currentFilePosition, inputSTO);
-
-    int filesRead = 0;
-    int i = 0;
-    while (filesRead < increments)
-    {
-
-      readStockholm(inputSTO);
-
-      readHMM(inputHMM);
-
-        int count = countValidResidues();
-        processData(count);
-        filesRead++;
-
-      currentFilePosition++;
-      System.out.println(i);
-      i++;
-    }
-
-    PrintWriter p = new PrintWriter(
-            new File(currentFolder + "/CurrentPosition.txt"));
-    p.print(currentFilePosition);
-    p.close();
-    exportData(currentFolder);
-    raw.clear();
-    binned.clear();
-
-  }
-
-  /**
-   * Analyses all families and then saves the data. Before analysing the data,
-   * the previous saved data will be imported and after analysing this, the data
-   * is exported back into the file. The file must be in flat file format.
-   * 
-   * @param increments
-   *          The number of families to read before saving.
-   * @throws IOException
-   */
-  public void runToEnd(int minCount, int maxCount, boolean keepRawData,
-          boolean forClans)
-          throws IOException
-  {
-    keepRaw = keepRawData;
-    BufferedReader inputSTO = null;
-    BufferedReader inputHMM = null;
-    int size = 0;
-    int files = 1;
-    try
-    {
-    if (forClans)
-    {
-        files = 603;
-    }
-    int filesRead = 0;
-    for (int clan = 0; clan < files; clan++)
-    {
-      System.out.println(clan);
-      String clanPath = "";
-      int numberOfFamilies = 0;
-      if (forClans)
-      {
-        clanPath = currentFolder + "/Clan" + clan;
-          if (!new File(clanPath).exists())
-          {
-            continue;
-          }
-        BufferedReader famCountReader = new BufferedReader(
-                new FileReader(clanPath + "/NumberOfFamilies.txt"));
-        numberOfFamilies = Integer.parseInt(famCountReader.readLine());
-      }
-      else
-      {
-        numberOfFamilies = 1;
-      }
-      
-      for (int fam = 0; fam < numberOfFamilies; fam++)
-      {
-        if (forClans)
-        {
-          families = clanPath + "/Families/Fam" + fam + ".sto";
-          hmms = clanPath + "/HMMs/HMM" + fam + ".hmm";
-        }
-
-        inputSTO = new BufferedReader(new FileReader(families));
-        inputHMM = new BufferedReader(new FileReader(hmms));
-
-
-        int i = 0;
-        boolean endReached = atEnd(inputSTO);
-        while (!endReached)
-        {
-          readStockholm(inputSTO);
-          readHMM(inputHMM);
-
-        int count = countValidResidues();
-            if (count >= minCount && count < maxCount)
-            {
-              processData(count);
-            }
-        filesRead++;
-          System.out.println(filesRead);
-      endReached = atEnd(inputSTO);
-      }
-      }
-    }
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    } finally
-    {
-      exportData(currentFolder);
-      raw.clear();
-      binned.clear();
-    }
-  }
-
-  /**
-   * Reads the previous data from both files
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public void readPreviousData(String source) throws IOException
-  {
-    readBinned(source);
-    if (keepRaw)
-    {
-      readRaw(source);
-    }
-  }
-
-  /**
-   * Reads the previous data from the binned file.
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public void readBinned(String source) throws IOException
-  {
-    BufferedReader input = new BufferedReader(
-            new FileReader(source + BINNED));
-    String line = input.readLine();
-    binned = new HashMap<>();
-    while (!("".equals(line) || line == null))
-    {
-      Scanner scanner = new Scanner(line);
-      scanner.useDelimiter(",");
-      String key = scanner.next();
-      String value = scanner.next();
-      binned.put(key, Double.valueOf(value));
-      scanner.close();
-      line = input.readLine();
-    }
-
-    input.close();
-  }
-
-  /**
-   * Reads the previous data from the raw file.
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public void readRaw(String source) throws IOException
-  {
-    BufferedReader input = new BufferedReader(new FileReader(source + RAW));
-    String line = input.readLine();
-    if (line == null)
-    {
-      input.close();
-      return;
-    }
-    Scanner numberScanner = new Scanner(line);
-    numberScanner.useDelimiter(",");
-    raw = new ArrayList<>();
-    while (numberScanner.hasNext())
-    {
-      numberScanner.next();
-      raw.add(new ArrayList<Double>());
-    }
-    numberScanner.close();
-
-    line = input.readLine();
-    while (!("".equals(line) || line == null))
-    {
-      Scanner scanner = new Scanner(line);
-      scanner.useDelimiter(",");
-
-      int i = 0;
-      while (scanner.hasNext())
-      {
-        String value;
-        value = scanner.next();
-        if (!value.equals("EMPTY"))
-        {
-          raw.get(i).add(Double.parseDouble(value));
-        }
-        else
-        {
-          raw.get(i).add(null);
-        }
-
-        i++;
-      }
-      scanner.close();
-      line = input.readLine();
-    }
-
-    input.close();
-  }
-
-  /**
-   * Counts the number of valid residues in the sequence.
-   * 
-   * @return
-   */
-  public int countValidResidues()
-  {
-    int count = 0;
-
-    for (int width = 0; width < sequences.size(); width++)
-    {
-      for (int length = 1; length < hmm.getLength() + 1; length++)
-      {
-        char symbol;
-        int alignPos;
-        alignPos = hmm.getNodeMapPosition(length);
-
-        symbol = sequences.get(width).getCharAt(alignPos);
-        if (ResidueProperties.backgroundFrequencies.get("amino")
-                .containsKey(symbol))
-        {
-          count++;
-        }
-      }
-    }
-
-    return count;
-  }
-
-  /**
-   * Processes data, and stores it in both a raw and binned format.
-   * 
-   * @param count
-   */
-  public void processData(int count)
-  {
-    int rawPos = 0;
-    if (keepRaw)
-    {
-      raw.add(new ArrayList<Double>());
-      rawPos = raw.size() - 1;
-    }
-    Double total = 0d;
-    for (int width = 0; width < sequences.size(); width++)
-    {
-      for (int length = 1; length < hmm.getLength() + 1; length++)
-      {
-        char symbol;
-        int alignPos;
-        alignPos = hmm.getNodeMapPosition(length);
-        
-        symbol = sequences.get(width).getCharAt(alignPos);
-        if (ResidueProperties.backgroundFrequencies.get("amino")
-                .containsKey(symbol))
-        {
-          Double prob;
-          Float bfreq;
-          Double llr;
-          prob = hmm.getMatchEmissionProbability(alignPos, symbol);
-          bfreq = ResidueProperties.backgroundFrequencies.get("amino")
-                  .get(symbol);
-          if (prob == 0 || bfreq == 0)
-          {
-            System.out.println("error");
-          }
-          llr = Math.log(prob / bfreq);
-          if (keepRaw)
-          {
-            raw.get(rawPos).add(llr);
-          }
-
-          String output;
-          output = String.format("%.1f", llr);
-          total += Double.parseDouble(output);
-          if ("-0.0".equals(output))
-          {
-            output = "0.0";
-          }
-          if (binned.containsKey(output))
-          {
-            double prev = binned.get(output);
-            prev += (SCALE / count);
-            binned.put(output, prev);
-
-          }
-          else
-          {
-            binned.put(output, SCALE / count);
-          }
-        }
-      }
-    }
-    System.out.println(total / count);
-  }
-
-
-  /**
-   * Reads in the sequence data from a Stockholm file.
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public void readStockholm(BufferedReader inputSTO) throws IOException
-  {
-    FileParse parserSTO = new FileParse(inputSTO, "", DataSourceType.FILE);
-    StockholmFile file = new StockholmFile(parserSTO);
-    Vector<AlignmentAnnotation> annots = file.getAnnotations();
-
-    for (AlignmentAnnotation annot : annots)
-    {
-      if (annot.label.contains("Reference"))
-      {
-        reference = annot;
-      }
-    }
-    sequences = file.getSeqs();
-  }
-
-  /**
-   * Reads in the HMM data from a HMMer file.
-   * 
-   * @param source
-   * @throws IOException
-   */
-  public void readHMM(BufferedReader inputHMM) throws IOException
-  {
-    FileParse parserHMM = new FileParse(inputHMM, "", DataSourceType.FILE);
-    HMMFile file = new HMMFile(parserHMM);
-    hmm = file.getHMM();
-
-
-  }
-
-  /**
-   * Exports both the binned and raw data into separate files.
-   * 
-   * @param location
-   * @throws FileNotFoundException
-   */
-  public void exportData(String location) throws FileNotFoundException
-  {
-    PrintWriter writerBin = new PrintWriter(new File(location + BINNED));
-    for (Map.Entry<String, Double> entry : binned.entrySet())
-    {
-      writerBin.println(entry.getKey() + "," + entry.getValue());
-    }
-    writerBin.close();
-    if (keepRaw)
-    {
-
-    PrintWriter writerRaw = new PrintWriter(new File(location + RAW));
-    
-    StringBuilder identifier = new StringBuilder();
-    
-    for (int i = 1; i < raw.size() + 1; i++)
-    {
-      identifier.append("Fam " + i + ",");
-    }
-    
-    writerRaw.println(identifier);
-    
-    boolean rowIsEmpty = false;
-    int row = 0;
-    while (!rowIsEmpty)
-    {
-      rowIsEmpty = true;
-      StringBuilder string = new StringBuilder();
-      for (int column = 0; column < raw.size(); column++)
-      {
-        if (raw.get(column).size() <= row)
-        {
-          string.append("EMPTY,");
-        }
-        else
-        {
-          string.append(raw.get(column).get(row) + ",");
-          rowIsEmpty = false;
-        }
-      }
-      row++;
-      writerRaw.println(string);
-    }
-    writerRaw.close();
-
-    }
-
-  }
-
-  /**
-   * Prints the specified family on the console.
-   * 
-   * @param index
-   * @throws IOException
-   */
-  public void printFam(int index) throws IOException
-  {
-    BufferedReader br = new BufferedReader(new FileReader(families));
-
-    moveLocationBy(index, br);
-
-    String line = br.readLine();
-
-    while (!"//".equals(line))
-    {
-      System.out.println(line);
-      line = br.readLine();
-    }
-    System.out.println(line);
-    br.close();
-
-  }
-
-  /**
-   * Prints the specified HMM on the console.
-   * 
-   * @param index
-   * @throws IOException
-   */
-  public void printHMM(int index) throws IOException
-  {
-    BufferedReader br = new BufferedReader(new FileReader(hmms));
-
-    moveLocationBy(index, br);
-
-    String line = br.readLine();
-
-    while (!"//".equals(line))
-    {
-      System.out.println(line);
-      line = br.readLine();
-    }
-    System.out.println(line);
-    br.close();
-
-  }
-
-  /**
-   * Prints the specified family to a .sto file.
-   * 
-   * @param index
-   * @throws IOException
-   */
-  public void exportFam(int index, String location) throws IOException
-  {
-    BufferedReader br = new BufferedReader(new FileReader(families));
-
-    moveLocationBy(index, br);
-
-    String line = br.readLine();
-    PrintWriter writer = new PrintWriter(
-            new FileOutputStream(new File(location), true));
-    while (!"//".equals(line))
-    {
-      writer.println(line);
-      line = br.readLine();
-    }
-    writer.println(line);
-    writer.close();
-    br.close();
-
-  }
-
-  public void exportFile(BufferedReader br, String location, boolean append)
-          throws IOException
-  {
-    String line = br.readLine();
-    PrintWriter writer = new PrintWriter(
-            new FileOutputStream(location, append));
-    while (!"//".equals(line))
-    {
-      writer.println(line);
-      line = br.readLine();
-    }
-    writer.println(line);
-    writer.close();
-
-
-  }
-
-  public String getHMMName(int index) throws IOException
-  {
-    String name;
-
-    BufferedReader nameFinder = new BufferedReader(new FileReader(hmms));
-
-    moveLocationBy(index, nameFinder);
-
-    nameFinder.readLine();
-
-    Scanner scanner = new Scanner(nameFinder.readLine());
-    name = scanner.next();
-    name = scanner.next();
-    scanner.close();
-    return name;
-  }
-
-  public String getFamilyName(int index) throws IOException
-  {
-    String name;
-
-    BufferedReader nameFinder = new BufferedReader(
-            new FileReader(families));
-
-    moveLocationBy(index, nameFinder);
-
-    nameFinder.readLine();
-
-    Scanner scanner = new Scanner(nameFinder.readLine());
-    name = scanner.next();
-    name = scanner.next();
-    name = scanner.next();
-    scanner.close();
-    return name;
-  }
-
-  /**
-   * Prints the specified family to a .hmm file.
-   * 
-   * @param index
-   * @throws IOException
-   */
-  public void exportHMM(int index, String location) throws IOException
-  {
-
-
-    BufferedReader br = new BufferedReader(new FileReader(hmms));
-
-    moveLocationBy(index, br);
-
-    String line = br.readLine();
-
-    PrintWriter writer = new PrintWriter(
-            new FileOutputStream(new File(location), true));
-    while (!"//".equals(line))
-    {
-      writer.println(line);
-      line = br.readLine();
-    }
-    writer.println(line);
-    writer.close();
-    br.close();
-
-  }
-  
-  /**
-   * Clears all raw, binned and current position data in the current directory.
-   * 
-   * @throws FileNotFoundException
-   */
-  public void clear() throws FileNotFoundException
-  {
-    PrintWriter pos = new PrintWriter(
-            currentFolder + "/CurrentPosition.txt");
-    pos.println("0");
-    
-    PrintWriter raw = new PrintWriter(currentFolder + RAW);
-    
-    PrintWriter bin = new PrintWriter(currentFolder + BINNED);
-    
-    pos.close();
-    bin.close();
-    raw.close();
-  }
-
-  public void sortIntoClans(String directory) throws IOException
-  {
-    BufferedReader clanFinder = new BufferedReader(new FileReader(FAMILIESTOCLAN));
-    BufferedReader familyReader = new BufferedReader(
-            new FileReader(families));
-    BufferedReader hmmReader = new BufferedReader(new FileReader(hmms));
-    int families = 0;
-    // moveLocationBy(7000, familyReader);
-    // moveLocationBy(7000, clanFinder);
-    // moveLocationBy(7000, hmmReader);
-    HashMap<String, Integer> clanIndexes = new HashMap<>();
-    ArrayList<Integer> familyCounts = new ArrayList<>();
-    int filePos = 0; 
-    int clanCount = 0;
-    String line;
-    line = clanFinder.readLine();
-    
-    while (!"".equals(line) && !" ".equals(line) && line != null)
-    {
-     String clanName;
-      boolean inClan = false;
-     while (!(line.indexOf("//") > -1))
-     {
-       
-      if (line.indexOf("#=GF CL") > -1)
-      {
-          families++;
-          System.out.println(families);
-          inClan = true;
-        Scanner scanner = new Scanner(line);
-        scanner.next();
-        scanner.next();
-        clanName = scanner.next();
-          scanner.close();
-        
-        if (!clanIndexes.containsKey(clanName))
-        {
-          clanIndexes.put(clanName, clanCount);
-            clanCount++;
-            familyCounts.add(0);
-        }
-
-
-          Integer clanI = clanIndexes.get(clanName);
-          String clanPath = directory + "/Clan" + clanI.toString();
-          createFolders(clanPath);
-
-          int index = clanIndexes.get(clanName);
-          exportFile(familyReader,
-                  clanPath + "/Families/Fam" + familyCounts.get(index)
-                          + ".sto",
-                  false);
-          exportFile(hmmReader,
-                  clanPath + "/HMMs/HMM" + familyCounts.get(index) + ".hmm",
-                  false);
-
-          int count = familyCounts.get(index);
-          count++;
-          familyCounts.set(index, count);
-      }
-        line = clanFinder.readLine();
-
-      }
-      if (!inClan)
-      {
-        moveLocationBy(1, familyReader);
-        moveLocationBy(1, hmmReader);
-      }
-      filePos++;
-      // System.out.println(filePos + " files read.");
-      line = clanFinder.readLine();
-
-     }
-    clanFinder.close();
-
-    for (int clan = 0; clan < clanCount; clan++)
-    {
-      PrintWriter writer = new PrintWriter(
-              directory + "/Clan" + clan + "/NumberOfFamilies.txt");
-      int count = familyCounts.get(clan);
-      writer.print(count);
-      writer.close();
-    }
-      
-    }
-
-  public String getFamilies()
-  {
-    return families;
-  }
-
-  public void setFamilies(String families)
-  {
-    this.families = currentFolder + families;
-  }
-
-  public String getHmms()
-  {
-    return hmms;
-  }
-
-  public void setHmms(String hmms)
-  {
-    this.hmms = currentFolder + hmms;
-  }
-    
-  public void alignWithinClan(String exportLocation, String clansLocation)
-          throws IOException, InterruptedException
-  {
-    int alignmentsExported = 0;
-    for (int clan = 0; clan < 604; clan++)
-    {
-      System.out.println(clan);
-      int famCount = 0;
-      String clanPath = clansLocation + "/Clan" + clan;
-      int numberOfFamilies;
-      BufferedReader br = new BufferedReader(
-              new FileReader(clanPath + "/NumberOfFamilies.txt"));
-      String line = br.readLine();
-      numberOfFamilies = Integer.parseInt(line);
-      br.close();
-      if (numberOfFamilies == 1)
-      {
-        continue;
-      }
-      final String commandExportLocation = exportLocation + "/Clan" + clan;
-      createFolders(commandExportLocation);
-      for (int family = 0; family < numberOfFamilies; family++)
-      {
-        famCount++;
-        ArrayList<Integer> indexes = new ArrayList<>();
-        for (int i = 0; i < numberOfFamilies; i++)
-        {
-          if (i != family)
-          {
-            indexes.add(i);
-          }
-        }
-
-        int hmmIndex = getRandom(indexes);
-        String famPath = clanPath + "/Families/Fam" + family + ".sto";
-        String hmmPath = clanPath + "/HMMs/HMM" + hmmIndex + ".hmm";
-        String command = "/media/sf_Shared_Folder/hmmer/binaries/hmmalign --mapali "
-                + clanPath + "/Families/Fam" + hmmIndex + ".sto"
-                + " --trim ";
-        command += hmmPath + " ";
-        command += famPath;
-        final int familyIndex = family;
-        final Process p = Runtime.getRuntime().exec(command);
-
-        new Thread(new Runnable()
-        {
-          @Override
-          public void run()
-          {
-            BufferedReader input = new BufferedReader(
-                    new InputStreamReader(p.getInputStream()));
-            String line = null;
-
-            try
-            {
-              PrintWriter writer = new PrintWriter(commandExportLocation
-                      + "/Families/Fam" + familyIndex + ".sto");
-              String lastLine = "";
-              boolean dataFound = false;
-              while ((line = input.readLine()) != null)
-              {
-                if (line.contains("#=GR") && !dataFound)
-                {
-                  writer.println(lastLine);
-                  dataFound = true;
-                }
-                if (line.contains("#") || dataFound || " ".equals(line)
-                        || "".equals(line) || "//".equals(line))
-                {
-                  writer.println(line);
-                }
-                lastLine = line;
-              }
-              writer.close();
-            } catch (IOException e)
-            {
-              e.printStackTrace();
-            }
-          }
-        }).start();
-
-        p.waitFor();
-
-        BufferedReader hmmExporter = new BufferedReader(
-                new FileReader(hmmPath));
-
-        exportFile(hmmExporter,
-                commandExportLocation + "/HMMs/HMM" + family + ".hmm",
-                false);
-
-        alignmentsExported++;
-
-
-      }
-      PrintWriter writer = new PrintWriter(
-              commandExportLocation + "/NumberOfFamilies.txt");
-      writer.print(famCount);
-      writer.close();
-    }
-
-  }
-
-  public boolean atEnd(BufferedReader br) throws IOException
-  {
-    boolean end = false;
-    br.mark(80);
-    String line = br.readLine();
-    if ("".equals(line) || line == null)
-    {
-      end = true;
-    }
-    br.reset();
-    return end;
-  }
-
-  public int getRandom(ArrayList<Integer> list)
-  {
-    if (!(list.size() > 0))
-    {
-      System.out.println("Error - size = " + list.size());
-    }
-    int index = generator.nextInt(list.size());
-    int value = list.get(index);
-    list.remove(index);
-    return value;
-  }
-
-  public void createFolders(String clanPath)
-  {
-    File clanFolder = new File(clanPath);
-    if (!clanFolder.exists())
-    {
-      clanFolder.mkdir();
-    }
-
-    File famFolder = new File(clanPath + "/Families");
-    File hmmFolder = new File(clanPath + "/HMMs");
-    if (!famFolder.exists())
-    {
-      famFolder.mkdir();
-      hmmFolder.mkdir();
-    }
-  }
-}
-
-
-
-
diff --git a/src/jalview/util/ProbabilityAnalyserKickstarter.java b/src/jalview/util/ProbabilityAnalyserKickstarter.java
deleted file mode 100644 (file)
index 59c0a9f..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-package jalview.util;
-
-import java.io.IOException;
-import java.util.Scanner;
-
-/**
- * This class contains the brain of the analyser program, and contains a number
- * of commands for the processing of data.
- * 
- * @author TZVanaalten
- *
- */
-
-public class ProbabilityAnalyserKickstarter
-{
-
-  public static void main(String[] args)
-          throws IOException, InterruptedException
-  {
-
-    // this does all of the processing
-    HMMProbabilityDistributionAnalyser analyser = new HMMProbabilityDistributionAnalyser();
-
-    boolean running = true;
-    System.out.println("ACTIVATED");
-    while (running)
-    {
-      Scanner keyboard = new Scanner(System.in);
-      String command = keyboard.nextLine();
-
-      Scanner inputScanner = new Scanner(command);
-      // prints family to console. Syntax is printFam <index>
-      if (command.indexOf("printFam") > -1)
-      {
-        try
-        {
-          inputScanner.next();
-          int index = inputScanner.nextInt();
-          analyser.printFam(index);
-          continue;
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-
-      }
-      // prints HMM to console. Syntax is printHMM <index>
-      if (command.indexOf("printHMM") > -1)
-      {
-        try
-        {
-        inputScanner.next();
-        int index = inputScanner.nextInt();
-        analyser.printHMM(index);
-        continue;
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-      }
-      // prints family to file in current folder. Syntax is exportFam <index>.
-      if (command.indexOf("exportFam") > -1)
-      {
-        try
-        {
-        inputScanner.next();
-        int index = inputScanner.nextInt();
-          String location = inputScanner.next();
-          analyser.exportFam(index, location);
-        continue;
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-      }
-      // prints HMM to file in current folder. Syntax is exportHMM <index>.
-      if (command.indexOf("exportHMM") > -1)
-      {
-        try
-        {
-        inputScanner.next();
-        int index = inputScanner.nextInt();
-          String location = inputScanner.next();
-          analyser.exportHMM(index, location);
-        continue;
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-      }
-      // Processes data. Syntax is run <number of loops> <increments>. The
-      // number loops specifies the number of increments the program will run.
-      // After each increment, the data stored currently in the program is
-      // exported and re-read back into the program. This is to ensure that the
-      // program can be terminated without losing a large quantity of data. The
-      // increment is the number of families read per 'save'.
-      if (command.indexOf("run") > -1 && !(command.indexOf("ToEnd") > -1))
-      {
-        try
-        {
-
-        inputScanner.next();
-
-        int loops = inputScanner.nextInt();
-        int increments = inputScanner.nextInt();
-        boolean keepRaw = inputScanner.nextBoolean();
-
-        for (int i = 0; i < loops; i++)
-        {
-          analyser.run(increments, keepRaw);
-          System.out.println("Saved");
-        }
-        System.out.println("Task completed");
-        continue;
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-        continue;
-      }
-      if ((command.indexOf("runToEnd") > -1))
-      {
-        try
-        {
-
-          inputScanner.next();
-          int minCount = inputScanner.nextInt();
-          int maxCount = inputScanner.nextInt();
-          boolean keepRaw = inputScanner.nextBoolean();
-          boolean forClans = inputScanner.nextBoolean();
-          analyser.runToEnd(minCount, maxCount, keepRaw, forClans);
-          System.out.println("Task completed");
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-        continue;
-      }
-      // terminates program. Syntax is terminate.
-      if (command.indexOf("terminate") > -1)
-      {
-        running = false;
-        continue;
-      }
-      // clears files in current directory (Only a specific set of files).
-      // Syntax is clear.
-      if (command.indexOf("clear") > -1)
-      {
-        analyser.clear();
-        continue;
-      }
-      // changes current directory. Syntax is cd <directory>
-      if (command.indexOf("cd") > -1)
-      {
-        try
-        {
-        inputScanner.next();
-        analyser.setFolder(inputScanner.next());
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-
-        }
-        continue;
-      }
-
-      if (command.indexOf("getFamName") > -1)
-      {
-        try
-        {
-        inputScanner.next();
-        System.out.println(analyser.getFamilyName(inputScanner.nextInt()));
-
-        } catch (Exception e)
-        {
-          System.out.println("Command failed");
-        }
-        continue;
-      }
-      if (command.indexOf("sortIntoClans") > -1)
-      {
-        inputScanner.next();
-        analyser.sortIntoClans(inputScanner.next());
-          continue;
-
-      }
-      if (command.indexOf("setFamilies") > -1)
-      {
-        inputScanner.next();
-        analyser.setFamilies(inputScanner.next());
-        continue;
-
-      }
-
-      if (command.indexOf("setHMMs") > -1)
-      {
-        inputScanner.next();
-        analyser.setHmms(inputScanner.next());
-        continue;
-
-      }
-
-      if (command.indexOf("alignWithinClans") > -1)
-      {
-        inputScanner.next();
-        String export = inputScanner.next();
-        String clans = inputScanner.next();
-        analyser.alignWithinClan(export, clans);
-        continue;
-
-      }
-
-      System.out.println("Unrecognised command");
-    }
-
-
-
-
-  }
-
-}
diff --git a/src/jalview/workers/InformationThread.java b/src/jalview/workers/InformationThread.java
deleted file mode 100644 (file)
index d35025b..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-package jalview.workers;
-
-import jalview.analysis.AAFrequency;
-import jalview.api.AlignViewportI;
-import jalview.api.AlignmentViewPanel;
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.Annotation;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.ProfilesI;
-import jalview.datamodel.SequenceGroup;
-import jalview.datamodel.SequenceI;
-import jalview.util.MessageManager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * This class calculates HMM Information Content annotations, based on any HMM
- * consensus sequences and their HMM models. HMM consensus sequences may be
- * present for the whole alignment, or subgroups of it.
- *
- */
-public class InformationThread extends AlignCalcWorker
-{
-  public static final String HMM_CALC_ID = "HMM";
-
-  /**
-   * Constructor
-   * 
-   * @param alignViewport
-   * @param alignPanel
-   */
-  public InformationThread(AlignViewportI alignViewport,
-          AlignmentViewPanel alignPanel)
-  {
-    super(alignViewport, alignPanel);
-  }
-
-  /**
-   * Recomputes Information annotations for any HMM consensus sequences (for
-   * alignment and/or groups)
-   */
-  @Override
-  public void run()
-  {
-    if (alignViewport.getAlignment().getHmmSequences().isEmpty())
-    {
-      return;
-    }
-    if (calcMan.isPending(this))
-    {
-      return;
-    }
-    calcMan.notifyStart(this);
-    // long started = System.currentTimeMillis();
-
-    try
-    {
-      if (calcMan.isPending(this))
-      {
-        // another instance of this is waiting to run
-        calcMan.workerComplete(this);
-        return;
-      }
-      while (!calcMan.notifyWorking(this))
-      {
-        // another thread in progress, wait my turn
-        try
-        {
-          if (ap != null)
-          {
-            ap.paintAlignment(false, false);
-          }
-          Thread.sleep(200);
-        } catch (Exception ex)
-        {
-          ex.printStackTrace();
-        }
-      }
-      if (alignViewport.isClosed())
-      {
-        abortAndDestroy();
-        return;
-      }
-
-      AlignmentI alignment = alignViewport.getAlignment();
-      int aWidth = alignment == null ? -1 : alignment.getWidth();
-      if (aWidth < 0)
-      {
-        calcMan.workerComplete(this);
-        return;
-      }
-
-      /*
-       * compute information profiles for any HMM consensus sequences
-       * for the alignment or sub-groups
-       */
-      computeProfiles(alignment);
-
-      /*
-       * construct the corresponding annotations
-       */
-      updateAnnotation();
-
-      if (ap != null)
-      {
-        ap.adjustAnnotationHeight();
-        ap.paintAlignment(true, true);
-      }
-    } catch (OutOfMemoryError error)
-    {
-      calcMan.disableWorker(this);
-      ap.raiseOOMWarning("calculating information", error);
-    } finally
-    {
-      calcMan.workerComplete(this);
-    }
-  }
-
-  /**
-   * Computes HMM profiles for any HMM consensus sequences (for alignment or
-   * subgroups). Any alignment profile computed is stored on the viewport, any
-   * group profile computed is stored on the respective sequence group.
-   * 
-   * @param alignment
-   * @see AlignViewportI#setHmmProfiles(ProfilesI)
-   */
-  protected void computeProfiles(AlignmentI alignment)
-  {
-    int width = alignment.getWidth();
-
-    /*
-     * alignment HMM profile
-     */
-    List<SequenceI> seqs = alignment.getHmmSequences();
-    if (!seqs.isEmpty())
-    {
-      HiddenMarkovModel hmm = seqs.get(0).getHMM();
-      ProfilesI hmmProfiles = AAFrequency.calculateHMMProfiles(hmm, width,
-              0, width, alignViewport.isIgnoreBelowBackground(),
-              alignViewport.isInfoLetterHeight());
-      alignViewport.setHmmProfiles(hmmProfiles);
-    }
-
-    /*
-     * group HMM profiles
-     */
-    List<SequenceGroup> groups = alignment.getGroups();
-    for (SequenceGroup group : groups)
-    {
-      seqs = group.getHmmSequences();
-      if (!seqs.isEmpty())
-      {
-        HiddenMarkovModel hmm = seqs.get(0).getHMM();
-        ProfilesI hmmProfiles = AAFrequency.calculateHMMProfiles(hmm, width,
-                0, width, group.isIgnoreBelowBackground(),
-                group.isUseInfoLetterHeight());
-        group.setHmmProfiles(hmmProfiles);
-      }
-    }
-  }
-
-  /**
-   * gets the sequences on the alignment on the viewport.
-   * 
-   * @return
-   */
-  protected SequenceI[] getSequences()
-  {
-    return alignViewport.getAlignment().getSequencesArray();
-  }
-
-  /**
-   * Get the Gap annotation for the alignment
-   * 
-   * @return
-   */
-  protected AlignmentAnnotation getGapAnnotation()
-  {
-    return alignViewport.getOccupancyAnnotation();
-  }
-
-  /**
-   * Computes Information Content annotation for any HMM consensus sequences
-   * (for alignment or groups), and updates (or adds) the annotation to the
-   * sequence and the alignment
-   */
-  @Override
-  public void updateAnnotation()
-  {
-    AlignmentI alignment = alignViewport.getAlignment();
-
-    float maxInformation = 0f;
-    List<AlignmentAnnotation> infos = new ArrayList<>();
-
-    /*
-     * annotation for alignment HMM consensus if present
-     */
-    List<SequenceI> hmmSeqs = alignment.getHmmSequences();
-    if (!hmmSeqs.isEmpty())
-    {
-      ProfilesI profile = alignViewport.getHmmProfiles();
-      float m = updateInformationAnnotation(hmmSeqs.get(0), profile, null,
-              infos);
-      maxInformation = Math.max(maxInformation, m);
-    }
-
-    /*
-     * annotation for group HMM consensus if present
-     */
-    for (SequenceGroup group : alignment.getGroups())
-    {
-      hmmSeqs = group.getHmmSequences();
-      if (!hmmSeqs.isEmpty())
-      {
-        ProfilesI profiles = group.getHmmProfiles();
-        float m = updateInformationAnnotation(hmmSeqs.get(0), profiles,
-                group, infos);
-        maxInformation = Math.max(maxInformation, m);
-      }
-    }
-
-    /*
-     * maxInformation holds the maximum value of information score;
-     * set this as graphMax in all annotations to scale them all the same
-     */
-    for (AlignmentAnnotation ann : infos)
-    {
-      ann.graphMax = maxInformation;
-    }
-  }
-
-  /**
-   * Updates (and first constructs if necessary) an HMM Profile information
-   * content annotation for a sequence. The <code>group</code> argument is null
-   * for the whole alignment annotation, not null for a subgroup annotation. The
-   * updated annotation is added to the <code>infos</code> list. Answers the
-   * maximum information content value of any annotation (for use as a scaling
-   * factor for display).
-   * 
-   * @param seq
-   * @param profile
-   * @param group
-   * @param infos
-   * @return
-   */
-  protected float updateInformationAnnotation(SequenceI seq,
-          ProfilesI profile, SequenceGroup group,
-          List<AlignmentAnnotation> infos)
-  {
-    if (seq == null || profile == null)
-    {
-      return 0f;
-    }
-
-    AlignmentAnnotation ann = findOrCreateAnnotation(seq, group);
-
-    seq.addAlignmentAnnotation(ann);
-    infos.add(ann);
-
-    float max = AAFrequency.completeInformation(ann, profile,
-            profile.getStartColumn(), profile.getEndColumn() + 1);
-
-    return max;
-  }
-
-  /**
-   * A helper method that first searches for the HMM annotation that matches the
-   * group reference (null for the whole alignment annotation). If found, its
-   * sequence reference is updated to the given sequence (the recomputed HMM
-   * consensus sequence). If not found, it is created. This supports both
-   * creating the annotation the first time hmmbuild is run, and updating it if
-   * hmmbuild is re-run.
-   * 
-   * @param seq
-   * @param group
-   * @return
-   */
-  AlignmentAnnotation findOrCreateAnnotation(SequenceI seq,
-          SequenceGroup group)
-  {
-    /*
-     * can't use Alignment.findOrCreateAnnotation here because we 
-     * want to update, rather than match on, the sequence ref
-     */
-    AlignmentAnnotation info = null;
-
-    AlignmentI alignment = alignViewport.getAlignment();
-    AlignmentAnnotation[] anns = alignment.getAlignmentAnnotation();
-    if (anns != null)
-    {
-      for (AlignmentAnnotation ann : anns)
-      {
-        if (HMM_CALC_ID.equals(ann.getCalcId()) && group == ann.groupRef)
-        {
-          info = ann;
-          info.setSequenceRef(seq);
-          info.label = seq.getName(); // in case group name changed!
-          break;
-        }
-      }
-    }
-
-    if (info == null)
-    {
-      int aWidth = alignment.getWidth();
-      String desc = MessageManager
-              .getString("label.information_description");
-      float graphMax = 6.52f; // todo where does this value derive from?
-      info = new AlignmentAnnotation(seq.getName(), desc,
-              new Annotation[aWidth], 0f, graphMax,
-              AlignmentAnnotation.BAR_GRAPH);
-      info.setCalcId(HMM_CALC_ID);
-      info.setSequenceRef(seq);
-      info.groupRef = group;
-      info.hasText = true;
-      alignment.addAnnotation(info);
-    }
-
-    return info;
-  }
-}
diff --git a/src/jalview/ws/DasSequenceFeatureFetcher.java b/src/jalview/ws/DasSequenceFeatureFetcher.java
deleted file mode 100644 (file)
index c661e2c..0000000
+++ /dev/null
@@ -1,925 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws;
-
-import jalview.bin.Cache;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.gui.FeatureSettings;
-import jalview.gui.JvOptionPane;
-import jalview.util.DBRefUtils;
-import jalview.util.MessageManager;
-import jalview.util.UrlLink;
-import jalview.ws.dbsources.das.api.DasSourceRegistryI;
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.biodas.jdas.client.FeaturesClient;
-import org.biodas.jdas.client.adapters.features.DasGFFAdapter;
-import org.biodas.jdas.client.adapters.features.DasGFFAdapter.GFFAdapter;
-import org.biodas.jdas.client.threads.FeaturesClientMultipleSources;
-import org.biodas.jdas.schema.features.ERRORSEGMENT;
-import org.biodas.jdas.schema.features.FEATURE;
-import org.biodas.jdas.schema.features.LINK;
-import org.biodas.jdas.schema.features.SEGMENT;
-import org.biodas.jdas.schema.features.TYPE;
-import org.biodas.jdas.schema.features.UNKNOWNFEATURE;
-import org.biodas.jdas.schema.features.UNKNOWNSEGMENT;
-import org.biodas.jdas.schema.sources.COORDINATES;
-
-/**
- * DOCUMENT ME!
- * 
- * @author $author$
- * @version $Revision$
- */
-public class DasSequenceFeatureFetcher
-{
-  SequenceI[] sequences;
-
-  AlignFrame af;
-
-  FeatureSettings fsettings;
-
-  StringBuffer sbuffer = new StringBuffer();
-
-  List<jalviewSourceI> selectedSources;
-
-  boolean cancelled = false;
-
-  private void debug(String mesg)
-  {
-    debug(mesg, null);
-  }
-
-  private void debug(String mesg, Exception e)
-  {
-    if (Cache.log != null)
-    {
-      Cache.log.debug(mesg, e);
-    }
-    else
-    {
-      System.err.println(mesg);
-      if (e != null)
-      {
-        e.printStackTrace();
-      }
-    }
-  }
-
-  long startTime;
-
-  private DasSourceRegistryI sourceRegistry;
-
-  private boolean useJDASMultiThread = true;
-
-  /**
-   * Creates a new SequenceFeatureFetcher object. Uses default
-   * 
-   * @param align
-   *          DOCUMENT ME!
-   * @param ap
-   *          DOCUMENT ME!
-   */
-  public DasSequenceFeatureFetcher(SequenceI[] sequences,
-          FeatureSettings fsettings, Vector selectedSources)
-  {
-    this(sequences, fsettings, selectedSources, true, true, true);
-  }
-
-  public DasSequenceFeatureFetcher(SequenceI[] oursequences,
-          FeatureSettings fsettings, List<jalviewSourceI> selectedSources2,
-          boolean checkDbrefs, boolean promptFetchDbrefs)
-  {
-    this(oursequences, fsettings, selectedSources2, checkDbrefs,
-            promptFetchDbrefs, true);
-  }
-
-  public DasSequenceFeatureFetcher(SequenceI[] oursequences,
-          FeatureSettings fsettings, List<jalviewSourceI> selectedSources2,
-          boolean checkDbrefs, boolean promptFetchDbrefs,
-          boolean useJDasMultiThread)
-  {
-    this.useJDASMultiThread = useJDasMultiThread;
-    this.selectedSources = new ArrayList<>();
-    // filter both sequences and sources to eliminate duplicates
-    for (jalviewSourceI src : selectedSources2)
-    {
-      if (!selectedSources.contains(src))
-      {
-        selectedSources.add(src);
-      }
-      ;
-    }
-    Vector sqs = new Vector();
-    for (int i = 0; i < oursequences.length; i++)
-    {
-      if (!sqs.contains(oursequences[i]))
-      {
-        sqs.addElement(oursequences[i]);
-      }
-    }
-    sequences = new SequenceI[sqs.size()];
-    for (int i = 0; i < sequences.length; i++)
-    {
-      sequences[i] = (SequenceI) sqs.elementAt(i);
-    }
-    if (fsettings != null)
-    {
-      this.fsettings = fsettings;
-      this.af = fsettings.af;
-      af.setShowSeqFeatures(true);
-    }
-    int uniprotCount = 0;
-    for (jalviewSourceI source : selectedSources)
-    {
-      for (COORDINATES coords : source.getVersion().getCOORDINATES())
-      {
-        // TODO: match UniProt coord system canonically (?) - does
-        // UniProt==uniprot==UNIPROT ?
-        if (coords.getAuthority().toLowerCase().equals("uniprot"))
-        {
-          uniprotCount++;
-          break;
-        }
-      }
-    }
-
-    int refCount = 0;
-    for (int i = 0; i < sequences.length; i++)
-    {
-      DBRefEntry[] dbref = sequences[i].getDBRefs();
-      if (dbref != null)
-      {
-        for (int j = 0; j < dbref.length; j++)
-        {
-          if (dbref[j].getSource().equals(DBRefSource.UNIPROT))
-          {
-            refCount++;
-            break;
-          }
-        }
-      }
-    }
-
-    if (checkDbrefs && refCount < sequences.length && uniprotCount > 0)
-    {
-
-      int reply = JvOptionPane.YES_OPTION;
-      if (promptFetchDbrefs)
-      {
-        reply = JvOptionPane.showInternalConfirmDialog(Desktop.desktop,
-                MessageManager.getString(
-                        "info.you_want_jalview_to_find_uniprot_accessions"),
-                MessageManager
-                        .getString("label.find_uniprot_accession_ids"),
-                JvOptionPane.YES_NO_OPTION, JvOptionPane.QUESTION_MESSAGE);
-      }
-
-      if (reply == JvOptionPane.YES_OPTION)
-      {
-        Thread thread = new Thread(new FetchDBRefs());
-        thread.start();
-      }
-      else
-      {
-        _startFetching();
-      }
-    }
-    else
-    {
-      _startFetching();
-    }
-
-  }
-
-  private void _startFetching()
-  {
-    running = true;
-    new Thread(new FetchSeqFeatures()).start();
-  }
-
-  class FetchSeqFeatures implements Runnable
-  {
-    @Override
-    public void run()
-    {
-      startFetching();
-      setGuiFetchComplete();
-    }
-  }
-
-  class FetchDBRefs implements Runnable
-  {
-    @Override
-    public void run()
-    {
-      running = true;
-      boolean isNucleotide = af.getViewport().getAlignment().isNucleotide();
-      new DBRefFetcher(sequences, af, null, af.featureSettings,
-              isNucleotide).fetchDBRefs(true);
-
-      startFetching();
-      setGuiFetchComplete();
-    }
-  }
-
-  /**
-   * Spawns Fetcher threads to add features to sequences in the dataset
-   */
-  void startFetching()
-  {
-    running = true;
-    cancelled = false;
-    startTime = System.currentTimeMillis();
-    if (af != null)
-    {
-      af.setProgressBar(MessageManager.getString(
-              "status.fetching_das_sequence_features"), startTime);
-    }
-    if (sourceRegistry == null)
-    {
-      sourceRegistry = Cache.getDasSourceRegistry();
-    }
-    if (selectedSources == null || selectedSources.size() == 0)
-    {
-      try
-      {
-        jalviewSourceI[] sources = sourceRegistry.getSources()
-                .toArray(new jalviewSourceI[0]);
-        String active = Cache.getDefault("DAS_ACTIVE_SOURCE", "uniprot");
-        StringTokenizer st = new StringTokenizer(active, "\t");
-        selectedSources = new Vector();
-        String token;
-        while (st.hasMoreTokens())
-        {
-          token = st.nextToken();
-          for (int i = 0; i < sources.length; i++)
-          {
-            if (sources[i].getTitle().equals(token))
-            {
-              selectedSources.add(sources[i]);
-              break;
-            }
-          }
-        }
-      } catch (Exception ex)
-      {
-        debug("Exception whilst setting default feature sources from registry and local preferences.",
-                ex);
-      }
-    }
-
-    if (selectedSources == null || selectedSources.size() == 0)
-    {
-      System.out.println("No DAS Sources active");
-      cancelled = true;
-      setGuiNoDassourceActive();
-      return;
-    }
-
-    sourcesRemaining = selectedSources.size();
-    FeaturesClientMultipleSources fc = new FeaturesClientMultipleSources();
-    fc.setConnProps(sourceRegistry.getSessionHandler());
-    // Now sending requests one at a time to each server
-    ArrayList<jalviewSourceI> srcobj = new ArrayList<>();
-    ArrayList<String> src = new ArrayList<>();
-    List<List<String>> ids = new ArrayList<>();
-    List<List<DBRefEntry>> idobj = new ArrayList<>();
-    List<Map<String, SequenceI>> sqset = new ArrayList<>();
-    for (jalviewSourceI _sr : selectedSources)
-    {
-
-      Map<String, SequenceI> slist = new HashMap<>();
-      List<DBRefEntry> idob = new ArrayList<>();
-      List<String> qset = new ArrayList<>();
-
-      for (SequenceI seq : sequences)
-      {
-        Object[] idset = nextSequence(_sr, seq);
-        if (idset != null)
-        {
-          List<DBRefEntry> _idob = (List<DBRefEntry>) idset[0];
-          List<String> _qset = (List<String>) idset[1];
-          if (_idob.size() > 0)
-          {
-            // add sequence's ref for each id derived from it
-            // (space inefficient, but most unambiguous)
-            // could replace with hash with _qset values as keys.
-            Iterator<DBRefEntry> dbobj = _idob.iterator();
-            for (String q : _qset)
-            {
-              SequenceI osq = slist.get(q);
-              DBRefEntry dr = dbobj.next();
-              if (osq != null && osq != seq)
-              {
-                // skip - non-canonical query
-              }
-              else
-              {
-                idob.add(dr);
-                qset.add(q);
-                slist.put(q, seq);
-              }
-            }
-          }
-        }
-      }
-      if (idob.size() > 0)
-      {
-        srcobj.add(_sr);
-        src.add(_sr.getSourceURL());
-        ids.add(qset);
-        idobj.add(idob);
-        sqset.add(slist);
-      }
-    }
-    Map<String, Map<List<String>, Exception>> errors = new HashMap<>();
-    Map<String, Map<List<String>, DasGFFAdapter>> results = new HashMap<>();
-    if (!useJDASMultiThread)
-    {
-      Iterator<String> sources = src.iterator();
-      // iterate over each query for each source and do each one individually
-      for (List<String> idl : ids)
-      {
-        String source = sources.next();
-        FeaturesClient featuresc = new FeaturesClient(
-                sourceRegistry.getSessionHandler()
-                        .getConnectionPropertyProviderFor(source));
-        for (String id : idl)
-        {
-          List<String> qid = Arrays.asList(new String[] { id });
-          try
-          {
-            DasGFFAdapter dga = featuresc.fetchData(source, qid);
-            Map<List<String>, DasGFFAdapter> ers = results.get(source);
-            if (ers == null)
-            {
-              results.put(source,
-                      ers = new HashMap<>());
-            }
-            ers.put(qid, dga);
-          } catch (Exception ex)
-          {
-            Map<List<String>, Exception> ers = errors.get(source);
-            if (ers == null)
-            {
-              errors.put(source,
-                      ers = new HashMap<>());
-            }
-            ers.put(qid, ex);
-          }
-        }
-      }
-    }
-    else
-    {
-      // pass them all at once
-      fc.fetchData(src, ids, false, results, errors);
-      fc.shutDown();
-      while (!fc.isTerminated())
-      {
-        try
-        {
-          Thread.sleep(200);
-        } catch (InterruptedException x)
-        {
-
-        }
-      }
-    }
-    Iterator<List<String>> idset = ids.iterator();
-    Iterator<List<DBRefEntry>> idobjset = idobj.iterator();
-    Iterator<Map<String, SequenceI>> seqset = sqset.iterator();
-    for (jalviewSourceI source : srcobj)
-    {
-      processResponse(seqset.next(), source, idset.next(), idobjset.next(),
-              results.get(source.getSourceURL()),
-              errors.get(source.getSourceURL()));
-    }
-  }
-
-  private void processResponse(Map<String, SequenceI> sequencemap,
-          jalviewSourceI jvsource, List<String> ids, List<DBRefEntry> idobj,
-          Map<List<String>, DasGFFAdapter> results,
-          Map<List<String>, Exception> errors)
-  {
-    Set<SequenceI> sequences = new HashSet<>();
-    String source = jvsource.getSourceURL();
-    // process features
-    DasGFFAdapter result = (results == null) ? null : results.get(ids);
-    Exception error = (errors == null) ? null : errors.get(ids);
-    if (result == null)
-    {
-      debug("das source " + source + " could not be contacted. "
-              + (error == null ? "" : error.toString()));
-    }
-    else
-    {
-
-      GFFAdapter gff = result.getGFF();
-      List<SEGMENT> segments = gff.getSegments();
-      List<ERRORSEGMENT> errorsegs = gff.getErrorSegments();
-      List<UNKNOWNFEATURE> unkfeats = gff.getUnknownFeatures();
-      List<UNKNOWNSEGMENT> unksegs = gff.getUnknownSegments();
-      debug("das source " + source + " returned " + gff.getTotal()
-              + " responses. " + (errorsegs != null ? errorsegs.size() : 0)
-              + " were incorrect segment queries, "
-              + (unkfeats != null ? unkfeats.size() : 0)
-              + " were unknown features "
-              + (unksegs != null ? unksegs.size() : 0)
-              + " were unknown segments and "
-              + (segments != null ? segments.size() : 0)
-              + " were segment responses.");
-      Iterator<DBRefEntry> dbr = idobj.iterator();
-      if (segments != null)
-      {
-        for (SEGMENT seg : segments)
-        {
-          String id = seg.getId();
-          if (ids.indexOf(id) == -1)
-          {
-            id = id.toUpperCase();
-          }
-          DBRefEntry dbref = idobj.get(ids.indexOf(id));
-          SequenceI sequence = sequencemap.get(id);
-          boolean added = false;
-          sequences.add(sequence);
-
-          for (FEATURE feat : seg.getFEATURE())
-          {
-            // standard DAS feature-> jalview sequence feature transformation
-            SequenceFeature f = newSequenceFeature(feat,
-                    jvsource.getTitle());
-            if (!parseSeqFeature(sequence, f, feat, jvsource))
-            {
-              if (dbref.getMap() != null && f.getBegin() > 0
-                      && f.getEnd() > 0)
-              {
-                debug("mapping from " + f.getBegin() + " - " + f.getEnd());
-                SequenceFeature vf[] = null;
-
-                try
-                {
-                  vf = dbref.getMap().locateFeature(f);
-                } catch (Exception ex)
-                {
-                  Cache.log.warn(
-                          "Error in 'experimental' mapping of features. Please try to reproduce and then report info to jalview-discuss@jalview.org.");
-                  Cache.log.warn("Mapping feature from " + f.getBegin()
-                          + " to " + f.getEnd() + " in dbref "
-                          + dbref.getAccessionId() + " in "
-                          + dbref.getSource());
-                  Cache.log.warn("using das Source " + source);
-                  Cache.log.warn("Exception", ex);
-                }
-
-                if (vf != null)
-                {
-                  for (int v = 0; v < vf.length; v++)
-                  {
-                    debug("mapping to " + v + ": " + vf[v].getBegin()
-                            + " - " + vf[v].getEnd());
-                    sequence.addSequenceFeature(vf[v]);
-                  }
-                }
-              }
-              else
-              {
-                sequence.addSequenceFeature(f);
-              }
-            }
-          }
-        }
-        featuresAdded(sequences);
-      }
-      else
-      {
-        // System.out.println("No features found for " + seq.getName()
-        // + " from: " + e.getDasSource().getNickname());
-      }
-    }
-  }
-
-  private void setGuiNoDassourceActive()
-  {
-
-    if (af != null)
-    {
-      af.setProgressBar(
-              MessageManager.getString("status.no_das_sources_active"),
-              startTime);
-    }
-    if (getFeatSettings() != null)
-    {
-      fsettings.noDasSourceActive();
-    }
-  }
-
-  /**
-   * Update our fsettings dialog reference if we didn't have one when we were
-   * first initialised.
-   * 
-   * @return fsettings
-   */
-  private FeatureSettings getFeatSettings()
-  {
-    if (fsettings == null)
-    {
-      if (af != null)
-      {
-        fsettings = af.featureSettings;
-      }
-    }
-    return fsettings;
-  }
-
-  public void cancel()
-  {
-    if (af != null)
-    {
-      af.setProgressBar(MessageManager.getString(
-              "status.das_feature_fetching_cancelled"), startTime);
-    }
-    cancelled = true;
-  }
-
-  int sourcesRemaining = 0;
-
-  private boolean running = false;
-
-  private void setGuiFetchComplete()
-  {
-    running = false;
-    if (!cancelled && af != null)
-    {
-      // only update the progress bar if we've completed the fetch normally
-      af.setProgressBar(MessageManager.getString(
-              "status.das_feature_fetching_complete"), startTime);
-    }
-
-    if (af != null && af.featureSettings != null)
-    {
-      af.featureSettings.discoverAllFeatureData();
-    }
-
-    if (getFeatSettings() != null)
-    {
-      fsettings.complete();
-    }
-  }
-
-  void featuresAdded(Set<SequenceI> seqs)
-  {
-    if (af == null)
-    {
-      // no gui to update with features.
-      return;
-    }
-    af.getFeatureRenderer().featuresAdded();
-
-    int start = af.getViewport().getRanges().getStartSeq();
-    int end = af.getViewport().getRanges().getEndSeq();
-    int index;
-    for (index = start; index < end; index++)
-    {
-      for (SequenceI seq : seqs)
-      {
-        if (seq == af.getViewport().getAlignment().getSequenceAt(index)
-                .getDatasetSequence())
-        {
-          af.alignPanel.paintAlignment(true, true);
-          index = end;
-          break;
-        }
-      }
-    }
-  }
-
-  Object[] nextSequence(jalviewSourceI dasSource, SequenceI seq)
-  {
-    if (cancelled)
-    {
-      return null;
-    }
-    DBRefEntry[] uprefs = DBRefUtils.selectRefs(seq.getDBRefs(),
-            new String[]
-            {
-                // jalview.datamodel.DBRefSource.PDB,
-                DBRefSource.UNIPROT,
-            // jalview.datamodel.DBRefSource.EMBL - not tested on any EMBL coord
-            // sys sources
-            });
-    // TODO: minimal list of DAS queries to make by querying with untyped ID if
-    // distinct from any typed IDs
-
-    List<DBRefEntry> ids = new ArrayList<>();
-    List<String> qstring = new ArrayList<>();
-    boolean dasCoordSysFound = false;
-
-    if (uprefs != null)
-    {
-      // do any of these ids match the source's coordinate system ?
-      for (int j = 0; !dasCoordSysFound && j < uprefs.length; j++)
-      {
-
-        for (COORDINATES csys : dasSource.getVersion().getCOORDINATES())
-        {
-          if (DBRefUtils.isDasCoordinateSystem(csys.getAuthority(),
-                  uprefs[j]))
-          {
-            debug("Launched fetcher for coordinate system "
-                    + csys.getAuthority());
-            // Will have to pass any mapping information to the fetcher
-            // - the start/end for the DBRefEntry may not be the same as the
-            // sequence's start/end
-
-            System.out.println(
-                    seq.getName() + " " + (seq.getDatasetSequence() == null)
-                            + " " + csys.getUri());
-
-            dasCoordSysFound = true; // break's out of the loop
-            ids.add(uprefs[j]);
-            qstring.add(uprefs[j].getAccessionId());
-          }
-          else
-          {
-            System.out.println("IGNORE " + csys.getAuthority());
-          }
-        }
-      }
-    }
-
-    if (!dasCoordSysFound)
-    {
-      String id = null;
-      // try and use the name as the sequence id
-      if (seq.getName().indexOf("|") > -1)
-      {
-        id = seq.getName().substring(seq.getName().lastIndexOf("|") + 1);
-        if (id.trim().length() < 4)
-        {
-          // hack - we regard a significant ID as being at least 4
-          // non-whitespace characters
-          id = seq.getName().substring(0, seq.getName().lastIndexOf("|"));
-          if (id.indexOf("|") > -1)
-          {
-            id = id.substring(id.lastIndexOf("|") + 1);
-          }
-        }
-      }
-      else
-      {
-        id = seq.getName();
-      }
-      if (id != null)
-      {
-        DBRefEntry dbre = new DBRefEntry();
-        dbre.setAccessionId(id);
-        // Should try to call a general feature fetcher that
-        // queries many sources with name to discover applicable ID references
-        ids.add(dbre);
-        qstring.add(dbre.getAccessionId());
-      }
-    }
-
-    return new Object[] { ids, qstring };
-  }
-
-  /**
-   * examine the given sequence feature to determine if it should actually be
-   * turned into sequence annotation or database cross references rather than a
-   * simple sequence feature.
-   * 
-   * @param seq
-   *          the sequence to annotate
-   * @param f
-   *          the jalview sequence feature generated from the DAS feature
-   * @param map
-   *          the sequence feature attributes
-   * @param source
-   *          the source that emitted the feature
-   * @return true if feature was consumed as another kind of annotation.
-   */
-  protected boolean parseSeqFeature(SequenceI seq, SequenceFeature f,
-          FEATURE feature, jalviewSourceI source)
-  {
-    SequenceI mseq = seq;
-    while (seq.getDatasetSequence() != null)
-    {
-      seq = seq.getDatasetSequence();
-    }
-    if (f.getType() != null)
-    {
-      String type = f.getType();
-      if (type.equalsIgnoreCase("protein_name"))
-      {
-        // parse name onto the alignment sequence or the dataset sequence.
-        if (seq.getDescription() == null
-                || seq.getDescription().trim().length() == 0)
-        {
-          // could look at the note series to pick out the first long name, for
-          // the moment just use the whole description string
-          seq.setDescription(f.getDescription());
-        }
-        if (mseq.getDescription() == null
-                || mseq.getDescription().trim().length() == 0)
-        {
-          // could look at the note series to pick out the first long name, for
-          // the moment just use the whole description string
-          mseq.setDescription(f.getDescription());
-        }
-        return true;
-      }
-      // check if source has biosapiens or other sequence ontology label
-      if (type.equalsIgnoreCase("DBXREF") || type.equalsIgnoreCase("DBREF"))
-      {
-        // try to parse the accession out
-
-        DBRefEntry dbr = new DBRefEntry();
-        dbr.setVersion(source.getTitle());
-        StringTokenizer st = new StringTokenizer(f.getDescription(), ":");
-        if (st.hasMoreTokens())
-        {
-          dbr.setSource(st.nextToken());
-        }
-        if (st.hasMoreTokens())
-        {
-          dbr.setAccessionId(st.nextToken());
-        }
-        seq.addDBRef(dbr);
-
-        if (f.links != null && f.links.size() > 0)
-        {
-          // feature is also appended to enable links to be seen.
-          // TODO: consider extending dbrefs to have their own links ?
-          // TODO: new feature: extract dbref links from DAS servers and add the
-          // URL pattern to the list of DB name associated links in the user's
-          // preferences ?
-          // for the moment - just fix up the existing feature so it displays
-          // correctly.
-          // f.setType(dbr.getSource());
-          // f.setDescription();
-          f.setValue("linkonly", Boolean.TRUE);
-          // f.setDescription("");
-          Vector newlinks = new Vector();
-          Enumeration it = f.links.elements();
-          while (it.hasMoreElements())
-          {
-            String elm;
-            UrlLink urllink = new UrlLink(elm = (String) it.nextElement());
-            if (urllink.isValid())
-            {
-              urllink.setLabel(f.getDescription());
-              newlinks.addElement(urllink.toString());
-            }
-            else
-            {
-              // couldn't parse the link properly. Keep it anyway - just in
-              // case.
-              debug("couldn't parse link string - " + elm);
-              newlinks.addElement(elm);
-            }
-          }
-          f.links = newlinks;
-          seq.addSequenceFeature(f);
-        }
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * creates a jalview sequence feature from a das feature document
-   * 
-   * @param feat
-   * @return sequence feature object created using dasfeature information
-   */
-  SequenceFeature newSequenceFeature(FEATURE feat, String nickname)
-  {
-    if (feat == null)
-    {
-      return null;
-    }
-    try
-    {
-      /**
-       * Different qNames for a DAS Feature - are string keys to the HashMaps in
-       * features "METHOD") || qName.equals("TYPE") || qName.equals("START") ||
-       * qName.equals("END") || qName.equals("NOTE") || qName.equals("LINK") ||
-       * qName.equals("SCORE")
-       */
-      String desc = new String();
-      if (feat.getNOTE() != null)
-      {
-        for (String note : feat.getNOTE())
-        {
-          desc += note;
-        }
-      }
-
-      int start = 0, end = 0;
-      float score = 0f;
-
-      try
-      {
-        start = Integer.parseInt(feat.getSTART().toString());
-      } catch (Exception ex)
-      {
-      }
-      try
-      {
-        end = Integer.parseInt(feat.getEND().toString());
-      } catch (Exception ex)
-      {
-      }
-      try
-      {
-        Object scr = feat.getSCORE();
-        if (scr != null)
-        {
-          score = (float) Double.parseDouble(scr.toString());
-
-        }
-      } catch (Exception ex)
-      {
-      }
-
-      SequenceFeature f = new SequenceFeature(getTypeString(feat.getTYPE()),
-              desc, start, end, score, nickname);
-
-      if (feat.getLINK() != null)
-      {
-        for (LINK link : feat.getLINK())
-        {
-          // Do not put feature extent in link text for non-positional features
-          if (f.begin == 0 && f.end == 0)
-          {
-            f.addLink(f.getType() + " " + link.getContent() + "|"
-                    + link.getHref());
-          }
-          else
-          {
-            f.addLink(f.getType() + " " + f.begin + "_" + f.end + " "
-                    + link.getContent() + "|" + link.getHref());
-          }
-        }
-      }
-
-      return f;
-    } catch (Exception e)
-    {
-      System.out.println("ERRR " + e);
-      e.printStackTrace();
-      System.out.println("############");
-      debug("Failed to parse " + feat.toString(), e);
-      return null;
-    }
-  }
-
-  private String getTypeString(TYPE type)
-  {
-    return type.getContent();
-  }
-
-  public boolean isRunning()
-  {
-    return running;
-  }
-
-}
diff --git a/src/jalview/ws/dbsources/das/api/DasSourceRegistryI.java b/src/jalview/ws/dbsources/das/api/DasSourceRegistryI.java
deleted file mode 100644 (file)
index 55c50b2..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources.das.api;
-
-import java.util.List;
-
-import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;
-
-/**
- * API for a registry that provides datasources that jalview can access
- * 
- * @author jprocter
- * 
- */
-public interface DasSourceRegistryI
-{
-
-  List<jalviewSourceI> getSources();
-
-  String getDasRegistryURL();
-
-  jalviewSourceI getSource(String nickname);
-
-  // TODO: re JAL-424 - introduce form where local source is queried for
-  // metadata, rather than have it all provided by caller.
-  jalviewSourceI createLocalSource(String uri, String name,
-          boolean sequence, boolean features);
-
-  boolean removeLocalSource(jalviewSourceI source);
-
-  void refreshSources();
-
-  String getLocalSourceString();
-
-  List<jalviewSourceI> resolveSourceNicknames(List<String> sources);
-
-  // TODO: refactor to jDAS specific interface
-  MultipleConnectionPropertyProviderI getSessionHandler();
-}
diff --git a/src/jalview/ws/dbsources/das/api/jalviewSourceI.java b/src/jalview/ws/dbsources/das/api/jalviewSourceI.java
deleted file mode 100644 (file)
index bc3c8ea..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources.das.api;
-
-import jalview.ws.seqfetcher.DbSourceProxy;
-
-import java.util.List;
-
-import org.biodas.jdas.schema.sources.MAINTAINER;
-import org.biodas.jdas.schema.sources.VERSION;
-
-public interface jalviewSourceI
-{
-
-  String getTitle();
-
-  VERSION getVersion();
-
-  String getDocHref();
-
-  String getDescription();
-
-  String getUri();
-
-  MAINTAINER getMAINTAINER();
-
-  String getEmail();
-
-  boolean isLocal();
-
-  boolean isSequenceSource();
-
-  String[] getCapabilityList(VERSION v);
-
-  String[] getLabelsFor(VERSION v);
-
-  /**
-   * 
-   * @return null if not a sequence source, otherwise a series of database
-   *         sources that can be used to retrieve sequence data for particular
-   *         database coordinate systems
-   */
-  List<DbSourceProxy> getSequenceSourceProxies();
-
-  boolean isFeatureSource();
-
-  /**
-   * returns the base URL for the latest version of a source's DAS endpoint set
-   * 
-   * @return
-   */
-  String getSourceURL();
-
-  /**
-   * test to see if this source's latest version is older than the given source
-   * 
-   * @param jalviewSourceI
-   * @return true if newer than given source
-   */
-  boolean isNewerThan(jalviewSourceI jalviewSourceI);
-
-  /**
-   * test if the source is a reference source for the authority
-   * 
-   * @return
-   */
-  boolean isReferenceSource();
-
-}
diff --git a/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java b/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java
deleted file mode 100644 (file)
index 84f6d4d..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources.das.datamodel;
-
-import jalview.bin.Cache;
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceI;
-import jalview.util.MessageManager;
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-import jalview.ws.seqfetcher.DbSourceProxy;
-import jalview.ws.seqfetcher.DbSourceProxyImpl;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
-import org.biodas.jdas.client.SequenceClient;
-import org.biodas.jdas.client.adapters.sequence.DasSequenceAdapter;
-import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;
-import org.biodas.jdas.client.threads.SequenceClientMultipleSources;
-import org.biodas.jdas.schema.sequence.SEQUENCE;
-import org.biodas.jdas.schema.sources.COORDINATES;
-import org.biodas.jdas.schema.sources.SOURCE;
-import org.biodas.jdas.schema.sources.VERSION;
-
-import com.stevesoft.pat.Regex;
-
-/**
- * an instance of this class is created for each unique DAS Sequence source (ie
- * one capable of handling the 'sequence' for a particular MapMaster)
- * 
- * @author JimP
- * 
- */
-public class DasSequenceSource extends DbSourceProxyImpl
-        implements DbSourceProxy
-{
-  private jalviewSourceI jsrc;
-
-  protected SOURCE source = null;
-
-  protected VERSION version = null;
-
-  protected COORDINATES coordsys = null;
-
-  protected String dbname = "DASCS";
-
-  protected String dbrefname = "das:source";
-
-  protected MultipleConnectionPropertyProviderI connprops = null;
-
-  /**
-   * DAS sources are tier 1 - if we have a direct DB connection then we should
-   * prefer it
-   */
-  private int tier = 1;
-
-  /**
-   * create a new DbSource proxy for a DAS 1 source
-   * 
-   * @param dbnbame
-   *          Human Readable Name to use when fetching from this source
-   * @param dbrefname
-   *          DbRefName for DbRefs attached to sequences retrieved from this
-   *          source
-   * @param source
-   *          Das1Source
-   * @param coordsys
-   *          specific coordinate system to use for this source
-   * @throws Exception
-   *           if source is not capable of the 'sequence' command
-   */
-  public DasSequenceSource(String dbname, String dbrefname, SOURCE source,
-          VERSION version, COORDINATES coordsys,
-          MultipleConnectionPropertyProviderI connprops) throws Exception
-  {
-    if (!(jsrc = new JalviewSource(source, connprops, false))
-            .isSequenceSource())
-    {
-      throw new Exception(MessageManager.formatMessage(
-              "exception.das_source_doesnt_support_sequence_command",
-              new String[]
-              { source.getTitle() }));
-    }
-    this.tier = 1 + ((jsrc.isLocal() || jsrc.isReferenceSource()) ? 0 : 1);
-    this.source = source;
-    this.dbname = dbname;
-    this.dbrefname = dbrefname.toUpperCase();
-    if (coordsys != null)
-    {
-      this.coordsys = coordsys;
-    }
-    this.connprops = connprops;
-  }
-
-  public String getAccessionSeparator()
-  {
-    return "\t";
-  }
-
-  public Regex getAccessionValidator()
-  {
-    /** ? * */
-    return Regex.perlCode("m/([^:]+)(:\\d+,\\d+)?/");
-  }
-
-  public String getDbName()
-  {
-    // TODO: map to
-    return dbname + " (DAS)";
-  }
-
-  public String getDbSource()
-  {
-    return dbrefname;
-  }
-
-  public String getDbVersion()
-  {
-    return coordsys != null ? coordsys.getVersion() : "";
-  }
-
-  public AlignmentI getSequenceRecords(String queries) throws Exception
-  {
-    StringTokenizer st = new StringTokenizer(queries, "\t");
-    List<String> toks = new ArrayList<String>(),
-            src = new ArrayList<String>(), acIds = new ArrayList<String>();
-    while (st.hasMoreTokens())
-    {
-      String t;
-      toks.add(t = st.nextToken());
-      acIds.add(t.replaceAll(":[0-9,]+", ""));
-    }
-    src.add(jsrc.getSourceURL());
-    Map<String, Map<List<String>, DasSequenceAdapter>> resultset = new HashMap<String, Map<List<String>, DasSequenceAdapter>>();
-    Map<String, Map<List<String>, Exception>> errors = new HashMap<String, Map<List<String>, Exception>>();
-
-    // First try multiple sources
-    boolean multiple = true, retry = false;
-    do
-    {
-      if (!multiple)
-      {
-        retry = false;
-        // slow, fetch one at a time.
-        for (String sr : src)
-        {
-          System.err.println(
-                  "Retrieving IDs individually from das source: " + sr);
-          org.biodas.jdas.client.SequenceClient sq = new SequenceClient(
-                  connprops.getConnectionPropertyProviderFor(sr));
-          for (String q : toks)
-          {
-            List<String> qset = Arrays.asList(new String[] { q });
-            try
-            {
-              DasSequenceAdapter s = sq.fetchData(sr, qset);
-              Map<List<String>, DasSequenceAdapter> dss = resultset.get(sr);
-              if (dss == null)
-              {
-                resultset.put(sr,
-                        dss = new HashMap<List<String>, DasSequenceAdapter>());
-              }
-              dss.put(qset, s);
-            } catch (Exception x)
-            {
-              Map<List<String>, Exception> ers = errors.get(sr);
-              if (ers == null)
-              {
-                errors.put(sr,
-                        ers = new HashMap<List<String>, Exception>());
-              }
-              ers.put(qset, x);
-            }
-          }
-        }
-      }
-      else
-      {
-        SequenceClientMultipleSources sclient;
-        sclient = new SequenceClientMultipleSources();
-        sclient.fetchData(src, toks, resultset, errors);
-        sclient.shutDown();
-        while (!sclient.isTerminated())
-        {
-          try
-          {
-            Thread.sleep(200);
-
-          } catch (InterruptedException x)
-          {
-          }
-        }
-        if (resultset.isEmpty() && !errors.isEmpty())
-        {
-          retry = true;
-          multiple = false;
-        }
-      }
-    } while (retry);
-
-    if (resultset.isEmpty())
-    {
-      System.err.println("Sequence Query to " + jsrc.getTitle() + " with '"
-              + queries + "' returned no sequences.");
-      return null;
-    }
-    else
-    {
-      Vector<SequenceI> seqs = null;
-      for (Map.Entry<String, Map<List<String>, DasSequenceAdapter>> resset : resultset
-              .entrySet())
-      {
-        for (Map.Entry<List<String>, DasSequenceAdapter> result : resset
-                .getValue().entrySet())
-        {
-          DasSequenceAdapter dasseqresp = result.getValue();
-          List<String> accessions = result.getKey();
-          for (SEQUENCE e : dasseqresp.getSequence())
-          {
-            String lbl = e.getId();
-
-            if (acIds.indexOf(lbl) == -1)
-            {
-              System.err.println(
-                      "Warning - received sequence event for strange accession code ("
-                              + lbl + ")");
-            }
-            else
-            {
-              if (seqs == null)
-              {
-                if (e.getContent().length() == 0)
-                {
-                  System.err.println(
-                          "Empty sequence returned for accession code ("
-                                  + lbl + ") from " + resset.getKey()
-                                  + " (source is " + getDbName());
-                  continue;
-                }
-              }
-              seqs = new java.util.Vector<SequenceI>();
-              // JDAS returns a sequence complete with any newlines and spaces
-              // in the XML
-              Sequence sq = new Sequence(lbl,
-                      e.getContent().replaceAll("\\s+", ""));
-              sq.setStart(e.getStart().intValue());
-              sq.addDBRef(new DBRefEntry(getDbSource(),
-                      getDbVersion() + ":" + e.getVersion(), lbl));
-              seqs.addElement(sq);
-            }
-          }
-        }
-      }
-
-      if (seqs == null || seqs.size() == 0)
-        return null;
-      SequenceI[] sqs = new SequenceI[seqs.size()];
-      for (int i = 0, iSize = seqs.size(); i < iSize; i++)
-      {
-        sqs[i] = (SequenceI) seqs.elementAt(i);
-      }
-      Alignment al = new Alignment(sqs);
-      if (jsrc.isFeatureSource())
-      {
-        java.util.Vector<jalviewSourceI> srcs = new java.util.Vector<jalviewSourceI>();
-        srcs.addElement(jsrc);
-        try
-        {
-          jalview.ws.DasSequenceFeatureFetcher dssf = new jalview.ws.DasSequenceFeatureFetcher(
-                  sqs, null, srcs, false, false, multiple);
-          while (dssf.isRunning())
-          {
-            try
-            {
-              Thread.sleep(200);
-            } catch (InterruptedException x)
-            {
-
-            }
-          }
-
-        } catch (Exception x)
-        {
-          Cache.log.error(
-                  "Couldn't retrieve features for sequence from its source.",
-                  x);
-        }
-      }
-
-      return al;
-    }
-  }
-
-  public String getTestQuery()
-  {
-    return coordsys == null ? "" : coordsys.getTestRange();
-  }
-
-  public boolean isValidReference(String accession)
-  {
-    // TODO try to validate an accession against source
-    // We don't really know how to do this without querying source
-
-    return true;
-  }
-
-  /**
-   * @return the source
-   */
-  public SOURCE getSource()
-  {
-    return source;
-  }
-
-  /**
-   * @return the coordsys
-   */
-  public COORDINATES getCoordsys()
-  {
-    return coordsys;
-  }
-
-  @Override
-  public int getTier()
-  {
-    return tier;
-  }
-}
diff --git a/src/jalview/ws/dbsources/das/datamodel/DasSourceRegistry.java b/src/jalview/ws/dbsources/das/datamodel/DasSourceRegistry.java
deleted file mode 100644 (file)
index de7f380..0000000
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources.das.datamodel;
-
-import jalview.bin.Cache;
-import jalview.ws.dbsources.das.api.DasSourceRegistryI;
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-
-import org.biodas.jdas.client.ConnectionPropertyProviderI;
-import org.biodas.jdas.client.SourcesClient;
-import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;
-import org.biodas.jdas.dassources.Capabilities;
-import org.biodas.jdas.schema.sources.CAPABILITY;
-import org.biodas.jdas.schema.sources.SOURCE;
-import org.biodas.jdas.schema.sources.SOURCES;
-import org.biodas.jdas.schema.sources.VERSION;
-
-/**
- *
- */
-public class DasSourceRegistry
-        implements DasSourceRegistryI, MultipleConnectionPropertyProviderI
-{
-  // private org.biodas.jdas.schema.sources.SOURCE[] dasSources = null;
-  private List<jalviewSourceI> dasSources = null;
-
-  private Hashtable<String, jalviewSourceI> sourceNames = null;
-
-  private Hashtable<String, jalviewSourceI> localSources = null;
-
-  // public static String DEFAULT_REGISTRY = "http://www.dasregistry.org/das/";
-  public static String DEFAULT_REGISTRY = "http://www.ebi.ac.uk/das-srv/registry/das/";
-
-  /**
-   * true if thread is running and we are talking to DAS registry service
-   */
-  private boolean loadingDasSources = false;
-
-  public boolean isLoadingDasSources()
-  {
-    return loadingDasSources;
-  }
-
-  @Override
-  public String getDasRegistryURL()
-  {
-    String registry = jalview.bin.Cache.getDefault("DAS_REGISTRY_URL",
-            DEFAULT_REGISTRY);
-
-    if (registry.indexOf("/registry/das1/sources/") > -1)
-    {
-      jalview.bin.Cache.setProperty(jalview.bin.Cache.DAS_REGISTRY_URL,
-              DEFAULT_REGISTRY);
-      registry = DEFAULT_REGISTRY;
-    }
-    if (registry.lastIndexOf("sources.xml") == registry.length() - 11)
-    {
-      // no trailing sources.xml document for registry in JDAS
-      jalview.bin.Cache.setProperty(jalview.bin.Cache.DAS_REGISTRY_URL,
-              registry = registry.substring(0,
-                      registry.lastIndexOf("sources.xml")));
-    }
-    return registry;
-  }
-
-  /**
-   * query the default DAS Source Registry for sources. Uses value of jalview
-   * property DAS_REGISTRY_URL and the DasSourceBrowser.DEFAULT_REGISTRY if that
-   * doesn't exist.
-   * 
-   * @return list of sources
-   */
-  private List<jalviewSourceI> getDASSources()
-  {
-
-    return getDASSources(getDasRegistryURL(), this);
-  }
-
-  /**
-   * query the given URL for DasSources.
-   * 
-   * @param registryURL
-   *          return sources from registryURL
-   */
-  private static List<jalviewSourceI> getDASSources(String registryURL,
-          MultipleConnectionPropertyProviderI registry)
-  {
-    try
-    {
-      URL url = new URL(registryURL);
-      org.biodas.jdas.client.SourcesClientInterface client = new SourcesClient();
-
-      SOURCES sources = client.fetchDataRegistry(registryURL, null, null,
-              null, null, null, null);
-
-      List<SOURCE> dassources = sources.getSOURCE();
-      ArrayList<jalviewSourceI> dsrc = new ArrayList<jalviewSourceI>();
-      HashMap<String, Integer> latests = new HashMap<String, Integer>();
-      Integer latest;
-      for (SOURCE src : dassources)
-      {
-        JalviewSource jsrc = new JalviewSource(src, registry, false);
-        latest = latests.get(jsrc.getSourceURL());
-        if (latest != null)
-        {
-          if (jsrc.isNewerThan(dsrc.get(latest.intValue())))
-          {
-            dsrc.set(latest.intValue(), jsrc);
-          }
-          else
-          {
-            System.out.println(
-                    "Debug: Ignored older source " + jsrc.getTitle());
-          }
-        }
-        else
-        {
-          latests.put(jsrc.getSourceURL(), Integer.valueOf(dsrc.size()));
-          dsrc.add(jsrc);
-        }
-      }
-      return dsrc;
-    } catch (Exception ex)
-    {
-      System.out.println(
-              "DAS1 registry at " + registryURL + " no longer exists");
-      return new ArrayList<jalviewSourceI>();
-    }
-  }
-
-  public void run()
-  {
-    getSources();
-  }
-
-  @Override
-  public List<jalviewSourceI> getSources()
-  {
-    if (dasSources == null)
-    {
-      dasSources = getDASSources();
-    }
-    return appendLocalSources();
-  }
-
-  /**
-   * generate Sources from the local das source list
-   * 
-   */
-  private void addLocalDasSources()
-  {
-    if (localSources == null)
-    {
-      // get local sources from properties and initialise the local source list
-      String local = jalview.bin.Cache.getProperty("DAS_LOCAL_SOURCE");
-
-      if (local != null)
-      {
-        int n = 1;
-        StringTokenizer st = new StringTokenizer(local, "\t");
-        while (st.hasMoreTokens())
-        {
-          String token = st.nextToken();
-          int bar = token.indexOf("|");
-          if (bar == -1)
-          {
-            System.err.println(
-                    "Warning: DAS user local source appears to have no nickname (expected a '|' followed by nickname)\nOffending definition: '"
-                            + token + "'");
-          }
-          String url = token.substring(bar + 1);
-          boolean features = true, sequence = false;
-          if (url.startsWith("sequence:"))
-          {
-            url = url.substring(9);
-            // this source also serves sequences as well as features
-            sequence = true;
-          }
-          try
-          {
-            if (bar > -1)
-            {
-              createLocalSource(url, token.substring(0, bar), sequence,
-                      features);
-            }
-            else
-            {
-              createLocalSource(url, "User Source" + n, sequence, features);
-            }
-          } catch (Exception q)
-          {
-            System.err.println(
-                    "Unexpected exception when creating local source from '"
-                            + token + "'");
-            q.printStackTrace();
-          }
-          n++;
-        }
-      }
-    }
-  }
-
-  private List<jalviewSourceI> appendLocalSources()
-  {
-    List<jalviewSourceI> srclist = new ArrayList<jalviewSourceI>();
-    addLocalDasSources();
-    sourceNames = new Hashtable<String, jalviewSourceI>();
-    if (dasSources != null)
-    {
-      for (jalviewSourceI src : dasSources)
-      {
-        sourceNames.put(src.getTitle(), src);
-        srclist.add(src);
-      }
-    }
-
-    if (localSources == null)
-    {
-      return srclist;
-    }
-    Enumeration en = localSources.keys();
-    while (en.hasMoreElements())
-    {
-      String key = en.nextElement().toString();
-      jalviewSourceI jvsrc = localSources.get(key);
-      sourceNames.put(key, jvsrc);
-      srclist.add(jvsrc);
-    }
-    return srclist;
-  }
-
-  /*
-  * 
-  */
-
-  @Override
-  public jalviewSourceI createLocalSource(String url, String name,
-          boolean sequence, boolean features)
-  {
-    SOURCE local = _createLocalSource(url, name, sequence, features);
-
-    if (localSources == null)
-    {
-      localSources = new Hashtable<String, jalviewSourceI>();
-    }
-    jalviewSourceI src = new JalviewSource(local, this, true);
-    localSources.put(local.getTitle(), src);
-    return src;
-  }
-
-  private SOURCE _createLocalSource(String url, String name,
-          boolean sequence, boolean features)
-  {
-    SOURCE local = new SOURCE();
-
-    local.setUri(url);
-    local.setTitle(name);
-    local.setVERSION(new ArrayList<VERSION>());
-    VERSION v = new VERSION();
-    List<CAPABILITY> cp = new ArrayList<CAPABILITY>();
-    if (sequence)
-    {
-      /*
-       * Could try and synthesize a coordinate system for the source if needbe
-       * COORDINATES coord = new COORDINATES(); coord.setAuthority("NCBI");
-       * coord.setSource("Chromosome"); coord.setTaxid("9606");
-       * coord.setVersion("35"); version.getCOORDINATES().add(coord);
-       */
-      CAPABILITY cap = new CAPABILITY();
-      cap.setType("das1:" + Capabilities.SEQUENCE.getName());
-      cap.setQueryUri(url + "/sequence");
-      cp.add(cap);
-    }
-    if (features)
-    {
-      CAPABILITY cap = new CAPABILITY();
-      cap.setType("das1:" + Capabilities.FEATURES.getName());
-      cap.setQueryUri(url + "/features");
-      cp.add(cap);
-    }
-
-    v.getCAPABILITY().addAll(cp);
-    local.getVERSION().add(v);
-
-    return local;
-  }
-
-  @Override
-  public jalviewSourceI getSource(String nickname)
-  {
-    return sourceNames.get(nickname);
-  }
-
-  @Override
-  public boolean removeLocalSource(jalviewSourceI source)
-  {
-    if (localSources.containsValue(source))
-    {
-      localSources.remove(source.getTitle());
-      sourceNames.remove(source.getTitle());
-      dasSources.remove(source);
-      jalview.bin.Cache.setProperty("DAS_LOCAL_SOURCE",
-              getLocalSourceString());
-
-      return true;
-    }
-    return false;
-  }
-
-  @Override
-  public void refreshSources()
-  {
-    dasSources = null;
-    sourceNames = null;
-    run();
-  }
-
-  @Override
-  public List<jalviewSourceI> resolveSourceNicknames(List<String> sources)
-  {
-    ArrayList<jalviewSourceI> resolved = new ArrayList<jalviewSourceI>();
-    if (sourceNames != null)
-    {
-      for (String src : sources)
-      {
-        jalviewSourceI dsrc = sourceNames.get(src);
-        if (dsrc != null)
-        {
-          resolved.add(dsrc);
-        }
-      }
-    }
-    return resolved;
-  }
-
-  @Override
-  public String getLocalSourceString()
-  {
-    if (localSources != null)
-    {
-      StringBuffer sb = new StringBuffer();
-      Enumeration en = localSources.keys();
-      while (en.hasMoreElements())
-      {
-        String token = en.nextElement().toString();
-        jalviewSourceI srco = localSources.get(token);
-        sb.append(token + "|" + (srco.isSequenceSource() ? "sequence:" : "")
-                + srco.getUri() + "\t");
-      }
-      return sb.toString();
-    }
-    return "";
-  }
-
-  private static final Hashtable<URL, String> authStash;
-  static
-  {
-    authStash = new Hashtable<URL, String>();
-
-    try
-    {
-      // TODO: allow same credentials for https and http
-      authStash.put(
-              new URL("http://www.compbio.dundee.ac.uk/geneweb/das/myseq/"),
-              "Basic SmltOm1pSg==");
-    } catch (MalformedURLException e)
-    {
-      // TODO Auto-generated catch block
-      e.printStackTrace();
-    }
-  }
-
-  @Override
-  public MultipleConnectionPropertyProviderI getSessionHandler()
-  {
-    return this;
-  }
-
-  @Override
-  public ConnectionPropertyProviderI getConnectionPropertyProviderFor(
-          String arg0)
-  {
-
-    final ConnectionPropertyProviderI conprov = new ConnectionPropertyProviderI()
-    {
-      boolean authed = false;
-
-      @Override
-      public void setConnectionProperties(HttpURLConnection connection)
-      {
-        String auth = authStash.get(connection.getURL());
-        if (auth != null && auth.length() > 0)
-        {
-          connection.setRequestProperty("Authorisation", auth);
-          authed = true;
-        }
-        else
-        {
-          authed = false;
-        }
-      }
-
-      @Override
-      public boolean getResponseProperties(HttpURLConnection connection)
-      {
-        String auth = authStash.get(connection.getURL());
-        if (auth != null && auth.length() == 0)
-        {
-          // don't attempt to check if we authed or not - user entered empty
-          // password
-          return false;
-        }
-        if (!authed)
-        {
-          if (auth != null)
-          {
-            // try and pass credentials.
-            return true;
-          }
-          // see if we should try and create a new auth record.
-          String ameth = connection.getHeaderField("X-DAS-AuthMethods");
-          Cache.log.debug("Could authenticate to " + connection.getURL()
-                  + " with : " + ameth);
-          // TODO: search auth string and raise login box - return if auth was
-          // provided
-          return false;
-        }
-        else
-        {
-          // check to see if auth was successful
-          String asuc = connection
-                  .getHeaderField("X-DAS_AuthenticatedUser");
-          if (asuc != null && asuc.trim().length() > 0)
-          {
-            // authentication was successful
-            Cache.log.debug("Authenticated successfully to "
-                    + connection.getURL().toString());
-            return false;
-          }
-          // it wasn't - so we should tell the user it failed and ask if they
-          // want to attempt authentication again.
-          authStash.remove(connection.getURL());
-          // open a new login/password dialog with cancel button
-          // set new authStash content with password and return true
-          return true; //
-          // User cancelled auth - so put empty string in stash to indicate we
-          // don't want to auth with this server.
-          // authStash.put(connection.getURL(), "");
-          // return false;
-        }
-      }
-    };
-    return conprov;
-  }
-
-}
diff --git a/src/jalview/ws/dbsources/das/datamodel/JalviewSource.java b/src/jalview/ws/dbsources/das/datamodel/JalviewSource.java
deleted file mode 100644 (file)
index 07ba027..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.dbsources.das.datamodel;
-
-import jalview.util.MessageManager;
-import jalview.ws.dbsources.das.api.jalviewSourceI;
-import jalview.ws.seqfetcher.DbSourceProxy;
-
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-
-import org.biodas.jdas.client.threads.MultipleConnectionPropertyProviderI;
-import org.biodas.jdas.dassources.Capabilities;
-import org.biodas.jdas.dassources.utils.DasTimeFormat;
-import org.biodas.jdas.schema.sources.CAPABILITY;
-import org.biodas.jdas.schema.sources.COORDINATES;
-import org.biodas.jdas.schema.sources.MAINTAINER;
-import org.biodas.jdas.schema.sources.PROP;
-import org.biodas.jdas.schema.sources.SOURCE;
-import org.biodas.jdas.schema.sources.VERSION;
-
-public class JalviewSource implements jalviewSourceI
-{
-  SOURCE source;
-
-  MultipleConnectionPropertyProviderI connprov;
-
-  public JalviewSource(SOURCE local2,
-          MultipleConnectionPropertyProviderI connprov, boolean local)
-  {
-    this.connprov = connprov;
-    this.local = local;
-    source = local2;
-  }
-
-  @Override
-  public String getTitle()
-  {
-    return source.getTitle();
-  }
-
-  @Override
-  public VERSION getVersion()
-  {
-
-    return getVersionFor(source);
-  }
-
-  @Override
-  public String getDocHref()
-  {
-    return source.getDocHref();
-  }
-
-  @Override
-  public String getDescription()
-  {
-    return source.getDescription();
-  }
-
-  @Override
-  public String getUri()
-  {
-    return source.getUri();
-  }
-
-  @Override
-  public MAINTAINER getMAINTAINER()
-  {
-    return source.getMAINTAINER();
-  }
-
-  @Override
-  public String getEmail()
-  {
-    return (local) ? null : source.getMAINTAINER().getEmail();
-  }
-
-  boolean local = false;
-
-  @Override
-  public boolean isLocal()
-  {
-    return local;
-  }
-
-  @Override
-  public boolean isSequenceSource()
-  {
-    String seqcap = "das1:" + Capabilities.SEQUENCE.getName();
-    for (String cp : getCapabilityList(getVersionFor(source)))
-    {
-      if (cp.equals(seqcap))
-      {
-        return true;
-
-      }
-    }
-    return false;
-  }
-
-  @Override
-  public boolean isFeatureSource()
-  {
-    String seqcap = "das1:" + Capabilities.FEATURES.getName();
-    for (String cp : getCapabilityList(getVersionFor(source)))
-    {
-      if (cp.equals(seqcap))
-      {
-        return true;
-
-      }
-    }
-    return false;
-  }
-
-  private VERSION getVersionFor(SOURCE ds)
-  {
-    VERSION latest = null;
-    for (VERSION v : ds.getVERSION())
-    {
-      if (latest == null
-              || isLaterThan(latest.getCreated(), v.getCreated()))
-      {
-        // TODO: das 1.6 - should just get the first version - ignore other
-        // versions since not specified how to construct URL from version's URI
-        // + source URI
-        latest = v;
-      }
-    }
-    return latest;
-  }
-
-  /**
-   * compare date strings. null or unparseable dates are assumed to be oldest
-   * 
-   * @param ref
-   * @param newer
-   * @return true iff ref comes before newer
-   */
-  private boolean isLaterThan(String ref, String newer)
-  {
-    Date refdate = null, newdate = null;
-    if (ref != null && ref.trim().length() > 0)
-    {
-      try
-      {
-        refdate = DasTimeFormat.fromDASString(ref.trim());
-
-      } catch (ParseException x)
-      {
-      }
-    }
-    if (newer != null && newer.trim().length() > 0)
-    {
-      try
-      {
-        newdate = DasTimeFormat.fromDASString(newer);
-      } catch (ParseException e)
-      {
-      }
-    }
-    if (refdate != null)
-    {
-      if (newdate != null)
-      {
-        return refdate.before(newdate);
-      }
-      return false;
-    }
-    if (newdate != null)
-    {
-      return true;
-    }
-    // assume first instance of source is newest in list. - TODO: check if
-    // natural ordering of source versions is newest first or oldest first
-    return false;
-  }
-
-  public String[] getLabelsFor(VERSION v)
-  {
-    ArrayList<String> labels = new ArrayList<String>();
-    for (PROP p : v.getPROP())
-    {
-      if (p.getName().equalsIgnoreCase("LABEL"))
-      {
-        labels.add(p.getValue());
-      }
-    }
-    return labels.toArray(new String[0]);
-  }
-
-  private CAPABILITY getCapability(Capabilities capability)
-  {
-    for (CAPABILITY p : getVersion().getCAPABILITY())
-    {
-      if (p.getType().equalsIgnoreCase(capability.getName()) || p.getType()
-              .equalsIgnoreCase("das1:" + capability.getName()))
-      {
-        return p;
-      }
-    }
-    return null;
-  }
-
-  public String[] getCapabilityList(VERSION v)
-  {
-
-    ArrayList<String> labels = new ArrayList<String>();
-    for (CAPABILITY p : v.getCAPABILITY())
-    {
-      // TODO: work out what to do with namespace prefix
-      // does SEQUENCE == das1:SEQUENCE and das2:SEQUENCE ?
-      // for moment, just show all capabilities...
-      if (p.getType().startsWith("das1:"))
-      {
-        labels.add(p.getType());
-      }
-    }
-    return labels.toArray(new String[0]);
-  }
-
-  @Override
-  public List<DbSourceProxy> getSequenceSourceProxies()
-  {
-    if (!isSequenceSource())
-    {
-      return null;
-    }
-    ArrayList<DbSourceProxy> seqsources = new ArrayList<DbSourceProxy>();
-    if (!local)
-    {
-      VERSION v = getVersion();
-      Map<String, COORDINATES> latestc = new Hashtable<String, COORDINATES>();
-      for (COORDINATES cs : v.getCOORDINATES())
-      {
-        COORDINATES ltst = latestc.get(cs.getUri());
-        if (ltst == null || ltst.getVersion() == null
-                || (ltst.getVersion() != null && cs.getVersion() != null
-                        && isLaterThan(ltst.getVersion(), cs.getVersion())))
-        {
-          latestc.put(cs.getUri(), cs);
-        }
-      }
-      for (COORDINATES cs : latestc.values())
-      {
-        DasSequenceSource ds;
-        /*
-         * if (css == null || css.length == 0) { // TODO: query das source
-         * directly to identify coordinate system... or // have to make up a
-         * coordinate system css = new DasCoordinateSystem[] { new
-         * DasCoordinateSystem() }; css[0].setName(d1s.getNickname());
-         * css[0].setUniqueId(d1s.getNickname()); } for (int c = 0; c <
-         * css.length; c++) {
-         */
-        try
-        {
-          seqsources.add(ds = new DasSequenceSource(
-                  getTitle() + " (" + cs.getAuthority() + " "
-                          + cs.getSource()
-                          + (cs.getVersion() != null ? " " + cs.getVersion()
-                                  : "")
-                          + ")",
-                  cs.getAuthority(), source, v, cs, connprov));
-          if (seqsources.size() > 1)
-          {
-            System.err.println("Added another sequence DB source for "
-                    + getTitle() + " (" + ds.getDbName() + ")");
-          }
-        } catch (Exception e)
-        {
-          System.err.println("Ignoring sequence coord system " + cs + " ("
-                  + cs.getContent() + ") for source " + getTitle()
-                  + "- threw exception when constructing fetcher.\n");
-          e.printStackTrace();
-        }
-      }
-    }
-    else
-    {
-      try
-      {
-        seqsources.add(new DasSequenceSource(getTitle(), getTitle(), source,
-                getVersion(), null, connprov));
-      } catch (Exception e)
-      {
-        // TODO Auto-generated catch block
-        e.printStackTrace();
-      }
-
-    }
-    if (seqsources.size() > 1)
-    {
-      // sort by name
-      DbSourceProxy[] tsort = seqsources.toArray(new DasSequenceSource[0]);
-      String[] nm = new String[tsort.length];
-      for (int i = 0; i < nm.length; i++)
-      {
-        nm[i] = tsort[i].getDbName().toLowerCase();
-      }
-      jalview.util.QuickSort.sort(nm, tsort);
-      seqsources.clear();
-      for (DbSourceProxy ssrc : tsort)
-      {
-        seqsources.add(ssrc);
-      }
-    }
-    return seqsources;
-  }
-
-  @Override
-  public String getSourceURL()
-  {
-    try
-    {
-      // kind of dumb, since
-      // org.biodas.jdas.dassources.utils.VersionAdapter.getSourceUriFromQueryUri()
-      // does this,
-      // but this way, we can access non DAS 1.6 compliant sources (which have
-      // to have a URL like <sourcename>/das/ and cause a validation exception)
-
-      for (CAPABILITY cap : getVersion().getCAPABILITY())
-      {
-        String capname = cap.getType()
-                .substring(cap.getType().indexOf(":") + 1);
-        int p = cap.getQueryUri().lastIndexOf(capname);
-        if (p < -1)
-        {
-          throw new Exception(MessageManager.formatMessage(
-                  "exception.invalid_das_source", new String[]
-                  { source.getUri() }));
-        }
-        if (cap.getQueryUri().charAt(p) == '/')
-        {
-          p--;
-        }
-        return cap.getQueryUri().substring(0, p);
-      }
-    } catch (Exception x)
-    {
-      System.err.println("Serious: Couldn't get the URL for source "
-              + source.getTitle());
-      x.printStackTrace();
-    }
-    return null;
-  }
-
-  @Override
-  public boolean isNewerThan(jalviewSourceI other)
-  {
-    return isLaterThan(getVersion().getCreated(),
-            other.getVersion().getCreated());
-  }
-
-  @Override
-  public boolean isReferenceSource()
-  {
-    // TODO check source object for indication that we are the primary for a DAS
-    // coordinate system
-    return false;
-  }
-}
diff --git a/src/jalview/ws/params/simple/DoubleParameter.java b/src/jalview/ws/params/simple/DoubleParameter.java
deleted file mode 100644 (file)
index 6b76170..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-package jalview.ws.params.simple;
-
-import jalview.ws.params.ParameterI;
-import jalview.ws.params.ValueConstrainI;
-
-/**
- * 
- * @author TZVanaalten
- *
- */
-public class DoubleParameter extends Option implements ParameterI
-{
-  double defval;
-
-  double min;
-
-  double max;
-
-  @Override
-  public ValueConstrainI getValidValue()
-  {
-    return new ValueConstrainI()
-    {
-      @Override
-      public ValueType getType()
-      {
-        return ValueType.Double;
-      }
-
-      @Override
-      public Number getMin()
-      {
-        return min < max ? min : null;
-      }
-
-      @Override
-      public Number getMax()
-      {
-        return min < max ? max : null;
-      }
-    };
-  }
-
-  public DoubleParameter(DoubleParameter parm)
-  {
-    super(parm);
-    max = parm.max;
-    min = parm.min;
-  }
-
-  public DoubleParameter(String name, String description, boolean required,
-          Double defValue, double min, double max)
-  {
-    super(name, description, required, String.valueOf(defValue), null, null,
-            null);
-    defval = defValue;
-    this.min = min;
-    this.max = max;
-  }
-
-  public DoubleParameter(String name, String description, boolean required,
-          Double defValue, Double value, double min, double max)
-  {
-    super(name, description, required, String.valueOf(defValue),
-            String.valueOf(value), null, null);
-    defval = defValue;
-    this.min = min;
-    this.max = max;
-  }
-
-  @Override
-  public DoubleParameter copy()
-  {
-    return new DoubleParameter(this);
-  }
-}
diff --git a/src/jalview/ws/params/simple/FileParameter.java b/src/jalview/ws/params/simple/FileParameter.java
deleted file mode 100644 (file)
index aa8e7ad..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-package jalview.ws.params.simple;
-
-import jalview.ws.params.ValueConstrainI;
-
-/**
- * A class that represents a file parameter. User entry options should include
- * direct input of a file path as text, or file selection using a file browser.
- * 
- * @author gmcarstairs
- *
- */
-public class FileParameter extends StringParameter
-{
-
-  public FileParameter(String name, String description, boolean required,
-          String defValue, String value)
-  {
-    super(name, description, required, defValue, value);
-  }
-
-  @Override
-  public ValueConstrainI getValidValue()
-  {
-    return new ValueConstrainI()
-    {
-
-      @Override
-      public ValueType getType()
-      {
-        return ValueType.File;
-      }
-
-      @Override
-      public Number getMax()
-      {
-        return null;
-      }
-
-      @Override
-      public Number getMin()
-      {
-        return null;
-      }
-    };
-  }
-
-}
diff --git a/src/jalview/ws/params/simple/LogarithmicParameter.java b/src/jalview/ws/params/simple/LogarithmicParameter.java
deleted file mode 100644 (file)
index af80181..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-package jalview.ws.params.simple;
-
-import jalview.ws.params.ParameterI;
-import jalview.ws.params.ValueConstrainI;
-
-/**
- * A model for a numeric-valued parameter which should be displayed using a
- * logarithmic scale
- * 
- * @author TZVanaalten
- */
-public class LogarithmicParameter extends Option implements ParameterI
-{
-  final double defval;
-
-  final double min;
-
-  final double max;
-
-  @Override
-  public ValueConstrainI getValidValue()
-  {
-    return new ValueConstrainI()
-    {
-
-      @Override
-      public ValueType getType()
-      {
-        return ValueType.Double;
-      }
-
-      @Override
-      public Number getMin()
-      {
-        return min < max ? min : null;
-      }
-
-      @Override
-      public Number getMax()
-      {
-        return min < max ? max : null;
-      }
-    };
-  }
-
-  public LogarithmicParameter(LogarithmicParameter parm)
-  {
-    super(parm);
-    max = parm.max;
-    min = parm.min;
-    defval = 0D;
-  }
-
-  public LogarithmicParameter(String name, String description,
-          boolean required, Double defValue, double min, double max)
-  {
-    super(name, description, required, String.valueOf(defValue), null, null,
-            null);
-    defval = defValue;
-    this.min = min;
-    this.max = max;
-  }
-
-  public LogarithmicParameter(String name, String description,
-          boolean required, Double defValue, double value, double min,
-          double max)
-  {
-    super(name, description, required, String.valueOf(defValue),
-            String.valueOf(value), null, null);
-    defval = defValue;
-    this.min = min;
-    this.max = max;
-  }
-
-  @Override
-  public LogarithmicParameter copy()
-  {
-    return new LogarithmicParameter(this);
-  }
-}
diff --git a/src/jalview/ws/params/simple/RadioChoiceParameter.java b/src/jalview/ws/params/simple/RadioChoiceParameter.java
deleted file mode 100644 (file)
index 4fdb05e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.params.simple;
-
-import java.util.List;
-
-/**
- * A parameter with a choice of possible options, preferred to be rendered as
- * radio buttons if possible
- */
-public class RadioChoiceParameter extends StringParameter
-{
-
-  /**
-   * Constructor
-   * 
-   * @param name
-   * @param description
-   * @param options
-   * @param def
-   */
-  public RadioChoiceParameter(String name, String description,
-          List<String> options, String def)
-  {
-    super(name, description, true, def, def, options, null);
-  }
-}
diff --git a/src/jalview/ws/params/simple/StringParameter.java b/src/jalview/ws/params/simple/StringParameter.java
deleted file mode 100644 (file)
index d3d899c..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-package jalview.ws.params.simple;
-
-import jalview.ws.params.ParameterI;
-import jalview.ws.params.ValueConstrainI;
-
-import java.util.List;
-
-public class StringParameter extends Option implements ParameterI
-{
-  @Override
-  public ValueConstrainI getValidValue()
-  {
-    return new StringValueConstrain();
-  }
-
-  @Override
-  public ParameterI copy()
-  {
-    return new StringParameter(this);
-  }
-
-  private class StringValueConstrain implements ValueConstrainI
-  {
-
-    @Override
-    public ValueType getType()
-    {
-      return ValueType.String;
-    }
-
-    @Override
-    public Number getMax()
-    {
-      return null;
-    }
-
-    @Override
-    public Number getMin()
-    {
-      return null;
-    }
-
-  }
-
-  public StringParameter(StringParameter parm)
-  {
-    this.name = parm.name;
-    this.defvalue = parm.defvalue;
-    this.possibleVals = parm.possibleVals;
-    this.displayVals = parm.displayVals;
-  }
-
-  public StringParameter(String name, String description, boolean required,
-          String defValue)
-  {
-    super(name, description, required, String.valueOf(defValue), null, null,
-            null);
-    this.defvalue = defValue;
-  }
-
-  public StringParameter(String name, String description, boolean required,
-          String defValue, String value)
-  {
-    super(name, description, required, String.valueOf(defValue),
-            String.valueOf(value), null, null);
-    this.defvalue = defValue;
-  }
-
-  /**
-   * Constructor for a parameter with a list of possible values and (optionally)
-   * corresponding display names
-   * 
-   * @param name2
-   * @param description2
-   * @param isrequired
-   * @param defValue
-   * @param value
-   * @param possibleVals
-   * @param displayNames
-   */
-  public StringParameter(String name2, String description2,
-          boolean isrequired, String defValue, String value,
-          List<String> possibleVals, List<String> displayNames)
-  {
-    super(name2, description2, isrequired, defValue, value, possibleVals,
-            displayNames, null);
-  }
-}
diff --git a/test/jalview/datamodel/HMMNodeTest.java b/test/jalview/datamodel/HMMNodeTest.java
deleted file mode 100644 (file)
index f2aef06..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package jalview.datamodel;
-
-import static org.testng.Assert.assertEquals;
-
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.HMMFile;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class HMMNodeTest
-{
-  private HiddenMarkovModel hmm;
-
-  @BeforeClass(alwaysRun = true)
-  public void setUp() throws MalformedURLException, IOException
-  {
-    /*
-     * load hmm model of a Kinase domain to a HiddenMarkovModel
-     */
-    HMMFile file = new HMMFile(new FileParse(
-            "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE));
-    hmm = file.getHMM();
-  }
-
-  @Test(groups="Functional")
-  public void testGetMaxMatchEmissionIdex()
-  {
-    assertEquals(hmm.getAlphabetType(), "amino");
-    String symbols = hmm.getSymbols();
-
-    assertEquals(hmm.getNode(1).getMaxMatchEmissionIndex(),
-            symbols.indexOf('Y'));
-
-    assertEquals(hmm.getNode(17).getMaxMatchEmissionIndex(),
-            symbols.indexOf('K'));
-  }
-}
diff --git a/test/jalview/datamodel/HiddenMarkovModelTest.java b/test/jalview/datamodel/HiddenMarkovModelTest.java
deleted file mode 100644 (file)
index 7978da2..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-package jalview.datamodel;
-
-import static org.testng.Assert.assertEquals;
-
-import jalview.io.DataSourceType;
-import jalview.io.FileParse;
-import jalview.io.HMMFile;
-import jalview.schemes.ResidueProperties;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.Map;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class HiddenMarkovModelTest {
-
-  HiddenMarkovModel hmm;
-
-  @BeforeClass(alwaysRun = true)
-  public void setUp() throws MalformedURLException, IOException
-  {
-    /*
-     * load hmm model of a Kinase domain to a HiddenMarkovModel
-     */
-    HMMFile file = new HMMFile(new FileParse(
-            "test/jalview/io/test_PKinase_hmm.txt", DataSourceType.FILE));
-    hmm = file.getHMM();
-  }
-
-  @Test(groups = "Functional")
-  public void testGetMatchEmissionProbabilities()
-          throws MalformedURLException, IOException
-  {
-    /*
-     * raw value in file is 3.67403
-     * saved as probability e^-X = 0.05259 
-     */
-    double mep = hmm.getMatchEmissionProbability(0, 'R');
-    assertEquals(mep, 0.02537400637, 0.0001d);
-    assertEquals(mep, Math.pow(Math.E, -3.67403), 0.0001d);
-
-    mep = hmm.getMatchEmissionProbability(19, 'W');
-    assertEquals(mep, 0.00588228492, 0.0001d);
-    assertEquals(mep, Math.pow(Math.E, -5.13581), 0.0001d);
-
-    // column 160 is a gapped region of the model
-    mep = hmm.getMatchEmissionProbability(160, 'G');
-    assertEquals(mep, 0D, 0.0001d);
-
-    mep = hmm.getMatchEmissionProbability(475, 'A');
-    assertEquals(mep, 0.04995163708, 0.0001d);
-    assertEquals(mep, Math.pow(Math.E, -2.99670), 0.0001d);
-  }
-  
-  @Test(groups = "Functional")
-  public void testGetInsertEmissionProbabilities()
-  {
-    double iep = hmm.getInsertEmissionProbability(2, 'A');
-    assertEquals(iep, Math.pow(Math.E, -2.68618), 0.0001d);
-    // symbol is not case-sensitive
-    assertEquals(iep, hmm.getInsertEmissionProbability(2, 'a'));
-
-    iep = hmm.getInsertEmissionProbability(5, 'T');
-    assertEquals(iep, Math.pow(Math.E, -2.77519), 0.0001d);
-
-    // column 161 is gapped in the hmm
-    iep = hmm.getInsertEmissionProbability(161, 'K');
-    assertEquals(iep, 0D, 0.0001d);
-
-    iep = hmm.getInsertEmissionProbability(472, 'L');
-    assertEquals(iep, Math.pow(Math.E, -2.69355), 0.0001d);
-  }
-
-  @Test(groups = "Functional")
-  public void testGetStateTransitionProbabilities()
-  {
-    // * in model file treated as negative infinity
-    double stp = hmm.getStateTransitionProbability(475,
-            HiddenMarkovModel.MATCHTODELETE);
-    assertEquals(stp, Double.NEGATIVE_INFINITY);
-
-    // file value is 5.01631, saved as e^-5.01631
-    stp = hmm.getStateTransitionProbability(8,
-            HiddenMarkovModel.MATCHTOINSERT);
-    assertEquals(stp, Math.pow(Math.E, -5.01631), 0.0001D);
-
-    stp = hmm.getStateTransitionProbability(36,
-            HiddenMarkovModel.MATCHTODELETE);
-    assertEquals(stp, Math.pow(Math.E, -5.73865), 0.0001D);
-
-    stp = hmm.getStateTransitionProbability(22,
-            HiddenMarkovModel.INSERTTOMATCH);
-    assertEquals(stp, Math.pow(Math.E, -0.61958), 0.0001D);
-
-    stp = hmm.getStateTransitionProbability(80,
-            HiddenMarkovModel.INSERTTOINSERT);
-    assertEquals(stp, Math.pow(Math.E, -0.77255), 0.0001D);
-
-    stp = hmm.getStateTransitionProbability(475,
-            HiddenMarkovModel.DELETETOMATCH);
-    assertEquals(stp, 1D, 0.0001D);
-
-    stp = hmm.getStateTransitionProbability(218,
-            HiddenMarkovModel.DELETETODELETE);
-    assertEquals(stp, Math.pow(Math.E, -0.95510), 0.0001D);
-  }
-  
-  @Test(groups = "Functional")
-  public void testGetConsensusSequence()
-  {
-    SequenceI seq = hmm.getConsensusSequence();
-    String subStr = seq.getSequenceAsString().substring(0, 10);
-    assertEquals(subStr, "yelleklGsG");
-    subStr = seq.getSequenceAsString().substring(150, 161);
-    assertEquals(subStr, "-dllk------");
-  }
-
-  /**
-   * A rather pointless test that reproduces the code implemented and asserts
-   * the result is the same...
-   */
-  @Test(groups = "Functional")
-  public void testGetInformationContent()
-  {
-    /*
-     * information measure is sum over all symbols of 
-     * emissionProb * log(emissionProb / background) / log(2)
-     */
-    Map<Character, Float> uniprotFreqs = ResidueProperties.backgroundFrequencies
-            .get("amino");
-    int col = 4;
-    float expected = 0f;
-    for (char aa : hmm.getSymbols().toCharArray())
-    {
-      double mep = hmm.getMatchEmissionProbability(col, aa);
-      float background = uniprotFreqs.get(aa);
-      expected += mep * Math.log(mep / background);
-    }
-    expected /= Math.log(2D);
-
-    float actual = hmm.getInformationContent(col);
-    assertEquals(actual, expected, 0.0001d);
-  }
-}
diff --git a/test/jalview/hmmer/HMMERTest.java b/test/jalview/hmmer/HMMERTest.java
deleted file mode 100644 (file)
index e3b7067..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-package jalview.hmmer;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
-
-import jalview.bin.Jalview;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.SequenceI;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.io.HMMFile;
-import jalview.util.MessageManager;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.simple.Option;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class HMMERTest {
-
-  AlignFrame frame;
-
-  @BeforeClass(alwaysRun = true)
-  public void setUpBeforeClass() throws Exception
-  {
-    /*
-     * NB: check HMMER_PATH in testProps.jvprops is valid for
-     * the machine on which this runs
-     */
-    Jalview.main(
-            new String[]
-    { "-noquestionnaire", "-nonews", "-props",
-                "test/jalview/hmmer/testProps.jvprops", "-open",
-                "examples/uniref50.fa" });
-    frame = Desktop.getAlignFrames()[0];
-  }
-
-  @AfterClass(alwaysRun = true)
-  public static void tearDownAfterClass() throws Exception
-  {
-    Desktop.instance.closeAll_actionPerformed(null);
-  }
-
-  /**
-   * Test with a dependency on locally installed hmmbuild binaries
-   * 
-   * @throws MalformedURLException
-   * @throws IOException
-   */
-  @Test(groups = "External")
-  public void testHMMBuildThenHMMAlign()
-          throws MalformedURLException, IOException
-  {
-    /*
-     * run hmmbuild
-     */
-    testHMMBuild();
-    List<SequenceI> hmms = frame.getViewport().getAlignment()
-            .getHmmSequences();
-    assertFalse(hmms.isEmpty());
-
-    /*
-     * now run hmmalign - by default with respect to the added HMM profile
-     */
-    testHMMAlign();
-  }
-
-  public void testHMMBuild()
-  {
-    /*
-     * set up argument to run hmmbuild for the alignment
-     */
-    ArrayList<ArgumentI> params = new ArrayList<>();
-    String argName = MessageManager.getString("label.hmmbuild_for");
-    String argValue = MessageManager.getString("label.alignment");
-    params.add(
-            new Option(argName, null, false, null, argValue, null, null));
-
-    HMMBuild builder = new HMMBuild(frame, params);
-    builder.run();
-
-    SequenceI seq = frame.getViewport().getAlignment().getSequenceAt(0);
-    HiddenMarkovModel hmm = seq.getHMM();
-    assertNotNull(hmm);
-
-    assertEquals(hmm.getLength(), 148);
-    assertEquals(hmm.getAlphabetType(), "amino");
-    assertEquals(hmm.getName(), "Alignment_HMM");
-    assertEquals(hmm.getProperty(HMMFile.EFF_NUMBER_OF_SEQUENCES),
-            "0.648193");
-  }
-
-  public void testHMMAlign()
-  {
-    HmmerCommand thread = new HMMAlign(frame,
-            new ArrayList<ArgumentI>());
-    thread.run();
-
-    AlignFrame[] alignFrames = Desktop.getAlignFrames();
-    if (alignFrames == null)
-    {
-      fail("No align frame loaded");
-    }
-
-    /*
-     * now have the original align frame, and another for realigned sequences
-     */
-    assertEquals(alignFrames.length, 2);
-    AlignmentI original = alignFrames[0].getViewport().getAlignment();
-    assertNotNull(original);
-    AlignmentI realigned = alignFrames[1].getViewport().getAlignment();
-    assertNotNull(realigned);
-    assertFalse(original.getHmmSequences().isEmpty());
-    assertFalse(realigned.getHmmSequences().isEmpty());
-
-    SequenceI ferCapan = original.findName("FER_CAPAN");
-    assertTrue(ferCapan.getSequenceAsString().startsWith("MA------SVSAT"));
-
-    SequenceI ferCapanRealigned = realigned.findName("FER_CAPAN");
-    assertTrue(ferCapanRealigned.getSequenceAsString()
-            .startsWith("-------m-A----SVSAT"));
-  }
-}
-
diff --git a/test/jalview/hmmer/testProps.jvprops b/test/jalview/hmmer/testProps.jvprops
deleted file mode 100644 (file)
index 05cd493..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-#---JalviewX Properties File---
-#Fri Apr 25 09:54:25 BST 2014
-SCREEN_Y=768
-SCREEN_X=936
-SHOW_WSDISCOVERY_ERRORS=true
-LATEST_VERSION=2.8.0b1
-SHOW_CONSERVATION=true
-JALVIEW_RSS_WINDOW_SCREEN_WIDTH=550
-JAVA_CONSOLE_SCREEN_WIDTH=450
-LAST_DIRECTORY=/Volumes/Data/Users/jimp/Documents/testing/Jalview/examples
-ID_ITALICS=true
-SORT_ALIGNMENT=No sort
-SHOW_IDENTITY=true
-WSMENU_BYHOST=false
-SEQUENCE_LINKS=EMBL-EBI Search|http\://www.ebi.ac.uk/ebisearch/search.ebi?db\=allebi&query\=$SEQUENCE_ID$
-SHOW_FULLSCREEN=false
-RECENT_URL=http\://www.jalview.org/examples/exampleFile_2_7.jar
-FONT_NAME=SansSerif
-BLC_JVSUFFIX=true
-VERSION_CHECK=false
-YEAR=2011
-SHOW_DBREFS_TOOLTIP=true
-MSF_JVSUFFIX=true
-SCREENGEOMETRY_HEIGHT=1600
-JAVA_CONSOLE_SCREEN_Y=475
-JAVA_CONSOLE_SCREEN_X=830
-PFAM_JVSUFFIX=true
-PIR_JVSUFFIX=true
-STARTUP_FILE=http\://www.jalview.org/examples/exampleFile_2_3.jar
-JAVA_CONSOLE_SCREEN_HEIGHT=162
-PIR_MODELLER=false
-GAP_SYMBOL=-
-SHOW_QUALITY=true
-SHOW_OCCUPANCY=true
-SHOW_GROUP_CONSERVATION=false
-SHOW_JWS2_SERVICES=true
-SHOW_NPFEATS_TOOLTIP=true
-FONT_STYLE=plain
-ANTI_ALIAS=false
-SORT_BY_TREE=false
-RSBS_SERVICES=|Multi-Harmony|Analysis|Sequence Harmony and Multi-Relief (Brandt et al. 2010)|hseparable,gapCharacter\='-',returns\='ANNOTATION'|?tool\=jalview|http\://zeus.few.vu.nl/programs/shmrwww/index.php?tool\=jalview&groups\=$PARTITION\:min\='2',minsize\='2',sep\=' '$&ali_file\=$ALIGNMENT\:format\='FASTA',writeasfile$
-AUTHORFNAMES=Jim Procter, Andrew Waterhouse, Jan Engelhardt, Lauren Lui, Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton
-JALVIEW_RSS_WINDOW_SCREEN_HEIGHT=328
-SHOW_GROUP_CONSENSUS=false
-SHOW_CONSENSUS_HISTOGRAM=true
-SHOW_OVERVIEW=false
-AUTHORS=J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
-FIGURE_AUTOIDWIDTH=false
-SCREEN_WIDTH=900
-ANNOTATIONCOLOUR_MIN=ffc800
-SHOW_STARTUP_FILE=false
-RECENT_FILE=examples/uniref50.fa\t/Volumes/Data/Users/jimp/Documents/testing/Jalview/examples/RF00031_folded.stk\t/Volumes/Data/Users/jimp/bs_ig_mult.out
-DEFAULT_FILE_FORMAT=FASTA
-SHOW_JAVA_CONSOLE=false
-VERSION=2.8b1
-FIGURE_USERIDWIDTH=
-WSMENU_BYTYPE=false
-DEFAULT_COLOUR=None
-NOQUESTIONNAIRES=true
-JALVIEW_NEWS_RSS_LASTMODIFIED=Apr 23, 2014 2\:53\:26 PM
-BUILD_DATE=01 November 2013
-PILEUP_JVSUFFIX=true
-SHOW_CONSENSUS_LOGO=false
-SCREENGEOMETRY_WIDTH=2560
-SHOW_ANNOTATIONS=true
-JALVIEW_RSS_WINDOW_SCREEN_Y=0
-USAGESTATS=false
-JALVIEW_RSS_WINDOW_SCREEN_X=0
-SHOW_UNCONSERVED=false
-SHOW_JVSUFFIX=true
-DAS_LOCAL_SOURCE=
-SCREEN_HEIGHT=650
-ANNOTATIONCOLOUR_MAX=ff0000
-AUTO_CALC_CONSENSUS=true
-FASTA_JVSUFFIX=true
-DAS_ACTIVE_SOURCE=uniprot\t
-JWS2HOSTURLS=http\://www.compbio.dundee.ac.uk/jabaws
-PAD_GAPS=false
-CLUSTAL_JVSUFFIX=true
-SHOW_ENFIN_SERVICES=true
-FONT_SIZE=10
-RIGHT_ALIGN_IDS=false
-USE_PROXY=false
-WRAP_ALIGNMENT=false
-#DAS_REGISTRY_URL=http\://www.dasregistry.org/das/ # retired 01/05/2015
-DAS_REGISTRY_URL=http\://www.ebi.ac.uk/das-srv/registry/das/
-logs.Jalview.level=DEBUG
-HMMER_PATH=/Users/gmcarstairs/software/hmmer-3.1b2-macosx-intel/binaries
diff --git a/test/jalview/io/HMMFileTest.java b/test/jalview/io/HMMFileTest.java
deleted file mode 100644 (file)
index cf74f55..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-package jalview.io;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-
-import jalview.datamodel.HMMNode;
-import jalview.datamodel.HiddenMarkovModel;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Scanner;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import junit.extensions.PA;
-
-public class HMMFileTest {
-
-  HMMFile fn3;
-
-  HMMFile pKinase;
-
-  HMMFile made1;
-
-  @BeforeClass(alwaysRun = true)
-  public void setUp() throws IOException
-  {
-    fn3 = new HMMFile("test/jalview/io/test_fn3_hmm.txt",
-            DataSourceType.FILE);
-
-    pKinase = new HMMFile("test/jalview/io/test_PKinase_hmm.txt",
-            DataSourceType.FILE);
-
-    made1 = new HMMFile("test/jalview/io/test_MADE1_hmm.txt",
-            DataSourceType.FILE);
-  }
-
-  @Test(groups = "Functional")
-  public void testParse() throws IOException
-  {
-    HiddenMarkovModel hmm = pKinase.getHMM();
-    assertEquals(hmm.getName(), "Pkinase");
-    assertEquals(hmm.getProperty(HMMFile.ACCESSION_NUMBER), "PF00069.17");
-    assertEquals(hmm.getProperty(HMMFile.DESCRIPTION),
-            "Protein kinase domain");
-    assertEquals(hmm.getLength(), 260);
-    assertNull(hmm.getProperty(HMMFile.MAX_LENGTH));
-    assertEquals(hmm.getAlphabetType(), "amino");
-    assertFalse(hmm.getBooleanProperty(HMMFile.REFERENCE_ANNOTATION));
-    assertFalse(hmm.getBooleanProperty(HMMFile.MASKED_VALUE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.CONSENSUS_RESIDUE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.CONSENSUS_STRUCTURE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.MAP));
-    assertEquals(hmm.getProperty(HMMFile.DATE), "Thu Jun 16 11:44:06 2011");
-    assertNull(hmm.getProperty(HMMFile.COMMAND_LOG));
-    assertEquals(hmm.getProperty(HMMFile.NUMBER_OF_SEQUENCES), "54");
-    assertEquals(hmm.getProperty(HMMFile.EFF_NUMBER_OF_SEQUENCES),
-            "3.358521");
-    assertEquals(hmm.getProperty(HMMFile.CHECK_SUM), "3106786190");
-    assertEquals(hmm.getProperty(HMMFile.GATHERING_THRESHOLD),
-            "70.30 70.30");
-    assertEquals(hmm.getProperty(HMMFile.TRUSTED_CUTOFF), "70.30 70.30");
-    assertEquals(hmm.getProperty(HMMFile.NOISE_CUTOFF), "70.20 70.20");
-  
-    assertEquals(hmm.getSymbols(), "ACDEFGHIKLMNPQRSTVWY");
-  
-    assertEquals(hmm.getMatchEmissionProbability(0, 'Y'), 0.16102, 0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(11, 'P'), 0.0130, 0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(24, 'I'), 0.02583, 0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(83, 'C'), 0.008549,
-            0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(332, 'E'), 0.07998,
-            0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(381, 'D'), 0.014465,
-            0.001d);
-    assertEquals(hmm.getMatchEmissionProbability(475, 'Y'), 0.02213,
-            0.001d);
-  
-    assertEquals(hmm.getInsertEmissionProbability(1, 'C'), 0.012, 0.001d);
-    assertEquals(hmm.getInsertEmissionProbability(14, 'H'), 0.02411,
-            0.001d);
-    assertEquals(hmm.getInsertEmissionProbability(23, 'L'), 0.06764,
-            0.001d);
-    assertEquals(hmm.getInsertEmissionProbability(90, 'D'), 0.0623, 0.001d);
-    assertEquals(hmm.getInsertEmissionProbability(374, 'T'), 0.0623,
-            0.001d);
-    assertEquals(hmm.getInsertEmissionProbability(470, 'P'), 0.0647,
-            0.001d);
-  
-    assertEquals(hmm.getStateTransitionProbability(2, 6), 0.3848, 0.001d);
-    assertEquals(hmm.getStateTransitionProbability(38, 3), 0.5382, 0.001d);
-    assertEquals(hmm.getStateTransitionProbability(305, 3), 0.2916, 0.001d);
-    assertEquals(hmm.getStateTransitionProbability(380, 0), 0.99, 0.001d);
-    assertEquals(hmm.getStateTransitionProbability(453, 1), 0.0066, 0.001d);
-  
-    assertEquals(hmm.getNodeMapPosition(3), 3);
-    assertEquals(hmm.getReferenceAnnotation(7), '-');
-    assertEquals(hmm.getConsensusResidue(23), 't');
-    assertEquals(hmm.getMaskedValue(30), '-');
-    assertEquals(hmm.getConsensusStructure(56), 'S');
-  
-    assertEquals(hmm.getNodeMapPosition(78), 136);
-    assertEquals(hmm.getReferenceAnnotation(93), '-');
-    assertEquals(hmm.getConsensusResidue(145), 'a');
-    assertEquals(hmm.getMaskedValue(183), '-');
-    assertEquals(hmm.getConsensusStructure(240), 'H');
-  }
-
-  /**
-   * Test that Jalview can parse an HMM file even with a bunch of 'mandatory'
-   * fields missing (including no MAP annotation or // terminator line)
-   * 
-   * @throws IOException
-   */
-  @Test(groups = "Functional")
-  public void testParse_minimalFile() throws IOException
-  {
-    /*
-     * ALPH is absent, alphabet inferred from HMM header line
-     * Optional COMPO line is absent
-     * first line after HMM is a guide line for readability
-     * next line is BEGIN node insert emissions
-     * next line is BEGIN node transitions
-     * next line is first sequence node match emissions 1.1 1.2 1.3
-     * next line is first sequence node insert emissions 1.4 1.5 1.6
-     * last line is first sequence node transitions
-     */
-    //@formatter:off
-    String hmmData = 
-            "HMMER3\n" +
-            "HMM P M J\n" +
-            // both spec and parser require a line after the HMM line
-            " m->m m->i m->d i->m i->i d->m d->d\n" +
-            " 0.1 0.2 0.3\n" + 
-            " 0.4 0.5 0.6 0.7 0.8 0.9 0.95\n" + 
-            " 1 1.1 1.2 1.3 - - - - -\n" + 
-            " 1.4 1.5 1.6\n" + 
-            " 1.7 1.8 1.9 2.0 2.1 2.2 2.3\n" +
-            " 2 1.01 1.02 1.03 - - - - -\n" + 
-            " 1.04 1.05 1.06\n" + 
-            " 1.7 1.8 1.9 2.0 2.1 2.2 2.3\n";
-    //@formatter:on
-    HMMFile parser = new HMMFile(hmmData, DataSourceType.PASTE);
-    HiddenMarkovModel hmm = parser.getHMM();
-    assertNotNull(hmm);
-    assertEquals(hmm.getSymbols(), "PMJ");
-    // no LENG property: this should return node count excluding BEGIN node
-    assertEquals(hmm.getLength(), 2);
-
-    // node 1 (implicitly mapped to column 0)
-    double prob = hmm.getMatchEmissionProbability(0, 'p');
-    assertEquals(prob, Math.pow(Math.E, -1.1));
-    prob = hmm.getInsertEmissionProbability(0, 'J');
-    assertEquals(prob, Math.pow(Math.E, -1.6));
-
-    // node 2 (implicitly mapped to column 1)
-    prob = hmm.getMatchEmissionProbability(1, 'M');
-    assertEquals(prob, Math.pow(Math.E, -1.02));
-    prob = hmm.getInsertEmissionProbability(1, 'm');
-    assertEquals(prob, Math.pow(Math.E, -1.05));
-  }
-  
-  @Test(groups = "Functional")
-  public void testParseHeaderLines_amino() throws IOException
-  {
-    FileReader fr = new FileReader(
-            new File("test/jalview/io/test_fn3_hmm.txt"));
-    BufferedReader br = new BufferedReader(fr);
-    HiddenMarkovModel hmm = new HiddenMarkovModel();
-    HMMFile testee = new HMMFile();
-    PA.setValue(testee, "hmm", hmm);
-    testee.parseHeaderLines(br);
-    br.close();
-    fr.close();
-  
-    assertEquals(hmm.getName(), "fn3");
-    assertEquals(hmm.getProperty(HMMFile.ACCESSION_NUMBER), "PF00041.13");
-    assertEquals(hmm.getProperty(HMMFile.DESCRIPTION),
-            "Fibronectin type III domain");
-    assertEquals(hmm.getProperty(HMMFile.LENGTH), "86");
-    assertNull(hmm.getProperty(HMMFile.MAX_LENGTH));
-    assertEquals(hmm.getAlphabetType(), "amino");
-    assertFalse(hmm.getBooleanProperty(HMMFile.REFERENCE_ANNOTATION));
-    assertFalse(hmm.getBooleanProperty(HMMFile.MASKED_VALUE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.CONSENSUS_RESIDUE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.CONSENSUS_STRUCTURE));
-
-    assertTrue(hmm.getBooleanProperty(HMMFile.MAP));
-    assertEquals(hmm.getProperty(HMMFile.DATE), "Fri Jun 20 08:22:31 2014");
-    assertNull(hmm.getProperty(HMMFile.COMMAND_LOG));
-    assertEquals(hmm.getProperty(HMMFile.NUMBER_OF_SEQUENCES), "106");
-    assertEquals(hmm.getProperty(HMMFile.EFF_NUMBER_OF_SEQUENCES),
-            "11.415833");
-    assertEquals(hmm.getProperty(HMMFile.CHECK_SUM), "3564431818");
-    assertEquals(hmm.getProperty(HMMFile.GATHERING_THRESHOLD), "8.00 7.20");
-    assertEquals(hmm.getProperty(HMMFile.TRUSTED_CUTOFF), "8.00 7.20");
-    assertEquals(hmm.getProperty(HMMFile.NOISE_CUTOFF), "7.90 7.90");
-    assertEquals(hmm.getViterbi(), "-9.7737  0.71847");
-    assertEquals(hmm.getMSV(), "-9.4043  0.71847");
-    assertEquals(hmm.getForward(), "-3.8341  0.71847");
-  }
-  
-  @Test(groups = "Functional")
-  public void testParseHeaderLines_dna() throws IOException
-  {
-    FileReader fr = new FileReader(
-            new File("test/jalview/io/test_MADE1_hmm.txt"));
-    BufferedReader br = new BufferedReader(fr);
-    HiddenMarkovModel hmm = new HiddenMarkovModel();
-    HMMFile testee = new HMMFile();
-    PA.setValue(testee, "hmm", hmm);
-    testee.parseHeaderLines(br);
-    br.close();
-    fr.close();
-  
-    assertEquals(hmm.getName(), "MADE1");
-    assertEquals(hmm.getProperty(HMMFile.ACCESSION_NUMBER),
-            "DF0000629.2");
-    assertEquals(hmm.getProperty(HMMFile.DESCRIPTION),
-            "MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon");
-    assertEquals(hmm.getProperty(HMMFile.LENGTH), "80");
-    assertEquals(hmm.getProperty(HMMFile.MAX_LENGTH), "426");
-    assertEquals(hmm.getAlphabetType(), "DNA");
-    assertTrue(hmm.getBooleanProperty(HMMFile.REFERENCE_ANNOTATION));
-    assertFalse(hmm.getBooleanProperty(HMMFile.MASKED_VALUE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.CONSENSUS_RESIDUE));
-    assertFalse(hmm.getBooleanProperty(HMMFile.CONSENSUS_STRUCTURE));
-    assertTrue(hmm.getBooleanProperty(HMMFile.MAP));
-    assertEquals(hmm.getProperty(HMMFile.DATE), "Tue Feb 19 20:33:41 2013");
-    assertNull(hmm.getProperty(HMMFile.COMMAND_LOG));
-    assertEquals(hmm.getProperty(HMMFile.NUMBER_OF_SEQUENCES), "1997");
-    assertEquals(hmm.getProperty(HMMFile.EFF_NUMBER_OF_SEQUENCES), "3.911818");
-    assertEquals(hmm.getProperty(HMMFile.CHECK_SUM), "3015610723");
-    assertEquals(hmm.getProperty(HMMFile.GATHERING_THRESHOLD),
-            "2.324 4.234");
-    assertEquals(hmm.getProperty(HMMFile.TRUSTED_CUTOFF), "2.343 1.212");
-    assertEquals(hmm.getProperty(HMMFile.NOISE_CUTOFF), "2.354 5.456");
-    assertEquals(hmm.getViterbi(), "-9.3632  0.71858");
-    assertEquals(hmm.getMSV(), "-8.5786  0.71858");
-    assertEquals(hmm.getForward(), "-3.4823  0.71858");
-  }
-  
-  @Test(groups = "Functional")
-  public void testFillList() throws IOException
-  {
-    Scanner scanner1 = new Scanner("1.3 2.4 5.3 3.9 9.8 4.7 4.3 2.3 6.9");
-    ArrayList<Double> filledArray = new ArrayList<>();
-  
-    filledArray.add(0.27253);
-    filledArray.add(0.0907);
-    filledArray.add(0.00499);
-    filledArray.add(0.02024);
-    filledArray.add(0.00005);
-    filledArray.add(0.00909);
-    filledArray.add(0.01357);
-    filledArray.add(0.10026);
-    filledArray.add(0.001);
-  
-    double[] testList = HMMFile.parseDoubles(scanner1, 9);
-
-    for (int i = 0; i < 9; i++)
-    {
-      assertEquals(testList[i], filledArray.get(i), 0.001d);
-    }
-
-    filledArray.clear();
-    scanner1.close();
-  
-    Scanner scanner2 = new Scanner(
-            "1.346 5.554 35.345 5.64 1.4");
-    filledArray.add(0.2603);
-    filledArray.add(0.00387);
-    filledArray.add(0d);
-    filledArray.add(0.00355);
-    filledArray.add(0.2466);
-  
-    testList = HMMFile.parseDoubles(scanner2, 5);
-
-    for (int i = 0; i < 5; i++)
-    {
-      assertEquals(testList[i], filledArray.get(i), 0.001d);
-    }
-  }
-  
-  @Test(groups = "Functional")
-  public void testParseModel() throws IOException
-  {
-    FileReader fr = new FileReader(
-            new File("test/jalview/io/test_MADE1_hmm.txt"));
-    BufferedReader br = new BufferedReader(fr);
-    HiddenMarkovModel testHMM = new HiddenMarkovModel();
-    String line = null;
-    do
-    {
-      line = br.readLine(); // skip header lines up to HMM plus one
-    } while (!line.startsWith("HMM "));
-    br.readLine();
-
-    made1.parseModel(br);
-    testHMM = made1.getHMM();
-
-    br.close();
-    fr.close();
-  
-    assertEquals(testHMM.getMatchEmissionProbability(1, 'C'), 0.09267,
-            0.001d);
-    assertEquals(testHMM.getMatchEmissionProbability(25, 'G'), 0.07327,
-            0.001d);
-    assertEquals(testHMM.getMatchEmissionProbability(1092, 'C'), 0.04184,
-            0.001d);
-    assertEquals(testHMM.getMatchEmissionProbability(1107, 'G'), 0.07,
-            0.001d);
-  
-    assertEquals(testHMM.getInsertEmissionProbability(0, 'G'), 0.25,
-            0.001d);
-    assertEquals(testHMM.getInsertEmissionProbability(247, 'T'), 0.2776,
-            0.001d);
-    assertEquals(testHMM.getInsertEmissionProbability(1096, 'T'), 0.25,
-            0.001d);
-    assertEquals(testHMM.getInsertEmissionProbability(1111, 'T'), 0.25,
-            0.001d);
-
-    assertEquals(testHMM.getStateTransitionProbability(1, 0), 0.9634,
-            0.001d);
-    assertEquals(testHMM.getStateTransitionProbability(5, 1), 0.0203,
-            0.001d);
-    assertEquals(testHMM.getStateTransitionProbability(14, 3), 0.2515,
-            0.001d);
-    assertEquals(testHMM.getStateTransitionProbability(65, 4), 0.78808,
-            0.001d);
-    assertEquals(testHMM.getStateTransitionProbability(1080, 2), 0.01845,
-            0.001d);
-    assertEquals(testHMM.getStateTransitionProbability(1111, 6),
-            Double.NEGATIVE_INFINITY);
-  }
-  
-  @Test(groups = "Functional")
-  public void testParseAnnotations()
-  {
-    HMMFile testFile = new HMMFile();
-    HiddenMarkovModel hmm = new HiddenMarkovModel();
-    PA.setValue(testFile, "hmm", hmm);
-
-    List<HMMNode> nodes = new ArrayList<>();
-    nodes.add(new HMMNode()); // BEGIN node
-  
-    hmm.setProperty(HMMFile.CONSENSUS_RESIDUE, "yes");
-    hmm.setProperty(HMMFile.MAP, "yes");
-    hmm.setProperty(HMMFile.REFERENCE_ANNOTATION, "yes");
-    hmm.setProperty(HMMFile.CONSENSUS_STRUCTURE, "yes");
-    hmm.setProperty(HMMFile.MASKED_VALUE, "yes");
-    Scanner scanner = new Scanner("1345 t t t t");
-    HMMNode node = new HMMNode();
-    nodes.add(node);
-    testFile.parseAnnotations(scanner, node);
-  
-    hmm.setProperty(HMMFile.CONSENSUS_RESIDUE, "yes");
-    hmm.setProperty(HMMFile.MAP, "no");
-    hmm.setProperty(HMMFile.REFERENCE_ANNOTATION, "yes");
-    hmm.setProperty(HMMFile.CONSENSUS_STRUCTURE, "no");
-    hmm.setProperty(HMMFile.MASKED_VALUE, "no");
-    Scanner scanner2 = new Scanner("- y x - -");
-    node = new HMMNode();
-    nodes.add(node);
-    testFile.parseAnnotations(scanner2, node);
-
-    hmm.setNodes(nodes);
-
-    assertEquals(hmm.getNodeMapPosition(1), 1345);
-    assertEquals(hmm.getConsensusResidue(1), 't');
-    assertEquals(hmm.getReferenceAnnotation(1), 't');
-    assertEquals(hmm.getMaskedValue(1), 't');
-    assertEquals(hmm.getConsensusStructure(1), 't');
-  
-    scanner.close();
-  }
-  
-  /**
-   * tests to see if file produced by the output matches the file from the input
-   * 
-   * @throws IOException
-   */
-  @Test(groups = "Functional")
-  public void testPrint_roundTrip() throws IOException
-  {
-    String output = pKinase.print();
-    HMMFile pKinaseClone = new HMMFile(
-            new FileParse(output, DataSourceType.PASTE));
-    HiddenMarkovModel pKinaseHMM = pKinase.getHMM();
-    HiddenMarkovModel pKinaseCloneHMM = pKinaseClone.getHMM();
-  
-    checkModelsMatch(pKinaseHMM, pKinaseCloneHMM);
-  }
-
-  /**
-   * A helper method to check two HMM models have the same values
-   * 
-   * @param model1
-   * @param model2
-   */
-  protected void checkModelsMatch(HiddenMarkovModel model1,
-          HiddenMarkovModel model2)
-  {
-    assertEquals(model1.getLength(), model2.getLength());
-
-    for (int i = 0; i < model1.getLength(); i++)
-    {
-      String msg = "For Node" + i;
-      assertEquals(model1.getNode(i).getMatchEmissions(),
-              model2.getNode(i).getMatchEmissions(), msg);
-      assertEquals(model1.getNode(i).getInsertEmissions(),
-              model2.getNode(i).getInsertEmissions(), msg);
-      assertEquals(model1.getNode(i).getStateTransitions(),
-              model2.getNode(i).getStateTransitions(), msg);
-  
-      if (i > 0)
-      {
-        assertEquals(model1.getNodeMapPosition(i),
-                model2.getNodeMapPosition(i), msg);
-        assertEquals(model1.getReferenceAnnotation(i),
-                model2.getReferenceAnnotation(i), msg);
-        assertEquals(model1.getConsensusResidue(i),
-                model2.getConsensusResidue(i), msg);
-      }
-    }
-  }
-  
-  @Test(groups = "Functional")
-  public void testAppendProperties() throws FileNotFoundException
-  {
-    StringBuilder sb = new StringBuilder();
-    fn3.appendProperties(sb);
-
-    Scanner testScanner = new Scanner(sb.toString());
-  
-    String[] expected = new String[] { "HMMER3/f [3.1b1 | May 2013]",
-        "NAME  fn3", "ACC   PF00041.13",
-        "DESC  Fibronectin type III domain", "LENG  86", "ALPH  amino",
-        "RF    no", "MM    no", "CONS  yes", "CS    yes", "MAP   yes",
-        "DATE  Fri Jun 20 08:22:31 2014", "NSEQ  106", "EFFN  11.415833",
-        "CKSUM 3564431818", "GA    8.00 7.20", "TC    8.00 7.20",
-        "NC    7.90 7.90", "STATS LOCAL MSV       -9.4043  0.71847",
-        "STATS LOCAL VITERBI   -9.7737  0.71847",
-        "STATS LOCAL FORWARD   -3.8341  0.71847" };
-  
-    for (String value : expected)
-    {
-      assertEquals(testScanner.nextLine(), value);
-    }
-  
-    testScanner.close();
-  }
-  
-  @Test(groups = "Functional")
-  public void testAppendModelAsString() throws FileNotFoundException
-  {
-    StringBuilder sb = new StringBuilder();
-    fn3.appendModelAsString(sb);
-    String string = sb.toString();
-
-    assertEquals(findValue(2, 2, 2, string), "4.42225");
-    assertEquals(findValue(12, 14, 1, string), "2.79307");
-    assertEquals(findValue(6, 24, 3, string), "0.48576");
-    assertEquals(findValue(19, 33, 2, string), "4.58477");
-    assertEquals(findValue(20, 64, 2, string), "3.61505");
-    assertEquals(findValue(3, 72, 3, string), "6.81068");
-    assertEquals(findValue(10, 80, 2, string), "2.69355");
-    assertEquals(findValue(16, 65, 1, string), "2.81003");
-    assertEquals(findValue(14, 3, 1, string), "2.69012");
-    assertEquals(findValue(11, 32, 1, string), "4.34805");
-  }
-  
-  /**
-   * A helper method to find a token in the model string
-   * 
-   * @param symbolIndex
-   *          index of symbol being searched. First symbol has index 1.
-   * @param nodeIndex
-   *          index of node being searched. Begin node has index 0. First node
-   *          has index 1.
-   * @param line
-   *          index of line being searched in node. First line has index 1.
-   * @param model
-   *          string model being searched
-   * @return value at specified position
-   */
-  private String findValue(int symbolIndex, int nodeIndex, int line,
-          String model)
-  {
-    String value = "";
-    Scanner scanner = new Scanner(model);
-    scanner.nextLine();
-    scanner.nextLine();
-  
-    for (int lineIndex = 0; lineIndex < line - 1; lineIndex++)
-    {
-      scanner.nextLine();
-    }
-    for (int node = 0; node < nodeIndex; node++)
-    {
-      scanner.nextLine();
-      scanner.nextLine();
-      scanner.nextLine();
-    }
-  
-    for (int symbol = 0; symbol < symbolIndex; symbol++)
-    {
-      value = scanner.next();
-      if ("COMPO".equals(value))
-      {
-        scanner.next();
-      }
-      else if (value.length() < 7)
-      {
-        scanner.next();
-      }
-    }
-    scanner.close();
-    return value;
-  }
-}
-
diff --git a/test/jalview/io/test_MADE1_hmm.txt b/test/jalview/io/test_MADE1_hmm.txt
deleted file mode 100644 (file)
index 32231db..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-HMMER3/f [3.1 | February 2013]
-NAME  MADE1
-ACC   DF0000629.2
-DESC  MADE1 (MAriner Derived Element 1), a TcMar-Mariner DNA transposon
-LENG  80
-MAXL  426
-ALPH  DNA
-RF    yes
-MM    no
-CONS  yes
-CS    no
-MAP   yes
-DATE  Tue Feb 19 20:33:41 2013
-NSEQ  1997
-EFFN  3.911818
-CKSUM 3015610723
-GA 2.324 4.234
-TC 2.343 1.212
-NC 2.354 5.456
-STATS LOCAL MSV       -8.5786  0.71858
-STATS LOCAL VITERBI   -9.3632  0.71858
-STATS LOCAL FORWARD   -3.4823  0.71858
-HMM          A        C        G        T   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   1.24257  1.59430  1.62906  1.16413
-          1.38629  1.38629  1.38629  1.38629
-          0.03960  3.94183  3.94183  1.46634  0.26236  0.00000        *
-      1   2.69765  2.44396  2.81521  0.24089      1 t x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03960  3.94183  3.94183  1.46634  0.26236  1.09861  0.40547
-      2   2.72939  2.37873  2.85832  0.24244      2 t x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03725  4.00179  4.00179  1.46634  0.26236  1.09861  0.40547
-      3   0.16099  3.16370  2.87328  2.99734      3 a x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03604  4.03416  4.03416  1.46634  0.26236  1.09861  0.40547
-      4   1.98862  2.42132  0.42649  2.10770      4 g x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03539  4.05203  4.05203  1.46634  0.26236  1.09861  0.40547
-      5   1.96369  2.69532  0.36534  2.32099      5 g x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03764  4.06427  3.92372  1.46634  0.26236  1.09861  0.40547
-      6   2.56994  2.11239  2.71946  0.30571      6 t x - -
-          1.37159  1.41129  1.39124  1.37159
-          0.03806  3.89715  4.07214  1.50442  0.25122  1.00714  0.45454
-      7   2.58388  2.10353  2.64646  0.31253     12 t x - -
-          1.38764  1.38524  1.38764  1.38465
-          0.03494  4.03864  4.09125  1.40070  0.28293  1.09237  0.40860
-      8   2.18552  2.70201  0.28821  2.64645     14 g x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03628  4.09157  3.96779  1.46634  0.26236  1.09861  0.40547
-      9   2.16916  2.82142  0.28427  2.60854     15 g x - -
-          1.38091  1.39033  1.38365  1.39033
-          0.03566  4.00237  4.08886  1.38021  0.28972  1.01958  0.44745
-     10   2.45517  2.15232  2.42886  0.34277     18 t x - -
-          1.39065  1.39065  1.39065  1.37335
-          0.03536  4.01212  4.09576  1.39554  0.28462  1.09775  0.40589
-     11   2.10260  2.95484  0.28160  2.64222     21 g x - -
-          1.36740  1.40555  1.40555  1.36740
-          0.03843  3.92069  4.02468  1.44733  0.26814  1.09856  0.40549
-     12   2.54740  0.30185  2.61355  2.21647     26 c x - -
-          1.38748  1.38276  1.38748  1.38748
-          0.03457  4.05446  4.09623  1.40847  0.28040  1.05496  0.42803
-     13   0.28443  2.72003  2.32214  2.48149     28 a x - -
-          1.38740  1.38740  1.38298  1.38740
-          0.03441  4.05976  4.10001  1.41198  0.27926  1.09780  0.40587
-     14   0.29412  2.55413  2.49679  2.35701     30 a x - -
-          1.38194  1.39067  1.38194  1.39067
-          0.03505  4.02482  4.10005  1.39522  0.28473  1.09929  0.40512
-     15   0.18837  2.99710  2.82270  2.77556     33 a x - -
-          1.39015  1.39472  1.37503  1.38539
-          0.03725  3.97815  4.02618  1.37955  0.28994  1.10102  0.40426
-     16   0.50816  2.05151  2.22111  1.82407     37 a x - -
-          1.36727  1.38730  1.39683  1.39405
-          0.04830  3.89881  3.61610  1.29026  0.32186  1.05306  0.42905
-     17   2.11260  2.73141  0.29747  2.64152     41 g x - -
-          1.36913  1.40376  1.40376  1.36913
-          0.03705  3.93681  4.08299  1.44872  0.26771  1.07479  0.41759
-     18   2.24459  1.90539  2.34054  0.43234     46 t x - -
-          1.33632  1.42493  1.39937  1.38665
-          0.04427  3.64574  4.06297  1.70501  0.20061  1.21309  0.35279
-     19   0.44322  2.17202  2.18055  2.03175     57 a x - -
-          1.41047  1.41471  1.36338  1.35797
-          0.03970  3.81957  4.07540  1.65588  0.21186  1.22788  0.34660
-     20   0.33340  2.42691  2.40824  2.25160     66 a x - -
-          1.29389  1.44615  1.37917  1.43324
-          0.04223  3.70146  4.09459  1.55158  0.23815  1.05880  0.42598
-     21   2.50563  1.98543  2.69601  0.33746     74 t x - -
-          1.39462  1.39462  1.42862  1.32990
-          0.04184  3.80216  3.98177  1.80466  0.17976  1.00279  0.45705
-     22   2.54484  1.97505  2.66483  0.33806     84 t x - -
-          1.39134  1.39489  1.38662  1.37246
-          0.03877  3.97504  3.95038  1.37620  0.29107  1.13932  0.38572
-     23   2.10159  2.83856  0.29282  2.61635     88 g x - -
-          1.39682  1.39682  1.35536  1.39682
-          0.05046  3.75402  3.65808  1.08330  0.41321  1.13019  0.39004
-     24   2.25298  0.61854  2.50691  1.29221     90 c x - -
-          1.35803  1.49605  1.46737  1.24379
-          0.06091  3.28322  3.83564  1.89752  0.16245  1.28788  0.32276
-     25   1.27819  2.23285  0.76242  1.91259    106 g x - -
-          1.29024  1.67349  1.68279  1.04597
-          0.05752  3.44263  3.73311  2.58671  0.07825  1.26818  0.33037
-     26   1.86925  2.58352  0.39466  2.33986    131 g x - -
-          1.31084  1.49412  1.46666  1.29002
-          0.04698  3.54257  4.07715  2.25245  0.11109  0.86163  0.54900
-     27   2.38297  1.93394  2.39162  0.39800    151 t x - -
-          1.33582  1.47359  1.44163  1.30411
-          0.04951  3.48445  4.03783  2.15951  0.12260  1.21681  0.35122
-     28   2.41717  2.17810  2.62774  0.32113    170 t x - -
-          1.36805  1.48060  1.37439  1.32840
-          0.04849  3.50958  4.05014  2.58370  0.07850  1.22399  0.34822
-     29   2.57764  2.35132  2.56552  0.28512    194 t x - -
-          1.43829  1.43458  1.24787  1.43829
-          0.04667  3.56670  4.05428  2.49706  0.08591  1.23744  0.34267
-     30   2.47248  2.07688  2.62257  0.33172    215 t x - -
-          1.25120  1.52623  1.70635  1.15531
-          0.08932  3.31524  3.01336  2.81842  0.06156  1.22909  0.34610
-     31   2.25937  2.13157  2.02027  0.43957    248 t x - -
-          1.18172  1.43522  1.72841  1.28150
-          0.07936  2.93117  3.77395  2.46269  0.08906  0.60457  0.79034
-     32   2.04508  2.84981  0.30490  2.58263    280 g x - -
-          1.17665  1.66785  1.66218  1.16056
-          0.05998  3.23615  3.96853  2.83684  0.06040  1.01952  0.44749
-     33   2.45103  0.38098  2.56776  1.87147    317 c x - -
-          1.24153  1.52524  1.60663  1.22783
-          0.05538  3.39046  3.90294  2.73920  0.06680  1.18729  0.36391
-     34   2.22082  0.36258  2.75077  2.02704    347 c x - -
-          1.15008  1.62014  1.86511  1.10673
-          0.06086  3.18178  4.04341  2.94504  0.05403  1.25991  0.33363
-     35   0.27033  2.66664  2.52541  2.43767    388 a x - -
-          1.24951  1.47565  1.41392  1.42074
-          0.07123  3.00373  3.95552  3.13655  0.04440  1.28173  0.32512
-     36   2.83107  2.41670  2.97197  0.22235    439 t x - -
-          1.37071  1.57683  1.38637  1.23972
-          0.05293  3.45216  3.91807  2.54402  0.08181  1.14651  0.38235
-     37   2.52322  2.25084  2.45909  0.31611    465 t x - -
-          1.26335  1.55077  1.59008  1.19965
-          0.07504  3.13329  3.55006  3.08962  0.04659  1.13108  0.38962
-     38   0.45807  2.30687  1.98940  2.03143    512 a x - -
-          1.15472  1.67511  1.53797  1.26320
-          0.09820  3.13076  2.99876  2.79197  0.06326  1.39915  0.28343
-     39   2.37471  0.42180  2.44763  1.80427    550 c x - -
-          1.23785  1.49058  1.48364  1.35502
-          0.06081  3.19472  4.01643  2.41851  0.09327  0.94671  0.49105
-     40   2.32826  1.95481  2.36781  0.40458    578 t x - -
-          1.36586  1.46001  1.43000  1.29720
-          0.05257  3.39673  4.03256  1.84862  0.17133  1.40979  0.27997
-     41   2.68669  2.13935  2.81520  0.28200    592 t x - -
-          1.34965  1.42793  1.45781  1.31633
-          0.04735  3.57826  3.99988  2.09424  0.13144  1.22129  0.34934
-     42   2.55904  2.16444  2.70859  0.29952    609 t x - -
-          1.12072  1.61936  1.63578  1.26895
-          0.07346  3.25910  3.42962  2.85641  0.05919  1.38363  0.28857
-     43   1.99923  1.61027  2.26343  0.57851    646 t x - -
-          1.32290  1.58747  1.61095  1.11018
-          0.06656  3.08568  3.97944  2.44774  0.09046  0.75593  0.63407
-     44   0.23887  2.79899  2.55209  2.60783    675 a x - -
-          1.18557  1.50323  1.59070  1.31590
-          0.05597  3.38637  3.88222  2.46900  0.08847  1.27945  0.32599
-     45   0.29593  2.53488  2.53903  2.32335    701 a x - -
-          1.08710  1.54222  1.59276  1.40430
-          0.07539  2.94521  3.91062  1.91623  0.15918  1.22327  0.34852
-     46   2.58352  2.40524  2.76700  0.25955    725 t x - -
-          1.19685  1.58503  1.74852  1.14293
-          0.06124  3.18279  4.02089  2.82961  0.06085  1.05474  0.42814
-     47   2.13251  2.88788  0.29508  2.50964    764 g x - -
-          1.20891  1.55463  1.68206  1.19000
-          0.06526  3.12574  3.94910  2.41448  0.09367  1.10396  0.40280
-     48   2.23841  2.99164  0.25118  2.72900    792 g x - -
-          1.26330  1.55339  1.52606  1.24355
-          0.05464  3.34968  4.01313  2.78872  0.06347  1.15133  0.38012
-     49   2.57533  0.32900  2.64632  2.01501    824 c x - -
-          1.35118  1.39828  1.40141  1.39516
-          0.04340  3.79297  3.91506  1.59549  0.22666  1.20075  0.35806
-     50   0.46433  2.04127  2.23437  2.00605    833 a x - -
-          1.23062  1.36903  1.62282  1.36182
-          0.05764  3.31530  3.92762  2.28791  0.10700  1.07910  0.41536
-     51   0.27513  2.77017  2.28518  2.57549    853 a x - -
-          1.27958  1.58726  1.46109  1.25394
-          0.05750  3.30072  3.96214  2.60776  0.07656  1.25708  0.33475
-     52   0.20149  2.86434  2.84551  2.69770    883 a x - -
-          1.23645  1.62259  1.71174  1.10368
-          0.05756  3.26729  4.02702  2.54508  0.08172  1.27391  0.32814
-     53   0.26982  2.65833  2.50477  2.46835    911 a x - -
-          1.36005  1.50358  1.48100  1.22550
-          0.06921  3.37553  3.42118  2.36646  0.09851  1.27560  0.32748
-     54   0.40022  2.19284  2.22687  2.20396    934 a x - -
-          1.12070  1.60472  1.53213  1.35895
-          0.05523  3.36752  3.94966  2.42917  0.09224  0.84774  0.55928
-     55   2.11356  0.46400  2.46442  1.79955    960 c x - -
-          1.23932  1.35913  1.50478  1.46331
-          0.05187  3.47055  3.94022  2.35854  0.09933  1.12102  0.39445
-     56   1.85868  0.79440  2.22069  1.25971    983 c x - -
-          1.21951  1.50212  1.51138  1.34185
-          0.06404  3.29054  3.69705  1.75742  0.18933  1.18410  0.36532
-     57   1.33272  2.32720  0.71452  1.90215    999 g x - -
-          1.12229  1.49343  1.56653  1.42255
-          0.04920  3.46654  4.08749  2.17995  0.11996  1.31769  0.31164
-     58   2.48337  0.43652  2.46331  1.68683   1017 c x - -
-          1.34704  1.55461  1.38112  1.28222
-          0.04823  3.61532  3.90311  2.20911  0.11631  1.00864  0.45368
-     59   0.41659  2.44509  1.93972  2.20507   1034 a x - -
-          1.38198  1.38198  1.39194  1.38932
-          0.03641  3.98130  4.06929  1.35873  0.29704  1.31330  0.31325
-     60   0.41612  2.39160  1.97116  2.21075   1037 a x - -
-          1.03649  1.46430  1.57421  1.57557
-          0.04769  3.52580  4.06641  2.32461  0.10294  0.84329  0.56263
-     61   2.66264  2.12302  2.82746  0.28581   1056 t x - -
-          1.36925  1.39635  1.38930  1.39048
-          0.04097  3.97400  3.84718  1.39433  0.28502  1.12205  0.39395
-     62   2.26510  2.13196  2.42551  0.37231   1060 t x - -
-          1.37965  1.39147  1.39147  1.38264
-          0.04082  3.91610  3.90805  1.24613  0.33914  0.95192  0.48776
-     63   0.41244  2.25761  2.16787  2.12907   1062 a x - -
-          1.34515  1.41203  1.41203  1.37753
-          0.04054  3.77835  4.08203  1.30483  0.31638  1.11819  0.39582
-     64   2.51464  0.37905  2.62296  1.82008   1068 c x - -
-          1.39543  1.38753  1.39233  1.37008
-          0.03854  3.90584  4.03535  1.36573  0.29463  1.13682  0.38689
-     65   2.16380  2.11332  2.18714  0.42765   1073 t x - -
-          1.38764  1.38471  1.38519  1.38764
-          0.03575  4.05376  4.03073  1.40080  0.28289  1.03825  0.43707
-     66   2.79349  2.39141  2.87271  0.23478   1075 t x - -
-          1.37227  1.39101  1.39101  1.39101
-          0.03597  4.01447  4.05827  1.39017  0.28639  1.06429  0.42308
-     67   2.82488  2.47749  2.93179  0.21887   1078 t x - -
-          1.38141  1.39112  1.38915  1.38353
-          0.03661  3.99477  4.04370  1.35958  0.29675  1.13439  0.38804
-     68   2.77679  2.30433  2.90694  0.24425   1081 t x - -
-          1.37593  1.38989  1.45520  1.32825
-          0.04447  3.68736  3.99242  1.76176  0.18843  0.98580  0.46703
-     69   2.47698  3.17398  0.19595  2.95437   1093 g x - -
-          1.38264  1.38264  1.39734  1.38264
-          0.05358  3.96553  3.40487  1.40348  0.28202  1.03112  0.44100
-     70   2.84327  0.27906  2.97336  2.00890   1097 c x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03412  4.08811  4.08811  1.46634  0.26236  0.69006  0.69625
-     71   0.21870  2.83638  2.69251  2.65798   1098 a x - -
-          1.37446  1.37942  1.39640  1.39509
-          0.03670  3.93983  4.09935  1.41905  0.27700  1.10002  0.40476
-     72   2.35233  0.46085  2.23804  1.78715   1103 c x - -
-          1.38536  1.38781  1.38781  1.38421
-          0.03493  4.03822  4.09272  1.39310  0.28542  1.09638  0.40658
-     73   2.57111  0.32543  2.74124  1.98892   1105 c x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03381  4.09688  4.09688  1.46634  0.26236  1.09626  0.40664
-     74   0.27014  2.61416  2.53262  2.47636   1106 a x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03461  4.09267  4.05587  1.46634  0.26236  1.09748  0.40603
-     75   0.52873  2.16549  1.91736  1.90409   1107 a x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03426  4.08396  4.08396  1.46634  0.26236  1.07423  0.41788
-     76   2.33134  0.38082  2.65861  1.90055   1108 c x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03466  4.07266  4.07266  1.46634  0.26236  1.09861  0.40547
-     77   2.20588  0.45134  2.35553  1.84373   1109 c x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03550  4.04912  4.04912  1.46634  0.26236  1.09861  0.40547
-     78   2.69018  2.22054  2.82311  0.26898   1110 t x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.03711  4.00561  4.00561  1.46634  0.26236  1.09861  0.40547
-     79   0.16248  3.15867  2.86159  2.98963   1111 a x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.04048  3.92018  3.92018  1.46634  0.26236  1.09861  0.40547
-     80   0.17484  3.04770  2.86638  2.88183   1112 a x - -
-          1.38629  1.38629  1.38629  1.38629
-          0.02045  3.90014        *  1.46634  0.26236  0.00000        *
-//
diff --git a/test/jalview/io/test_PKinase_hmm.txt b/test/jalview/io/test_PKinase_hmm.txt
deleted file mode 100644 (file)
index e1ad9f9..0000000
+++ /dev/null
@@ -1,806 +0,0 @@
-HMMER3/e [3.0 | March 2010]
-NAME  Pkinase
-ACC   PF00069.17
-DESC  Protein kinase domain
-LENG  260
-ALPH  amino
-RF    no
-CONS  yes
-CS    yes
-MAP   yes
-DATE  Thu Jun 16 11:44:06 2011
-NSEQ  54
-EFFN  3.358521
-CKSUM 3106786190
-GA    70.30 70.30
-TC    70.30 70.30
-NC    70.20 70.20
-STATS LOCAL MSV      -10.7215  0.70254
-STATS LOCAL VITERBI  -11.6541  0.70254
-STATS LOCAL FORWARD   -5.2305  0.70254
-HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   2.60017  4.19886  2.94089  2.63789  3.35087  2.89119  3.48337  2.79435  2.60265  2.43454  3.62613  3.06133  3.41286  3.09693  2.94507  2.65650  2.87761  2.67871  4.54052  3.43274
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.00000        *
-      1   2.91704  4.31028  4.76351  3.63148  2.10912  3.47710  4.39734  2.27639  3.96619  1.99282  3.42844  4.19567  4.43771  4.11903  3.67403  3.22736  3.14918  2.35905  3.32515  1.82622      1 y - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      2   2.77204  4.20708  3.06476  1.97968  4.66603  3.66509  3.19858  3.37903  2.25347  3.34018  4.38833  2.97180  4.05804  2.36838  2.43173  2.67542  2.50268  2.83403  5.78758  4.38976      2 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      3   2.90076  4.04294  3.31590  2.80413  3.08157  3.87481  4.12616  2.18958  2.49735  1.97194  3.73714  3.32717  3.98753  3.23115  3.12315  2.99137  2.62008  2.29426  5.21478  3.75979      3 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      4   2.89383  4.85429  3.10311  2.63174  3.71383  2.56808  3.47232  2.82076  2.61844  1.98342  3.72320  3.05498  4.17347  3.05527  3.32194  2.85608  2.93671  2.18878  5.40057  3.87183      4 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      5   2.68261  5.39185  2.80437  1.87471  4.73638  2.79887  3.69591  4.22191  2.19487  3.69685  4.08896  3.12413  3.70490  2.48424  2.08916  2.53260  3.02309  3.43812  5.82480  4.41426      5 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      6   2.77253  4.06085  3.07881  2.53373  4.10647  3.71564  3.68370  2.64290  2.00036  2.72968  4.17370  3.24239  3.08607  2.77632  2.72820  2.69921  2.54335  2.71931  5.60386  4.26496      6 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      7   3.42930  4.74416  5.34765  4.76823  3.71832  4.71430  5.09461  1.33015  3.54417  1.12594  3.33523  4.84641  5.00427  4.73010  4.64986  4.05097  3.66327  1.83083  5.51142  4.37013      7 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      8   2.57460  4.94286  4.00732  3.93216  5.40516  0.41612  5.15134  4.86315  4.18766  4.52736  5.33508  4.05990  4.45245  3.74651  4.46171  3.15888  3.14590  4.15180  6.71159  5.52767      8 G - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-      9   2.30218  5.38172  3.03799  2.02026  4.18991  3.65799  3.84554  3.67215  2.28945  3.68495  4.42365  2.84227  3.73039  2.44555  2.39428  2.00278  2.95859  3.63127  5.81726  4.40923      9 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     10   4.54226  6.07621  5.39207  5.44513  6.34643  0.07137  6.34600  6.33790  5.73770  5.76452  6.83374  5.56171  5.46536  5.98137  5.73783  4.76037  5.08470  5.67502  7.03864  6.52156     10 G - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     11   2.06444  5.37337  2.91595  2.40063  4.70969  2.61181  3.84889  4.18948  2.46835  3.67503  4.41668  2.62917  4.05392  2.88235  2.66711  2.00495  2.47288  3.39649  5.81159  4.40596     11 s - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     12   2.90920  4.46494  4.12493  3.14570  1.52027  3.22992  4.24969  2.92840  3.46467  2.66529  3.12827  3.55640  4.33979  3.72214  3.72236  2.53517  2.98442  2.55125  5.06498  2.30159     12 f - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     13   2.21104  4.80722  4.64199  4.55509  5.54982  0.52550  5.49025  5.04875  4.70671  4.72740  5.47955  4.30215  4.43233  4.84666  4.86038  1.95116  3.45005  4.17507  6.87595  5.79039     13 G - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     14   2.71551  3.46186  3.01248  2.27453  4.55840  3.55853  3.50842  3.55064  2.03335  3.34882  4.31847  3.17065  4.07218  2.83960  2.83653  2.25762  2.26864  2.61469  5.72841  4.35037     14 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     15   3.17885  3.97005  5.63014  5.16553  4.35293  4.89782  5.77682  2.09398  5.06494  2.94083  4.14496  5.20428  5.30924  5.30763  5.20260  4.32158  3.61414  0.44769  6.26043  5.04118     15 V - - E
-          2.68625  4.42232  2.77526  2.73102  3.46361  2.40519  3.72501  3.29361  2.67747  2.69306  4.24696  2.90353  2.73746  3.18153  2.89807  2.37893  2.77526  2.98499  4.58484  3.61510
-          0.09563  2.43065  5.73865  0.67073  0.71608  0.48576  0.95510
-     16   2.91101  3.31342  4.36759  3.41772  2.45121  4.01227  4.31421  2.75922  2.81772  2.31733  3.50420  3.69862  4.38187  3.88257  3.14725  3.02772  3.14303  2.46483  3.37889  1.69905     18 y - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     17   2.88484  5.28431  3.03179  2.31849  4.58595  3.47769  3.54625  2.98124  1.69233  2.43413  4.04064  3.16353  4.06907  2.72555  2.58277  2.55274  3.04512  3.20501  5.74377  4.36100     19 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     18   1.57125  2.56460  3.38436  3.39201  3.66458  2.34190  4.20526  2.93932  3.32823  2.44127  3.26099  3.74334  4.30466  3.60817  3.63469  3.01628  2.92537  2.55308  5.13581  3.91882     20 a - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     19   2.89298  4.40558  3.44708  2.63051  3.77015  3.77747  2.87940  2.57515  2.33949  2.85128  3.20054  3.37379  4.16367  2.65910  2.52913  2.67954  2.59930  2.46709  5.42679  3.74337     21 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     20   2.88350  5.37811  2.42858  2.28192  4.71668  3.65945  2.35349  4.19788  2.20596  2.91798  4.42054  2.38258  4.05280  2.81490  2.60119  2.77457  3.11461  3.76528  3.43428  3.80493     22 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     21   2.59359  5.30144  3.00667  2.46268  4.60954  3.67285  3.22394  2.91749  2.13087  2.60378  4.35201  3.05590  3.51881  2.48537  2.35096  2.62551  3.00998  2.84793  5.75687  4.36947     23 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     22   2.64500  5.38003  2.46961  2.36386  4.71962  2.36153  3.71093  3.77963  2.19342  3.27291  4.42213  2.49968  3.44456  2.94396  2.94770  2.23767  2.90215  3.58800  5.81601  3.79868     24 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     23   2.71410  5.35453  2.26257  2.17828  4.68327  3.06138  3.85215  3.65600  2.51871  3.65284  4.39957  2.64619  4.05631  2.95399  2.98284  2.41102  1.94961  3.19379  5.79713  3.78693     25 t - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.03260  5.01631  3.67114  0.61958  0.77255  0.48576  0.95510
-     24   2.77509  4.50579  3.06414  2.40741  4.68877  2.10468  3.84020  4.16638  2.52713  3.65577  4.39945  2.31826  2.82304  2.55347  2.45557  2.51717  3.10489  3.55245  5.79545  3.68618     26 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.13496  4.99383  2.12471  0.61958  0.77255  0.54753  0.86365
-     25   2.82390  4.23357  2.59579  2.09029  4.65095  3.47120  3.53571  3.50264  1.93281  3.24335  4.10745  2.98984  3.99409  2.41262  2.43858  2.60001  2.84781  3.57090  5.75206  3.98239     27 k - - E
-          2.68634  4.42166  2.77510  2.73101  3.46370  2.40521  3.72473  3.29370  2.67713  2.69347  4.24706  2.90350  2.73742  3.18145  2.89817  2.37895  2.77536  2.98516  4.58493  3.61485
-          0.21086  2.33296  2.37401  1.37928  0.29003  0.81455  0.58490
-     26   2.79249  4.86773  3.27912  2.48247  3.81836  3.65430  3.86742  2.36980  2.31612  2.40000  3.66176  2.98804  3.52938  2.45192  2.80383  2.80149  2.71760  2.93241  5.39419  3.83742     36 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01259  4.77670  5.49905  0.61958  0.77255  0.27298  1.43175
-     27   2.94684  4.40681  4.93000  4.33270  2.14562  4.19543  4.43742  2.60780  4.12995  2.51432  3.32273  4.32339  4.55150  4.25562  4.15094  3.50804  3.26683  1.12964  4.39266  2.23526     37 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     28   0.67405  4.13502  4.78133  4.26234  4.00859  4.13420  4.88775  2.58668  4.14876  2.87877  3.59530  4.37511  4.66004  4.38446  4.34251  3.50924  3.44597  2.20111  5.62436  4.43519     38 A - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     29   2.77559  4.05359  4.82280  4.21814  3.45081  3.88127  4.46447  1.69887  3.29990  2.06046  2.92956  4.25618  4.49083  4.18293  4.07725  3.28739  3.19210  1.31639  4.98894  3.80930     39 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     30   4.13385  6.06880  4.58555  3.84767  5.73274  4.53840  4.41573  5.06650  0.32256  4.37802  5.30885  4.14872  4.92009  3.55775  2.54913  4.11741  4.25754  4.75872  6.25921  5.22828     40 K - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     31   2.53136  3.93442  3.55191  2.54113  3.59001  3.81267  3.67691  2.09853  2.22431  2.85063  3.63116  3.45300  4.19661  2.87681  2.71089  2.96116  2.67441  2.46338  5.34241  3.76111     41 i - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     32   2.80227  4.30542  4.81704  3.71619  2.31247  3.45194  4.41496  1.85614  4.00698  1.68898  3.06826  4.22398  4.44809  4.15126  4.03957  3.11345  3.01936  1.82478  4.92889  3.75130     42 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     33   2.72320  4.19698  2.89173  2.30854  4.21536  3.66470  3.63903  3.54937  1.81020  3.33297  4.38970  2.50126  3.12497  2.85129  2.61476  2.47307  2.93549  3.43057  4.63863  3.86554     43 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     34   2.73748  5.16363  3.24304  2.62749  4.42406  3.39882  3.64889  3.08793  1.75481  2.64054  4.22767  2.81684  3.49630  2.92572  2.69253  2.71691  2.78362  2.91622  5.65055  3.09244     44 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     35   2.82342  4.21564  2.57688  2.18304  4.09635  3.66104  3.29269  4.17416  2.24176  3.24419  4.40775  3.13331  3.02670  2.66210  2.30119  2.38622  2.91913  2.84969  5.80393  4.13733     45 e - - H
-          2.68618  4.42225  2.77520  2.73124  3.46354  2.40513  3.72495  3.29354  2.67741  2.69355  4.24690  2.90347  2.73731  3.18147  2.89801  2.37887  2.77520  2.98519  4.58477  3.61503
-          0.02362  3.90596  5.73865  0.48782  0.95182  0.48576  0.95510
-     36   2.81479  5.38805  2.34307  2.08229  3.84722  3.00939  3.24618  4.21561  2.24819  3.24444  4.42924  2.80965  3.63231  2.74299  2.65208  2.41080  2.72103  3.26063  5.82196  4.16400     47 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     37   2.42659  5.32934  2.94543  1.98753  4.27035  3.66735  3.85733  2.97282  2.27697  3.20526  3.75542  2.69174  3.50027  2.79550  2.45131  2.66535  2.70832  3.28701  5.77800  4.07668     48 e - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     38   2.82479  5.36482  2.46403  2.36491  4.23121  3.19666  3.53460  3.47934  2.01766  2.87145  4.06028  2.53791  3.88358  2.73438  2.79605  2.39315  2.94316  3.30320  5.80464  3.67777     49 k - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     39   2.81259  3.82036  2.58997  2.16257  3.93187  3.50795  3.44913  3.32347  2.23760  3.42042  3.43188  3.03914  3.18139  2.98833  2.90722  1.97318  3.04237  3.44327  4.85883  4.01646     50 s - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04017  5.01631  3.41907  0.61958  0.77255  0.48576  0.95510
-     40   2.75150  4.68420  2.78864  2.20581  3.96394  3.14028  3.85474  3.62649  2.17804  2.84544  3.93254  2.66146  3.79370  2.72658  2.87564  2.43841  2.71937  3.23202  3.36778  4.34996     51 k - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01020  4.98634  5.70869  0.61958  0.77255  0.56699  0.83755
-     41   2.52028  4.29421  2.93844  2.26593  3.28616  3.42961  3.89113  3.40312  1.92589  2.89626  3.59280  3.04537  4.08209  2.42956  3.02333  2.89065  2.87512  2.78376  5.62895  3.97726     52 k - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.06456  4.98634  2.88790  0.61958  0.77255  0.56699  0.83755
-     42   2.52102  4.66200  2.60886  2.12080  3.90563  3.43164  3.41299  3.76759  2.19798  2.95231  4.37667  2.71584  3.31098  2.66775  2.46389  2.65499  2.89357  3.57073  4.74853  4.36793     53 e - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.06881  4.93254  2.82535  0.61958  0.77255  0.69302  0.69327
-     43   2.65676  5.27743  2.81592  2.16715  4.59834  3.44096  3.79920  2.82354  2.10889  3.57233  3.78816  2.93522  4.00237  2.20078  2.58862  2.72374  2.99283  3.18643  5.72482  3.30249     54 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04191  4.87514  3.39892  0.61958  0.77255  0.80592  0.59181
-     44   2.46416  5.14935  3.14274  2.35064  4.42785  3.46788  3.62138  3.06885  2.39724  2.90472  4.00413  2.77252  4.01153  2.56699  2.69346  2.37713  2.33258  3.34725  5.62407  3.30627     55 t - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.15381  4.84499  2.00472  0.61958  0.77255  0.85820  0.55151
-     45   2.15178  5.11690  2.80767  2.47016  4.06926  3.56450  3.25874  3.42510  2.38373  2.72748  4.17388  2.58132  3.95629  2.68997  2.59104  2.52019  2.89357  3.10461  5.58730  3.84420     56 a - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.06869  4.70471  2.85898  0.61958  0.77255  1.05523  0.42788
-     46   2.33893  4.38200  3.78128  3.08857  2.87706  3.76539  4.03303  2.50172  2.82237  2.26545  3.48958  3.56901  4.14175  3.13269  2.43377  3.02211  2.55318  2.18677  4.40164  3.75633     57 v - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.07407  4.65033  2.78326  0.61958  0.77255  1.03937  0.43646
-     47   2.66580  4.77769  3.25859  2.69691  3.69577  3.61140  3.56963  3.36841  2.45062  2.28390  3.86113  2.83101  3.99793  3.01640  2.00932  2.40384  2.97180  2.98514  3.81809  4.01106     58 r - - H
-          2.68588  4.42292  2.77574  2.73101  3.46421  2.40561  3.72562  3.29362  2.67747  2.69305  4.24679  2.90348  2.73776  3.18179  2.89693  2.37874  2.77432  2.98554  4.58544  3.61510
-          0.56084  0.85690  5.33966  1.67148  0.20822  0.22069  1.61932
-     48   3.87852  6.35819  2.88185  0.33512  5.75300  3.98086  4.66680  5.41085  3.73193  4.87592  5.81368  3.19190  4.67406  3.86930  4.28895  3.74624  4.21685  4.94226  6.88673  5.40485     78 E - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     49   2.34469  4.06185  4.67394  3.74635  3.19070  3.72385  4.38165  1.69529  3.89930  1.68521  3.30505  3.88179  4.42519  3.50953  3.71087  3.12279  3.14596  1.99339  4.94125  3.41486     79 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     50   2.41611  3.92039  3.06862  2.24055  4.69692  3.38839  3.50460  4.17440  2.17094  3.43336  4.01855  2.84870  4.05421  2.22409  2.42800  2.49697  2.93959  3.48161  5.80403  3.10747     80 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     51   2.65097  4.31309  4.79937  4.19096  3.25102  4.08746  4.41763  1.57396  3.99634  1.77576  3.18772  3.58572  4.45127  4.14513  4.03729  2.91921  3.15786  1.73265  4.93848  3.33785     81 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     52   2.71474  4.35776  4.49839  3.90546  3.26558  3.60358  3.11363  2.58541  3.76519  1.24138  2.56017  3.78382  4.40165  3.77674  3.90460  2.91080  2.88501  2.43218  4.97232  3.44306     82 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     53   2.21717  5.37509  3.13954  2.36108  4.71254  3.44569  3.50643  4.19289  1.90576  2.89362  4.41783  2.84264  3.50886  2.51670  2.27883  2.73413  2.79427  3.37900  5.81221  4.40629     83 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     54   2.88332  4.76187  3.15794  2.34306  4.64959  3.18467  2.98724  4.11774  2.20976  2.84622  3.53657  2.69640  4.06011  2.81953  2.22587  2.26090  2.67755  3.39248  5.77872  3.89328     84 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     55   2.92075  3.71086  4.82119  4.21031  2.91851  4.08375  4.41406  2.48059  4.00923  1.14255  2.77088  4.22517  4.44739  4.15194  3.51737  2.79440  3.04088  2.14784  4.92583  3.58797     85 l - - H
-          2.68619  4.42231  2.77526  2.73130  3.46360  2.40505  3.72501  3.29360  2.67737  2.69361  4.24696  2.90322  2.73746  3.18153  2.89797  2.37878  2.77526  2.98514  4.58483  3.61509
-          0.21093  1.81438  3.60337  0.15203  1.95873  0.48576  0.95510
-     56   2.87228  4.32697  2.43695  2.52023  4.72535  3.09966  3.42727  4.21076  2.24746  3.68599  4.14994  2.21640  3.70120  2.45856  2.42604  2.20075  2.84715  3.77128  5.81417  4.40372     87 s - - S
-          2.68626  4.42233  2.77498  2.73131  3.46362  2.40515  3.72479  3.29362  2.67733  2.69363  4.24698  2.90355  2.73719  3.18141  2.89809  2.37895  2.77498  2.98527  4.58485  3.61511
-          0.08622  2.53438  5.71435  0.90816  0.51628  0.44628  1.02166
-     57   2.95437  4.05540  4.02453  3.66262  4.73022  3.00582  0.63840  4.27369  3.61156  3.92435  4.76053  3.90244  4.38221  3.97389  3.93213  2.36608  3.39859  3.79517  6.08861  4.80370     91 H - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     58   2.74925  4.59154  2.64384  2.02057  4.69046  3.19970  3.85151  4.16644  2.39568  3.65893  3.99620  3.06676  1.73396  2.95270  2.98758  2.52836  2.96698  3.57815  5.80119  4.39902     92 p - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     59   2.77600  3.63123  3.60742  3.04389  2.88763  3.83093  3.22852  3.27052  2.82124  2.96220  3.83761  1.44485  4.21384  3.33393  3.26463  3.06163  2.84916  2.86372  5.30436  2.85576     93 n - - S
-          2.68619  4.42226  2.77521  2.73125  3.46355  2.40506  3.72496  3.29355  2.67742  2.69356  4.24691  2.90348  2.73741  3.18148  2.89802  2.37880  2.77521  2.98520  4.58478  3.61504
-          0.02736  3.73933  5.73865  0.64347  0.74542  0.48576  0.95510
-     60   3.43736  4.73250  5.40681  4.85032  3.21534  3.89737  5.21348  0.72821  4.70181  2.29095  3.77438  4.92025  5.08011  4.86610  4.77171  4.12622  3.68020  1.72131  5.65218  4.46593     96 i - - B
-          2.68620  4.42119  2.77522  2.73126  3.46356  2.40515  3.72497  3.29356  2.67743  2.69357  4.24692  2.90349  2.73742  3.18149  2.89780  2.37889  2.77522  2.98521  4.58479  3.61505
-          0.04171  3.27988  5.73865  0.65380  0.73410  0.48576  0.95510
-     61   3.22247  3.52386  5.20134  4.62057  3.74032  4.49428  4.89197  1.38422  4.44333  2.03444  3.40884  4.64781  4.83078  4.60265  4.48778  3.55308  3.01459  1.16992  5.37248  4.18666     99 v - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     62   2.72238  4.59459  3.13585  2.30027  4.72566  3.17722  3.67251  4.20868  2.00822  3.53187  4.42604  2.97500  3.44674  2.41134  2.06447  2.53711  2.32763  3.77297  5.81907  4.41084    100 k - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     63   2.75790  4.02501  4.89076  4.27684  2.25991  4.10991  4.44304  2.31340  4.06541  1.38378  2.56521  4.26823  4.47075  4.19670  4.07763  3.42134  2.72551  2.21249  4.93572  3.01728    101 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     64   2.79378  4.36122  4.48297  3.70404  2.84684  4.03133  3.55103  1.94759  2.82835  1.82248  3.32801  4.05424  4.39941  3.70850  3.13439  3.15759  3.14407  2.41334  4.25902  2.30786    102 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     65   2.47264  4.33075  2.07830  2.03157  4.71750  2.27093  3.18950  4.19892  2.58523  3.68152  4.42156  3.04070  4.05295  2.84140  2.67254  2.59104  3.11515  3.76615  5.81569  3.60292    103 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     66   2.10377  4.03530  4.82986  4.21790  2.76136  4.07923  4.41023  2.08081  4.01359  2.30827  2.78821  4.22543  4.44340  4.15406  4.03913  2.38166  2.60707  1.97272  3.19782  3.33258    104 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     67   2.82605  3.67894  3.38070  3.01266  1.82001  3.97118  3.82789  2.76491  3.48734  2.34143  3.24926  3.10725  3.78017  3.42990  3.73647  2.98277  3.13977  2.32864  3.87637  2.72935    105 f - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04987  5.01631  3.16967  0.61958  0.77255  0.48576  0.95510
-     68   2.55964  4.21441  3.10666  1.94329  4.49707  3.21758  3.46239  3.37098  2.39709  3.00488  3.51821  3.06808  4.06187  2.54621  2.66989  2.75991  2.68522  3.13970  5.68635  3.14043    106 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02094  4.97674  4.28127  0.61958  0.77255  0.42506  1.06054
-     69   2.80310  5.38415  2.22807  2.18295  4.72718  3.65266  3.36574  4.21171  2.46641  3.56699  4.42536  2.57848  3.46451  2.86899  2.36310  2.58224  2.17995  3.52075  5.81804  3.65548    107 t - - E
-          2.68640  4.42162  2.77535  2.73147  3.46354  2.40551  3.72458  3.29233  2.67716  2.69348  4.24762  2.90375  2.73699  3.18187  2.89837  2.37858  2.77480  2.98522  4.58549  3.61548
-          0.36809  1.18844  5.72853  1.68950  0.20409  0.46837  0.98355
-     70   2.88244  5.39287  2.47300  2.29715  3.79460  2.82884  3.28660  4.22374  2.09832  3.69810  4.43357  2.45444  3.07035  2.85151  2.47539  2.34133  3.01376  3.78345  5.82560  4.10620    126 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     71   2.57798  5.39101  2.06614  2.42374  4.73510  2.82383  3.84381  4.22040  2.28304  3.69587  4.43195  2.62257  3.38372  2.71683  2.73886  2.29050  2.66881  3.34289  5.82427  4.18691    127 d - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     72   2.58231  5.35788  2.77781  2.22432  4.08337  3.66211  2.49021  4.16401  2.37240  3.16748  4.40241  2.52484  4.05523  2.76334  2.63486  2.49164  2.89823  3.30761  4.95167  3.05734    128 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     73   2.78575  3.74303  4.78141  4.17260  2.95491  4.07322  4.40160  1.89067  3.97854  1.60353  2.95383  3.71592  3.11906  4.12798  3.50390  3.07790  2.85145  2.24111  4.92509  2.91282    129 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     74   2.58399  2.76389  4.59675  3.99881  3.19843  4.04871  3.62339  2.65148  3.84111  2.12752  3.45456  3.62454  3.46238  4.02369  3.94739  2.79096  3.14543  2.42948  3.13888  1.74690    130 y - - E
-          2.68624  4.42096  2.77500  2.73129  3.46360  2.40508  3.72501  3.29360  2.67747  2.69353  4.24696  2.90343  2.73746  3.18153  2.89807  2.37893  2.77510  2.98525  4.58483  3.61509
-          0.10354  2.49668  4.13492  0.66960  0.71726  0.48576  0.95510
-     75   3.07392  4.44555  4.97084  3.81418  2.87255  4.25097  4.57886  1.74564  4.16653  1.31678  2.12605  4.39109  4.59167  3.71495  4.19337  3.56380  3.30386  2.29390  5.05348  3.89648    133 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.52175  0.90012
-     76   2.86449  3.41378  5.01300  4.41506  3.07458  4.28568  4.64425  1.49634  4.22335  2.27773  3.54368  4.43380  4.63588  3.70581  4.25773  3.60458  3.30826  1.19505  5.13861  3.95920    134 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.46390  0.99109
-     77   2.91733  4.35063  4.55668  3.96112  2.40516  4.04680  4.36140  2.56068  3.81048  1.70108  1.79340  3.59899  4.41359  3.09405  3.93172  3.15547  2.48177  2.59902  4.96582  3.78095    135 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     78   2.76564  5.57030  2.50020  1.03018  4.90220  3.70297  3.44513  4.39514  2.75995  3.87044  4.62325  3.16505  3.19754  2.75935  3.27129  2.65802  3.28146  3.95557  6.00401  4.57374    136 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     79   2.81579  3.90369  4.68991  4.08721  2.27644  4.06399  3.63829  2.69790  3.58050  1.84024  3.31248  4.16081  4.42953  4.07816  3.60709  3.36667  3.01039  2.57256  4.40465  1.54393    137 y - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     80   2.45920  2.17262  4.69646  4.09287  3.22405  3.32199  3.21264  2.59887  3.91610  2.06244  2.25581  4.16309  3.61702  4.08102  3.98811  3.14866  3.14614  2.03766  4.93767  3.46778    138 v - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04171  5.01631  3.37486  0.61958  0.77255  0.48576  0.95510
-     81   2.70314  5.37371  2.37994  1.91497  4.71601  2.93053  3.83161  4.20005  2.46492  3.55263  3.57885  2.58870  2.59223  2.74552  2.71928  2.69862  3.03649  3.29150  5.80804  4.39872    139 e - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01022  4.98481  5.70716  0.61958  0.77255  0.57090  0.83245
-     82   2.41993  3.72287  3.12898  2.52046  4.44831  1.89639  3.49536  3.62837  2.38762  3.31281  3.53904  2.44913  3.42379  3.00780  3.12891  2.87912  2.75467  3.52812  5.65946  3.81984    140 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.10979  4.98481  2.33166  0.61958  0.77255  0.57090  0.83245
-     83   2.77350  5.21303  2.43943  2.62703  4.54309  1.39496  3.89257  3.99092  2.60267  3.54085  4.32260  3.04209  4.06226  3.01831  3.03242  2.64588  2.77651  3.04353  5.73236  4.35922    141 g - - -
-          2.68631  4.42210  2.77537  2.73126  3.46359  2.40522  3.72475  3.29338  2.67758  2.69250  4.24657  2.90377  2.73770  3.18148  2.89796  2.37902  2.77541  2.98478  4.58507  3.61496
-          0.21230  1.67338  5.60865  1.39945  0.28334  0.33567  1.25476
-     84   2.88583  5.39491  1.79381  2.06461  4.73890  3.24821  3.51210  4.22442  2.47141  3.51906  4.43601  2.95989  3.57031  2.79057  2.82788  2.02605  2.91163  3.62254  5.82805  4.41723    147 d - - B
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     85   2.90986  4.42406  3.70533  3.66371  3.02577  3.99009  3.90749  2.78363  3.56278  1.02082  3.24022  3.34355  4.36146  3.52102  3.78389  3.13807  2.95820  2.60948  5.03043  3.48016    148 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     86   2.57337  4.10245  3.03950  2.95233  2.09915  3.53742  3.15959  3.37138  2.66519  2.44003  3.54971  3.10382  3.71714  3.06888  3.13958  2.44794  3.05039  3.11306  4.61969  3.07664    149 f - - H
-          2.68621  4.42228  2.77522  2.73126  3.46357  2.40516  3.72497  3.29357  2.67744  2.69358  4.24693  2.90350  2.73735  3.18149  2.89804  2.37890  2.77502  2.98521  4.58480  3.61458
-          0.24291  3.02648  1.78874  0.58545  0.81386  0.48576  0.95510
-     87   2.29362  5.30873  1.92419  2.32474  4.26868  3.43187  3.46788  4.12970  2.37357  3.61146  4.35100  2.92576  3.98105  2.69850  2.60197  2.47206  2.54407  3.69618  5.74493  3.96335    152 d - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01185  4.83724  5.55959  0.61958  0.77255  0.87096  0.54223
-     88   2.24696  4.24235  4.56569  3.96478  2.41045  3.97137  3.29432  2.27668  3.43922  2.04964  3.19406  4.05576  4.33743  3.97000  3.38896  3.27217  3.06100  2.23241  4.18296  2.20711    153 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01185  4.83724  5.55959  0.61958  0.77255  0.87096  0.54223
-     89   3.80243  5.01974  5.81731  5.27268  3.70245  5.26548  5.70409  1.30084  5.15744  0.98923  3.04180  5.42350  5.39649  5.16571  5.17462  4.65797  4.03105  1.75151  5.84473  4.80632    154 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01185  4.83724  5.55959  0.61958  0.77255  0.62617  0.76494
-     90   2.48275  5.13868  3.18520  2.44727  3.97540  3.65122  3.65677  3.36126  2.16734  3.30486  3.19390  3.06911  4.04233  2.41632  2.75033  2.25069  2.41675  3.09873  5.62108  3.69504    155 k - - H
-          2.68595  4.42186  2.77509  2.73103  3.46377  2.40517  3.72421  3.29387  2.67761  2.69368  4.24695  2.90368  2.73754  3.18175  2.89730  2.37895  2.77536  2.98514  4.58473  3.61505
-          0.63487  1.25520  1.68753  1.39580  0.28453  0.74756  0.64154
-     91   2.43987  5.24839  2.75312  2.20207  4.11839  3.54175  3.72993  4.06095  2.07671  3.34429  3.98666  2.75679  3.72576  2.60349  2.28520  2.46158  2.79062  3.43756  5.68761  3.81452    172 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01352  4.70589  5.42824  0.61958  0.77255  0.34096  1.24163
-     92   2.56414  5.37054  2.84426  2.11401  4.71382  2.70860  2.88683  4.19851  2.19051  3.14492  4.41168  2.55924  4.03189  2.79129  2.63798  2.35762  3.09530  3.76022  5.80426  3.44686    173 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01035  4.97167  5.69402  0.61958  0.77255  0.60365  0.79145
-     93   2.86527  4.78061  2.95620  2.59670  4.27271  1.99448  3.84571  3.48713  2.08881  3.39073  4.33266  2.46895  3.64059  2.84730  2.63768  2.84659  2.50396  3.24160  5.73764  4.35043    174 g - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01035  4.97167  5.69402  0.61958  0.77255  0.46145  0.99524
-     94   2.57883  3.45102  3.31966  2.70191  4.02973  3.16828  3.76144  3.12068  2.26544  3.06289  4.10647  2.81108  2.70638  2.99156  2.57108  2.49596  2.68439  2.78596  4.48656  4.03099    175 k - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01001  5.00539  5.72774  0.61958  0.77255  0.51640  0.90799
-     95   3.00846  4.37852  4.95050  4.33851  2.03946  4.18408  4.51243  2.07907  4.13124  1.32746  2.71567  3.86888  4.53472  4.25457  4.14405  3.49709  3.23945  2.15194  4.98866  3.35208    176 l - - T
-          2.68632  4.42239  2.77534  2.73137  3.46298  2.40515  3.72509  3.29351  2.67755  2.69332  4.24641  2.90361  2.73734  3.18136  2.89815  2.37881  2.77519  2.98532  4.58491  3.61446
-          0.13280  2.11108  5.72774  1.00017  0.45858  0.46707  0.98573
-     96   2.55096  5.39506  2.51329  2.14467  4.73966  3.20813  3.84532  4.22553  2.37049  3.70015  4.43599  2.79265  3.16832  2.74582  2.82569  1.88822  2.42672  3.78548  5.82793  4.41687    180 s - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     97   2.55253  5.00371  2.91674  1.56530  3.77486  3.74196  3.71669  3.18678  2.77868  2.90828  3.00031  3.29724  3.28640  3.12328  3.07027  2.76413  2.89289  3.32236  3.74938  3.48354    181 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     98   2.59075  4.32000  2.44335  2.15201  3.95693  3.12347  3.34011  3.83572  2.30797  3.16698  3.93315  2.75363  3.60071  2.81660  2.61665  2.70578  2.85000  3.34465  3.67935  4.00275    182 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-     99   2.65092  5.35978  2.44414  1.82235  4.69093  3.44711  3.03513  3.63938  2.46445  2.69072  4.40412  3.13476  3.87902  2.43027  2.99516  2.67955  2.75495  3.20344  5.80088  4.03299    183 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    100   1.86496  3.02665  4.71869  4.11439  3.41506  3.78632  4.39467  1.72869  3.93413  2.03606  3.25110  4.17623  4.43415  4.09606  3.42450  3.02051  2.94480  2.04904  4.94015  3.76003    184 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    101   2.66380  3.60669  3.09016  2.70629  3.97052  3.12773  3.91117  3.25572  1.80561  2.74214  4.19581  3.23071  4.10037  2.51557  2.19861  2.73033  3.11863  2.97558  5.62300  4.27841    185 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    102   2.65525  3.61780  2.73206  2.59880  2.91626  3.69337  3.17740  3.91061  2.06495  2.87551  3.62080  2.65252  4.08468  3.01717  2.55140  2.50072  2.84956  3.37543  5.67937  3.86408    186 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    103   2.78549  3.75825  4.89230  4.27707  2.37628  4.09576  4.42870  1.58181  4.06146  2.16353  2.83229  4.25917  4.45832  4.19107  4.06819  3.40747  3.15724  2.08428  3.94244  2.32199    187 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    104   1.91854  4.04767  4.83572  4.22341  2.21465  3.82491  4.41156  2.18264  4.01792  2.17430  2.43077  4.22827  4.44431  4.15736  4.04152  2.82624  2.88622  2.07903  4.25105  3.74133    188 a - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    105   2.59846  4.94560  3.39451  2.56515  3.67443  3.44440  3.79808  3.54150  2.22767  2.11264  4.02778  3.19297  4.14629  3.16161  2.51054  2.63727  2.68778  3.11215  4.13689  2.62651    189 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    106   2.71202  4.65478  2.93025  2.07602  4.70407  3.24619  3.70431  4.18261  2.58938  3.67040  4.10390  3.00747  4.05496  1.41184  3.00214  2.55548  2.74962  3.75459  5.80879  4.40428    190 q - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510  
-    107   3.40758  4.70636  5.39472  4.82751  3.82844  4.73217  5.15283  1.33187  4.66862  1.85779  2.55181  4.88258  5.03394  4.81634  4.72035  4.07618  2.46891  1.37416  5.58393  4.41648    191 i - - H 
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    108   2.29107  3.23763  4.81578  4.20571  3.00975  3.26830  4.41487  2.37700  4.00619  1.39060  3.28560  4.22330  4.44775  4.15070  4.03923  2.94875  3.15303  1.86969  4.92930  3.75166    192 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    109   2.62933  4.07203  2.95927  2.08969  4.71415  3.53463  3.84677  3.97436  2.17805  2.82549  4.41873  2.79932  4.05232  2.53645  2.16719  2.25459  2.86145  3.76301  5.81311  4.40656    193 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    110   1.17650  4.82606  4.24050  3.83461  4.98724  1.08848  4.85992  4.42183  3.81285  4.07900  4.88120  3.97861  4.34888  4.10941  3.49121  2.50205  3.18154  3.58125  6.30917  5.10145    194 g - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    111   3.90271  5.14012  5.90469  5.33230  3.41122  5.28833  5.65529  2.02087  5.19062  0.88043  2.65524  5.45552  5.42442  5.15469  5.16815  4.66249  4.12260  1.40813  5.79888  4.77647    195 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    112   2.18892  5.38966  2.64044  1.97751  4.73333  3.65659  3.60437  3.92129  2.10090  3.35469  4.43069  2.33847  4.05005  2.60616  2.77179  2.58383  3.11351  3.51057  5.82316  3.92131    196 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    113   2.81051  5.07767  4.77644  4.29954  2.03535  4.57845  2.23184  3.59557  4.18346  3.18325  4.21755  4.37554  4.93163  4.33627  4.35340  3.88728  3.48134  3.41897  4.49144  0.85916    197 y - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    114   3.22459  2.61128  5.38969  4.79509  3.58979  4.68737  5.03975  1.79213  4.61293  0.89179  2.61919  4.84389  4.96801  4.69100  4.62327  4.02095  3.66625  2.57847  5.40913  4.29402    198 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    115   4.50357  5.94639  4.67261  4.49457  2.97674  4.90740  0.35314  4.75553  4.20979  3.98991  5.25041  4.60971  5.36272  4.62490  4.36557  4.47961  4.76464  4.60938  4.62703  2.51319    199 H - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    116   2.59851  4.33805  2.68311  2.05797  4.71676  3.15802  3.59362  3.65569  2.43439  3.32473  4.42034  2.78736  4.05190  2.70193  2.69422  1.73897  3.11362  3.60918  5.81450  4.40740    200 s - - H
-          2.68619  4.42226  2.77521  2.73118  3.46355  2.40514  3.72496  3.29355  2.67742  2.69356  4.24691  2.90348  2.73741  3.18131  2.89802  2.37888  2.77521  2.98510  4.58478  3.61505
-          0.04979  3.09322  5.73865  0.35009  1.21950  0.48576  0.95510
-    117   2.54785  4.42029  2.89622  2.25922  4.34868  3.66610  3.21799  3.71995  2.27125  3.07920  3.10189  2.25867  4.05899  2.34775  2.56766  2.85682  3.11428  3.36249  5.78309  3.93739    202 n - - T
-          2.68634  4.42198  2.77524  2.73138  3.46344  2.40486  3.72467  3.29300  2.67713  2.69352  4.24714  2.90371  2.73709  3.18145  2.89825  2.37911  2.77527  2.98532  4.58501  3.61528
-          0.09842  2.40225  5.73865  1.69597  0.20263  0.48576  0.95510
-    118   2.53322  5.34393  2.95935  2.59629  3.94657  1.84501  3.63806  4.14023  2.18335  3.64044  4.39013  2.55576  3.77395  2.95784  2.71428  2.21077  3.11477  3.72355  4.68564  4.39095    213 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    119   3.55513  4.24694  5.60079  5.05662  2.60993  4.96071  5.43324  0.97900  4.91818  2.09234  3.80321  5.12225  5.23216  5.06726  4.97588  4.32549  3.79818  1.34455  5.81250  4.64107    214 i - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    120   2.50668  3.55624  4.84676  4.23404  3.24346  4.08398  4.41611  1.66920  4.02684  2.01982  2.79518  4.23489  4.44784  4.16480  3.83668  2.91482  2.83994  1.71230  4.92013  3.32611    215 i - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    121   4.62495  5.94818  4.90176  4.71687  2.80207  5.05504  0.41821  4.71670  4.43975  3.92227  5.21366  4.70109  5.45885  4.74110  4.56151  4.57303  4.86606  4.59605  4.46431  2.05738    216 H - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    122   3.04282  4.16968  3.83274  3.22981  4.12386  3.92565  4.16387  3.45658  2.89535  2.79946  3.52962  3.63885  4.33284  3.40809  0.88367  3.03173  2.91452  3.20781  5.47983  4.24517    217 r - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    123   4.66549  6.56867  0.13049  3.73947  6.20930  4.51726  5.46620  6.15252  4.80154  5.54790  6.65359  4.31602  5.22661  4.77980  5.35908  4.57977  5.04873  5.69924  7.06132  6.05090    218 D - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    124   4.11594  5.30633  6.13178  5.57769  3.73657  5.59693  5.98457  1.50133  5.46568  0.67788  3.07617  5.76705  5.63423  5.36401  5.43088  5.00606  4.33175  2.14525  5.97972  5.01356    219 L - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    125   4.55719  6.24846  4.80697  4.34215  5.94023  4.73956  5.02576  5.52333  0.17090  4.86848  5.87217  4.66859  5.24422  4.23030  3.41495  4.59394  4.77093  5.20290  6.57866  5.65826    220 K - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    126   2.73388  4.87911  3.10327  2.90832  4.07991  3.41413  4.01646  3.20246  2.89177  2.38683  3.78561  3.39051  1.51394  3.22647  3.32105  2.31617  2.81372  3.19214  5.43675  4.15025    221 p - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    127   2.30763  5.39894  2.49711  1.50775  4.74209  3.53358  3.60730  4.22742  2.31483  3.70337  3.89187  2.94609  4.05547  2.65035  3.08133  2.29509  3.12215  3.78862  5.83238  4.42137    222 e - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    128   4.24075  6.04161  4.10323  4.13804  5.66046  4.44992  5.52992  5.77835  4.64675  5.26705  6.30900  0.15130  5.17553  4.91694  4.94682  4.32646  4.70552  5.25421  6.75952  5.61338    223 N - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    129   3.55135  3.88080  5.58388  5.03211  3.05772  4.93598  5.38843  0.81084  4.88763  1.84199  3.74557  5.09695  5.20522  5.02095  4.93631  4.29650  3.79207  1.75582  5.75938  4.60163    224 i - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510 
-    130   4.26500  5.46000  6.21355  5.61602  2.31085  5.64571  5.88455  2.68862  5.47780  0.52109  2.36789  5.81754  5.61663  5.25881  5.37169  5.03996  4.45544  2.72136  5.81387  4.88779    225 L - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    131   3.14725  3.80930  5.11896  4.51210  2.75868  4.35237  4.69393  1.48763  4.30885  1.32733  3.15909  4.51494  4.68518  4.42027  4.31553  3.67228  3.37834  1.91515  5.14039  3.60311    226 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    132   2.83132  4.28838  2.02200  2.41335  4.70055  3.12743  3.31546  4.17875  2.06503  3.46693  4.09733  2.49326  4.05387  2.94892  3.07895  2.27711  2.89161  2.90947  5.80603  4.40188    227 d - - E
-          2.68620  4.42227  2.77521  2.73125  3.46356  2.40515  3.72496  3.29356  2.67743  2.69346  4.24692  2.90348  2.73741  3.18137  2.89794  2.37889  2.77521  2.98513  4.58479  3.61505
-          0.19179  2.92011  2.11536  0.31959  1.29625  0.48576  0.95510
-    133   2.77846  5.34345  2.73873  2.12504  4.68884  3.31622  3.10327  4.17503  2.07146  3.64885  4.14408  2.35495  3.55373  2.53396  2.68259  2.30312  2.80970  3.73426  5.77591  4.07717    229 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01122  4.89146  5.61380  0.61958  0.77255  0.46383  0.99121
-    134   2.76231  5.37627  2.40965  2.30431  4.72103  3.48860  3.46007  4.20680  2.15285  3.68141  4.41704  2.22463  3.54282  2.67483  2.66394  2.48608  2.48229  3.08661  5.80911  4.39830    230 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01030  4.97674  5.69908  0.61958  0.77255  0.42506  1.06054
-    135   2.88621  4.31580  2.58861  2.52891  4.00821  1.80604  3.64216  3.70404  2.55848  3.01103  3.82083  2.93142  3.28125  2.96153  3.15140  2.63196  2.92652  3.07947  5.65563  3.39061    231 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    136   2.74326  5.32913  2.62872  2.23118  4.20190  3.27586  3.01088  3.39612  2.54602  3.28443  3.99578  2.66732  4.06020  2.45230  2.82728  2.54748  2.65672  2.69485  5.77785  3.49295    232 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    137   2.61635  3.28525  4.16732  3.71739  2.98202  4.03403  4.34546  2.03775  3.50788  1.92540  3.47356  3.38535  3.11745  3.96570  3.52677  3.32696  2.46663  1.86856  4.97202  3.78516    233 v - - E
-          2.68644  4.42087  2.77438  2.73125  3.46306  2.40580  3.72561  3.29182  2.67742  2.69394  4.24637  2.90298  2.73752  3.18209  2.89809  2.37898  2.77573  2.98487  4.58490  3.61464
-          0.36530  1.19470  5.73865  2.01193  0.14356  0.48576  0.95510
-    138   2.92386  3.12674  3.30583  2.50241  4.41812  3.73989  3.57074  3.83865  1.16713  3.42239  3.64701  3.25964  4.12762  3.06518  2.74407  2.94589  3.15200  3.22587  5.64420  3.71460    253 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    139   3.61791  5.07369  5.93139  5.42030  4.01697  5.40165  5.95563  1.06228  5.32659  1.08905  3.76387  5.56598  5.56723  5.42106  5.39317  4.81179  4.11011  1.74432  6.14737  5.05160    254 i - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    140   1.74479  2.79152  4.35686  3.77898  3.55350  2.78668  4.34505  2.08763  3.66685  2.55990  3.56128  3.98833  4.38080  3.89329  3.86150  2.46831  2.34811  2.41028  5.05799  3.86488    255 a - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    141   4.66549  6.56867  0.13049  3.73947  6.20930  4.51726  5.46620  6.15252  4.80154  5.54790  6.65359  4.31602  5.22661  4.77980  5.35908  4.57977  5.04873  5.69924  7.06132  6.05090    256 D - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    142   4.66482  5.73614  5.86239  5.64956  0.40883  5.43325  4.33355  3.86711  5.42110  2.16428  4.36705  5.11239  5.65371  5.16689  5.27011  4.83252  4.86624  3.98432  3.74189  2.69037    257 F - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    143   3.93699  5.85566  3.02816  3.87037  6.00993  0.21285  5.44927  5.75466  4.70121  5.27717  6.21696  4.31536  4.99427  4.76567  5.12629  4.02226  4.42780  5.10478  6.99282  5.96830    258 G - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    144   2.54355  3.67295  4.73868  4.13265  2.71576  4.06852  3.76754  2.37455  3.94756  1.20416  3.31174  3.74431  4.43365  4.10500  4.00521  2.64259  3.14725  2.29206  4.93223  3.75278    259 l - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.03189  5.01631  3.69859  0.61958  0.77255  0.48576  0.95510
-    145   0.77520  2.86695  4.81978  4.47036  4.95592  3.15951  5.20700  4.36343  4.38394  4.08078  4.90451  4.25075  4.38058  4.58838  4.56864  1.45304  3.34905  3.34992  6.35477  5.22001    260 a - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.07711  4.99453  2.69658  0.61958  0.77255  0.54567  0.86620
-    146   2.54977  3.79925  3.16699  2.32606  4.48674  3.31547  3.84408  3.47518  1.75582  3.12339  4.25869  2.84258  4.04145  2.96441  2.18943  2.71334  2.91887  2.95414  5.67187  4.30075    261 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.13472  4.92824  2.13029  0.61958  0.77255  0.70219  0.68419
-    147   2.64685  3.78445  3.06669  2.61534  3.32325  3.67596  3.69246  3.14713  2.01231  2.43193  3.43451  3.16113  4.06301  2.47274  3.08778  2.74475  2.84906  2.65428  5.37440  4.07606    262 k - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.29473  4.80574  1.39802  0.61958  0.77255  0.92027  0.50818
-    148   2.40579  4.15423  4.25399  3.66267  2.39272  3.57693  3.44550  2.33935  3.03827  1.86796  2.97007  3.83355  4.18573  3.73297  3.67827  3.10851  2.93289  2.21754  4.76738  2.96352    263 l - - .
-          2.68635  4.42219  2.77489  2.73146  3.46367  2.40530  3.72500  3.29419  2.67720  2.69370  4.24630  2.90362  2.73727  3.18122  2.89818  2.37860  2.77478  2.98583  4.58472  3.61420
-          0.77167  0.63015  5.24955  1.50734  0.25038  0.20147  1.70117
-    149   2.68930  5.13793  2.99383  2.28756  4.12167  3.02811  3.40047  2.83046  2.53990  2.67433  3.91490  2.66806  3.85841  2.95123  3.08518  2.54554  2.43488  3.14237  4.83794  3.11842    281 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    150   2.67960  3.59834  3.08049  2.32634  4.00400  2.85568  3.65072  3.26198  2.22635  2.80014  3.89773  3.03566  3.90780  2.84131  2.77630  2.59674  2.54121  2.94346  4.66327  3.60288    282 k - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    151   2.78407  5.36932  2.80723  2.38070  3.95652  3.28210  3.31902  3.80407  2.38757  3.23090  4.41260  2.26860  2.87333  2.94776  2.55475  2.11230  2.82314  3.31603  5.80800  4.40313    283 s - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    152   2.55066  5.37311  2.42428  2.58328  4.70981  2.65546  3.66067  3.46611  2.34139  3.39818  4.41598  2.44705  3.58966  2.48003  2.87086  2.30355  2.92043  3.58081  5.81084  3.32103    284 s - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    153   2.61131  5.36709  3.05324  2.00706  4.70125  2.53001  3.45141  4.17959  2.46541  3.54879  4.41063  3.13225  3.27183  2.67970  2.77280  2.14590  2.62504  2.97295  5.80635  3.79465    285 e - - S
-          2.68619  4.42226  2.77520  2.73124  3.46320  2.40514  3.72495  3.29355  2.67742  2.69356  4.24691  2.90348  2.73740  3.18147  2.89802  2.37888  2.77520  2.98519  4.58478  3.61504
-          0.03620  3.43177  5.73865  0.40966  1.09027  0.48576  0.95510
-    154   2.80870  4.76397  2.82688  2.35901  3.53520  3.31737  3.24083  3.53679  2.31494  2.98485  3.52265  2.69923  3.15465  2.90046  2.56489  2.40361  2.83318  3.04461  5.74293  3.76697    287 k - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    155   2.38638  3.55872  3.84850  3.27925  3.07902  3.89951  3.49984  3.07191  2.87600  2.13071  2.79826  2.94436  3.28103  3.24012  3.30127  2.77627  2.52689  2.66914  5.17020  2.84075    288 l - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    156   2.88266  4.79637  2.63708  2.49106  4.69372  3.27452  3.02757  4.17056  2.31920  3.54781  3.84892  2.54158  3.83133  2.71114  2.83815  2.34796  2.07167  3.53868  4.84477  3.26548    289 t - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    157   2.55115  5.22307  2.81541  2.42597  3.84088  2.72211  3.45978  3.70939  2.65113  3.50012  4.03956  3.00145  3.26637  2.92366  3.12986  2.10982  2.09681  2.95270  4.42058  4.32902    290 t - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    158   2.79383  4.53543  3.94528  3.00256  2.28876  3.25886  4.19260  2.53698  3.31063  2.13485  3.51266  3.25465  3.61933  3.02975  2.60672  3.04108  3.13630  2.22820  5.12884  3.03437    291 l - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    159   2.54133  2.27249  3.62507  3.14565  3.48798  3.47382  4.20805  2.87324  3.24770  2.61629  3.62417  3.76153  4.31084  3.45605  3.15192  3.19594  2.77273  1.44309  5.11140  3.89714    292 v - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    160   2.50560  4.02210  4.21483  3.69251  4.03927  0.87585  4.50859  3.18042  3.62456  3.12203  4.01557  3.91946  4.34666  3.89680  3.91281  2.66630  3.23503  2.52015  5.49804  3.97346    293 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    161   2.98792  5.00679  3.18026  3.47531  5.09253  3.65988  4.75357  4.53531  3.72802  4.18133  4.99276  3.79669  4.37930  3.97717  4.12874  1.60941  0.74054  3.97784  6.39182  5.11951    294 t - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    162   2.69840  5.26022  3.00961  2.31122  4.20998  3.68086  3.63617  3.20701  2.41779  2.58849  4.31499  2.98486  2.62271  2.99075  2.13729  2.36313  3.11573  3.42385  5.72545  3.54571    295 r - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    163   2.71301  5.29924  2.59488  2.14743  3.52695  3.04037  3.28275  4.06670  2.61594  3.34508  4.35002  2.84026  3.31113  2.97459  2.36266  2.86533  2.70674  3.41928  3.03699  3.23042    296 e - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    164   4.65993  5.73598  5.69662  5.49898  1.97465  5.32012  3.31709  4.36240  5.29326  3.66395  4.92323  4.93743  5.59573  5.06816  5.17473  4.69695  3.41633  4.25844  2.61302  0.51590    297 Y - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    165   2.46851  3.63596  4.34730  3.76113  3.49978  4.00900  4.30977  2.55613  3.41377  2.11254  1.89168  3.40620  4.37893  3.86942  2.23584  3.08926  3.14320  2.13937  5.00600  3.81292    298 m - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    166   0.54633  4.79516  4.59072  4.34047  5.33605  3.22550  5.27451  4.80651  4.37656  4.47607  5.24769  4.21379  3.02084  4.58677  4.60871  1.81435  3.40538  4.05386  6.66459  5.53199    299 A - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    167   3.08666  5.02380  4.02349  3.92167  5.10908  3.73669  5.07487  4.62556  4.04836  4.33998  5.22795  3.34786  0.41351  4.38870  4.30726  3.26072  3.60085  3.40472  6.47905  5.20179    300 P - - H
-          2.68622  4.42144  2.77523  2.73111  3.46358  2.40517  3.72498  3.29358  2.67745  2.69359  4.24694  2.90351  2.73743  3.18126  2.89786  2.37891  2.77523  2.98522  4.58481  3.61507
-          0.03484  3.47295  5.73865  0.99675  0.46057  0.48576  0.95510
-    168   3.66837  6.19086  2.84947  0.45189  5.55161  3.90523  4.43200  5.09782  3.30487  4.55035  5.42336  3.03786  4.53514  3.60153  3.37398  3.54999  3.95969  4.65772  6.64024  5.17650    305 E - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510 
-    169   2.79774  4.32598  4.68241  3.67608  3.42171  4.06471  4.38713  2.01470  3.90321  1.87174  3.44282  4.15860  4.43014  3.77035  3.25202  3.36713  2.95239  1.31877  3.77234  3.76466    306 v - - H
-          2.68603  4.42242  2.77519  2.73104  3.46342  2.40506  3.72511  3.29371  2.67728  2.69322  4.24707  2.90364  2.73756  3.18163  2.89801  2.37893  2.77519  2.98535  4.58494  3.61520
-          0.12919  2.22240  4.35495  1.23224  0.34480  0.48576  0.95510
-    170   2.91184  3.76308  4.76588  4.15799  3.39752  4.06920  3.82796  1.60071  3.96642  1.39613  3.17824  3.65225  4.43387  4.11848  4.01348  2.94594  3.14403  2.21737  4.92444  3.43929    311 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00999  5.00664  5.72898  0.61958  0.77255  0.51297  0.91308
-    171   2.62785  5.06480  3.29796  2.67561  3.73804  3.41086  3.92577  3.21358  2.32640  2.15096  3.31180  2.55443  4.11004  2.47045  2.33927  2.70318  3.11578  3.12852  5.57146  4.24107    312 l - - C
-          2.68631  4.42245  2.77511  2.73076  3.46350  2.40522  3.72547  3.29356  2.67765  2.69366  4.24573  2.90389  2.73738  3.18142  2.89826  2.37846  2.77520  2.98520  4.58530  3.61473
-          0.62427  1.87899  1.16602  1.98855  0.14722  0.46912  0.98231
-    172   2.60166  5.18307  2.62016  2.19793  3.35206  2.39740  3.57105  3.96340  2.18128  3.47543  4.23188  3.01161  3.92489  2.82990  2.86326  2.33987  2.67701  3.55746  5.63416  3.78538    327 k - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01428  4.65191  5.37425  0.61958  0.77255  0.24611  1.52250
-    173   2.37600  3.94341  2.81761  2.45806  4.08381  2.38833  3.32666  4.15213  2.47322  3.64753  4.39446  2.71786  3.74359  2.39493  2.76163  2.38666  3.00597  3.01776  5.79219  3.82026    328 a - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00998  5.00778  5.73012  0.61958  0.77255  0.47101  0.97916
-    174   2.81816  4.87774  2.88922  2.34131  3.91699  3.47934  3.84840  3.76601  2.22767  3.10881  4.41163  2.46519  2.75598  2.51039  2.43545  2.43680  2.76354  3.54179  5.80719  3.84984    329 k - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    175   2.74169  5.33416  2.58184  2.32653  3.61666  2.33545  3.50275  4.12419  2.36762  3.50261  3.56274  2.91332  3.07814  2.74477  2.96926  2.79421  2.92848  3.32496  5.78164  2.72284    330 e - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    176   2.48397  4.72191  2.72922  2.94719  3.45604  3.83733  2.73484  2.72590  3.03376  2.94128  3.81928  3.51045  4.21965  3.13222  3.31573  2.84267  3.12967  2.71705  3.94971  1.76193    331 y - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    177   2.88858  5.15756  2.48812  2.69267  3.68939  2.20273  3.90720  3.84889  2.69072  3.17648  4.22648  3.21985  3.19313  3.04303  3.16266  2.07644  2.02474  3.50391  5.64990  3.69862    332 t - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    178   2.44412  5.27089  3.18567  2.52594  4.01181  3.49400  3.20300  3.68711  2.26882  2.99802  4.32458  3.16791  2.73532  2.67304  2.47574  2.35896  2.41445  3.31659  5.73361  3.79657    333 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    179   2.27957  5.36842  3.14470  2.24142  4.70283  3.35867  3.70433  4.18054  1.84880  3.00297  4.41216  3.13478  2.50109  2.87247  2.49374  2.50485  2.88881  3.75338  5.80713  4.40386    334 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    180   2.25487  3.19836  3.67383  3.53894  3.58335  3.60706  4.24810  2.30247  3.45618  2.57768  3.58074  3.40343  4.33674  3.48890  3.71724  2.25302  2.94661  1.56396  5.07167  3.86608    335 v - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    181   3.32488  6.23611  0.30142  2.99559  5.85936  3.97225  4.81661  5.46625  4.07634  5.00781  5.98660  3.57219  4.70996  4.04099  4.76451  3.76774  4.26196  4.95940  7.04785  5.56474    336 D - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    182   2.97530  4.34655  4.92112  4.31006  3.42469  4.15298  4.48903  1.67409  4.10270  2.14170  2.44181  4.30839  4.51041  4.23558  4.11915  3.46567  2.80277  1.45020  3.28394  3.56694    337 v - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    183   4.60767  5.71652  5.61554  3.89031  2.18526  5.28181  4.15190  4.32304  5.18037  3.62888  4.88484  4.90634  5.56392  5.01906  5.10312  4.65700  4.81381  4.22147  0.60655  1.74323    338 W - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    184   1.30551  4.78823  4.65738  4.37945  5.36630  2.58206  5.28849  4.84019  4.38318  4.50739  5.27020  4.22569  4.39579  4.59600  4.61395  0.79404  2.89139  4.06528  6.68751  5.56026    339 s - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    185   2.44153  3.17932  4.87400  4.25972  2.53121  4.09082  4.42403  2.33144  4.04748  1.34403  2.92510  4.24940  4.45392  4.18053  4.05982  3.14600  3.15398  2.13810  4.92017  3.14864    340 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    186   2.22507  4.96728  4.63623  4.63233  5.66307  0.33314  5.62287  5.16416  4.86793  4.86816  5.66661  4.43512  4.57282  5.01497  4.99264  3.26151  3.63533  4.32703  6.92990  5.89905    341 G - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    187   2.93009  2.13614  4.95885  4.35253  3.48038  4.19799  4.54424  1.68794  4.14925  1.93394  3.18432  4.35359  4.55452  4.28834  4.17024  3.34008  3.23972  1.60527  5.03746  3.47367    342 v - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    188   3.21831  4.55127  5.17022  4.58630  3.70338  4.47717  4.86313  1.30610  4.40976  1.92114  2.79907  4.62299  4.81179  4.56490  4.45688  3.52794  2.67243  1.42404  5.34369  4.16408    343 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    189   2.77853  3.56970  4.91220  4.29933  2.66878  4.13468  4.46922  2.12981  4.08926  1.13811  3.14072  4.29275  4.49323  4.21981  4.10205  3.44689  2.88537  2.20246  4.95897  3.46211    344 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    190   2.08301  4.31008  4.80905  4.20025  2.66597  4.08391  3.54227  2.07553  4.00182  2.35024  3.19529  4.21899  4.44796  4.14611  4.03654  3.39206  3.15615  2.32332  2.91148  1.86433    345 y - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    191   2.65126  3.79080  3.03118  1.37895  4.54227  3.68257  3.87660  3.27048  2.56225  3.53374  4.30787  2.88399  4.07460  2.72714  3.11894  2.49943  2.86114  3.20681  5.71940  3.61825    346 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    192   2.75949  4.33120  4.86063  4.24972  2.93412  4.11800  4.44873  2.58063  4.04775  1.34098  1.86205  4.26240  4.47769  4.18564  4.07448  3.30982  2.87183  2.17494  4.95131  3.25026    347 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    193   2.13730  3.34433  4.84746  4.23449  2.67079  4.08305  4.41495  2.45417  4.02682  1.45586  2.95446  4.23448  4.44687  4.16424  3.65241  3.39295  2.78239  2.10310  4.91833  3.10946    348 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    194   2.61714  3.04119  3.51958  2.50105  3.16562  3.44068  4.02999  3.26384  2.78703  2.46125  3.90521  2.94061  4.18669  3.26384  2.94427  2.45451  1.92365  2.96026  5.36672  3.77569    349 t - - H
-          2.68592  4.42131  2.77530  2.73134  3.46364  2.40523  3.72505  3.29364  2.67751  2.69365  4.24624  2.90357  2.73750  3.18157  2.89769  2.37886  2.77510  2.98507  4.58487  3.61513
-          0.08274  2.77459  4.07273  1.24373  0.34011  0.48576  0.95510
-    195   2.74009  5.38236  2.60734  2.58658  4.30151  1.49346  3.57775  4.19577  2.06867  3.68256  4.42710  2.84258  4.06100  2.86136  2.79826  2.78642  3.12785  3.76776  5.82019  4.41533    355 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02515  5.00240  4.01100  0.61958  0.77255  0.52459  0.89600
-    196   2.87057  4.15783  2.81932  2.15097  3.67482  3.00161  3.44561  3.53712  2.01194  3.52030  4.39830  2.84675  4.04172  2.62971  2.18111  2.65254  2.90372  3.46034  5.79407  3.92999    356 k - - S
-          2.68632  4.42239  2.77496  2.73101  3.46368  2.40527  3.72508  3.29339  2.67739  2.69369  4.24616  2.90361  2.73734  3.18160  2.89815  2.37901  2.77533  2.98486  4.58491  3.61430
-          0.06990  2.74572  5.70978  1.46974  0.26135  0.43968  1.03351
-    197   2.53761  4.57755  3.85895  3.05555  3.06219  3.90225  3.89097  2.90555  3.23603  1.98376  3.43681  3.14844  2.18635  3.28921  3.56902  2.76101  2.38583  2.48063  5.16546  3.65117    363 l - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    198   2.94035  4.49377  4.16973  3.59341  3.59928  3.99457  4.28692  2.57573  3.48228  2.11382  3.59630  3.88641  1.19333  3.75706  3.46613  3.08341  3.17527  2.51467  5.10025  3.66586    364 p - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    199   2.95410  3.97958  4.76382  4.16399  1.23466  4.10162  4.38107  2.78567  3.65586  2.19089  3.46719  4.20671  3.78920  4.13156  4.03525  3.25126  3.18603  2.50296  2.73984  2.86766    365 f - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    200   2.72297  4.82530  2.62940  2.35446  3.83755  3.31971  3.71413  4.17131  2.26174  3.54363  4.14174  3.02369  2.60946  2.49179  2.66057  2.21727  2.99115  3.74587  4.55596  3.10965    366 s - - S
-          2.68620  4.42227  2.77522  2.73112  3.46340  2.40515  3.72496  3.29334  2.67743  2.69357  4.24692  2.90349  2.73742  3.18148  2.89803  2.37889  2.77522  2.98520  4.58479  3.61505
-          0.07731  2.84051  4.13492  0.30572  1.33404  0.48576  0.95510
-    201   2.63880  5.38435  2.63657  2.22720  4.72697  1.94780  3.15235  3.87964  2.57669  3.68860  4.42577  2.57921  3.16991  2.74291  2.86900  2.50219  2.85278  3.77370  5.81843  4.40865    368 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.52175  0.90012
-    202   2.40102  4.71375  2.46996  2.13243  4.71840  3.11745  3.05416  3.48265  2.25142  3.16134  4.41932  2.93828  3.25177  2.60824  2.79040  2.58260  2.90071  3.38079  5.81277  4.40438    369 e - - S
-          2.68658  4.42180  2.77453  2.73123  3.46394  2.40505  3.72421  3.29333  2.67765  2.69382  4.24730  2.90354  2.73686  3.18110  2.89829  2.37906  2.77522  2.98525  4.58428  3.61543
-          0.55463  1.48984  1.60791  1.39890  0.28351  0.52175  0.90012
-    203   2.69338  5.29005  2.51143  2.25105  4.62988  2.84270  3.49832  3.48405  2.27737  3.31427  4.33211  2.56706  3.20350  2.85310  2.67590  2.21378  2.73620  3.67787  5.72586  4.31806    375 s - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01250  4.78398  5.50633  0.61958  0.77255  0.95212  0.48763
-    204   2.65942  5.19894  2.69156  2.28179  3.77027  3.19251  3.77484  3.06173  2.43464  2.99400  3.94013  2.58274  3.44930  2.63512  2.62020  2.46578  2.71730  3.35179  5.65696  3.80565    376 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01250  4.78398  5.50633  0.61958  0.77255  0.77169  0.62033
-    205   2.38920  5.21254  2.73488  2.26876  4.51445  3.29559  3.03245  3.05648  2.42252  2.83088  3.97624  2.72691  3.66747  2.74292  2.65924  2.79642  2.87825  3.04317  5.67196  3.47007    377 e - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01186  4.83615  5.55849  0.61958  0.77255  0.33713  1.25111
-    206   2.65422  4.48489  1.88534  2.29942  4.71042  3.12833  3.84224  3.67843  2.58000  3.67468  4.41498  2.22848  4.04754  2.86157  2.64414  2.33478  2.73698  3.75923  5.80928  4.40246    378 d - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.52175  0.90012
-    207   2.52228  5.35256  2.79874  2.27245  4.68298  3.15080  3.25420  3.81263  2.42135  3.03021  2.98061  3.02733  3.41549  2.09266  2.89624  2.43800  3.03420  3.22791  5.79412  4.39217    379 q - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.52175  0.90012
-    208   2.88352  5.03264  3.01718  2.64158  3.36791  3.41419  3.67586  2.82361  2.46533  2.06980  3.25199  2.87105  3.91016  2.67457  2.54739  2.67076  3.11488  3.35644  5.54543  3.24074    380 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.52175  0.90012
-    209   2.31106  5.21929  3.20358  2.11286  3.58411  3.54755  3.12693  3.74178  2.35878  3.37262  4.27754  3.18132  3.64073  2.21825  2.83044  2.63943  3.03559  2.71879  4.50670  3.34948    381 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01003  5.00344  5.72579  0.61958  0.77255  0.46390  0.99109
-    210   2.74907  4.02445  4.23598  3.43708  3.16042  3.98772  3.66116  2.29352  2.78065  1.91975  2.65717  3.64306  4.00461  3.79624  2.62994  3.12682  2.72367  2.05105  5.03295  3.83444    382 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    211   2.79706  4.32223  4.14412  4.07508  2.44930  4.05985  3.54709  1.67401  3.90204  2.17979  2.94629  3.31750  4.42562  4.07034  3.98057  2.91878  2.88141  2.01026  4.94063  2.95520    383 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    212   2.43063  3.51667  2.84063  2.33381  3.23751  3.53757  3.64461  3.61354  2.52297  3.04234  3.80037  3.02528  3.31294  2.77439  2.36706  2.71893  3.04140  2.71650  5.64517  3.47973    384 e - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    213   2.54995  5.35768  3.14585  2.23433  4.68798  3.33616  3.38625  3.80986  2.09254  2.85705  3.68757  2.56176  4.05535  2.40160  2.38927  2.57618  3.04385  3.36418  5.79929  3.79887    385 k - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    214   2.66499  5.02053  2.80345  2.59207  4.23983  3.19081  3.94632  1.95336  2.43621  2.96229  3.77095  2.92719  4.12615  3.11304  2.86357  2.94448  2.42822  2.54184  5.53679  4.21766    386 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    215   2.79062  4.84420  3.48859  2.83007  4.02200  3.06268  4.01637  2.98055  2.36084  1.68419  3.06982  3.40535  3.56488  2.89781  2.78978  2.64270  2.97298  2.81255  5.39215  4.11258    387 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    216   2.78422  4.40067  2.87114  2.38957  4.66317  2.42774  3.11725  3.68493  2.29738  3.11118  3.80555  3.07548  3.38861  2.66839  2.52841  2.36297  2.74889  3.71883  4.85618  3.72852    388 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04975  5.01631  3.17248  0.61958  0.77255  0.48576  0.95510
-    217   2.55009  3.88585  3.08502  2.47179  4.52328  2.60499  3.86026  3.74333  2.31088  3.21633  3.94275  3.03087  2.50945  2.97834  2.41589  2.69163  2.38722  3.38360  5.70135  4.11095    389 k - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01030  4.97686  5.69921  0.61958  0.77255  0.59090  0.80705
-    218   2.71816  5.35510  2.47492  2.28903  4.69101  3.44039  3.67059  2.92462  2.15295  3.03900  4.39818  2.98975  2.40750  2.74839  2.76016  2.49540  2.85213  3.74081  5.79327  4.38792    390 k - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02103  4.97686  4.27462  0.61958  0.77255  0.59090  0.80705
-    219   2.59242  4.56547  3.37418  3.24570  3.28039  3.87349  3.78552  2.80260  2.91515  1.85640  3.67045  2.94464  3.03710  3.48913  3.31352  2.93163  2.57101  2.12270  4.60315  3.29903    391 l - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01041  4.96623  5.68858  0.61958  0.77255  0.61678  0.77584
-    220   2.76552  5.35116  2.75065  2.09233  4.26840  3.39661  3.23930  3.45666  2.13782  2.93921  3.69074  2.78256  2.85112  2.85423  2.61182  2.41762  3.01864  3.73701  5.78920  4.16743    392 e - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01041  4.96623  5.68858  0.61958  0.77255  0.61678  0.77584
-    221   2.56616  4.88573  3.26662  2.33696  2.41520  3.27403  3.41068  2.92250  2.70761  2.68623  3.97070  3.19787  3.38122  3.16656  2.79903  2.47364  2.99470  2.86843  4.82552  3.32054    393 e - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01041  4.96623  5.68858  0.61958  0.77255  0.61678  0.77584
-    222   2.62567  5.35084  2.04845  2.35215  4.39252  3.47212  3.16243  3.98892  2.45186  3.65226  3.66396  2.66846  2.63580  2.82810  3.05661  2.22708  2.99549  3.54011  5.78899  3.92777    394 d - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.03667  4.96623  3.53930  0.61958  0.77255  0.61678  0.77584
-    223   2.86103  4.03193  3.18635  2.38909  3.31435  3.61153  3.49109  2.70908  2.69769  2.69388  3.88535  3.22191  3.67076  3.11276  2.73635  2.49324  3.00545  2.72730  2.94731  2.96802    395 e - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01875  4.94025  4.47244  0.61958  0.77255  0.67631  0.71028
-    224   2.62521  5.12447  2.77972  2.44738  3.31605  3.53418  3.86652  3.33309  2.47319  3.03557  4.18886  3.10134  2.42408  2.60018  2.70100  2.64509  2.92363  3.22521  3.41935  3.46519    396 p - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.05901  4.93227  2.99396  0.61958  0.77255  0.69360  0.69269
-    225   2.68343  5.20702  2.88582  2.22963  3.55567  3.45903  3.65367  3.49248  2.11994  2.97314  4.26172  2.80968  3.57686  2.44336  3.06162  2.53581  2.67303  3.18308  3.73101  3.66292    397 k - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01130  4.88456  5.60691  0.61958  0.77255  0.78866  0.60597
-    226   2.68707  4.98468  2.82158  2.38405  3.75917  3.36024  3.65392  3.18317  2.38508  2.73942  3.76303  3.22111  3.36652  3.04584  2.96704  2.31757  2.64759  2.95752  3.21600  3.40268    398 s - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.11345  4.88456  2.30573  0.61958  0.77255  0.78866  0.60597
-    227   2.79298  3.84213  2.48108  2.52210  3.99851  3.60747  3.12972  3.13545  2.48018  3.05991  4.13768  2.83211  3.54520  2.93964  2.41588  2.35619  2.76810  2.97839  5.56015  3.44494    399 s - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02807  4.78362  3.94704  0.61958  0.77255  0.95264  0.48731
-    228   2.58191  4.56682  2.77742  2.37170  4.46635  3.58143  3.77449  3.50815  2.36445  2.67587  4.22448  2.86502  2.73607  2.80387  2.79297  2.07848  2.75446  3.53442  5.63386  3.74575    400 s - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.14447  4.76826  2.07130  0.61958  0.77255  0.97412  0.47405
-    229   2.74120  5.02625  2.90214  2.38037  3.96892  2.81361  3.75340  3.09744  2.29181  2.85276  3.79351  2.85134  3.31773  2.88600  2.57247  2.48932  2.74923  2.81409  5.51153  4.15648    401 k - - .
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02950  4.63827  3.94280  0.61958  0.77255  1.12880  0.39071
-    230   2.65814  5.03703  2.72915  2.44094  4.30481  3.19996  3.74471  3.73960  2.51991  2.72378  3.12113  3.05398  2.98987  2.79382  2.49179  2.12708  2.96796  3.38544  5.51898  3.52938    402 s - - .
-          2.68724  4.42293  2.77612  2.73159  3.46162  2.40699  3.72369  3.29398  2.67731  2.69321  4.24701  2.90285  2.73662  3.18257  2.89624  2.37860  2.77511  2.98573  4.58252  3.61251
-          0.60323  0.80254  5.34581  2.99471  0.05135  0.22221  1.61320
-    231   2.51767  5.38833  2.69504  1.91983  4.73145  3.65677  3.84405  3.51135  2.26714  3.33248  4.42951  2.74739  2.83044  2.63263  2.69535  2.26534  2.89575  3.77792  5.82218  4.12814    442 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    232   2.61324  5.33087  2.55247  1.71577  3.78905  3.51981  3.85697  4.11872  2.53837  3.37618  3.68276  2.71899  3.50504  2.96215  2.76975  2.43182  2.62759  3.19721  4.83386  4.08215    443 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    233   1.85315  2.66076  4.74963  4.14369  2.72361  2.76389  4.40211  2.66580  3.95769  1.60680  3.08425  4.19191  4.43908  4.11400  4.01342  3.37949  2.94810  2.35782  4.93743  3.75833    444 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    234   2.54113  3.93957  3.31567  2.58263  3.59686  3.36801  3.93655  2.84244  1.77469  2.55244  4.12290  3.02474  4.11900  2.54032  2.70090  2.93506  2.79964  3.23719  5.55956  3.97978    445 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    235   2.66035  5.38903  1.80529  2.16718  4.22724  3.25823  3.17680  4.00903  2.28647  3.50730  4.43018  2.97613  4.05032  2.48614  2.98498  2.31241  3.11375  3.77870  5.82277  3.97909    446 d - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    236   3.21254  4.56529  5.14365  4.53738  1.97526  4.40976  4.73239  2.19759  4.34073  1.04052  3.41232  4.55986  4.72994  4.44093  4.35221  3.72900  3.00622  2.20314  5.16040  3.53582    447 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    237   2.97518  4.05135  5.35921  4.78478  3.77817  4.66169  5.06989  1.35059  4.61468  1.50253  2.60400  4.82061  4.97178  4.75525  4.65269  4.00168  3.59517  1.52175  5.50364  4.33590    448 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    238   2.63113  4.16111  2.70523  2.01221  4.32546  2.89528  3.69801  3.91463  1.97992  3.37990  4.41866  2.72468  4.05215  2.88390  2.65380  2.44936  2.78930  3.52828  5.81309  3.68713    449 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    239   2.79532  4.56741  2.59886  2.26653  4.72524  2.97326  3.84498  4.20852  1.87988  3.68761  4.42563  2.67816  4.05093  2.72680  2.26697  2.39445  3.11354  3.44147  4.06926  3.70096    450 k - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    240   2.76031  1.91137  4.93344  4.32897  3.47342  4.21043  4.55379  2.12811  4.13437  1.60981  2.11111  4.35327  4.56463  4.27495  4.16872  3.52442  2.73881  2.49904  5.05160  3.88034    451 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    241   3.00579  3.43594  4.91160  4.30236  2.88535  4.17356  4.48924  2.41412  3.62991  0.97514  3.41700  4.31537  4.52645  4.23058  4.12367  3.48482  3.23680  2.59853  2.70167  3.78558    452 l - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    242   2.51291  3.86266  2.42773  2.26878  4.71076  3.65927  3.14908  3.51790  2.32370  3.67561  4.41657  2.44903  4.05255  2.58104  2.64695  2.72413  2.48024  3.27065  5.81133  3.77060    453 e - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    243   2.89024  4.99098  3.22187  2.69841  3.16242  3.74556  3.43367  3.45008  2.12873  2.47972  3.65551  3.30484  3.00902  2.69329  2.47140  2.87653  2.77051  2.80352  4.74384  3.09104    454 k - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    244   2.75442  4.59220  1.48443  2.55169  4.69407  3.66624  3.85987  4.16899  2.26580  3.66358  4.41104  2.16093  4.06270  2.96232  2.94350  2.69711  3.00639  3.21953  5.80766  4.40610    455 d - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    245   2.53666  4.51809  3.31495  2.50094  3.81458  3.47863  3.66745  3.68842  2.74796  3.30408  3.76297  2.90283  1.45947  2.98944  2.97069  2.84711  3.12065  2.90248  5.56105  4.23506    456 p - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    246   2.18867  5.36299  2.90524  2.21328  4.32931  3.53924  3.49382  3.97251  2.24621  3.14962  3.99253  2.78034  3.78478  2.54072  2.85251  2.30318  2.70173  3.25844  5.80328  3.47734    457 a - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    247   2.48590  4.36945  2.67418  2.22639  4.72760  3.65776  3.84501  4.21118  1.68322  3.11616  4.42723  3.02530  4.05117  2.52411  2.40832  2.54354  2.78662  3.77464  5.82017  4.41136    458 k - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    248   3.97870  5.88109  4.77637  3.79584  5.10245  4.51923  4.26030  4.68907  2.25479  4.07008  4.99673  4.06985  4.83329  3.42182  0.45649  3.98836  4.07883  4.42272  3.45519  4.78623    459 R - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    249   2.59820  4.04607  4.60274  4.00452  3.26886  3.61184  4.36773  2.06089  3.84570  1.56372  3.45362  4.11687  2.06890  4.02734  3.95003  2.68390  3.14561  2.58630  4.40258  3.38622    460 l - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04987  5.01631  3.16967  0.61958  0.77255  0.48576  0.95510
-    250   2.79362  5.19179  3.01710  2.75300  4.64905  2.77281  4.01085  4.10036  2.79939  3.46822  4.43166  2.61914  4.12461  3.14023  3.27668  1.68833  1.53351  3.69065  5.84113  4.47617    461 t - - T
-          2.68631  4.42192  2.77519  2.73130  3.46353  2.40482  3.72508  3.29367  2.67738  2.69360  4.24703  2.90360  2.73753  3.18148  2.89804  2.37867  2.77518  2.98532  4.58490  3.61498
-          0.12278  2.37863  3.77824  1.17468  0.36950  0.42506  1.06054
-    251   1.47902  3.78300  4.72209  4.11644  2.74562  3.65840  4.38345  2.02614  3.93274  2.07959  3.21794  4.17061  3.49702  4.09137  3.99270  2.98272  3.05871  2.38788  4.48487  3.74373    467 a - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01009  4.99737  5.71972  0.61958  0.77255  0.53813  0.87669
-    252   2.38222  4.71734  2.84513  2.05232  4.42547  3.25385  3.43556  4.19285  2.14440  3.09056  3.51596  2.80436  3.18490  2.67888  2.63294  2.69832  2.67125  3.58577  5.80764  4.40015    468 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01009  4.99737  5.71972  0.61958  0.77255  0.45436  1.00747
-    253   2.65797  4.06542  2.63237  1.57032  4.71890  3.65831  3.45654  4.20087  2.52289  3.68238  4.00276  3.00654  3.59507  2.12286  2.86428  2.58695  3.11362  3.45316  5.81563  3.91003    469 e - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    254   1.93383  3.77543  4.87213  4.26567  3.27005  3.35948  4.48352  1.60295  4.06924  1.71770  3.29328  4.28554  4.50523  4.21524  4.10410  3.45599  3.20183  2.00553  4.99383  3.81574    470 i - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    255   2.91099  3.35807  4.39311  3.80506  3.12662  3.41984  4.32058  2.74098  2.62412  1.35983  2.89439  3.70896  4.38574  3.55146  3.43970  3.02120  3.14303  2.30767  4.99433  3.18557    471 l - - H
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    256   2.62697  4.23577  2.94369  2.01671  4.73311  3.52212  3.12192  4.21804  1.98366  3.41966  4.43054  2.33684  4.05005  2.29561  2.80226  2.65814  2.90658  3.41449  5.82302  4.41298    472 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  5.01631  5.73865  0.61958  0.77255  0.48576  0.95510
-    257   2.67425  5.24257  2.69003  2.64384  4.09422  3.68496  1.59772  3.97575  2.52719  3.06621  3.97630  3.17995  4.07682  2.88982  2.86815  2.31165  2.78826  3.60139  5.71188  4.10399    473 h - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.18941  5.01631  1.79622  0.61958  0.77255  0.48576  0.95510
-    258   2.81850  5.23743  2.76502  2.35780  4.54654  3.39495  3.79640  3.57339  2.36240  3.35446  4.28834  3.08690  1.61434  2.83455  2.79066  2.56844  3.04975  3.37601  5.69198  4.30446    474 p - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01183  4.83873  5.56107  0.61958  0.77255  0.86853  0.54398
-    259   3.22678  4.58175  4.94227  4.40609  1.73776  4.31983  4.20406  3.01156  4.21650  2.23279  3.33965  4.33985  4.66520  3.80636  4.24184  3.63704  3.45535  2.61441  1.69956  1.91736    475 w - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01183  4.83873  5.56107  0.61958  0.77255  0.30436  1.33787
-    260   2.99670  4.36610  4.95290  4.33956  1.72799  3.71830  4.50360  1.92619  4.12878  1.69258  2.79907  4.33234  4.52551  4.25179  4.13733  3.48573  3.22794  1.98896  4.25850  3.81122    476 l - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00667  5.01308        *  0.61958  0.77255  0.00000        *
-//
diff --git a/test/jalview/io/test_fn3_hmm.txt b/test/jalview/io/test_fn3_hmm.txt
deleted file mode 100644 (file)
index 0dcfa22..0000000
+++ /dev/null
@@ -1,285 +0,0 @@
-HMMER3/f [3.1b1 | May 2013]
-NAME  fn3
-ACC   PF00041.13
-DESC  Fibronectin type III domain
-LENG  86
-ALPH  amino
-RF    no
-MM    no
-CONS  yes
-CS    yes
-MAP   yes
-DATE  Fri Jun 20 08:22:31 2014
-NSEQ  106
-EFFN  11.415833
-CKSUM 3564431818
-GA    8.00 7.20
-TC    8.00 7.20
-NC    7.90 7.90
-STATS LOCAL MSV       -9.4043  0.71847
-STATS LOCAL VITERBI   -9.7737  0.71847
-STATS LOCAL FORWARD   -3.8341  0.71847
-HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   2.70330  4.91262  3.03272  2.64079  3.60307  2.84344  3.74204  3.07942  2.79841  2.65364  4.14864  2.95826  2.87120  3.02176  2.96125  2.44783  2.59757  2.57680  4.02726  3.21526
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.00000        *
-      1   3.16986  5.21447  4.52134  3.29953  4.34285  4.18764  4.30886  3.35801  3.70246  2.11675  4.32057  4.32984  0.76706  3.91880  4.22437  3.23552  3.21670  2.88223  5.80355  3.93889      1 p - - -
-          2.68629  4.42236  2.77530  2.73088  3.46365  2.40512  3.72505  3.29365  2.67737  2.69316  4.24701  2.90358  2.73734  3.18157  2.89812  2.37898  2.77517  2.98515  4.58488  3.61514
-          0.09796  2.38361  6.81068  0.10064  2.34607  0.48576  0.95510
-      2   2.70230  5.97353  2.24744  2.62947  5.31433  2.60356  4.43584  4.79731  3.17221  2.95090  5.01531  3.26630  2.09873  3.30219  3.34190  1.45782  3.14099  3.57507  6.40877  4.25623      3 s - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-      3   1.38116  5.98285  3.50784  2.54546  5.32790  3.48945  4.43311  4.81385  2.38773  3.98773  5.02352  3.27895  1.92260  2.69012  2.96119  2.64228  3.29228  3.29618  6.41555  4.20553      4 a - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-      4   3.32856  5.10403  4.47046  4.60386  4.23079  4.75438  5.09647  2.69918  4.46632  2.97102  4.23502  4.77984  0.63388  4.68581  3.76781  4.05413  3.46306  2.04533  5.75329  4.56372      5 P - - -
-          2.68616  4.42236  2.77530  2.73134  3.46365  2.40523  3.72505  3.29295  2.67751  2.69303  4.24634  2.90357  2.73739  3.18157  2.89783  2.37897  2.77530  2.98529  4.58488  3.61514
-          0.09682  2.39494  6.81068  0.10162  2.33687  0.48576  0.95510
-      5   2.95325  4.65976  3.57762  2.20709  3.14816  2.51487  3.41109  4.78902  2.65862  3.19599  4.41042  3.45032  3.44719  2.43205  2.26492  2.25400  2.23196  3.66828  4.80003  4.52485      7 e - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01246  6.08833  4.59386  0.61958  0.77255  0.48576  0.95510
-      6   2.74215  5.97618  2.19482  2.69150  4.58171  2.33553  3.83525  3.28222  2.95080  3.32698  5.01691  1.45822  3.52462  2.79670  2.90942  3.13467  3.27956  4.36668  6.40902  3.92307      8 n - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00341  6.07928  6.80162  0.61958  0.77255  0.44282  1.02784
-      7   3.32507  4.98102  3.78072  3.31043  2.85257  4.76439  5.09585  2.50332  4.69760  1.03851  3.36125  4.91001  2.73206  4.83820  4.72389  4.07376  3.83146  1.59790  5.60385  4.42704      9 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.03752  6.08833  3.36505  0.61958  0.77255  0.48576  0.95510
-      8   3.15997  4.90658  3.35204  2.72775  4.53493  3.60960  2.65074  3.69535  2.11078  4.01384  4.99896  3.14668  4.61695  2.40643  2.34723  1.92358  2.03982  3.05153  6.39127  4.98082     10 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00349  6.05430  6.77664  0.61958  0.77255  0.35749  1.20207
-      9   1.76295  3.98252  5.55061  4.93551  2.13202  3.39992  5.09294  2.14638  4.23898  2.23988  3.42109  4.92079  4.39252  3.70640  3.99349  3.50811  3.63432  1.47830  4.51148  4.41177     11 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     10   3.01387  4.98892  2.91217  2.42744  5.22342  4.00576  3.74074  2.67275  2.47618  2.92529  3.89570  3.36720  4.15809  3.26810  2.80854  1.81572  2.02040  2.77133  4.92415  4.31555     12 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     11   2.41247  5.98374  2.24093  2.04842  3.41543  2.59695  4.10033  4.81544  3.05501  4.28918  5.02429  2.22829  2.90635  3.12939  3.01921  2.37278  3.01194  3.02522  6.41619  3.66635     13 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.06784  6.08833  2.75947  0.61958  0.77255  0.48576  0.95510
-     12   2.77725  4.36386  3.23435  2.92496  4.75140  4.31852  4.53101  1.91389  3.01135  2.51491  3.47932  2.97934  3.54432  2.88257  2.68923  3.07794  2.71169  1.80880  6.06849  4.75973     14 v - - E
-          2.68623  4.42259  2.77533  2.73059  3.46323  2.40500  3.72529  3.29333  2.67757  2.69369  4.24724  2.90364  2.73744  3.18108  2.89835  2.37891  2.77531  2.98493  4.58511  3.61510
-          0.22113  1.62346  6.74643  0.44471  1.02446  0.29166  1.37446
-     13   3.17575  5.97994  3.10322  2.84738  5.32369  2.00173  4.43389  4.80873  3.01150  3.75019  4.42663  2.23751  4.64014  2.74467  2.85546  1.99984  1.67133  4.36987  5.08444  3.58488     18 t - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     14   2.14203  5.98483  2.53686  2.20884  5.33077  2.76253  3.61799  4.81737  2.91636  3.96256  5.02525  2.79307  2.44932  3.35978  3.34773  1.76758  2.51815  4.12754  4.53404  4.35768     19 s - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02274  6.08833  3.90154  0.61958  0.77255  0.48576  0.95510
-     15   3.45984  5.96297  2.32904  2.98671  5.30486  3.14893  3.59992  3.68067  2.95954  4.26690  5.00447  2.01875  4.62814  3.51950  2.89162  1.97303  1.47565  3.87160  6.39755  3.59993     20 t - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00344  6.06904  6.79138  0.61958  0.77255  0.40302  1.10352
-     16   2.82603  5.98256  2.96292  2.53617  4.39559  3.14388  4.09532  4.81336  2.59005  4.28779  5.02326  3.12547  4.63955  2.76620  3.03618  1.28432  2.14874  3.55065  4.82032  3.29405     21 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     17   2.29842  4.96481  5.56794  4.95172  2.45211  3.33868  4.31545  1.97312  4.73378  1.34355  2.88087  4.92903  5.12608  4.86259  4.73754  4.07438  3.55674  1.71344  5.58685  3.78328     22 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     18   2.99930  4.68496  3.44656  2.53427  3.92510  4.04338  3.13178  3.10095  3.07007  2.68343  3.58599  3.17010  4.15335  2.63450  2.71950  2.30083  2.03779  2.23518  4.92400  3.84991     23 t - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     19   3.61302  4.50726  5.99163  5.39935  2.74200  5.23506  5.61087  1.85210  5.20622  1.10188  3.56291  5.40353  5.56305  5.33364  5.22134  4.56441  3.85751  1.20867  6.05610  4.88933     24 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     20   2.90508  5.98486  3.37356  2.37027  5.33083  3.46854  3.40789  4.81743  2.65230  3.22177  4.17825  2.67373  4.63906  2.52648  2.39431  1.50547  2.16764  4.37598  5.01440  5.00552     25 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     21   5.54218  6.63564  6.83891  6.61797  2.57168  6.35073  5.30532  3.96643  6.37377  3.18917  5.26281  6.07009  4.35269  6.11992  6.21105  5.74680  5.75143  4.86346  0.24436  3.66807     26 W - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     22   3.10862  5.98423  2.61761  2.10221  4.46995  3.93009  3.84182  3.79843  2.19229  3.09373  4.47555  2.66452  4.06864  2.59255  2.99987  1.99073  2.05618  3.67318  6.41655  4.47364     27 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     23   2.05280  5.87614  3.77610  2.63103  5.17655  3.25143  3.55897  3.09279  2.68152  3.35866  4.92882  3.43937  1.44938  3.29932  2.98336  2.85751  2.78420  3.02863  4.43359  4.47040     28 p - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     24   2.65644  5.88726  3.37601  2.96202  5.19190  3.53629  4.46143  4.20046  2.87295  2.91429  4.93884  3.27084  1.07653  3.39095  3.69926  2.07705  3.29723  2.92337  6.34501  4.95985     29 p - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.32165  6.08833  1.29911  0.61958  0.77255  0.48576  0.95510
-     25   2.44244  5.77880  2.64467  2.21733  3.20572  3.66340  3.27861  4.60939  2.17717  2.95495  4.81953  3.17778  2.62084  2.96028  2.64039  2.55818  2.51134  3.52175  6.21164  4.20060     30 k - - S
-          2.68557  4.42278  2.77404  2.73101  3.46370  2.40555  3.72548  3.29364  2.67779  2.69337  4.24743  2.90378  2.73741  3.18051  2.89835  2.37928  2.77557  2.98526  4.58530  3.61392
-          1.12909  0.74203  1.60680  0.24883  1.51281  1.67198  0.20810
-     26   2.76497  5.64634  2.06362  2.44254  4.06108  3.91520  3.28362  3.73992  2.46695  3.95074  4.68755  2.93859  2.87257  2.71813  3.08100  2.16767  2.28242  3.00778  6.08028  4.00221     33 d - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00580  5.54941  6.27176  0.61958  0.77255  1.23854  0.34222
-     27   2.94904  4.81418  2.88265  2.99332  4.83563  1.49306  3.87927  3.68299  2.59086  2.53757  4.07313  2.89409  2.92833  3.04624  2.88166  2.82744  3.22994  3.21444  4.18838  4.04981     34 g - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00508  5.68074  6.40309  0.61958  0.77255  0.20085  1.70396
-     28   2.96588  5.95917  2.45759  2.65943  5.30490  1.91234  3.11781  3.44164  2.78003  4.01788  4.99965  2.12379  3.26764  2.84040  2.87160  2.26272  3.15721  3.84740  4.86821  3.64128     35 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00351  6.05095  6.77330  0.61958  0.77255  0.34864  1.22298
-     29   2.45969  5.96445  2.88574  2.61716  5.30131  1.53630  4.43818  3.46883  2.98393  3.60366  4.33332  3.25719  4.28257  3.08417  2.40821  2.08539  3.20111  2.81105  6.40207  4.25093     36 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     30   2.71563  5.98438  2.50720  1.96228  5.33013  3.47246  3.38617  3.68065  2.34086  4.03521  4.36775  3.08029  1.87041  2.90329  3.33287  2.70645  2.77558  2.97286  6.41666  4.17777     37 p - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     31   3.04837  4.96747  2.67316  4.92527  2.42064  4.14655  5.09097  1.34551  4.71334  2.18068  3.34829  4.91585  3.31178  4.15082  4.72663  3.69906  3.53551  1.88881  3.93067  3.04034     38 i - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     32   2.89418  4.58676  2.12720  2.65970  3.99748  4.30700  4.50689  3.12934  2.75241  2.32504  4.34805  3.25317  4.69765  2.93544  2.97945  2.48570  1.85268  2.60501  5.05387  4.40931     39 t - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     33   3.05045  5.96458  3.15002  2.79713  4.16491  1.56242  3.20986  4.07540  2.34002  3.77648  3.66616  2.65073  4.64351  3.21500  2.62101  2.34442  2.98761  3.25677  5.04578  3.36446     40 g - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     34   4.72855  5.99332  6.32397  5.91516  1.75259  5.71064  3.47111  3.64093  3.68669  3.44300  5.13564  5.60513  6.03397  5.64902  5.63703  5.05114  4.95149  3.46344  3.97019  0.49348     41 Y - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     35   3.03913  5.98101  2.74983  1.95825  3.75604  3.98121  3.78677  3.48894  2.41418  2.89991  5.02189  2.66693  4.63989  2.65222  2.20113  2.26435  2.64729  3.16844  6.41420  3.93691     42 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     36   3.75576  5.90373  6.92143  6.48083  5.27028  6.48043  7.33031  1.16190  6.46559  1.72148  4.18143  6.65320  6.63807  6.70678  6.63399  5.94811  5.00240  0.82398  7.51298  6.31097     43 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.04904  6.08833  3.08806  0.61958  0.77255  0.48576  0.95510
-     37   2.63429  4.71789  2.89387  2.04081  4.17861  4.22097  3.38514  2.92734  2.36124  3.26230  4.97143  3.69265  4.61418  2.27063  2.38238  2.70982  2.11937  3.37005  6.36711  3.73375     44 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00353  6.04282  6.76517  0.61958  0.77255  0.32899  1.27173
-     38   3.00800  2.48193  5.53105  4.91728  2.98458  4.75707  4.15268  2.83469  3.12355  2.32451  4.08737  4.91198  5.12099  4.84273  3.46182  3.58557  3.26283  2.28912  2.64554  1.29971     45 y - - E
-          2.68641  4.42053  2.77543  2.73091  3.46377  2.40536  3.72420  3.29377  2.67764  2.69378  4.24582  2.90336  2.73763  3.18113  2.89660  2.37910  2.77543  2.98542  4.58500  3.61526
-          0.12278  2.16768  6.81068  0.54422  0.86820  0.48576  0.95510
-     39   2.52553  4.02469  3.60093  2.65311  4.18239  3.63052  4.17989  3.44209  2.14970  3.12319  4.96260  3.43770  4.02454  2.12722  2.15391  2.32250  3.25888  3.40611  2.73453  3.57446     49 q - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02932  6.08833  3.62591  0.61958  0.77255  0.48576  0.95510
-     40   2.85303  5.96779  2.74660  1.91867  5.31393  3.60453  3.59476  4.33679  2.36399  3.57280  3.62613  2.83996  2.06170  2.51716  3.24767  2.43993  2.61505  3.39964  6.39984  4.98824     50 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00347  6.06248  6.78482  0.61958  0.77255  0.67944  0.70705
-     41   2.55267  3.11480  2.72137  2.31006  5.21613  3.67111  4.08491  3.18721  2.11932  2.73126  3.73119  3.72342  3.44703  2.78931  3.31632  2.60923  2.50487  2.33623  6.34948  4.95631     51 k - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.09789  6.06248  2.39773  0.61958  0.77255  0.38130  1.14877
-     42   3.41114  5.92195  2.00739  2.51445  4.35946  1.85149  4.04885  4.75310  3.02073  3.41727  4.96259  1.88803  4.57836  2.81891  2.77402  2.53317  2.79169  3.60394  6.35459  4.48731     52 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00370  5.99676  6.71911  0.61958  0.77255  0.25112  1.50474
-     43   2.89692  5.98568  2.39354  2.04021  5.33202  2.12548  3.27810  4.81889  2.36649  3.39071  4.58505  2.82477  4.63888  2.99231  3.02264  2.04514  2.45319  3.82791  6.41761  5.00590     53 e - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     44   3.10206  5.95088  3.50928  2.19657  4.70794  1.83640  4.44201  3.85177  2.81849  3.20653  3.64542  2.17673  2.82486  2.50236  3.67274  2.64718  2.71954  3.18909  6.39210  3.73228     54 g - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.08059  6.08833  2.58819  0.61958  0.77255  0.48576  0.95510
-     45   2.83017  5.93388  2.31048  1.94273  5.28007  2.46456  3.60606  4.35357  2.35448  2.95362  4.97424  3.06816  3.41033  2.69285  2.84649  2.21743  2.98206  3.67978  4.23187  4.95426     55 e - - C
-          2.68733  4.40831  2.77609  2.73043  3.46444  2.40393  3.72592  3.29278  2.67833  2.69426  4.24827  2.90407  2.73626  3.18024  2.89744  2.37952  2.77650  2.98614  4.58019  3.61570
-          1.45631  0.90375  1.01651  1.51529  0.24813  0.96821  0.47765
-     46   2.32839  5.42660  2.93163  2.28220  4.02543  3.04571  3.03894  3.22247  2.82753  3.21315  3.89864  3.49093  2.50859  3.14260  2.89921  2.69284  3.05772  2.38519  4.38264  3.20345     66 e - - G
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00571  5.56406  6.28641  0.61958  0.77255  0.18459  1.78051
-     47   2.69465  3.91083  2.42967  2.34662  4.43247  3.13708  3.62175  3.49809  2.56727  2.84127  4.03266  3.52527  3.00745  3.22895  3.52756  2.46523  2.69768  3.11906  2.19019  4.92515     67 w - - C
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00353  6.04443  6.76678  0.61958  0.77255  0.33269  1.26228
-     48   2.67627  5.86490  3.17099  3.22595  3.40616  4.27494  3.15476  3.07365  2.21494  2.78239  4.39426  2.30764  3.56160  2.19351  2.71433  2.94392  2.62330  2.55032  5.16850  4.37026     68 q - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     49   3.05871  5.98132  3.36643  1.71285  5.32569  3.90513  2.27648  4.25125  2.92072  4.28630  4.28595  2.90579  3.33969  2.79371  2.63337  2.42582  2.46361  2.81009  3.46671  3.72048     69 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     50   2.88323  4.65127  3.40086  2.73607  2.41972  3.62669  3.91044  2.52424  2.75640  2.37424  3.94274  3.64921  4.76561  2.38668  2.64750  3.03028  3.09193  2.27100  6.08057  3.03402     70 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     51   3.36533  5.95840  2.65995  2.86095  3.44584  4.25167  3.55888  2.90987  2.78397  3.33346  3.90493  2.03375  3.68901  2.80089  2.78508  2.11531  1.97302  3.15541  6.39763  4.99330     71 t - - E
-          2.68571  4.42246  2.77540  2.73144  3.46375  2.40497  3.72515  3.29375  2.67742  2.69376  4.24711  2.90367  2.73710  3.18135  2.89822  2.37876  2.77540  2.98457  4.58498  3.61524
-          0.06628  2.76409  6.81068  0.97562  0.47314  0.48576  0.95510
-     52   2.38926  5.49703  3.09615  2.80044  4.68202  3.76562  4.62096  2.19958  3.33274  2.03099  4.11871  2.97731  4.26404  3.83080  2.89542  3.19964  2.84193  1.56133  6.03936  4.75239     75 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     53   2.79501  4.92737  2.35659  2.60299  4.06511  2.98090  3.88301  4.80087  2.44593  3.57653  5.01701  3.37711  1.76863  3.53250  3.23955  1.94419  2.68524  2.95506  6.41016  5.00121     76 p - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     54   2.44542  5.98316  3.18675  2.55065  5.32835  2.12386  4.43300  4.38419  2.38413  2.93654  5.02378  2.50193  2.49139  3.27226  2.05133  2.36069  3.70337  4.12664  4.32391  4.48343     77 r - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     55   2.77179  5.98329  2.50848  2.76644  5.32854  3.30269  3.08416  4.38434  3.16759  4.28865  5.02390  2.27915  2.67265  2.61285  3.32102  2.18277  1.82444  2.83013  6.41587  4.35727     78 t - - T
-          2.68621  4.42251  2.77546  2.73149  3.46380  2.40468  3.72521  3.29380  2.67767  2.69252  4.24716  2.90344  2.73766  3.18134  2.89827  2.37913  2.77442  2.98545  4.58503  3.61529
-          0.07130  2.69245  6.81068  1.11635  0.39671  0.48576  0.95510
-     56   2.32530  5.97446  3.57954  1.89562  5.31575  4.24796  3.32554  3.73278  2.42253  2.98562  5.01611  3.71687  3.10116  2.71107  2.91871  2.60336  1.70360  3.15915  6.40941  5.00074     83 t - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.35248  6.08833  1.22151  0.61958  0.77255  0.48576  0.95510
-     57   2.95924  5.72336  2.75932  2.63159  3.96190  3.29462  3.22449  3.40062  2.77057  3.18108  3.56769  2.46117  2.98702  3.05715  2.72729  2.56520  1.96589  3.52719  6.16591  2.96938     84 t - - S
-          2.68622  4.42162  2.77539  2.73088  3.46349  2.40510  3.72514  3.29311  2.67761  2.69358  4.24710  2.90367  2.73759  3.18166  2.89753  2.37894  2.77488  2.98538  4.58497  3.61523
-          0.23969  1.55321  6.46298  0.15973  1.91309  0.51157  0.91517
-     58   2.78411  5.86726  3.65151  2.46190  3.55121  3.32277  3.71415  3.82816  2.87545  3.69015  4.27003  2.90512  3.60994  2.68731  2.37548  1.72361  1.95655  3.42914  6.30822  3.85760     87 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00384  5.96109  6.68344  0.61958  0.77255  0.21363  1.64843
-     59   2.13080  3.38910  5.56698  4.95075  2.41578  4.20194  3.39215  2.83299  4.73282  2.14660  3.19234  4.92810  5.12527  4.86169  4.18461  4.07348  3.03808  1.63705  4.66089  1.78369     88 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     60   3.12543  5.93769  2.99354  2.53954  5.26303  4.25659  3.21054  2.85212  2.62935  2.82513  3.45830  2.90110  4.19559  2.80624  3.10357  2.88568  1.50190  2.67316  6.38237  3.93622     89 t - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     61   3.61965  4.99402  3.63828  4.95783  2.26826  4.79135  5.12555  1.86647  4.74679  1.34194  3.74460  4.94944  5.15281  3.10559  4.75989  3.74420  3.85186  1.42486  5.61987  4.44474     90 l - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     62   3.10387  5.98366  3.06368  2.31445  4.05906  3.57903  3.48488  4.81531  2.43543  4.01680  3.91148  2.67498  2.99920  2.70828  2.56621  2.14984  1.90367  3.06274  4.55677  4.37671     91 t - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     63   3.34220  5.98744  1.86090  2.69096  5.33359  1.40608  3.63608  4.82043  2.48624  4.29318  4.45099  1.96888  4.06897  3.19339  3.48838  2.73868  3.70514  4.37867  6.41942  4.25681     92 g - - S
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     64   5.18530  6.36522  4.58586  6.57578  3.53131  6.59442  6.84537  2.81242  6.44067  0.21363  3.54046  6.78308  6.53953  6.19263  6.31583  5.99910  5.37457  3.39834  6.73440  5.83217     93 L - - -
-          2.68590  4.42227  2.77521  2.73125  3.46356  2.40515  3.72496  3.29356  2.67743  2.69357  4.24692  2.90349  2.73741  3.18148  2.89803  2.37889  2.77521  2.98520  4.58479  3.61505
-          0.02033  3.96193  6.81068  0.31431  1.31041  0.48576  0.95510
-     65   2.93361  5.98253  3.16620  2.07447  5.32745  3.84017  3.84639  3.52003  2.07989  2.71701  4.56317  3.05465  3.94228  2.39023  2.13660  2.81003  2.42767  2.98359  6.41531  3.87097     95 e - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     66   2.17452  5.85112  3.79178  2.44872  5.14174  4.27993  4.47388  4.59086  3.04069  4.13287  4.42378  3.36057  0.82761  3.31072  3.71538  3.13243  3.15654  3.97958  4.90439  4.38214     96 p - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     67   2.72531  5.97666  2.50761  2.79752  4.22378  1.29966  2.70734  4.80294  2.85170  4.02964  5.01805  2.59981  4.64085  3.32835  3.25617  2.51345  3.59137  3.91820  4.88800  2.97800     97 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     68   2.39925  4.86641  3.79312  2.74568  5.13568  4.27988  3.97435  3.95098  2.69562  3.65359  3.00813  3.38952  4.67180  3.12070  2.33490  2.43668  1.27713  2.90106  6.31421  4.93977     98 t - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     69   2.87821  5.98261  2.71299  2.05681  3.93787  3.36966  3.57296  3.81023  2.25993  3.03102  3.49917  2.39917  3.09415  2.62154  2.82818  2.67359  2.51409  3.67730  4.58228  5.00448     99 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     70   6.32206  7.09639  6.95855  7.01624  2.70399  6.62558  5.12529  5.84365  6.77161  4.03604  6.32463  4.32154  6.86163  6.30239  6.48747  6.05185  6.49899  5.81871  5.18730  0.14189    100 Y - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     71   3.06725  5.97020  3.56838  1.93769  4.23056  3.77167  3.39655  3.53252  2.56448  3.45405  4.47893  2.47898  4.64226  2.55695  2.74362  2.36648  2.01401  2.66399  6.40629  3.70776    101 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     72   3.19486  4.19171  5.58508  4.96942  1.44027  4.15574  5.11433  1.81297  4.75161  2.09873  3.37140  4.94615  5.14143  4.88008  4.75485  4.09123  3.83769  1.47173  5.60267  3.09551    102 f - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     73   3.18039  4.06436  3.15201  2.27681  5.32468  3.77041  3.95744  3.70705  2.23538  4.28548  4.11883  2.88564  4.63997  2.58030  1.70576  2.27707  2.39981  3.62914  4.03739  3.61343    103 r - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     74   3.76685  5.84337  6.79391  6.31497  3.84743  6.27452  6.95358  1.59565  6.25134  2.11498  4.30213  6.44619  6.46746  6.44080  6.36566  5.70153  4.90672  0.53161  7.20703  6.03175    104 V - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     75   2.31005  4.88319  3.40675  2.63903  3.58848  4.26911  3.49342  3.09105  2.39543  3.00463  4.93879  3.41670  4.66153  1.98639  2.22144  3.11070  2.61129  2.78609  6.34491  2.92043    105 q - - E
-          2.68621  4.42228  2.77522  2.73126  3.46357  2.40516  3.72497  3.29357  2.67744  2.69312  4.24693  2.90350  2.73743  3.18149  2.89804  2.37890  2.77522  2.98521  4.58480  3.61506
-          0.03738  3.58894  4.70319  0.25135  1.50394  0.48576  0.95510
-     76   0.79499  5.17226  4.80437  3.93376  4.33120  3.17569  4.96596  3.30029  4.15773  2.86829  4.32533  4.52823  5.01384  4.41886  4.42465  2.28661  2.19420  2.76335  5.81537  4.60940    107 a - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00340  6.08033  6.80268  0.61958  0.77255  0.44741  1.01966
-     77   2.84306  4.15407  4.98296  3.19564  3.23517  4.66606  3.67524  2.49603  3.23224  2.21212  3.84796  4.62630  5.03633  2.88555  2.43211  3.49088  3.22704  1.33993  5.67363  2.88123    108 v - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     78   3.27061  4.75060  2.81965  3.10410  5.31934  3.95942  3.99367  3.88107  2.62205  4.02823  5.01830  1.35628  3.08534  3.32913  3.08546  1.88067  2.21938  4.02145  6.41122  3.76470    109 n - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00992  6.08833  4.87890  0.61958  0.77255  0.48576  0.95510
-     79   2.39836  4.69624  2.57939  2.56364  4.72011  1.55094  3.74815  4.26504  2.61409  4.28517  5.02018  2.82673  4.26340  2.69971  2.87382  2.73983  2.53993  3.07568  6.41202  5.00074    110 g - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00340  6.08180  6.80415  0.61958  0.77255  0.45398  1.00812
-     80   2.22211  4.94595  2.69424  2.44928  4.84552  2.32005  3.06335  2.95704  2.33976  3.55821  4.09648  2.87488  4.09930  2.85656  2.97877  3.08279  3.07714  2.39346  6.40553  4.01548    111 a - - T
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.38398  6.08833  1.15015  0.61958  0.77255  0.48576  0.95510
-     81   2.96920  5.43248  3.46409  2.76236  3.93019  1.02513  4.29951  4.07917  3.10833  3.39330  4.50784  3.40559  4.48149  3.45547  3.56956  2.50552  2.39680  3.76237  5.94228  3.01765    112 g - - E
-          2.68652  4.42259  2.77488  2.73144  3.46170  2.40466  3.72529  3.29388  2.67703  2.69373  4.24724  2.90335  2.73774  3.18162  2.89801  2.37895  2.77529  2.98552  4.58511  3.61537
-          0.29928  1.35852  6.43163  0.48724  0.95274  1.77816  0.18506
-     82   2.84273  4.18992  3.05053  2.12883  3.36284  2.75189  4.25559  3.03507  2.66396  2.65563  4.59024  2.63081  3.84786  2.76844  3.19058  2.84597  2.82776  2.89016  3.06821  3.41272    117 e - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00494  5.70928  6.43163  0.61958  0.77255  1.56406  0.23482
-     83   3.37920  5.61493  3.74277  3.20384  4.92800  1.01625  3.96683  4.35082  2.94708  2.91738  4.72998  3.71516  3.70329  3.52945  3.00683  1.61777  3.61882  4.00263  6.13360  4.80162    118 g - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00481  5.73459  6.45693  0.61958  0.77255  0.30535  1.33510
-     84   2.58463  5.93784  3.04102  2.09605  4.57465  2.51630  3.24109  4.26208  2.60545  3.44607  3.62705  3.20484  1.89678  2.68661  2.74662  2.97880  3.02092  3.23569  6.37074  4.50367    119 p - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00361  6.02233  6.74467  0.61958  0.77255  0.28862  1.38348
-     85   2.48488  5.72055  3.87501  1.97538  3.04853  3.48010  4.51877  3.51898  2.88839  2.73568  4.42660  3.64380  2.08811  3.48814  2.70856  2.40769  2.92982  4.05679  2.77386  3.43366    120 e - - B
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00338  6.08833  6.81068  0.61958  0.77255  0.48576  0.95510
-     86   3.03720  5.94099  3.75455  2.96917  5.26587  2.91682  3.66571  4.11840  2.98472  4.23738  4.98891  3.74380  4.66031  3.40955  3.12788  0.72443  2.46104  4.32115  6.38683  4.99111    121 s - - E
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00227  6.08723        *  0.61958  0.77255  0.00000        *
-//
diff --git a/test/jalview/schemes/HmmerGlobalBackgroundTest.java b/test/jalview/schemes/HmmerGlobalBackgroundTest.java
deleted file mode 100644 (file)
index 1cdee91..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-package jalview.schemes;
-
-import static org.testng.Assert.assertEquals;
-
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceI;
-import jalview.io.DataSourceType;
-import jalview.io.HMMFile;
-
-import java.awt.Color;
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-import org.testng.annotations.Test;
-
-public class HmmerGlobalBackgroundTest {
-
-  @Test(groups = "Functional")
-  public void testFindColour() throws MalformedURLException, IOException
-  {
-    HMMFile file = new HMMFile("test/jalview/io/test_PKinase_hmm.txt",
-            DataSourceType.FILE);
-
-    SequenceI hmmSeq = file.getSeqsAsArray()[0];
-    AlignmentI al = new Alignment(new SequenceI[] { hmmSeq });
-    ColourSchemeI scheme = new HmmerGlobalBackground(al);
-
-    /*
-     * 'A' in column 1, node 2, match emission 2.77204
-     * e-2.77204 = 0.0625 
-     * background frequency is 0.0826
-     * ratio is 0.757, log is negative, colour is Orange
-     */
-    Color actual = scheme.findColour('A', 1, null, null, 0);
-    assertEquals(actual, Color.ORANGE);
-
-    // gap is white
-    actual = scheme.findColour('-', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-    actual = scheme.findColour(' ', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-    actual = scheme.findColour('.', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-
-    /*
-     * 'Y' in column 4, node 5, match emission 4.41426
-     * e-4.41426 = 0.0121 
-     * background frequency is 0.0292
-     * ratio is 0.414, log is negative, colour is Orange
-     */
-    actual = scheme.findColour('Y', 4, null, null, 0);
-    assertEquals(actual, Color.ORANGE);
-
-    /*
-     * 'M' in column 109, no matching node, colour is reddish
-     */
-    actual = scheme.findColour('M', 109, null, null, 0);
-    assertEquals(actual, new Color(230, 0, 0));
-
-    /*
-     * 'I' in column 6, node 7, match emission 1.33015
-     * e-1.33015 = 0.2644
-     * background frequency is 0.0593
-     * ratio is 4.459, log is 1.495
-     * colour is graduated 1.495/4.52 or 84/255 of the way from
-     * white(255, 255, 255) to blue(0, 0, 255)
-     */
-    actual = scheme.findColour('I', 6, null, null, 0);
-    assertEquals(actual, new Color(171, 171, 255));
-
-    /*
-     * 'V' in column 14, node 15, match emission 0.44769
-     * e-0.44769 = 0.6391
-     * background frequency is 0.0686
-     * ratio is 9.316, log is 2.232
-     * colour is graduated 2.232/4.52 or 126/255 of the way from
-     * white(255, 255, 255) to blue(0, 0, 255)
-     */
-    actual = scheme.findColour('V', 14, null, null, 0);
-    assertEquals(actual, new Color(129, 129, 255));
-
-    /*
-     * invalid symbol is White
-     */
-    actual = scheme.findColour('X', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-  }
-
-}
diff --git a/test/jalview/schemes/HmmerLocalBackgroundTest.java b/test/jalview/schemes/HmmerLocalBackgroundTest.java
deleted file mode 100644 (file)
index 5f2bb8f..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-package jalview.schemes;
-
-import static org.testng.Assert.assertEquals;
-
-import jalview.datamodel.Alignment;
-import jalview.datamodel.AnnotatedCollectionI;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceI;
-import jalview.io.DataSourceType;
-import jalview.io.HMMFile;
-
-import java.awt.Color;
-import java.io.IOException;
-import java.net.MalformedURLException;
-
-import org.testng.annotations.Test;
-
-public class HmmerLocalBackgroundTest {
-
-  @Test(groups = "Functional")
-  public void testFindColour() throws MalformedURLException, IOException
-  {
-    HMMFile file = new HMMFile("test/jalview/io/test_PKinase_hmm.txt",
-            DataSourceType.FILE);
-
-    /*
-     * alignment with 20 residues and background frequencies:
-     * A/a, S 3/20 = 0.15
-     * M, K 4/20 = 0.2
-     * V 2/20 = 0.1
-     * Q, R, L 1/20 = 0.05
-     * log(totalCount) = log(20) = 2.996
-     */
-    SequenceI seq1 = new Sequence("seq1", "AAMMMKKKVV");
-    SequenceI seq2 = new Sequence("seq2", "aAM-QKRSSSL");
-    SequenceI hmmSeq = file.getSeqsAsArray()[0];
-    AnnotatedCollectionI ac = new Alignment(
-            new SequenceI[]
-            { hmmSeq, seq1, seq2 });
-    ColourSchemeI scheme = new HmmerLocalBackground(ac);
-
-    /*
-     * 'A' in column 1, node 2, match emission 2.77204
-     * e-2.77204 = 0.0625 
-     * background frequency is 0.15
-     * ratio is < 1, log is negative, colour is Orange
-     */
-    Color actual = scheme.findColour('A', 1, null, null, 0);
-    assertEquals(actual, Color.ORANGE);
-
-    // gap is white
-    actual = scheme.findColour('-', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-    actual = scheme.findColour(' ', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-    actual = scheme.findColour('.', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-
-    /*
-     * 'L' in column 3, node 4, match emission 1.98342
-     * e-1.98342 = 0.1376 
-     * background frequency is 0.05
-     * ratio is 2.752, log is 1.012
-     * colour is graduated 1.012/2.996 or 86/255 of the way from
-     * white(255, 255, 255) to blue(0, 0, 255)
-     */
-    actual = scheme.findColour('L', 3, null, null, 0);
-    assertEquals(actual, new Color(169, 169, 255));
-
-    /*
-     * invalid symbol is White
-     */
-    actual = scheme.findColour('X', 2, null, null, 0);
-    assertEquals(actual, Color.WHITE);
-  }
-
-}
diff --git a/test/jalview/util/FileUtilsTest.java b/test/jalview/util/FileUtilsTest.java
deleted file mode 100644 (file)
index 07fd375..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-package jalview.util;
-
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-import java.io.IOException;
-import java.nio.file.Paths;
-import java.util.List;
-
-import org.testng.annotations.Test;
-
-public class FileUtilsTest
-{
-  @Test(groups = "Functional")
-  public void testFindMatchingPaths() throws IOException
-  {
-    String expect1 = Paths.get("..", "jalview", "examples", "plantfdx.fa")
-            .toString();
-    String expect2 = Paths.get("../jalview/examples/plantfdx.features")
-            .toString();
-    String expect3 = Paths
-            .get("../jalview/examples/testdata/plantfdx.features")
-            .toString();
-
-    List<String> matches = FileUtils
-            .findMatchingPaths(Paths.get(".."),
-            ".*[/\\\\]plant.*\\.f.*");
-    System.out.println(matches);
-    assertTrue(matches.contains(expect1));
-    assertTrue(matches.contains(expect2));
-    assertTrue(matches.contains(expect3));
-  }
-
-  @Test(groups = "External")
-  public void testWindowsPath() throws IOException
-  {
-    if (System.getProperty("os.name").startsWith("Windows"))
-    {
-      /*
-       * should pass provided Eclipse is installed
-       */
-      List<String> matches = FileUtils.findMatches("C:\\",
-              "Program Files*/eclips*/eclips?.exe");
-      assertFalse(matches.isEmpty());
-
-      /*
-       * should pass provided Chimera is installed
-       */
-      matches = FileUtils.findMatches("C:\\",
-              "Program Files*/Chimera*/bin/{chimera,chimera.exe}");
-      assertFalse(matches.isEmpty());
-    }
-  }
-
-  @Test(groups = "Functional")
-  public void testFindMatches() throws IOException
-  {
-    String expect1 = Paths.get("..", "jalview", "examples", "plantfdx.fa")
-            .toString();
-    String expect2 = Paths.get("../jalview/examples/plantfdx.features")
-            .toString();
-    String expect3 = Paths
-            .get("../jalview/examples/testdata/plantfdx.features")
-            .toString();
-  
-    List<String> matches = FileUtils
-            .findMatches("..", "jalview/ex*/plant*.f*");
-    System.out.println(matches);
-    assertTrue(matches.contains(expect1));
-    assertTrue(matches.contains(expect2));
-    assertFalse(matches.contains(expect3));
-  }
-}
diff --git a/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java b/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java
deleted file mode 100644 (file)
index 4dbf05e..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-package jalview.util;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
-
-import jalview.datamodel.HMMNode;
-import jalview.datamodel.HiddenMarkovModel;
-import jalview.datamodel.Sequence;
-import jalview.datamodel.SequenceI;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import org.testng.annotations.Test;
-
-import junit.extensions.PA;
-
-public class HMMProbabilityDistributionAnalyserTest {
-
-  HMMProbabilityDistributionAnalyser analyser = new HMMProbabilityDistributionAnalyser();
-
-  @Test
-  public void testMoveToFile() throws IOException
-  {
-
-    BufferedReader br = new BufferedReader(new FileReader(
-            "test/jalview/util/test_Fams_for_probability_analysis"));
-    analyser.moveLocationBy(1, br);
-
-    String line = br.readLine();
-    assertEquals(line, "# STOCKHOLM 1.0");
-    line = br.readLine();
-    assertEquals(line, "seq1 ATW");
-    line = br.readLine();
-    assertEquals(line, "seq2 ATI");
-
-  }
-
-  @Test
-  public void testCountValidResidues()
-  {
-    analyser.sequences = new Vector<>();
-    analyser.hmm = new HiddenMarkovModel();
-    analyser.hmm.setProperty("LENG", "8");
-
-    List<HMMNode> nodes = new ArrayList<>();
-    nodes.add(new HMMNode());
-    for (int i = 1; i < 9; i++)
-    {
-      HMMNode node = new HMMNode();
-      node.setResidueNumber(i - 1);
-      nodes.add(node);
-
-    }
-    PA.setValue(analyser.hmm, "nodes", nodes);
-
-    SequenceI[] sequence = new Sequence[] {
-        new Sequence("seq1", "ATGWWSCF"), new Sequence("seq2", "GGMKI"),
-        new Sequence("seq3", "--.ATccGc") };
-    analyser.sequences.add(sequence[0]);
-    analyser.sequences.add(sequence[1]);
-    analyser.sequences.add(sequence[2]);
-
-    int count = analyser.countValidResidues();
-    assertEquals(count, 16);
-  }
-
-  @Test(priority = 0)
-  public void testReadBinned() throws IOException
-  {
-    analyser.readBinned("test/jalview/util/");
-    Map<String, Double> map = analyser.binned;
-    assertEquals(map.get("1.8"), 4.53);
-    assertEquals(map.get("3.4"), 2.65);
-    assertEquals(map.get("6.4"), 10.8);
-    assertEquals(map.get("0"), 5.4);
-  }
-
-  @Test
-  public void testReadRaw() throws IOException
-  {
-    analyser.readRaw("test/jalview/util/");
-    List<ArrayList<Double>> list = analyser.raw;
-
-    assertEquals(list.get(0).get(0), 1.43);
-    assertNull(list.get(0).get(2));
-    assertEquals(list.get(1).get(1), 1.2);
-    assertEquals(list.get(2).get(0), 5.6);
-    assertEquals(list.get(2).get(2), 6.8);
-
-  }
-
-  @Test(priority = 1)
-  public void testProcessData() throws IOException
-  {
-    analyser.keepRaw = true;
-    BufferedReader brFam = new BufferedReader(new FileReader(
-            "test/jalview/util/test_Fams_for_probability_analysis"));
-    BufferedReader brHMM = new BufferedReader(new FileReader(
-            "test/jalview/util/test_HMMs_for_probability_analysis"));
-    analyser.readStockholm(brFam);
-    analyser.readHMM(brHMM);
-    analyser.processData(6);
-    Map<String, Double> map = analyser.binned;
-    List<ArrayList<Double>> list = analyser.raw;
-    assertEquals(map.get("1.8"), 4.863, 0.001d);
-    assertEquals(map.get("3.4"), 2.65);
-    assertEquals(map.get("0"), 5.4);
-    assertEquals(map.get("6.4"), 10.8);
-    assertEquals(map.get("1.4"), 0.166667, 0.00001d);
-    assertEquals(map.get("4.4"), 0.5);
-
-  }
-}
diff --git a/test/jalview/util/Raw.csv b/test/jalview/util/Raw.csv
deleted file mode 100644 (file)
index 83d3452..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-Seq1, Seq2, Seq3
-1.43, 2.34, 5.6,
-EMPTY, 1.2, 0.05,
-EMPTY, 5.4, 6.8,
\ No newline at end of file
diff --git a/test/jalview/util/test_Fams_for_probability_analysis b/test/jalview/util/test_Fams_for_probability_analysis
deleted file mode 100644 (file)
index 74fbab0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# STOCKHOLM 1.0
-seq1 AW
-seq2 GW
-seq3 AW
-//
-# STOCKHOLM 1.0
-seq1 ATW
-seq2 ATI
-//
-# STOCKHOLM 1.0
-seq1 R-WW
-seq2 RAWW
-//
\ No newline at end of file
diff --git a/test/jalview/util/test_hmms_for_probability_analysis b/test/jalview/util/test_hmms_for_probability_analysis
deleted file mode 100644 (file)
index b70d42b..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-HMMER3/f [3.1b2 | February 2015]
-NAME  test1
-LENG  4
-ALPH  amino
-RF    no
-MM    no
-CONS  yes
-CS    no
-MAP   yes
-DATE  Fri Jul 21 06:35:06 2017
-NSEQ  3
-EFFN  3.000000
-CKSUM 657102310
-STATS LOCAL MSV       -5.0223  0.82341
-STATS LOCAL VITERBI   -4.9569  0.82341
-STATS LOCAL FORWARD   -2.0282  0.82341
-HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   1.94296  5.20658  4.78882  4.52987  4.66525  2.54188  5.19553  2.25221  4.08549  3.87133  5.00250  4.55734  4.73106  4.65220  2.77287  3.67799  1.53923  3.75384  1.48526  4.84023
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01083  4.92694  5.64929  0.61958  0.77255  0.00000        *
-      1   0.67027  4.79120  4.60974  4.51892  5.43734  1.28080  5.43621  4.90028  4.64310  4.61059  5.39837  4.28688  4.41468  4.80804  4.79047  3.08135  3.44468  4.10506  6.74908  5.67939      1 A - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01083  4.92694  5.64929  0.61958  0.77255  0.48576  0.95510
-      2   5.43405  6.34487  5.85697  5.84679  4.39288  5.10370  5.65594  5.70664  5.69821  4.87848  6.25251  5.89664  5.70261  6.00722  5.60902  5.64576  5.80049  5.59366  0.08910  4.36301      2 W - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01083  4.92694  5.64929  0.61958  0.77255  0.48576  0.95510
-      3   3.42384  5.23617  4.84601  4.77568  5.39247  4.01365  5.64153  4.72950  4.75585  4.52264  5.55782  4.69647  4.81267  5.08969  4.87301  3.64217  0.20934  4.25217  6.65833  5.63018      3 T - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01083  4.92694  5.64929  0.61958  0.77255  0.48576  0.95510
-      4   3.53954  5.09963  4.71395  4.06038  4.20429  4.44020  4.65482  0.90152  3.16536  2.96072  4.13056  4.31689  4.83725  3.95143  1.46549  3.86829  3.78084  2.85654  5.74911  4.54685      4 i - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00730  4.92341        *  0.61958  0.77255  0.00000        *
-//
-HMMER3/f [3.1b2 | February 2015]
-NAME  test2
-LENG  3
-ALPH  amino
-RF    no
-MM    no
-CONS  yes
-CS    no
-MAP   yes
-DATE  Fri Jul 21 06:36:50 2017
-NSEQ  2
-EFFN  2.000000
-CKSUM 777554360
-STATS LOCAL MSV       -5.2452  0.95763
-STATS LOCAL VITERBI   -5.2886  0.95763
-STATS LOCAL FORWARD   -1.5134  0.95763
-HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   1.33364  4.79082  4.44132  4.24796  3.91456  3.75718  4.85762  2.23342  4.16821  3.09137  4.29744  4.25088  4.41741  4.46803  4.31080  3.33397  1.39376  3.21010  2.54819  4.14914
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01467  4.62483  5.34718  0.61958  0.77255  0.00000        *
-      1   0.32372  4.76536  4.42980  4.32857  5.00499  3.55951  5.22620  4.27004  4.37081  4.10495  5.08789  4.22499  4.36948  4.63911  4.51684  3.12947  3.46009  3.76842  6.33337  5.25783      1 A - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01467  4.62483  5.34718  0.61958  0.77255  0.48576  0.95510
-      2   3.04414  4.87155  4.35068  4.21532  4.89213  3.66881  5.13994  4.14202  4.17893  3.96810  5.00600  4.23490  4.44590  4.53729  4.35178  3.25814  0.35496  3.73038  6.23308  5.12388      2 T - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01467  4.62483  5.34718  0.61958  0.77255  0.48576  0.95510
-      3   3.41901  4.77187  4.98694  4.49106  3.10447  4.49364  4.52024  1.21391  4.22709  2.30875  3.57865  4.53952  4.83367  4.43564  4.31127  3.88439  3.66452  2.61326  1.44329  3.34125      3 i - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  4.62006        *  0.61958  0.77255  0.00000        *
-//
-HMMER3/f [3.1b2 | February 2015]
-NAME  test3
-LENG  4
-ALPH  amino
-RF    no
-MM    no
-CONS  yes
-CS    no
-MAP   yes
-DATE  Fri Jul 21 06:37:01 2017
-NSEQ  2
-EFFN  2.000000
-CKSUM 986955970
-STATS LOCAL MSV       -5.4578  0.80004
-STATS LOCAL VITERBI   -5.2499  0.80004
-STATS LOCAL FORWARD   -2.1856  0.80004
-HMM          A        C        D        E        F        G        H        I        K        L        M        N        P        Q        R        S        T        V        W        Y   
-            m->m     m->i     m->d     i->m     i->i     d->m     d->d
-  COMPO   2.16700  5.33023  4.57707  4.32329  4.15728  4.03215  4.83242  4.49728  3.73978  4.00181  5.18156  4.45520  4.63709  4.41734  1.53081  3.84281  4.10073  4.20172  0.82417  4.15750
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01467  4.62483  5.34718  0.61958  0.77255  0.00000        *
-      1   4.09153  5.75008  4.67229  4.09411  5.31638  4.34678  4.67762  4.97541  2.93879  4.35023  5.37643  4.37234  4.85576  3.90366  0.27042  4.17197  4.33362  4.67489  6.11461  5.14175      1 R - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.39762  4.62483  1.14482  0.61958  0.77255  0.48576  0.95510
-      2   0.58385  4.42717  3.89187  3.72118  4.47383  3.23815  4.69159  3.65968  3.74862  3.52210  4.52478  3.76053  4.01438  4.05655  3.96007  2.78076  3.08518  3.24526  5.86063  4.71068      2 A - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.02145  4.24866  4.97100  0.61958  0.77255  0.27360  1.42978
-      3   4.82318  5.87391  5.36844  5.28961  3.81117  4.70308  5.10523  4.98084  5.06729  4.21822  5.56037  5.33222  5.28501  5.40387  5.04111  5.02415  5.17266  4.88017  0.16601  3.78547      3 W - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.01467  4.62483  5.34718  0.61958  0.77255  0.48576  0.95510
-      4   4.82318  5.87391  5.36844  5.28961  3.81117  4.70308  5.10523  4.98084  5.06729  4.21822  5.56037  5.33222  5.28501  5.40387  5.04111  5.02415  5.17266  4.88017  0.16601  3.78547      4 W - - -
-          2.68618  4.42225  2.77519  2.73123  3.46354  2.40513  3.72494  3.29354  2.67741  2.69355  4.24690  2.90347  2.73739  3.18146  2.89801  2.37887  2.77519  2.98518  4.58477  3.61503
-          0.00990  4.62006        *  0.61958  0.77255  0.00000        *
-//
\ No newline at end of file
diff --git a/test/jalview/ws/seqfetcher/DasSequenceFetcher.java b/test/jalview/ws/seqfetcher/DasSequenceFetcher.java
deleted file mode 100644 (file)
index f1dafcb..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.seqfetcher;
-
-import static org.testng.Assert.assertTrue;
-
-import jalview.bin.Cache;
-import jalview.gui.JvOptionPane;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-public class DasSequenceFetcher
-{
-
-  @BeforeClass(alwaysRun = true)
-  public void setUpJvOptionPane()
-  {
-    JvOptionPane.setInteractiveMode(false);
-    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
-  }
-
-  @Test(groups = { "Network" })
-  public void testDasRegistryContact()
-  {
-    Cache.getDasSourceRegistry().refreshSources();
-    assertTrue(Cache.getDasSourceRegistry().getSources().isEmpty(),
-            "Expected to find no DAS sources at the registry. Check config.");
-  }
-
-}