return ((source != null) ? source : "") + ":"
+ ((accessionId != null) ? accessionId : "");
}
+
+ public String toString()
+ {
+ return getSrcAccString();
+ }
}
/**
* UNIPROT Entry Name
*/
- public static String UP_NAME = "UNIPROT_NAME";
+ public static String UP_NAME = "UNIPROT_NAME".toUpperCase();
/**
* Uniprot Knowledgebase/TrEMBL as served from EMBL protein products.
*/
- public static final String UNIPROTKB = "UniProtKB/TrEMBL";
+ public static final String UNIPROTKB = "UniProtKB/TrEMBL".toUpperCase();
+
+ public static final String EMBLCDSProduct = "EMBLCDSProtein"
+ .toUpperCase();
/**
* PDB Entry Code
/**
* GeneDB ID
*/
- public static final String GENEDB = "GeneDB";
+ public static final String GENEDB = "GeneDB".toUpperCase();
/**
* List of databases whose sequences might have coding regions annotated
{ EMBLCDS, GENEDB };
public static final String[] PROTEINDBS =
- { UNIPROT, PDB, UNIPROTKB };
+ { UNIPROT, PDB, UNIPROTKB, EMBLCDSProduct };
public static final String[] PROTEINSEQ =
- { UNIPROT, UNIPROTKB };
+ { UNIPROT, UNIPROTKB, EMBLCDSProduct };
public static final String[] PROTEINSTR =
{ PDB };
}
}
Sequence product = null;
+ DBRefEntry protEMBLCDS = null;
exon = adjustForPrStart(prstart, exon);
-
+ boolean noProteinDbref=true;
+
if (prseq != null && prname != null && prid != null)
{
// extract proteins.
if (product != null)
{
product.addDBRef(pcdnaref);
- }
-
+ protEMBLCDS = new DBRefEntry(pcdnaref);
+ protEMBLCDS.setSource(DBRefSource.EMBLCDSProduct);
+ product.addDBRef(protEMBLCDS);
+
+ }
+
}
}
// add cds feature to dna seq - this may include the stop codon
+ ref.getAccessionId());
}
}
+ noProteinDbref = false;
}
if (product != null)
{
}
dna.addDBRef(ref);
}
+ if (noProteinDbref && product != null)
+ {
+ // add protein coding reference to dna sequence so xref matches
+ if (protEMBLCDS == null)
+ {
+ protEMBLCDS = new DBRefEntry();
+ protEMBLCDS.setAccessionId(prid);
+ protEMBLCDS.setSource(DBRefSource.EMBLCDSProduct);
+ protEMBLCDS.setVersion(getVersion());
+ protEMBLCDS
+ .setMap(new Mapping(product, map.getMap().getInverse()));
+ }
+ product.addDBRef(protEMBLCDS);
+
+ // Add converse mapping reference
+ if (map != null)
+ {
+ Mapping pmap = new Mapping(product, protEMBLCDS.getMap().getMap()
+ .getInverse());
+ DBRefEntry ncMap = new DBRefEntry(protEMBLCDS);
+ ncMap.setMap(pmap);
+ if (map.getTo() != null)
+ {
+ dna.addDBRef(ncMap);
+ }
+ }
+ }
}
}
*/
package jalview.util;
-import java.util.*;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.PDBEntry;
+import jalview.datamodel.SequenceI;
-import jalview.datamodel.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Vector;
public class DBRefUtils
{
{
return dbrefs;
}
- Hashtable srcs = new Hashtable();
- Vector res = new Vector();
+ Map<String, Integer> srcs = new HashMap<String, Integer>();
+ ArrayList<DBRefEntry> res = new ArrayList<DBRefEntry>();
for (int i = 0; i < sources.length; i++)
{
{
if (srcs.containsKey(dbrefs[i].getSource()))
{
- res.addElement(dbrefs[i]);
+ res.add(dbrefs[i]);
}
}
if (res.size() > 0)
{
DBRefEntry[] reply = new DBRefEntry[res.size()];
- for (int i = 0; i < res.size(); i++)
- {
- reply[i] = (DBRefEntry) res.elementAt(i);
- }
- return reply;
+ return res.toArray(reply);
}
res = null;
// there are probable memory leaks in the hashtable!
DbRefComp comparator)
{
if (ref == null || entry == null)
+ {
return null;
+ }
Vector rfs = new Vector();
for (int i = 0; i < ref.length; i++)
{
{
if ((refa.getMap() == null && refb.getMap() == null)
|| (refa.getMap() != null && refb.getMap() != null))
+ {
if ((refb.getMap().getMap() == null && refa.getMap().getMap() == null)
|| (refb.getMap().getMap() != null
&& refa.getMap().getMap() != null && refb
{
return true;
}
+ }
}
}
return false;
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
+ jalview.bin.Cache.initLogger();
}
/**
{
String retrievalId = "CAA23748"; // "V00488";
DbSourceProxy embl = new SequenceFetcher().getSourceProxy(DBRefSource.EMBL).get(0);
- assertNotNull("Couldn't find the EMBL retrieval client",embl);
+ assertNotNull("Couldn't find the EMBL retrieval client", embl);
+ verifyProteinNucleotideXref(retrievalId, embl);
+ }
+
+ @Test
+ public void testEmblCDSUniprotProductRecovery() throws Exception
+ {
+ String retrievalId = "AAH29712";
+ DbSourceProxy embl = new SequenceFetcher().getSourceProxy(
+ DBRefSource.EMBLCDS).get(0);
+ assertNotNull("Couldn't find the EMBL retrieval client", embl);
+ verifyProteinNucleotideXref(retrievalId, embl);
+ }
+
+ private void verifyProteinNucleotideXref(String retrievalId,
+ DbSourceProxy embl) throws Exception
+ {
AlignmentI alsq = embl.getSequenceRecords(retrievalId);
assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq);
assertEquals("Didn't retrieve right number of records", 1, alsq.getHeight());
DBRefEntry[] dr = DBRefUtils.selectRefs(alsq.getSequenceAt(0).getDBRef(), DBRefSource.PROTEINSEQ);
assertNotNull(dr);
assertEquals("Expected a single Uniprot cross reference", 1, dr.length);
+ assertEquals("Expected cross refernce map to be one amino acid", dr[0]
+ .getMap().getMappedWidth(), 1);
+ assertEquals("Expected local refernce map to be 3 nucleotides", dr[0]
+ .getMap().getWidth(), 3);
AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset());
assertNotNull(
"Couldn't recover cross reference sequence from dataset. Was it ever added ?",