Skip to content

Commit

Permalink
Add initial paired read tracks
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin committed Oct 18, 2018
1 parent ba5cbdd commit 1c8c944
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 3 deletions.
30 changes: 27 additions & 3 deletions src/JBrowse/Store/SeqFeature/BAM.js
Expand Up @@ -71,6 +71,7 @@ define( [
'JBrowse/Store/DeferredFeaturesMixin',
'JBrowse/Store/SeqFeature/IndexedStatsEstimationMixin',
'JBrowse/Model/XHRBlob',
'JBrowse/Model/SimpleFeature',
],
function(
declare,
Expand All @@ -80,6 +81,7 @@ define( [
DeferredFeaturesMixin,
IndexedStatsEstimationMixin,
XHRBlob,
SimpleFeature
) {

return declare( [ SeqFeatureStore, DeferredStatsMixin, DeferredFeaturesMixin, IndexedStatsEstimationMixin ], {
Expand Down Expand Up @@ -207,11 +209,33 @@ return declare( [ SeqFeatureStore, DeferredStatsMixin, DeferredFeaturesMixin, In
let seqName = query.ref || this.refSeq.name
seqName = this.browser.regularizeReferenceName( seqName );

this.bam.getRecordsForRange(seqName, query.start, query.end)
this.bam.getRecordsForRange(seqName, query.start, query.end, {viewAsPairs: true})
.then(records => {
for (let i = 0; i < records.length; i += 1) {
featCallback(this._bamRecordToFeature(records[i]))
records.sort((a, b) => a.get('name').localeCompare(b.get('name')))
let recs = records.map(r => r.get('name'))
for(let i = 0; i < records.length-1; i++) {
const r1 = records[i]
const r2 = records[i+1]
if(r1.get('name') == r2.get('name')) {
featCallback(new SimpleFeature({
id: r1.get('name'),
data: {
start: Math.min(r1.get('start'), r2.get('start')),
end: Math.max(r1.get('end'), r2.get('end')),
insert_size: r1.get('template_length'),
type: 'match',
subfeatures: [
{ start: r1.get('start'), end: r1.get('end') },
{ start: r2.get('start'), end: r2.get('end') }
]
}
}))
i++;
}
}
// for (let i = 0; i < records.length; i += 1) {
// featCallback(this._bamRecordToFeature(records[i]))
// }

endCallback()
})
Expand Down
40 changes: 40 additions & 0 deletions src/JBrowse/View/FeatureGlyph/PairedRead.js
@@ -0,0 +1,40 @@
define([
'dojo/_base/declare',
'dojo/_base/array',
'dojo/_base/lang',
'JBrowse/View/FeatureGlyph/Segments'
],
function(
declare,
array,
lang,
FeatureGlyph
) {
return declare(FeatureGlyph, {


//same as parent but without clearRect
renderFeature: function( context, fRect ) {
this.renderConnector( context, fRect );
this.renderSegments( context, fRect );
this.renderLabel( context, fRect );
this.renderDescription( context, fRect );
this.renderArrowhead( context, fRect );
},

layoutFeature: function(viewArgs, layout, feature) {
var rect = this.inherited(arguments);
if (!rect) {
return rect;
}
var t = Math.abs(feature.get('insert_size'))

// need to set the top of the inner rect
rect.rect.t = t / (this.config.scaleFactor||1);
rect.t = t / (this.config.scaleFactor||1);

return rect;
}
});
});

34 changes: 34 additions & 0 deletions src/JBrowse/View/Track/PairedReads.js
@@ -0,0 +1,34 @@
define( [
'dojo/_base/declare',
'dojo/_base/lang',
'JBrowse/View/Track/CanvasFeatures',
'JBrowse/Util'
],
function(
declare,
lang,
CanvasFeatures,
Util,
) {

return declare(CanvasFeatures, {
_defaultConfig: function() {
return Util.deepUpdate(lang.clone(this.inherited(arguments)), {
glyph: 'JBrowse/View/FeatureGlyph/PairedRead',
maxFeatureScreenDensity: 60,
showLabels: false
});
},

// override getLayout to access addRect method
_getLayout: function() {
var layout = this.inherited(arguments);
return declare.safeMixin(layout, {
addRect: function() {
this.pTotalHeight = this.maxHeight;
return 0;
}
});
}
});
});

0 comments on commit 1c8c944

Please sign in to comment.