/**\r
* Functions for cross-referencing sequence databases. user must first specify\r
* if cross-referencing from protein or dna (set dna==true)\r
- *\r
+ * \r
* @author JimP\r
- *\r
+ * \r
*/\r
public class CrossRef\r
{\r
/**\r
* get the DNA or protein references for a protein or dna sequence\r
- *\r
+ * \r
* @param dna\r
* @param rfs\r
* @return\r
/**\r
* Indirect references are references from other sequences from the dataset to\r
* any of the direct DBRefEntrys on the given sequences.\r
- *\r
+ * \r
* @param dna\r
* true if seqs are DNA seqs\r
* @param seqs\r
}\r
\r
/**\r
- *\r
+ * \r
* @param dna\r
* @param seqs\r
* @return\r
}\r
\r
/**\r
- *\r
+ * \r
* @param seqs\r
* @param dna\r
* @param source\r
* find references to lrfs in the cross-reference set of each sequence in\r
* dataset (that is not equal to sequenceI) Identifies matching DBRefEntry\r
* based on source and accession string only - Map and Version are nulled.\r
- *\r
+ * \r
* @param sequenceI\r
* @param lrfs\r
* @param dataset\r
/**\r
* search a given sequence dataset for references matching cross-references to\r
* the given sequence\r
- *\r
+ * \r
* @param sequenceI\r
* @param xrf\r
* @param dataset\r
* TODO: generalise to different protein classifications Search dataset for\r
* DBRefEntrys matching the given one (xrf) and add the associated sequence to\r
* rseq.\r
- *\r
+ * \r
* @param sequenceI\r
* @param xrf\r
* @param dataset\r
return false;\r
}\r
List<SequenceI> ds;\r
- synchronized (ds=dataset.getSequences())\r
+ synchronized (ds = dataset.getSequences())\r
{\r
- for (SequenceI nxt:ds)\r
- if (nxt != null)\r
- {\r
- if (nxt.getDatasetSequence() != null)\r
- {\r
- System.err\r
- .println("Implementation warning: getProducts passed a dataset alignment without dataset sequences in it!");\r
- }\r
- if (nxt != sequenceI && nxt != sequenceI.getDatasetSequence())\r
+ for (SequenceI nxt : ds)\r
+ if (nxt != null)\r
{\r
- // check if this is the correct sequence type\r
+ if (nxt.getDatasetSequence() != null)\r
+ {\r
+ System.err\r
+ .println("Implementation warning: getProducts passed a dataset alignment without dataset sequences in it!");\r
+ }\r
+ if (nxt != sequenceI && nxt != sequenceI.getDatasetSequence())\r
{\r
- typer[0] = nxt;\r
- boolean isDna = jalview.util.Comparison.isNucleotide(typer);\r
- if ((direct && isDna == dna) || (!direct && isDna != dna))\r
+ // check if this is the correct sequence type\r
{\r
- // skip this sequence because it is same molecule type\r
- continue;\r
+ typer[0] = nxt;\r
+ boolean isDna = jalview.util.Comparison.isNucleotide(typer);\r
+ if ((direct && isDna == dna) || (!direct && isDna != dna))\r
+ {\r
+ // skip this sequence because it is same molecule type\r
+ continue;\r
+ }\r
}\r
- }\r
\r
- // look for direct or indirect references in common\r
- DBRefEntry[] poss = nxt.getDBRef(), cands = null;\r
- if (direct)\r
- {\r
- cands = jalview.util.DBRefUtils.searchRefs(poss, xrf);\r
- }\r
- else\r
- {\r
- poss = CrossRef.findXDbRefs(dna, poss); //\r
- cands = jalview.util.DBRefUtils.searchRefs(poss, xrf);\r
- }\r
- if (cands != null)\r
- {\r
- if (!rseqs.contains(nxt))\r
+ // look for direct or indirect references in common\r
+ DBRefEntry[] poss = nxt.getDBRef(), cands = null;\r
+ if (direct)\r
+ {\r
+ cands = jalview.util.DBRefUtils.searchRefs(poss, xrf);\r
+ }\r
+ else\r
{\r
- rseqs.addElement(nxt);\r
- boolean foundmap = cf != null; // don't search if we aren't given\r
- // a codon map object\r
- for (int r = 0; foundmap && r < cands.length; r++)\r
+ poss = CrossRef.findXDbRefs(dna, poss); //\r
+ cands = jalview.util.DBRefUtils.searchRefs(poss, xrf);\r
+ }\r
+ if (cands != null)\r
+ {\r
+ if (!rseqs.contains(nxt))\r
{\r
- if (cands[r].hasMap())\r
+ rseqs.addElement(nxt);\r
+ boolean foundmap = cf != null; // don't search if we aren't\r
+ // given\r
+ // a codon map object\r
+ for (int r = 0; foundmap && r < cands.length; r++)\r
{\r
- if (cands[r].getMap().getTo() != null\r
- && cands[r].getMap().getMap().getFromRatio() != cands[r]\r
- .getMap().getMap().getToRatio())\r
+ if (cands[r].hasMap())\r
{\r
- foundmap = true;\r
- // get sense of map correct for adding to product alignment.\r
- if (dna)\r
- {\r
- // map is from dna seq to a protein product\r
- cf.addMap(sequenceI, nxt, cands[r].getMap().getMap());\r
- }\r
- else\r
+ if (cands[r].getMap().getTo() != null\r
+ && cands[r].getMap().getMap().getFromRatio() != cands[r]\r
+ .getMap().getMap().getToRatio())\r
{\r
- // map should be from protein seq to its coding dna\r
- cf.addMap(nxt, sequenceI, cands[r].getMap().getMap()\r
- .getInverse());\r
+ foundmap = true;\r
+ // get sense of map correct for adding to product\r
+ // alignment.\r
+ if (dna)\r
+ {\r
+ // map is from dna seq to a protein product\r
+ cf.addMap(sequenceI, nxt, cands[r].getMap()\r
+ .getMap());\r
+ }\r
+ else\r
+ {\r
+ // map should be from protein seq to its coding dna\r
+ cf.addMap(nxt, sequenceI, cands[r].getMap()\r
+ .getMap().getInverse());\r
+ }\r
}\r
}\r
}\r
+ // TODO: add mapping between sequences if necessary\r
+ found = true;\r
}\r
- // TODO: add mapping between sequences if necessary\r
- found = true;\r
}\r
- }\r
\r
+ }\r
}\r
- }\r
}\r
return found;\r
}\r
/**\r
* precalculate different products that can be found for seqs in dataset and\r
* return them.\r
- *\r
+ * \r
* @param dna\r
* @param seqs\r
* @param dataset\r