X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FCrossRef.java;h=83317c19ece9cda1cd7f1b323b2e304f38593883;hb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;hp=eed2d7e4ab4edc9746b28b11d10bf6ec509c5dd6;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/jalview/analysis/CrossRef.java b/src/jalview/analysis/CrossRef.java index eed2d7e..83317c1 100644 --- a/src/jalview/analysis/CrossRef.java +++ b/src/jalview/analysis/CrossRef.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) - * Copyright (C) $$Year-Rel$$ The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -27,11 +27,11 @@ import jalview.datamodel.DBRefEntry; import jalview.datamodel.DBRefSource; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; +import jalview.util.DBRefUtils; import jalview.ws.SequenceFetcher; import jalview.ws.seqfetcher.ASequenceFetcher; -import java.util.Enumeration; -import java.util.Hashtable; +import java.util.ArrayList; import java.util.List; import java.util.Vector; @@ -45,39 +45,22 @@ import java.util.Vector; public class CrossRef { /** - * get the DNA or protein references for a protein or dna sequence + * Select just the DNA or protein references for a protein or dna sequence * - * @param dna - * @param rfs + * @param fromDna + * if true, select references from DNA (i.e. Protein databases), else + * DNA database references + * @param refs + * a set of references to select from * @return */ - public static DBRefEntry[] findXDbRefs(boolean dna, DBRefEntry[] rfs) + public static DBRefEntry[] findXDbRefs(boolean fromDna, DBRefEntry[] refs) { - if (dna) - { - rfs = jalview.util.DBRefUtils.selectRefs(rfs, DBRefSource.PROTEINDBS); - } - else - { - rfs = jalview.util.DBRefUtils.selectRefs(rfs, - DBRefSource.DNACODINGDBS); // could attempt to find other cross - // refs and return here - ie PDB xrefs - // (not dna, not protein seq) - } - return rfs; - } - - public static Hashtable classifyDbRefs(DBRefEntry[] rfs) - { - Hashtable classes = new Hashtable(); - classes.put(DBRefSource.PROTEINDBS, - jalview.util.DBRefUtils.selectRefs(rfs, DBRefSource.PROTEINDBS)); - classes.put(DBRefSource.DNACODINGDBS, jalview.util.DBRefUtils - .selectRefs(rfs, DBRefSource.DNACODINGDBS)); - classes.put(DBRefSource.DOMAINDBS, - jalview.util.DBRefUtils.selectRefs(rfs, DBRefSource.DOMAINDBS)); - // classes.put(OTHER, ) - return classes; + return DBRefUtils.selectRefs(refs, fromDna ? DBRefSource.PROTEINDBS + : DBRefSource.DNACODINGDBS); + // could attempt to find other cross + // refs here - ie PDB xrefs + // (not dna, not protein seq) } /** @@ -104,12 +87,11 @@ public class CrossRef SequenceI[] seqs, AlignmentI dataset) { String[] dbrefs = null; - Vector refs = new Vector(); + List refs = new ArrayList(); for (int s = 0; s < seqs.length; s++) { if (seqs[s] != null) { - SequenceI dss = seqs[s]; while (dss.getDatasetSequence() != null) { @@ -120,7 +102,7 @@ public class CrossRef { if (!refs.contains(rfs[r].getSource())) { - refs.addElement(rfs[r].getSource()); + refs.add(rfs[r].getSource()); } } if (dataset != null) @@ -128,19 +110,17 @@ public class CrossRef // search for references to this sequence's direct references. DBRefEntry[] lrfs = CrossRef .findXDbRefs(!dna, seqs[s].getDBRef()); - Vector rseqs = new Vector(); + List rseqs = new ArrayList(); CrossRef.searchDatasetXrefs(seqs[s], !dna, lrfs, dataset, rseqs, null); // don't need to specify codon frame for mapping here - Enumeration lr = rseqs.elements(); - while (lr.hasMoreElements()) + for (SequenceI rs : rseqs) { - SequenceI rs = (SequenceI) lr.nextElement(); - DBRefEntry[] xrs = findXDbRefs(dna, rs.getDBRef()); + DBRefEntry[] xrs = findXDbRefs(dna, rs.getDBRef()); // not used?? for (int r = 0; rfs != null && r < rfs.length; r++) { if (!refs.contains(rfs[r].getSource())) { - refs.addElement(rfs[r].getSource()); + refs.add(rfs[r].getSource()); } } } @@ -150,7 +130,7 @@ public class CrossRef if (refs.size() > 0) { dbrefs = new String[refs.size()]; - refs.copyInto(dbrefs); + refs.toArray(dbrefs); } return dbrefs; } @@ -228,7 +208,7 @@ public class CrossRef public static Alignment findXrefSequences(SequenceI[] seqs, boolean dna, String source, AlignmentI dataset) { - Vector rseqs = new Vector(); + List rseqs = new ArrayList(); Alignment ral = null; AlignedCodonFrame cf = new AlignedCodonFrame(); // nominal width for (int s = 0; s < seqs.length; s++) @@ -243,14 +223,8 @@ public class CrossRef if ((xrfs == null || xrfs.length == 0) && dataset != null) { System.out.println("Attempting to find ds Xrefs refs."); - DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seqs[s].getDBRef()); // less - // ambiguous - // would - // be a - // 'find - // primary - // dbRefEntry' - // method. + DBRefEntry[] lrfs = CrossRef.findXDbRefs(!dna, seqs[s].getDBRef()); + // less ambiguous would be a 'find primary dbRefEntry' method. // filter for desired source xref here found = CrossRef.searchDatasetXrefs(dss, !dna, lrfs, dataset, rseqs, cf); @@ -265,8 +239,8 @@ public class CrossRef { if (xrfs[r].getMap().getTo() != null) { - Sequence rsq = new Sequence(xrfs[r].getMap().getTo()); - rseqs.addElement(rsq); + SequenceI rsq = new Sequence(xrfs[r].getMap().getTo()); + rseqs.add(rsq); if (xrfs[r].getMap().getMap().getFromRatio() != xrfs[r] .getMap().getMap().getToRatio()) { @@ -293,7 +267,7 @@ public class CrossRef { found |= searchDataset(dss, xrfs[r], dataset, rseqs, cf); // ,false,!dna); if (found) - { + { xrfs[r] = null; // we've recovered seqs for this one. } } @@ -401,7 +375,7 @@ public class CrossRef } } retrieved[rs].updatePDBIds(); - rseqs.addElement(retrieved[rs]); + rseqs.add(retrieved[rs]); } } } @@ -411,7 +385,7 @@ public class CrossRef if (rseqs.size() > 0) { SequenceI[] rsqs = new SequenceI[rseqs.size()]; - rseqs.copyInto(rsqs); + rseqs.toArray(rsqs); ral = new Alignment(rsqs); if (cf != null && cf.getProtMappings() != null) { @@ -433,8 +407,8 @@ public class CrossRef * @return true if matches were found. */ private static boolean searchDatasetXrefs(SequenceI sequenceI, - boolean dna, DBRefEntry[] lrfs, AlignmentI dataset, Vector rseqs, - AlignedCodonFrame cf) + boolean dna, DBRefEntry[] lrfs, AlignmentI dataset, + List rseqs, AlignedCodonFrame cf) { boolean found = false; if (lrfs == null) @@ -465,7 +439,7 @@ public class CrossRef * @return true if one or more unique sequences were found and added */ public static boolean searchDataset(SequenceI sequenceI, DBRefEntry xrf, - AlignmentI dataset, Vector rseqs, AlignedCodonFrame cf) + AlignmentI dataset, List rseqs, AlignedCodonFrame cf) { return searchDataset(sequenceI, xrf, dataset, rseqs, cf, true, false); } @@ -486,7 +460,7 @@ public class CrossRef * @return true if relationship found and sequence added. */ public static boolean searchDataset(SequenceI sequenceI, DBRefEntry xrf, - AlignmentI dataset, Vector rseqs, AlignedCodonFrame cf, + AlignmentI dataset, List rseqs, AlignedCodonFrame cf, boolean direct, boolean dna) { boolean found = false; @@ -540,10 +514,9 @@ public class CrossRef { if (!rseqs.contains(nxt)) { - rseqs.addElement(nxt); - boolean foundmap = cf != null; // don't search if we aren't - // given - // a codon map object + rseqs.add(nxt); + boolean foundmap = cf != null; + // don't search if we aren't given a codon map object for (int r = 0; foundmap && r < cands.length; r++) { if (cands[r].hasMap()) @@ -583,49 +556,6 @@ public class CrossRef } /** - * Returns true if either sequence has a cross-reference to the other - * - * @param seq1 - * @param seq2 - * @return - */ - public static boolean haveCrossRef(SequenceI seq1, SequenceI seq2) - { - return hasCrossRef(seq1, seq2) || hasCrossRef(seq2, seq1); - } - - /** - * Returns true if seq1 has a cross-reference to seq2. Currently this assumes - * that sequence name is structured as Source|AccessId. - * - * @param seq1 - * @param seq2 - * @return - */ - public static boolean hasCrossRef(SequenceI seq1, SequenceI seq2) - { - if (seq1 == null || seq2 == null) - { - return false; - } - String name = seq2.getName(); - final DBRefEntry[] xrefs = seq1.getDBRef(); - if (xrefs != null) - { - for (DBRefEntry xref : xrefs) - { - String xrefName = xref.getSource() + "|" + xref.getAccessionId(); - // case-insensitive test, consistent with DBRefEntry.equalRef() - if (xrefName.equalsIgnoreCase(name)) - { - return true; - } - } - } - return false; - } - - /** * precalculate different products that can be found for seqs in dataset and * return them. *