From 6bed788b6f58e87d179a761e74505b884ddc2685 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Mon, 13 Aug 2018 11:14:08 +0100 Subject: [PATCH] scrubbing HMM classes on spike-mungo --- src/jalview/datamodel/HMMNode.java | 148 --- src/jalview/datamodel/HiddenMarkovModel.java | 637 ------------- src/jalview/gui/DasSourceBrowser.java | 864 ----------------- src/jalview/hmmer/HMMAlign.java | 337 ------- src/jalview/hmmer/HMMBuild.java | 382 -------- src/jalview/hmmer/HMMERParamStore.java | 341 ------- src/jalview/hmmer/HMMERPreset.java | 57 -- src/jalview/hmmer/HMMSearch.java | 475 ---------- src/jalview/hmmer/HmmerCommand.java | 334 ------- src/jalview/io/HMMFile.java | 716 -------------- src/jalview/schemes/HmmerColourScheme.java | 197 ---- src/jalview/schemes/HmmerGlobalBackground.java | 61 -- src/jalview/schemes/HmmerLocalBackground.java | 96 -- src/jalview/util/FileUtils.java | 208 ----- .../util/HMMProbabilityDistributionAnalyser.java | 978 -------------------- .../util/ProbabilityAnalyserKickstarter.java | 221 ----- src/jalview/workers/InformationThread.java | 323 ------- src/jalview/ws/DasSequenceFeatureFetcher.java | 925 ------------------ .../ws/dbsources/das/api/DasSourceRegistryI.java | 57 -- .../ws/dbsources/das/api/jalviewSourceI.java | 87 -- .../dbsources/das/datamodel/DasSequenceSource.java | 354 ------- .../dbsources/das/datamodel/DasSourceRegistry.java | 484 ---------- .../ws/dbsources/das/datamodel/JalviewSource.java | 384 -------- src/jalview/ws/params/simple/DoubleParameter.java | 76 -- src/jalview/ws/params/simple/FileParameter.java | 47 - .../ws/params/simple/LogarithmicParameter.java | 80 -- .../ws/params/simple/RadioChoiceParameter.java | 45 - src/jalview/ws/params/simple/StringParameter.java | 88 -- test/jalview/datamodel/HMMNodeTest.java | 42 - test/jalview/datamodel/HiddenMarkovModelTest.java | 146 --- test/jalview/hmmer/HMMERTest.java | 134 --- test/jalview/hmmer/testProps.jvprops | 88 -- test/jalview/io/HMMFileTest.java | 531 ----------- test/jalview/io/test_MADE1_hmm.txt | 268 ------ test/jalview/io/test_PKinase_hmm.txt | 806 ---------------- test/jalview/io/test_fn3_hmm.txt | 285 ------ .../jalview/schemes/HmmerGlobalBackgroundTest.java | 90 -- test/jalview/schemes/HmmerLocalBackgroundTest.java | 77 -- test/jalview/util/FileUtilsTest.java | 73 -- .../HMMProbabilityDistributionAnalyserTest.java | 119 --- test/jalview/util/Raw.csv | 4 - .../util/test_Fams_for_probability_analysis | 13 - .../util/test_hmms_for_probability_analysis | 99 -- test/jalview/ws/seqfetcher/DasSequenceFetcher.java | 49 - 44 files changed, 11826 deletions(-) delete mode 100644 src/jalview/datamodel/HMMNode.java delete mode 100644 src/jalview/datamodel/HiddenMarkovModel.java delete mode 100644 src/jalview/gui/DasSourceBrowser.java delete mode 100644 src/jalview/hmmer/HMMAlign.java delete mode 100644 src/jalview/hmmer/HMMBuild.java delete mode 100644 src/jalview/hmmer/HMMERParamStore.java delete mode 100644 src/jalview/hmmer/HMMERPreset.java delete mode 100644 src/jalview/hmmer/HMMSearch.java delete mode 100644 src/jalview/hmmer/HmmerCommand.java delete mode 100644 src/jalview/io/HMMFile.java delete mode 100644 src/jalview/schemes/HmmerColourScheme.java delete mode 100644 src/jalview/schemes/HmmerGlobalBackground.java delete mode 100644 src/jalview/schemes/HmmerLocalBackground.java delete mode 100644 src/jalview/util/FileUtils.java delete mode 100644 src/jalview/util/HMMProbabilityDistributionAnalyser.java delete mode 100644 src/jalview/util/ProbabilityAnalyserKickstarter.java delete mode 100644 src/jalview/workers/InformationThread.java delete mode 100644 src/jalview/ws/DasSequenceFeatureFetcher.java delete mode 100644 src/jalview/ws/dbsources/das/api/DasSourceRegistryI.java delete mode 100644 src/jalview/ws/dbsources/das/api/jalviewSourceI.java delete mode 100644 src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java delete mode 100644 src/jalview/ws/dbsources/das/datamodel/DasSourceRegistry.java delete mode 100644 src/jalview/ws/dbsources/das/datamodel/JalviewSource.java delete mode 100644 src/jalview/ws/params/simple/DoubleParameter.java delete mode 100644 src/jalview/ws/params/simple/FileParameter.java delete mode 100644 src/jalview/ws/params/simple/LogarithmicParameter.java delete mode 100644 src/jalview/ws/params/simple/RadioChoiceParameter.java delete mode 100644 src/jalview/ws/params/simple/StringParameter.java delete mode 100644 test/jalview/datamodel/HMMNodeTest.java delete mode 100644 test/jalview/datamodel/HiddenMarkovModelTest.java delete mode 100644 test/jalview/hmmer/HMMERTest.java delete mode 100644 test/jalview/hmmer/testProps.jvprops delete mode 100644 test/jalview/io/HMMFileTest.java delete mode 100644 test/jalview/io/test_MADE1_hmm.txt delete mode 100644 test/jalview/io/test_PKinase_hmm.txt delete mode 100644 test/jalview/io/test_fn3_hmm.txt delete mode 100644 test/jalview/schemes/HmmerGlobalBackgroundTest.java delete mode 100644 test/jalview/schemes/HmmerLocalBackgroundTest.java delete mode 100644 test/jalview/util/FileUtilsTest.java delete mode 100644 test/jalview/util/HMMProbabilityDistributionAnalyserTest.java delete mode 100644 test/jalview/util/Raw.csv delete mode 100644 test/jalview/util/test_Fams_for_probability_analysis delete mode 100644 test/jalview/util/test_hmms_for_probability_analysis delete mode 100644 test/jalview/ws/seqfetcher/DasSequenceFetcher.java diff --git a/src/jalview/datamodel/HMMNode.java b/src/jalview/datamodel/HMMNode.java deleted file mode 100644 index b646eee..0000000 --- a/src/jalview/datamodel/HMMNode.java +++ /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 index e3eb160..0000000 --- a/src/jalview/datamodel/HiddenMarkovModel.java +++ /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 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 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 - * - *
-   *  log(emission probability / background probability) / log(2)
-   * 
- * - * @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. - *

