Skip to content

Commit

Permalink
Consolidate separate PairedRead track type into the single Alignments…
Browse files Browse the repository at this point in the history
…2 track
  • Loading branch information
cmdcolin committed Oct 31, 2018
1 parent fd40673 commit 5634585
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 77 deletions.
5 changes: 2 additions & 3 deletions src/JBrowse/Store/SeqFeature/BAM.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ return declare( [ SeqFeatureStore, DeferredStatsMixin, DeferredFeaturesMixin, In
})

this.storeTimeout = args.storeTimeout || 3000;
this.viewAsPairs = args.viewAsPairs || false;
},

// process the parsed SAM header from the bam file
Expand Down Expand Up @@ -238,9 +237,9 @@ return declare( [ SeqFeatureStore, DeferredStatsMixin, DeferredFeaturesMixin, In
seqName = this.browser.regularizeReferenceName( seqName );
const pairCache = {};

this.bam.getRecordsForRange(seqName, query.start, query.end, {viewAsPairs: this.viewAsPairs})
this.bam.getRecordsForRange(seqName, query.start, query.end, {viewAsPairs: query.viewAsPairs})
.then(records => {
if(this.viewAsPairs) {
if(query.viewAsPairs) {
records.sort((a, b) => {
return (a._get('name') < b._get('name') ? -1 : (a._get('name') > b._get('name') ? 1 : 0));
})
Expand Down
127 changes: 65 additions & 62 deletions src/JBrowse/View/Track/Alignments2.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ return declare( [ CanvasFeatureTrack, AlignmentsMixin ], {
useReverseTemplate: false,
useXSOption: true,
useReverseTemplateOption: true,
viewAsPairs: false,
readCloud: false,

histograms: {
description: 'coverage depth',
Expand All @@ -49,76 +51,25 @@ return declare( [ CanvasFeatureTrack, AlignmentsMixin ], {
}
}
);

// add menu items for viewing matepair / next segment locations
c.menuTemplate.push(
{
"iconClass": "dijitIconUndo",
"url": function( track, feature ) {
return track.browser.makeCurrentViewURL(
{ loc: track._nextSegmentViewLoc( feature, 0.8 ),
highlight: feature.get('next_segment_position'),
tracklist: 0
});
},
"action": "iframeDialog",
title: "Open {next_segment_position} in a popup",
disabled: function( track, feature ) {
return ! feature.get('next_segment_position');
},
"label": "Quick-view mate/next location"
},
{
"iconClass": "dijitIconUndo",
"url": function( track, feature ) {
return track.browser.makeCurrentViewURL(
{ loc: track._nextSegmentViewLoc( feature ),
highlight: feature.get('next_segment_position')
});
},
"action": "newWindow",
title: "Open {next_segment_position} in a new tab",
disabled: function( track, feature ) {
return ! feature.get('next_segment_position');
},
"label": "Open mate/next location in new tab"
}
);
if(c.viewAsPairs) {
c.glyph = 'JBrowse/View/FeatureGlyph/PairedAlignment'
}
return c;
},

// make a locstring for a view of the given feature's next segment
// (in a multi-segment read)
_nextSegmentViewLoc: function( feature, factor ) {
var nextLocStr = feature.get('next_segment_position');
if( ! nextLocStr ) return undefined;

var s = nextLocStr.split(':');
var refName = s[0];
var start = parseInt(s[1]);

var visibleRegion = this.browser.view.visibleRegion();
var visibleRegionSize = Math.round( (visibleRegion.end - visibleRegion.start + 1 )*(factor||1) );

return Util.assembleLocString(
{ start: Math.round( start - visibleRegionSize/2 ),
end: Math.round( start + visibleRegionSize/2 ),
ref: refName
});
},

_trackMenuOptions: function() {
var track=this;
var displayOptions=[];
var thisB = this;
var displayOptions = [];


if(this.config.useReverseTemplateOption) {
displayOptions.push({
label: 'Use reversed template',
type: 'dijit/CheckedMenuItem',
checked: this.config.useReverseTemplate,
onClick: function(event) {
track.config.useReverseTemplate = this.get('checked');
track.browser.publish('/jbrowse/v1/v/tracks/replace', [track.config]);
thisB.config.useReverseTemplate = this.get('checked');
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});
}
Expand All @@ -128,18 +79,70 @@ return declare( [ CanvasFeatureTrack, AlignmentsMixin ], {
type: 'dijit/CheckedMenuItem',
checked: this.config.useXS,
onClick: function(event) {
track.config.useXS = this.get('checked');
track.browser.publish('/jbrowse/v1/v/tracks/replace', [track.config]);
thisB.config.useXS = this.get('checked');
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});
}


displayOptions.push({
label: 'View normal',
type: 'dijit/RadioMenuItem',
group: 'g2',
onClick: function(event) {
thisB.config.viewAsPairs = false
thisB.config.readCloud = false
thisB.config.glyph = 'JBrowse/View/FeatureGlyph/Alignment'
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});

displayOptions.push({
label: 'View as pairs',
type: 'dijit/RadioMenuItem',
group: 'g2',
onClick: function(event) {
thisB.config.viewAsPairs = true
thisB.config.readCloud = false
thisB.config.glyph = 'JBrowse/View/FeatureGlyph/PairedAlignment'
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});

displayOptions.push({
label: 'View pairs as read cloud',
type: 'dijit/RadioMenuItem',
group: 'g2',
onClick: function(event) {
thisB.config.viewAsPairs = true
thisB.config.readCloud = true
thisB.config.glyph = 'JBrowse/View/FeatureGlyph/PairedAlignment'
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});

return all([ this.inherited(arguments), this._alignmentsFilterTrackMenuOptions(), displayOptions ])
.then( function( options ) {
var o = options.shift();
options.unshift({ type: 'dijit/MenuSeparator' } );
return o.concat.apply( o, options );
});
}
},

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

});
});
6 changes: 4 additions & 2 deletions src/JBrowse/View/Track/CanvasFeatures.js
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,8 @@ return declare(
start: args.leftBase,
end: args.rightBase,
basesPerSpan: basesPerBin,
basesPerBin: basesPerBin
basesPerBin: basesPerBin,
viewAsPairs: this.config.viewAsPairs
}

const handleError = this._handleError.bind(this)
Expand Down Expand Up @@ -591,7 +592,8 @@ return declare(
const region = {
ref: this.refSeq.name,
start: Math.max( 0, leftBase - bpExpansion ),
end: rightBase + bpExpansion
end: rightBase + bpExpansion,
viewAsPairs: this.config.viewAsPairs
}

const featCallback = feature => {
Expand Down
52 changes: 42 additions & 10 deletions src/JBrowse/View/Track/PairedReads.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ define( [
'dojo/_base/declare',
'dojo/_base/array',
'dojo/_base/lang',
'dojo/promise/all',
'JBrowse/View/Track/CanvasFeatures',
'JBrowse/View/Track/_PairedAlignmentsMixin',
'JBrowse/Util'
Expand All @@ -10,21 +11,18 @@ define( [
declare,
array,
lang,
all,
CanvasFeatures,
PairedAlignmentsMixin,
Util,
) {

return declare([CanvasFeatures, PairedAlignmentsMixin], {
_defaultConfig: function() {
return Util.deepUpdate(lang.clone(this.inherited(arguments)), {
glyph: 'JBrowse/View/FeatureGlyph/PairedAlignment',
maxFeatureScreenDensity: 60,
readCloud: false,
style: {
showLabels: false
}
});
var c = this.inherited(arguments)
if(c.viewAsPairs) {
c.glyph = 'JBrowse/View/FeatureGlyph/PairedAlignment'
}
},
// override getLayout to access addRect method
_getLayout: function() {
Expand Down Expand Up @@ -63,7 +61,7 @@ return declare([CanvasFeatures, PairedAlignmentsMixin], {

// get the appropriate HTML color string to use for a given base
// letter. case insensitive. 'reference' gives the color to draw matches with the reference.
colorForBase: function( base ) {
colorForBase( base ) {
// get the base colors out of CSS
this._baseStyles = this._baseStyles || function() {
var colors = {};
Expand Down Expand Up @@ -93,7 +91,41 @@ return declare([CanvasFeatures, PairedAlignmentsMixin], {
}.call(this);

return this._baseStyles[base] || '#999';
}
},

_trackMenuOptions() {
var displayOptions = [];
var thisB = this;

displayOptions.push({
label: 'View read cloud',
type: 'dijit/CheckedMenuItem',
checked: this.config.readCloud,
onClick: function(event) {
thisB.config.readCloud = this.get('checked');
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});

displayOptions.push({
label: 'View as pairs',
type: 'dijit/CheckedMenuItem',
checked: this.config.viewAsPairs,
onClick: function(event) {
console.log('this',thisB.config)
thisB.config.viewAsPairs = this.get('checked');
thisB.config.type = 'JBrowse/View/Track/Alignments2';
thisB.config.trackType = 'JBrowse/View/Track/Alignments2';
thisB.config.glyph = 'JBrowse/View/FeatureGlyph/Alignment';
thisB.browser.publish('/jbrowse/v1/v/tracks/replace', [thisB.config]);
}
});
return all([ this.inherited(arguments), displayOptions ])
.then( function( options ) {
var o = options.shift();
options.unshift({ type: 'dijit/MenuSeparator' } );
return o.concat.apply( o, options );
});
}
});
});

0 comments on commit 5634585

Please sign in to comment.