* find sequence's direct (dna-to-dna, peptide-to-peptide) xrefs
*/
DBRefEntry[] lrfs = DBRefUtils.selectDbRefs(fromDna, seq.getDBRefs());
- List<SequenceI> rseqs = new ArrayList<SequenceI>();
+ List<SequenceI> foundSeqs = new ArrayList<SequenceI>();
/*
* find sequences in the alignment which xref one of these DBRefs
* i.e. is xref-ed to a common sequence identifier
*/
- searchDatasetXrefs(fromDna, seq, lrfs, rseqs, null);
+ searchDatasetXrefs(fromDna, seq, lrfs, foundSeqs, null);
/*
* add those sequences' (dna-to-peptide or peptide-to-dna) dbref sources
*/
- for (SequenceI rs : rseqs)
+ for (SequenceI rs : foundSeqs)
{
DBRefEntry[] xrs = DBRefUtils
.selectDbRefs(!fromDna, rs.getDBRefs());
* context was searching from Protein sequences
* @param sequenceI
* @param lrfs
- * @param rseqs
+ * @param foundSeqs
* @return true if matches were found.
*/
private boolean searchDatasetXrefs(boolean fromDna, SequenceI sequenceI,
- DBRefEntry[] lrfs, List<SequenceI> rseqs, AlignedCodonFrame cf)
+ DBRefEntry[] lrfs, List<SequenceI> foundSeqs, AlignedCodonFrame cf)
{
boolean found = false;
if (lrfs == null)
// add in wildcards
xref.setVersion(null);
xref.setMap(null);
- found |= searchDataset(fromDna, sequenceI, xref, rseqs, cf, false);
+ found |= searchDataset(fromDna, sequenceI, xref, foundSeqs, cf, false);
}
return found;
}
* @param fromDna
* true if context was searching for refs *from* dna sequence, false
* if context was searching for refs *from* protein sequence
- * @param sequenceI
+ * @param fromSeq
* a sequence to ignore (start point of search)
* @param xrf
* a cross-reference to try to match
- * @param rseqs
+ * @param foundSeqs
* result list to add to
- * @param cf
+ * @param mappings
* a set of sequence mappings to add to
* @param direct
* - indicates the type of relationship between returned sequences,
* </ul>
* @return true if relationship found and sequence added.
*/
- boolean searchDataset(boolean fromDna, SequenceI sequenceI,
- DBRefEntry xrf, List<SequenceI> rseqs, AlignedCodonFrame cf,
+ boolean searchDataset(boolean fromDna, SequenceI fromSeq,
+ DBRefEntry xrf, List<SequenceI> foundSeqs, AlignedCodonFrame mappings,
boolean direct)
{
boolean found = false;
+ nxt.getDatasetSequence().getDisplayId(true)
+ ")");
}
- if (nxt == sequenceI || nxt == sequenceI.getDatasetSequence())
+ if (nxt == fromSeq || nxt == fromSeq.getDatasetSequence())
{
continue;
}
// }
if (!cands.isEmpty())
{
- if (!rseqs.contains(nxt))
+ if (!foundSeqs.contains(nxt))
{
found = true;
- rseqs.add(nxt);
- if (cf != null)
+ foundSeqs.add(nxt);
+ if (mappings != null && !direct)
{
- // don't search if we aren't given a codon map object
+ /*
+ * if the matched sequence has mapped dbrefs to
+ * protein product / cdna, add equivalent mappings to
+ * our source sequence
+ */
for (DBRefEntry candidate : cands)
{
Mapping mapping = candidate.getMap();
if (mapping.getTo() != null
&& map.getFromRatio() != map.getToRatio())
{
- // get sense of map correct for adding to product
- // alignment.
- if (fromDna)
+ /*
+ * add a mapping, as from dna to peptide sequence
+ */
+ if (map.getFromRatio() == 3)
{
- // map is from dna seq to a protein product
- cf.addMap(sequenceI, nxt, map);
+ mappings.addMap(nxt, fromSeq, map);
}
else
{
- // map should be from protein seq to its coding dna
- cf.addMap(nxt, sequenceI, map.getInverse());
+ mappings.addMap(nxt, fromSeq, map.getInverse());
}
}
}
}
}
- // TODO: add mapping between sequences if necessary
}
}
}