*/
package jalview.ext.ensembl;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import org.json.simple.parser.ParseException;
+
import jalview.analysis.AlignmentUtils;
import jalview.analysis.Dna;
import jalview.bin.Cache;
import jalview.util.DBRefUtils;
import jalview.util.IntRangeComparator;
import jalview.util.MapList;
-import jalview.util.Platform;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-
-import org.json.simple.parser.ParseException;
/**
* Base class for Ensembl sequence fetchers
* fetch and transfer genomic sequence features,
* fetch protein product and add as cross-reference
*/
- for (String accId : allIds)
+ for (int i = 0, n = allIds.size(); i < n; i++)
{
- addFeaturesAndProduct(accId, alignment);
+ addFeaturesAndProduct(allIds.get(i), alignment);
}
- for (SequenceI seq : alignment.getSequences())
+ List<SequenceI> seqs = alignment.getSequences();
+ for (int i = 0, n = seqs.size(); i < n; i++)
{
- getCrossReferences(seq);
+ getCrossReferences(seqs.get(i));
}
return alignment;
*/
SequenceI genomicSequence = null;
EnsemblFeatures gffFetcher = new EnsemblFeatures(getDomain());
- EnsemblFeatureType[] features = getFeaturesToFetch();
+ EnsemblFeatureType[] features = getFeaturesToFetch();
- Platform.timeCheck("ESP.getsequencerec1", Platform.TIME_MARK);
-
+ // Platform.timeCheck("ESP.getsequencerec1", Platform.TIME_MARK);
AlignmentI geneFeatures = gffFetcher.getSequenceRecords(accId,
features);
genomicSequence = geneFeatures.getSequenceAt(0);
}
- Platform.timeCheck("ESP.getsequencerec2", Platform.TIME_MARK);
+ // Platform.timeCheck("ESP.getsequencerec2", Platform.TIME_MARK);
if (genomicSequence != null)
{
* transfer features to the query sequence
*/
SequenceI querySeq = alignment.findName(accId, true);
-
- Platform.timeCheck("ESP.transferfeat", Platform.TIME_MARK);
-
if (transferFeatures(accId, genomicSequence, querySeq))
{
* fetch and map protein product, and add it as a cross-reference
* of the retrieved sequence
*/
- Platform.timeCheck("ESP.addprotein", Platform.TIME_MARK);
+ // Platform.timeCheck("ESP.transferFeatures", Platform.TIME_MARK);
addProteinProduct(querySeq);
}
}
System.err.println(
"Error transferring Ensembl features: " + e.getMessage());
}
- Platform.timeCheck("ESP.addfeat done", Platform.TIME_MARK);
+ // Platform.timeCheck("ESP.addfeat done", Platform.TIME_MARK);
}
/**
* copy exon features to protein, compute peptide variants from dna
* variants and add as features on the protein sequence ta-da
*/
- AlignmentUtils.computeProteinFeatures(querySeq, proteinSeq,
- mapList);
+ // JAL-3187 render on the fly instead
+ // AlignmentUtils.computeProteinFeatures(querySeq, proteinSeq, mapList);
}
} catch (Exception e)
{
protected void getCrossReferences(SequenceI seq)
{
- Platform.timeCheck("ESP. getdataseq ", Platform.TIME_MARK);
+ // Platform.timeCheck("ESP. getdataseq ", Platform.TIME_MARK);
while (seq.getDatasetSequence() != null)
seq = seq.getDatasetSequence();
}
- Platform.timeCheck("ESP. getxref ", Platform.TIME_MARK);
+ // Platform.timeCheck("ESP. getxref ", Platform.TIME_MARK);
EnsemblXref xrefFetcher = new EnsemblXref(getDomain(), getDbSource(),
getEnsemblDataVersion());
for (int i = 0, n = xrefs.size(); i < n; i++)
{
- Platform.timeCheck("ESP. getxref + " + (i) + "/" + n, Platform.TIME_MARK);
+// Platform.timeCheck("ESP. getxref + " + (i) + "/" + n, Platform.TIME_MARK);
// BH 2019.01.25 this next method was taking 174 ms PER addition for a 266-reference example.
// DBRefUtils.ensurePrimaries(seq)
// was at the end of seq.addDBRef, so executed after ever addition!
seq.addDBRef(xrefs.get(i));
}
- System.out.println("primaries are " + seq.getPrimaryDBRefs().toString());
+// System.out.println("primaries are " + seq.getPrimaryDBRefs().toString());
/*
* and add a reference to itself
*/
- Platform.timeCheck("ESP. getxref self ", Platform.TIME_MARK);
+// Platform.timeCheck("ESP. getxref self ", Platform.TIME_MARK);
DBRefEntry self = new DBRefEntry(getDbSource(), getEnsemblDataVersion(),
- seq.getName());
+ seq.getName());
- Platform.timeCheck("ESP. getxref self add ", Platform.TIME_MARK);
+// Platform.timeCheck("ESP. getxref self add ", Platform.TIME_MARK);
seq.addDBRef(self);
- Platform.timeCheck("ESP. seqprox done ", Platform.TIME_MARK);
-
+ // Platform.timeCheck("ESP. seqprox done ", Platform.TIME_MARK);
}
/**
inProgress = false;
throw new JalviewException("ENSEMBL Rest API not available.");
}
- Platform.timeCheck("EnsemblSeqProx.fetchSeq ", Platform.TIME_MARK);
+ // Platform.timeCheck("EnsemblSeqProx.fetchSeq ", Platform.TIME_MARK);
List<SequenceI> seqs = parseSequenceJson(ids);
if (seqs == null)
* for now, assumes only one sequence returned; refactor if needed
* in future to handle a JSONArray with more than one
*/
-
- Platform.timeCheck("ENS seqproxy", Platform.TIME_MARK);
+ // Platform.timeCheck("ENS seqproxy", Platform.TIME_MARK);
Map<String, Object> val = (Map<String, Object>) getJSON(null, ids, -1, MODE_MAP, null);
if (val == null)
return null;
System.err.println("Error processing JSON response: " + e.toString());
// ignore
}
- Platform.timeCheck("ENS seqproxy2", Platform.TIME_MARK);
+ // Platform.timeCheck("ENS seqproxy2", Platform.TIME_MARK);
return result;
}
*/
protected abstract List<SequenceFeature> getIdentifyingFeatures(
SequenceI seq, String accId);
-
+
+ int bhtest = 0;
+
/**
* Transfers the sequence feature to the target sequence, locating its start
* and end range based on the mapping. Features which do not overlap the
if (mappedRange != null)
{
+// Platform.timeCheck(null, Platform.TIME_SET);
String group = sf.getFeatureGroup();
if (".".equals(group))
{
}
int newBegin = Math.min(mappedRange[0], mappedRange[1]);
int newEnd = Math.max(mappedRange[0], mappedRange[1]);
- SequenceFeature copy = new SequenceFeature(sf, newBegin, newEnd,
- group, sf.getScore());
+// Platform.timeCheck(null, Platform.TIME_MARK);
+ bhtest++;
+ // 280 ms/1000 here:
+ SequenceFeature copy = new SequenceFeature(sf, newBegin, newEnd, group, sf.getScore());
+ // 0.175 ms here:
targetSequence.addSequenceFeature(copy);
/*
String comp = complement.toString();
sf.setValue(Gff3Helper.ALLELES, comp);
sf.setDescription(comp);
-
- /*
- * replace value of "alleles=" in sf.ATTRIBUTES as well
- * so 'output as GFF' shows reverse complement alleles
- */
- String atts = sf.getAttributes();
- if (atts != null)
- {
- atts = atts.replace(Gff3Helper.ALLELES + "=" + alleles,
- Gff3Helper.ALLELES + "=" + comp);
- sf.setAttributes(atts);
- }
}
/**
MapList mapping = getGenomicRangesFromFeatures(sourceSequence,
accessionId, targetSequence.getStart());
if (mapping == null)
- {
+ {
return false;
}
+ // Platform.timeCheck("ESP. xfer " + sfs.size(), Platform.TIME_MARK);
+
boolean result = transferFeatures(sfs, targetSequence, mapping,
accessionId);
// System.out.println("transferFeatures (" + (sfs.size()) + " --> "
SequenceFeatures.sortFeatures(sfs, forwardStrand);
boolean transferred = false;
- for (SequenceFeature sf : sfs)
+
+ for (int i = 0, n = sfs.size(); i < n; i++)
{
+
+// if ((i%1000) == 0) {
+//// Platform.timeCheck("Feature " + bhtest, Platform.TIME_GET);
+// Platform.timeCheck("ESP. xferFeature + " + (i) + "/" + n, Platform.TIME_MARK);
+// }
+
+ SequenceFeature sf = sfs.get(i);
if (retainFeature(sf, parentId))
{
transferFeature(sf, targetSequence, mapping, forwardStrand);
transferred = true;
}
}
+
return transferred;
}