/**
* Base class for Ensembl sequence fetchers
*
+ * @see http://rest.ensembl.org/documentation/info/sequence_id
* @author gmcarstairs
*/
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);
}
/**
* 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);
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);
seq = seq.getDatasetSequence();
}
- EnsemblXref xrefFetcher = new EnsemblXref();
+ EnsemblXref xrefFetcher = new EnsemblXref(getDomain());
List<DBRefEntry> xrefs = xrefFetcher.getCrossReferences(seq.getName(),
getCrossReferenceDatabases());
for (DBRefEntry xref : xrefs)
*/
protected MapList mapCdsToProtein(SequenceI dnaSeq, SequenceI proteinSeq)
{
- List<int[]> ranges = new ArrayList<int[]>(50);
-
- int mappedDnaLength = getCdsRanges(dnaSeq, ranges);
+ List<int[]> ranges = getCdsRanges(dnaSeq);
+ int mappedDnaLength = MappingUtils.getLength(ranges);
int proteinLength = proteinSeq.getLength();
int proteinEnd = proteinLength;
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)
}
/**
- * 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<int[]> ranges)
+ protected List<int[]> getCdsRanges(SequenceI dnaSeq)
{
+ List<int[]> result = new ArrayList<int[]>();
SequenceFeature[] sfs = dnaSeq.getSequenceFeatures();
if (sfs == null)
{
- return 0;
+ return result;
}
SequenceOntologyI so = SequenceOntologyFactory.getInstance();
- int mappedDnaLength = 0;
for (SequenceFeature sf : sfs)
{
/*
*/
int begin = sf.getBegin();
int end = sf.getEnd();
- if (ranges.isEmpty())
+ if (result.isEmpty())
{
begin += phase;
if (begin > end)
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;
}
/**
* 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));