\r
SequenceFetcher sfetcher;\r
\r
+ private SequenceI[] alseqs;\r
+\r
public DBRefFetcher()\r
{\r
}\r
public DBRefFetcher(SequenceI[] seqs, AlignFrame af, String[] sources)\r
{\r
this.af = af;\r
+ alseqs = new SequenceI[seqs.length];\r
SequenceI[] ds = new SequenceI[seqs.length];\r
for (int i = 0; i < seqs.length; i++)\r
{\r
+ alseqs[i] = seqs[i];\r
if (seqs[i].getDatasetSequence() != null)\r
ds[i] = seqs[i].getDatasetSequence();\r
else\r
DBRefEntry[] entryRefs = jalview.util.DBRefUtils.selectRefs(entry\r
.getDBRef(), new String[]\r
{ dbSource });\r
+ if (entryRefs==null) {\r
+ System.err.println("Dud dbSource string ? no entryrefs selected for "+dbSource+ " on "+entry.getName());\r
+ continue;\r
+ }\r
for (int j = 0; j < entryRefs.length; j++)\r
- {\r
- String accessionId = entryRefs[j].getAccessionId(); // .getAccession().elementAt(j).toString();\r
- // match up on accessionId\r
- if (seqRefs.containsKey(accessionId.toUpperCase()))\r
{\r
- Vector seqs = (Vector) seqRefs.get(accessionId);\r
- for (int jj = 0; jj < seqs.size(); jj++)\r
+ String accessionId = entryRefs[j].getAccessionId(); // .getAccession().elementAt(j).toString();\r
+ // match up on accessionId\r
+ if (seqRefs.containsKey(accessionId.toUpperCase()))\r
{\r
- sequence = (SequenceI) seqs.elementAt(jj);\r
- if (!sequenceMatches.contains(sequence))\r
+ Vector seqs = (Vector) seqRefs.get(accessionId);\r
+ for (int jj = 0; jj < seqs.size(); jj++)\r
{\r
- sequenceMatches.addElement(sequence);\r
+ sequence = (SequenceI) seqs.elementAt(jj);\r
+ if (!sequenceMatches.contains(sequence))\r
+ {\r
+ sequenceMatches.addElement(sequence);\r
+ }\r
}\r
}\r
}\r
- }\r
- if (sequenceMatches.size() == 0)\r
- {\r
- // failed to match directly on accessionId==query so just compare all\r
- // sequences to entry\r
+ if (sequenceMatches.size() == 0)\r
+ {\r
+ // failed to match directly on accessionId==query so just compare all\r
+ // sequences to entry\r
Enumeration e = seqRefs.keys();\r
while (e.hasMoreElements())\r
{\r
// absStart+sequence.getStart()+entrySeq.length()-1},\r
// new int[] { entry.getStart(), entry.getEnd() }, 1, 1);\r
// relocate local features for updated start\r
- if (updateRefFrame && sequence.getSequenceFeatures() != null)\r
- {\r
+ if (updateRefFrame) {\r
+ if (sequence.getSequenceFeatures() != null)\r
+ {\r
SequenceFeature[] sf = sequence.getSequenceFeatures();\r
int start = sequence.getStart();\r
int end = sequence.getEnd();\r
sf[sfi].setEnd(sf[sfi].getEnd() + startShift);\r
}\r
}\r
+ }\r
}\r
}\r
\r
// finally, update local sequence reference frame if we're allowed\r
sequence.setStart(absStart);\r
sequence.setEnd(absEnd);\r
+ // search for alignment sequences to update coordinate frame for\r
+ for (int alsq = 0; alsq<alseqs.length; alsq++)\r
+ {\r
+ if (alseqs[alsq].getDatasetSequence()==sequence)\r
+ {\r
+ String ngAlsq = AlignSeq.extractGaps("-. ",\r
+ alseqs[alsq].getSequenceAsString()).toUpperCase();\r
+ int oldstrt = alseqs[alsq].getStart();\r
+ alseqs[alsq].setStart(sequence.getSequenceAsString().toUpperCase().indexOf(ngAlsq)+sequence.getStart());\r
+ if (oldstrt != alseqs[alsq].getStart()) {\r
+ alseqs[alsq].setEnd(ngAlsq.length()+alseqs[alsq].getStart()-1);\r
+ }\r
+ }\r
+ }\r
+ // TODO: search for all other references to this dataset sequence, and update start/end\r
+ // TODO: update all AlCodonMappings which involve this alignment sequence (e.g. Q30167 cdna translation from exon2 product (vamsas demo)\r
}\r
// and remove it from the rest\r
// TODO: decide if we should remove annotated sequence from set\r