- * A mapping between the HMM nodes and residue positions of the sequence is - * also built and saved. - * - * @return - */ - void buildConsensusSequence() - { - List 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 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 setNodes 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 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 index 8570ac3..0000000 --- a/src/jalview/gui/DasSourceBrowser.java +++ /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 . - * 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 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 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( - ""); - - 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( - "Id: " + ds.getUri() + "
"); - text.append("Nickname: " - + ds.getTitle() + "
"); - - text.append("URL: " + ds.getSourceURL() + "" - + "
"); - if (!ds.isLocal()) - { - if (ds.getDocHref() != null && ds.getDocHref().length() > 0) - { - text.append("Site: " + ds.getDocHref() + "" - + "
"); - } - - text.append("Description: " - + ds.getDescription() + "
"); - - text.append( - "Admin Email: " + ds.getEmail() + "" - + "
"); - - text.append("Registered at: " - + latest.getCreated() + "
"); - - // TODO: Identify last successful test date - // text.append("Last successful test: " - // + latest.dasSources[i].getLeaseDate() + "
"); - } - else - { - text.append("Source was added manually.
"); - } - text.append("Labels: "); - 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("
"); - - text.append("Capabilities: "); - 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("
"); - - text.append("Coordinates:"); - int i = 1; - for (COORDINATES dcs : latest.getCOORDINATES()) - { - text.append("
" + 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(" (" + dcs.getUri() - + ")"); - } - text.append("
"); - - 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 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 selected = new Vector(); - 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 authority = new Vector(); - Vector type = new Vector(); - Vector label = new Vector(); - Vector taxIds = new Vector(); - 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 srcs = sourceRegistry.getSources(); - for (jalviewSourceI ds : srcs) - { - - VERSION v = ds.getVersion(); - List 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 index b5f047e..0000000 --- a/src/jalview/hmmer/HMMAlign.java +++ /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 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 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 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 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 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 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 alorders) - { - // update orders - if (alorders.size() == 1) - { - alignFrame.addSortByOrderMenuItem("hmmalign" + " Ordering", alorders.get(0)); - } - else - { - // construct a non-redundant ordering set - List 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 index 6de7029..0000000 --- a/src/jalview/hmmer/HMMBuild.java +++ /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 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 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 parseParameters( - AlignViewportI viewport) - { - List 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 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 ac is a subgroup - * - * @param ac - */ - void deleteHmmSequences(AnnotatedCollectionI ac) - { - List 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 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 index 452097b..0000000 --- a/src/jalview/hmmer/HMMERParamStore.java +++ /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 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 getPresets() - { - return presets; - } - - @Override - public WsParamSetI getPreset(String nam) - { - return null; - } - - @Override - public List getServiceParameters() - { - List 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 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 args) - { - String names = Cache.getProperty(Preferences.HMMSEARCH_DBS); - if (names == null || names.isEmpty()) - { - return; - } - - List filePaths = new ArrayList<>(); - List 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 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 args) - { - List hmms = viewport.getAlignment().getHmmSequences(); - if (!hmms.isEmpty()) - { - List 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 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 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 jobParams) - { - } - - @Override - public void updatePreset(String oldName, String presetName, String text, - List 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 index 2712259..0000000 --- a/src/jalview/hmmer/HMMERPreset.java +++ /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 getArguments() - { - return null; - } - - @Override - public void setArguments(List args) - { - } - -} diff --git a/src/jalview/hmmer/HMMSearch.java b/src/jalview/hmmer/HMMSearch.java deleted file mode 100644 index 6cda421..0000000 --- a/src/jalview/hmmer/HMMSearch.java +++ /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 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 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 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 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 alignArgs = new ArrayList<>(); - String alignTo = hmmAndSeqs[0].getName(); - List 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 index f8f2cde..0000000 --- a/src/jalview/hmmer/HmmerCommand.java +++ /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 params; - - /** - * Constructor - * - * @param alignFrame - * @param args - */ - public HmmerCommand(AlignFrame alignFrame, List 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 hmmbuild or - * hmmbuild.exe, 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 commands) - throws IOException - { - List 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 wrapWithCygwin(List commands) - { - File bash = FileUtils.getExecutable("bash", - Cache.getProperty(Preferences.CYGWIN_PATH)); - if (bash == null) - { - Cache.log.error("Cygwin shell not found"); - return commands; - } - - List 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 index 07f29c8..0000000 --- a/src/jalview/io/HMMFile.java +++ /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 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 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 charListToStringList(List list) - { - List 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 doublesToStringList(double[] doubles) - { - List 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 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 strInserts = doublesToStringList(doubleInserts); - insertLine += addData(17, 9, strInserts); - - output.append(NL).append(insertLine); - - String transitionLine = ""; - double[] doubleTransitions = convertToLogSpace( - hmm.getNode(nodeNo).getStateTransitions()); - List 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 index 0f81ec1..0000000 --- a/src/jalview/schemes/HmmerColourScheme.java +++ /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 - *

    - *
  • white for a gap
  • - *
  • red for an insertion (position is gapped in the HMM consensus)
  • - *
  • orange for negative information content
  • - *
  • white to blue for increasing information content
  • - *
- * where information content is the log ratio - * - *
- *   log(profile match emission probability / residue background probability)
- * 
- * - * 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 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 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: - *
    - *
  • white for a gap
  • - *
  • red for an insertion
  • - *
  • orange for negative information content
  • - *
  • white to blue for increasing information content
  • - *
- * - * @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 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 getFrequencies() - { - return frequencies; - } - - protected void setFrequencies(Map 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 index 31bcadf..0000000 --- a/src/jalview/schemes/HmmerGlobalBackground.java +++ /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 index 2fe775c..0000000 --- a/src/jalview/schemes/HmmerLocalBackground.java +++ /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 freqs = new HashMap<>(); - - /* - * count symbols, excluding any HMM consensus sequences - */ - ResidueCount counts = new ResidueCount(); - List 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 index 7e607ab..0000000 --- a/src/jalview/util/FileUtils.java +++ /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 - * from that match the supplied regular expression - * pattern. Results may include from 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. - *

- * WARNING: because the whole directory tree below from is - * searched, this method may be slow if used for a high level directory, or may - * exit prematurely if security or other exceptions occur. - * - *

-   * Example: 
-   *   findMatchingPaths(Paths.get("C:/Program Files"), ".*/chimera.exe$")
-   * 
- * - * @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 findMatchingPaths(Path from, String pattern) - { - List 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 not - * supported by this method. - *

- * For example - * - *

-   *   findMatches("C:\\", "Program Files*/Chimera*/bin/{chimera,chimera.exe}"
-   * 
- * - * 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 findMatches(String root, String pattern) - { - List 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 results, Path from, - List patterns) - { - if (patterns.isEmpty()) - { - /* - * reached end of recursion with all components matched - */ - results.add(from.toString()); - return; - } - - String pattern = patterns.get(0); - try (DirectoryStream dirStream = Files.newDirectoryStream(from, - pattern)) - { - dirStream.forEach(p -> { - - /* - * matched a next level file - search below it - * (ignore non-directory non-leaf matches) - */ - List 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 index 66ae552..0000000 --- a/src/jalview/util/HMMProbabilityDistributionAnalyser.java +++ /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 sequences; - - HiddenMarkovModel hmm; - - // contains the raw data produced - List> raw = new ArrayList<>(); - - // contains binned data - Map 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()); - } - 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()); - 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 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 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 clanIndexes = new HashMap<>(); - ArrayList 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 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 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 index 59c0a9f..0000000 --- a/src/jalview/util/ProbabilityAnalyserKickstarter.java +++ /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 - 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 - 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 . - 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 . - 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 . 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 - 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 index d35025b..0000000 --- a/src/jalview/workers/InformationThread.java +++ /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 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 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 infos = new ArrayList<>(); - - /* - * annotation for alignment HMM consensus if present - */ - List 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 group argument is null - * for the whole alignment annotation, not null for a subgroup annotation. The - * updated annotation is added to the infos 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 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 index c661e2c..0000000 --- a/src/jalview/ws/DasSequenceFeatureFetcher.java +++ /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 . - * 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 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 selectedSources2, - boolean checkDbrefs, boolean promptFetchDbrefs) - { - this(oursequences, fsettings, selectedSources2, checkDbrefs, - promptFetchDbrefs, true); - } - - public DasSequenceFeatureFetcher(SequenceI[] oursequences, - FeatureSettings fsettings, List 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 srcobj = new ArrayList<>(); - ArrayList src = new ArrayList<>(); - List> ids = new ArrayList<>(); - List> idobj = new ArrayList<>(); - List> sqset = new ArrayList<>(); - for (jalviewSourceI _sr : selectedSources) - { - - Map slist = new HashMap<>(); - List idob = new ArrayList<>(); - List qset = new ArrayList<>(); - - for (SequenceI seq : sequences) - { - Object[] idset = nextSequence(_sr, seq); - if (idset != null) - { - List _idob = (List) idset[0]; - List _qset = (List) 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 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, Exception>> errors = new HashMap<>(); - Map, DasGFFAdapter>> results = new HashMap<>(); - if (!useJDASMultiThread) - { - Iterator sources = src.iterator(); - // iterate over each query for each source and do each one individually - for (List idl : ids) - { - String source = sources.next(); - FeaturesClient featuresc = new FeaturesClient( - sourceRegistry.getSessionHandler() - .getConnectionPropertyProviderFor(source)); - for (String id : idl) - { - List qid = Arrays.asList(new String[] { id }); - try - { - DasGFFAdapter dga = featuresc.fetchData(source, qid); - Map, DasGFFAdapter> ers = results.get(source); - if (ers == null) - { - results.put(source, - ers = new HashMap<>()); - } - ers.put(qid, dga); - } catch (Exception ex) - { - Map, 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> idset = ids.iterator(); - Iterator> idobjset = idobj.iterator(); - Iterator> 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 sequencemap, - jalviewSourceI jvsource, List ids, List idobj, - Map, DasGFFAdapter> results, - Map, Exception> errors) - { - Set 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 segments = gff.getSegments(); - List errorsegs = gff.getErrorSegments(); - List unkfeats = gff.getUnknownFeatures(); - List 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 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 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 ids = new ArrayList<>(); - List 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 index 55c50b2..0000000 --- a/src/jalview/ws/dbsources/das/api/DasSourceRegistryI.java +++ /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 . - * 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 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 resolveSourceNicknames(List 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 index bc3c8ea..0000000 --- a/src/jalview/ws/dbsources/das/api/jalviewSourceI.java +++ /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 . - * 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 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 index 84f6d4d..0000000 --- a/src/jalview/ws/dbsources/das/datamodel/DasSequenceSource.java +++ /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 . - * 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 toks = new ArrayList(), - src = new ArrayList(), acIds = new ArrayList(); - while (st.hasMoreTokens()) - { - String t; - toks.add(t = st.nextToken()); - acIds.add(t.replaceAll(":[0-9,]+", "")); - } - src.add(jsrc.getSourceURL()); - Map, DasSequenceAdapter>> resultset = new HashMap, DasSequenceAdapter>>(); - Map, Exception>> errors = new HashMap, 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 qset = Arrays.asList(new String[] { q }); - try - { - DasSequenceAdapter s = sq.fetchData(sr, qset); - Map, DasSequenceAdapter> dss = resultset.get(sr); - if (dss == null) - { - resultset.put(sr, - dss = new HashMap, DasSequenceAdapter>()); - } - dss.put(qset, s); - } catch (Exception x) - { - Map, Exception> ers = errors.get(sr); - if (ers == null) - { - errors.put(sr, - ers = new HashMap, 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 seqs = null; - for (Map.Entry, DasSequenceAdapter>> resset : resultset - .entrySet()) - { - for (Map.Entry, DasSequenceAdapter> result : resset - .getValue().entrySet()) - { - DasSequenceAdapter dasseqresp = result.getValue(); - List 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(); - // 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 srcs = new java.util.Vector(); - 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 index de7f380..0000000 --- a/src/jalview/ws/dbsources/das/datamodel/DasSourceRegistry.java +++ /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 . - * 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 dasSources = null; - - private Hashtable sourceNames = null; - - private Hashtable 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 getDASSources() - { - - return getDASSources(getDasRegistryURL(), this); - } - - /** - * query the given URL for DasSources. - * - * @param registryURL - * return sources from registryURL - */ - private static List 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 dassources = sources.getSOURCE(); - ArrayList dsrc = new ArrayList(); - HashMap latests = new HashMap(); - 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(); - } - } - - public void run() - { - getSources(); - } - - @Override - public List 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 appendLocalSources() - { - List srclist = new ArrayList(); - addLocalDasSources(); - sourceNames = new Hashtable(); - 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(); - } - 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 v = new VERSION(); - List cp = new ArrayList(); - 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 resolveSourceNicknames(List sources) - { - ArrayList resolved = new ArrayList(); - 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 authStash; - static - { - authStash = new Hashtable(); - - 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 index 07ba027..0000000 --- a/src/jalview/ws/dbsources/das/datamodel/JalviewSource.java +++ /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 . - * 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 labels = new ArrayList(); - 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 labels = new ArrayList(); - 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 getSequenceSourceProxies() - { - if (!isSequenceSource()) - { - return null; - } - ArrayList seqsources = new ArrayList(); - if (!local) - { - VERSION v = getVersion(); - Map latestc = new Hashtable(); - 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 /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 index 6b76170..0000000 --- a/src/jalview/ws/params/simple/DoubleParameter.java +++ /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 index aa8e7ad..0000000 --- a/src/jalview/ws/params/simple/FileParameter.java +++ /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 index af80181..0000000 --- a/src/jalview/ws/params/simple/LogarithmicParameter.java +++ /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 index 4fdb05e..0000000 --- a/src/jalview/ws/params/simple/RadioChoiceParameter.java +++ /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 . - * 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 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 index d3d899c..0000000 --- a/src/jalview/ws/params/simple/StringParameter.java +++ /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 possibleVals, List 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 index f2aef06..0000000 --- a/test/jalview/datamodel/HMMNodeTest.java +++ /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 index 7978da2..0000000 --- a/test/jalview/datamodel/HiddenMarkovModelTest.java +++ /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 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 index e3b7067..0000000 --- a/test/jalview/hmmer/HMMERTest.java +++ /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 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 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()); - 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 index 05cd493..0000000 --- a/test/jalview/hmmer/testProps.jvprops +++ /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 index cf74f55..0000000 --- a/test/jalview/io/HMMFileTest.java +++ /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 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 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 index 32231db..0000000 --- a/test/jalview/io/test_MADE1_hmm.txt +++ /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 index e1ad9f9..0000000 --- a/test/jalview/io/test_PKinase_hmm.txt +++ /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 index 0dcfa22..0000000 --- a/test/jalview/io/test_fn3_hmm.txt +++ /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 index 1cdee91..0000000 --- a/test/jalview/schemes/HmmerGlobalBackgroundTest.java +++ /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 index 5f2bb8f..0000000 --- a/test/jalview/schemes/HmmerLocalBackgroundTest.java +++ /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 index 07fd375..0000000 --- a/test/jalview/util/FileUtilsTest.java +++ /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 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 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 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 index 4dbf05e..0000000 --- a/test/jalview/util/HMMProbabilityDistributionAnalyserTest.java +++ /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 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 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> 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 map = analyser.binned; - List> 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 index 83d3452..0000000 --- a/test/jalview/util/Raw.csv +++ /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 index 74fbab0..0000000 --- a/test/jalview/util/test_Fams_for_probability_analysis +++ /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 index b70d42b..0000000 --- a/test/jalview/util/test_hmms_for_probability_analysis +++ /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 index f1dafcb..0000000 --- a/test/jalview/ws/seqfetcher/DasSequenceFetcher.java +++ /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 . - * 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."); - } - -} -- 1.7.10.2