X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fensembl%2FEnsemblSeqProxy.java;h=a878784ecb9feea0be5fe306d56a8b9524c47ce6;hb=b8058f3f849f44740a695c83e96bdca3a197af5c;hp=869a7028f1d2c8f5da9462a36877ad202359d1de;hpb=3aa60eb1704441d7db522c13d6b45ab05cb43e2b;p=jalview.git diff --git a/src/jalview/ext/ensembl/EnsemblSeqProxy.java b/src/jalview/ext/ensembl/EnsemblSeqProxy.java index 869a702..a878784 100644 --- a/src/jalview/ext/ensembl/EnsemblSeqProxy.java +++ b/src/jalview/ext/ensembl/EnsemblSeqProxy.java @@ -33,6 +33,7 @@ import java.util.Map.Entry; /** * Base class for Ensembl sequence fetchers * + * @see http://rest.ensembl.org/documentation/info/sequence_id * @author gmcarstairs */ public abstract class EnsemblSeqProxy extends EnsemblRestClient @@ -112,10 +113,19 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient } /** - * Constructor + * Default constructor (to use rest.ensembl.org) */ public EnsemblSeqProxy() { + super(); + } + + /** + * Constructor given the target domain to fetch data from + */ + public EnsemblSeqProxy(String d) + { + super(d); } /** @@ -201,7 +211,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient * get 'dummy' genomic sequence with exon, cds and variation features */ SequenceI genomicSequence = null; - EnsemblFeatures gffFetcher = new EnsemblFeatures(); + EnsemblFeatures gffFetcher = new EnsemblFeatures(getDomain()); EnsemblFeatureType[] features = getFeaturesToFetch(); AlignmentI geneFeatures = gffFetcher.getSequenceRecords(accId, features); @@ -251,7 +261,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient String accId = querySeq.getName(); try { - AlignmentI protein = new EnsemblProtein().getSequenceRecords(accId); + AlignmentI protein = new EnsemblProtein(getDomain()) + .getSequenceRecords(accId); if (protein == null || protein.getHeight() == 0) { System.out.println("Failed to retrieve protein for " + accId); @@ -302,7 +313,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient seq = seq.getDatasetSequence(); } - EnsemblXref xrefFetcher = new EnsemblXref(); + EnsemblXref xrefFetcher = new EnsemblXref(getDomain()); List xrefs = xrefFetcher.getCrossReferences(seq.getName(), getCrossReferenceDatabases()); for (DBRefEntry xref : xrefs) @@ -338,9 +349,8 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient */ protected MapList mapCdsToProtein(SequenceI dnaSeq, SequenceI proteinSeq) { - List ranges = new ArrayList(50); - - int mappedDnaLength = getCdsRanges(dnaSeq, ranges); + List ranges = getCdsRanges(dnaSeq); + int mappedDnaLength = MappingUtils.getLength(ranges); int proteinLength = proteinSeq.getLength(); int proteinEnd = proteinLength; @@ -363,7 +373,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient int codesForResidues = mappedDnaLength / 3; if (codesForResidues == (proteinLength + 1)) { - MappingUtils.unmapStopCodon(ranges, mappedDnaLength); + // assuming extra codon is for STOP and not in peptide codesForResidues--; } if (codesForResidues == proteinLength) @@ -375,26 +385,24 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient } /** - * Adds CDS ranges to the ranges list, and returns the total length mapped - * from. + * Returns a list of CDS ranges found. * * No need to worry about reverse strand dna, here since the retrieved * sequence is as transcribed (reverse complement for reverse strand), i.e in * the same sense as the peptide. * * @param dnaSeq - * @param ranges * @return */ - protected int getCdsRanges(SequenceI dnaSeq, List ranges) + protected List getCdsRanges(SequenceI dnaSeq) { + List result = new ArrayList(); SequenceFeature[] sfs = dnaSeq.getSequenceFeatures(); if (sfs == null) { - return 0; + return result; } SequenceOntologyI so = SequenceOntologyFactory.getInstance(); - int mappedDnaLength = 0; for (SequenceFeature sf : sfs) { /* @@ -415,7 +423,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient */ int begin = sf.getBegin(); int end = sf.getEnd(); - if (ranges.isEmpty()) + if (result.isEmpty()) { begin += phase; if (begin > end) @@ -423,11 +431,10 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient continue; // shouldn't happen? } } - ranges.add(new int[] { begin, end }); - mappedDnaLength += Math.abs(end - begin) + 1; + result.add(new int[] { begin, end }); } } - return mappedDnaLength; + return result; } /** @@ -514,7 +521,7 @@ public abstract class EnsemblSeqProxy extends EnsemblRestClient * multiple ids go in the POST body instead */ StringBuffer urlstring = new StringBuffer(128); - urlstring.append(SEQUENCE_ID_URL); + urlstring.append(getDomain() + "/sequence/id"); if (ids.size() == 1) { urlstring.append("/").append(ids.get(0));