@jbrowse/plugin-alignments 2.1.7 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
- package/dist/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
- package/dist/AlignmentsTrack/index.d.ts +1 -1
- package/dist/AlignmentsTrack/index.js +16 -6
- package/dist/AlignmentsTrack/index.js.map +1 -1
- package/dist/BamAdapter/BamAdapter.d.ts +7 -3
- package/dist/BamAdapter/BamAdapter.js +36 -31
- package/dist/BamAdapter/BamAdapter.js.map +1 -1
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +1 -0
- package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
- package/dist/BamAdapter/MismatchParser.d.ts +2 -2
- package/dist/BamAdapter/MismatchParser.js +4 -7
- package/dist/BamAdapter/MismatchParser.js.map +1 -1
- package/dist/BamAdapter/configSchema.d.ts +2 -2
- package/dist/BamAdapter/configSchema.js +27 -2
- package/dist/BamAdapter/configSchema.js.map +1 -1
- package/dist/BamAdapter/index.js +7 -5
- package/dist/BamAdapter/index.js.map +1 -1
- package/dist/CramAdapter/CramAdapter.d.ts +13 -7
- package/dist/CramAdapter/CramAdapter.js +56 -61
- package/dist/CramAdapter/CramAdapter.js.map +1 -1
- package/dist/CramAdapter/CramSlightlyLazyFeature.d.ts +15 -23
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +10 -217
- package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
- package/dist/CramAdapter/CramTestAdapters.d.ts +1 -1
- package/dist/CramAdapter/CramTestAdapters.js +1 -1
- package/dist/CramAdapter/CramTestAdapters.js.map +1 -1
- package/dist/CramAdapter/configSchema.d.ts +2 -3
- package/dist/CramAdapter/configSchema.js +44 -22
- package/dist/CramAdapter/configSchema.js.map +1 -1
- package/dist/CramAdapter/index.js +7 -5
- package/dist/CramAdapter/index.js.map +1 -1
- package/dist/CramAdapter/util.d.ts +18 -0
- package/dist/CramAdapter/util.js +241 -0
- package/dist/CramAdapter/util.js.map +1 -0
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +5 -2
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js +15 -20
- package/dist/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -1
- package/dist/HtsgetBamAdapter/configSchema.d.ts +2 -2
- package/dist/HtsgetBamAdapter/configSchema.js +20 -3
- package/dist/HtsgetBamAdapter/configSchema.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/models/configSchema.d.ts +2 -2
- package/dist/LinearAlignmentsDisplay/models/configSchema.js +23 -6
- package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +77 -10
- package/dist/LinearAlignmentsDisplay/models/model.js +102 -9
- package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/dist/LinearPileupDisplay/configSchema.d.ts +4 -4
- package/dist/LinearPileupDisplay/configSchema.js +22 -5
- package/dist/LinearPileupDisplay/configSchema.js.map +1 -1
- package/dist/LinearPileupDisplay/index.d.ts +3 -0
- package/dist/LinearPileupDisplay/index.js +3 -0
- package/dist/LinearPileupDisplay/index.js.map +1 -1
- package/dist/LinearPileupDisplay/model.d.ts +100 -6
- package/dist/LinearPileupDisplay/model.js +611 -503
- package/dist/LinearPileupDisplay/model.js.map +1 -1
- package/dist/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js +33 -4
- package/dist/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +87 -4
- package/dist/LinearSNPCoverageDisplay/models/model.js +240 -159
- package/dist/LinearSNPCoverageDisplay/models/model.js.map +1 -1
- package/dist/PileupRPC/rpcMethods.d.ts +1 -1
- package/dist/PileupRPC/rpcMethods.js +12 -7
- package/dist/PileupRPC/rpcMethods.js.map +1 -1
- package/dist/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/dist/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/dist/PileupRenderer/PileupRenderer.js +37 -34
- package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
- package/dist/PileupRenderer/configSchema.d.ts +2 -2
- package/dist/PileupRenderer/configSchema.js +37 -2
- package/dist/PileupRenderer/configSchema.js.map +1 -1
- package/dist/PileupRenderer/index.js +8 -6
- package/dist/PileupRenderer/index.js.map +1 -1
- package/dist/SNPCoverageAdapter/configSchema.d.ts +2 -3
- package/dist/SNPCoverageAdapter/configSchema.js +15 -4
- package/dist/SNPCoverageAdapter/configSchema.js.map +1 -1
- package/dist/SNPCoverageAdapter/index.d.ts +1 -2
- package/dist/SNPCoverageAdapter/index.js +17 -14
- package/dist/SNPCoverageAdapter/index.js.map +1 -1
- package/dist/SNPCoverageRenderer/configSchema.d.ts +2 -2
- package/dist/SNPCoverageRenderer/configSchema.js +21 -1
- package/dist/SNPCoverageRenderer/configSchema.js.map +1 -1
- package/dist/SNPCoverageRenderer/index.d.ts +0 -1
- package/dist/SNPCoverageRenderer/index.js +1 -4
- package/dist/SNPCoverageRenderer/index.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js +12 -13
- package/esm/AlignmentsFeatureDetail/AlignmentsFeatureDetail.js.map +1 -1
- package/esm/AlignmentsTrack/index.d.ts +1 -1
- package/esm/AlignmentsTrack/index.js +16 -6
- package/esm/AlignmentsTrack/index.js.map +1 -1
- package/esm/BamAdapter/BamAdapter.d.ts +7 -3
- package/esm/BamAdapter/BamAdapter.js +36 -31
- package/esm/BamAdapter/BamAdapter.js.map +1 -1
- package/esm/BamAdapter/BamSlightlyLazyFeature.js +1 -0
- package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
- package/esm/BamAdapter/MismatchParser.d.ts +2 -2
- package/esm/BamAdapter/MismatchParser.js +4 -7
- package/esm/BamAdapter/MismatchParser.js.map +1 -1
- package/esm/BamAdapter/configSchema.d.ts +2 -2
- package/esm/BamAdapter/configSchema.js +27 -2
- package/esm/BamAdapter/configSchema.js.map +1 -1
- package/esm/BamAdapter/index.js +7 -5
- package/esm/BamAdapter/index.js.map +1 -1
- package/esm/CramAdapter/CramAdapter.d.ts +13 -7
- package/esm/CramAdapter/CramAdapter.js +56 -61
- package/esm/CramAdapter/CramAdapter.js.map +1 -1
- package/esm/CramAdapter/CramSlightlyLazyFeature.d.ts +15 -23
- package/esm/CramAdapter/CramSlightlyLazyFeature.js +10 -217
- package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
- package/esm/CramAdapter/CramTestAdapters.d.ts +1 -1
- package/esm/CramAdapter/CramTestAdapters.js +1 -1
- package/esm/CramAdapter/CramTestAdapters.js.map +1 -1
- package/esm/CramAdapter/configSchema.d.ts +2 -3
- package/esm/CramAdapter/configSchema.js +44 -22
- package/esm/CramAdapter/configSchema.js.map +1 -1
- package/esm/CramAdapter/index.js +8 -6
- package/esm/CramAdapter/index.js.map +1 -1
- package/esm/CramAdapter/util.d.ts +18 -0
- package/esm/CramAdapter/util.js +236 -0
- package/esm/CramAdapter/util.js.map +1 -0
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.d.ts +5 -2
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js +15 -20
- package/esm/HtsgetBamAdapter/HtsgetBamAdapter.js.map +1 -1
- package/esm/HtsgetBamAdapter/configSchema.d.ts +2 -2
- package/esm/HtsgetBamAdapter/configSchema.js +20 -3
- package/esm/HtsgetBamAdapter/configSchema.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +1 -1
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/models/configSchema.d.ts +2 -2
- package/esm/LinearAlignmentsDisplay/models/configSchema.js +23 -6
- package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/models/model.d.ts +77 -10
- package/esm/LinearAlignmentsDisplay/models/model.js +102 -9
- package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/esm/LinearPileupDisplay/configSchema.d.ts +4 -4
- package/esm/LinearPileupDisplay/configSchema.js +22 -5
- package/esm/LinearPileupDisplay/configSchema.js.map +1 -1
- package/esm/LinearPileupDisplay/index.d.ts +3 -0
- package/esm/LinearPileupDisplay/index.js +1 -0
- package/esm/LinearPileupDisplay/index.js.map +1 -1
- package/esm/LinearPileupDisplay/model.d.ts +100 -6
- package/esm/LinearPileupDisplay/model.js +611 -503
- package/esm/LinearPileupDisplay/model.js.map +1 -1
- package/esm/LinearSNPCoverageDisplay/components/Tooltip.d.ts +1 -1
- package/esm/LinearSNPCoverageDisplay/models/configSchema.js +33 -4
- package/esm/LinearSNPCoverageDisplay/models/configSchema.js.map +1 -1
- package/esm/LinearSNPCoverageDisplay/models/model.d.ts +87 -4
- package/esm/LinearSNPCoverageDisplay/models/model.js +240 -159
- package/esm/LinearSNPCoverageDisplay/models/model.js.map +1 -1
- package/esm/PileupRPC/rpcMethods.d.ts +1 -1
- package/esm/PileupRPC/rpcMethods.js +12 -7
- package/esm/PileupRPC/rpcMethods.js.map +1 -1
- package/esm/PileupRenderer/PileupLayoutSession.d.ts +1 -1
- package/esm/PileupRenderer/PileupRenderer.d.ts +1 -1
- package/esm/PileupRenderer/PileupRenderer.js +37 -34
- package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
- package/esm/PileupRenderer/configSchema.d.ts +2 -2
- package/esm/PileupRenderer/configSchema.js +37 -2
- package/esm/PileupRenderer/configSchema.js.map +1 -1
- package/esm/PileupRenderer/index.js +8 -6
- package/esm/PileupRenderer/index.js.map +1 -1
- package/esm/SNPCoverageAdapter/configSchema.d.ts +2 -3
- package/esm/SNPCoverageAdapter/configSchema.js +15 -4
- package/esm/SNPCoverageAdapter/configSchema.js.map +1 -1
- package/esm/SNPCoverageAdapter/index.d.ts +1 -2
- package/esm/SNPCoverageAdapter/index.js +17 -15
- package/esm/SNPCoverageAdapter/index.js.map +1 -1
- package/esm/SNPCoverageRenderer/configSchema.d.ts +2 -2
- package/esm/SNPCoverageRenderer/configSchema.js +21 -1
- package/esm/SNPCoverageRenderer/configSchema.js.map +1 -1
- package/esm/SNPCoverageRenderer/index.d.ts +0 -1
- package/esm/SNPCoverageRenderer/index.js +1 -3
- package/esm/SNPCoverageRenderer/index.js.map +1 -1
- package/esm/index.d.ts +3 -2
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/package.json +4 -3
- package/src/AlignmentsFeatureDetail/AlignmentsFeatureDetail.tsx +17 -16
- package/src/AlignmentsFeatureDetail/__snapshots__/index.test.js.snap +41 -513
- package/src/AlignmentsFeatureDetail/index.test.js +6 -4
- package/src/AlignmentsTrack/index.ts +18 -12
- package/src/BamAdapter/BamAdapter.ts +42 -41
- package/src/BamAdapter/BamSlightlyLazyFeature.ts +2 -1
- package/src/BamAdapter/MismatchParser.test.ts +21 -12
- package/src/BamAdapter/MismatchParser.ts +7 -10
- package/src/BamAdapter/__snapshots__/BamAdapter.test.ts.snap +135 -135
- package/src/BamAdapter/configSchema.ts +57 -29
- package/src/BamAdapter/index.ts +7 -8
- package/src/CombinationTest.test.ts +107 -0
- package/src/CramAdapter/CramAdapter.test.ts +1 -2
- package/src/CramAdapter/CramAdapter.ts +83 -84
- package/src/CramAdapter/CramSlightlyLazyFeature.ts +18 -218
- package/src/CramAdapter/CramTestAdapters.ts +1 -1
- package/src/CramAdapter/__snapshots__/CramAdapter.test.ts.snap +31 -31
- package/src/CramAdapter/__snapshots__/util.test.ts.snap +14 -0
- package/src/CramAdapter/configSchema.ts +54 -30
- package/src/CramAdapter/index.ts +8 -9
- package/src/CramAdapter/util.test.ts +26 -0
- package/src/CramAdapter/util.ts +251 -0
- package/src/HtsgetBamAdapter/HtsgetBamAdapter.ts +14 -21
- package/src/HtsgetBamAdapter/configSchema.ts +36 -19
- package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +3 -1
- package/src/LinearAlignmentsDisplay/models/configSchema.ts +23 -10
- package/src/LinearAlignmentsDisplay/models/model.tsx +107 -11
- package/src/LinearPileupDisplay/configSchema.ts +25 -9
- package/src/LinearPileupDisplay/index.ts +5 -0
- package/src/LinearPileupDisplay/model.ts +151 -34
- package/src/LinearSNPCoverageDisplay/models/configSchema.ts +36 -9
- package/src/LinearSNPCoverageDisplay/models/model.ts +83 -4
- package/src/PileupRPC/rpcMethods.ts +15 -20
- package/src/PileupRenderer/{PileupRenderer.tsx → PileupRenderer.ts} +53 -63
- package/src/PileupRenderer/configSchema.ts +39 -2
- package/src/PileupRenderer/index.ts +8 -9
- package/src/SNPCoverageAdapter/configSchema.ts +21 -12
- package/src/SNPCoverageAdapter/index.ts +17 -18
- package/src/SNPCoverageRenderer/configSchema.ts +23 -1
- package/src/SNPCoverageRenderer/index.ts +1 -8
- package/src/__snapshots__/index.test.ts.snap +1 -1
- package/src/index.ts +11 -4
- package/src/declare.d.ts +0 -1
|
@@ -11,14 +11,16 @@ test('open up a widget', () => {
|
|
|
11
11
|
const pluginManager = new PluginManager([])
|
|
12
12
|
|
|
13
13
|
const Session = types.model({
|
|
14
|
-
pluginManager: types.optional(types.frozen(), {}),
|
|
15
14
|
rpcManager: types.optional(types.frozen(), {}),
|
|
16
15
|
configuration: ConfigurationSchema('test', {}),
|
|
17
16
|
widget: stateModelFactory(pluginManager),
|
|
18
17
|
})
|
|
19
|
-
const session = Session.create(
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
const session = Session.create(
|
|
19
|
+
{
|
|
20
|
+
widget: { type: 'AlignmentsFeatureWidget' },
|
|
21
|
+
},
|
|
22
|
+
{ pluginManager },
|
|
23
|
+
)
|
|
22
24
|
session.widget.setFeatureData({
|
|
23
25
|
seq: 'TTGTTGCGGAGTTGAACAACGGCATTAGGAACACTTCCGTCTCTCACTTTTATACGATTATGATTGGTTCTTTAGCCTTGGTTTAGATTGGTAGTAGTAG',
|
|
24
26
|
start: 2,
|
|
@@ -5,28 +5,34 @@ import {
|
|
|
5
5
|
createBaseTrackConfig,
|
|
6
6
|
createBaseTrackModel,
|
|
7
7
|
} from '@jbrowse/core/pluggableElementTypes/models'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* #config AlignmentsTrack
|
|
11
|
+
* has very little config; most config and state logic is on the display
|
|
12
|
+
*/
|
|
13
|
+
function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
14
|
+
|
|
8
15
|
function configSchemaFactory(pluginManager: PluginManager) {
|
|
9
16
|
return ConfigurationSchema(
|
|
10
17
|
'AlignmentsTrack',
|
|
11
18
|
{},
|
|
12
|
-
{
|
|
19
|
+
{
|
|
20
|
+
/**
|
|
21
|
+
* #baseConfiguration
|
|
22
|
+
*/
|
|
23
|
+
baseConfiguration: createBaseTrackConfig(pluginManager),
|
|
24
|
+
},
|
|
13
25
|
)
|
|
14
26
|
}
|
|
15
|
-
export default function register(
|
|
16
|
-
|
|
17
|
-
const configSchema = configSchemaFactory(
|
|
27
|
+
export default function register(pm: PluginManager) {
|
|
28
|
+
pm.addTrackType(() => {
|
|
29
|
+
const configSchema = configSchemaFactory(pm)
|
|
18
30
|
const track = new TrackType({
|
|
19
31
|
name: 'AlignmentsTrack',
|
|
20
32
|
configSchema,
|
|
21
|
-
stateModel: createBaseTrackModel(
|
|
22
|
-
pluginManager,
|
|
23
|
-
'AlignmentsTrack',
|
|
24
|
-
configSchema,
|
|
25
|
-
),
|
|
33
|
+
stateModel: createBaseTrackModel(pm, 'AlignmentsTrack', configSchema),
|
|
26
34
|
})
|
|
27
|
-
const linearAlignmentsDisplay =
|
|
28
|
-
'LinearAlignmentsDisplay',
|
|
29
|
-
)
|
|
35
|
+
const linearAlignmentsDisplay = pm.getDisplayType('LinearAlignmentsDisplay')
|
|
30
36
|
// Add LinearAlignmentsDisplay here so that it has priority over the other
|
|
31
37
|
// linear displays (defaults to order the displays are added, but we have
|
|
32
38
|
// to add the Pileup and SNPCoverage displays first).
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
BaseOptions,
|
|
5
5
|
} from '@jbrowse/core/data_adapters/BaseAdapter'
|
|
6
6
|
import { Region } from '@jbrowse/core/util/types'
|
|
7
|
-
import { bytesForRegions, updateStatus } from '@jbrowse/core/util'
|
|
7
|
+
import { bytesForRegions, updateStatus, Feature } from '@jbrowse/core/util'
|
|
8
8
|
import { openLocation } from '@jbrowse/core/util/io'
|
|
9
9
|
import { ObservableCreate } from '@jbrowse/core/util/rxjs'
|
|
10
|
-
import { Feature } from '@jbrowse/core/util/simpleFeature'
|
|
11
10
|
import { toArray } from 'rxjs/operators'
|
|
12
|
-
|
|
11
|
+
|
|
12
|
+
// locals
|
|
13
13
|
import BamSlightlyLazyFeature from './BamSlightlyLazyFeature'
|
|
14
14
|
|
|
15
15
|
interface Header {
|
|
@@ -21,51 +21,52 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
|
|
|
21
21
|
private samHeader?: Header
|
|
22
22
|
|
|
23
23
|
private setupP?: Promise<Header>
|
|
24
|
-
|
|
25
|
-
protected configured?: Promise<{
|
|
24
|
+
private configureP?: Promise<{
|
|
26
25
|
bam: BamFile
|
|
27
26
|
sequenceAdapter?: BaseFeatureDataAdapter
|
|
28
27
|
}>
|
|
29
28
|
|
|
30
29
|
// derived classes may not use the same configuration so a custom
|
|
31
30
|
// configure method allows derived classes to override this behavior
|
|
32
|
-
protected async
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
// nanopore reads even with 500MB limits, so disabled with infinity
|
|
51
|
-
chunkSizeLimit: Infinity,
|
|
52
|
-
fetchSizeLimit: Infinity,
|
|
53
|
-
yieldThreadTime: Infinity,
|
|
54
|
-
})
|
|
31
|
+
protected async configurePre() {
|
|
32
|
+
const bamLocation = this.getConf('bamLocation')
|
|
33
|
+
const location = this.getConf(['index', 'location'])
|
|
34
|
+
const indexType = this.getConf(['index', 'indexType'])
|
|
35
|
+
const pm = this.pluginManager
|
|
36
|
+
const csi = indexType === 'CSI'
|
|
37
|
+
const bam = new BamFile({
|
|
38
|
+
bamFilehandle: openLocation(bamLocation, pm),
|
|
39
|
+
csiFilehandle: csi ? openLocation(location, pm) : undefined,
|
|
40
|
+
baiFilehandle: !csi ? openLocation(location, pm) : undefined,
|
|
41
|
+
|
|
42
|
+
// chunkSizeLimit and fetchSizeLimit are more troublesome than
|
|
43
|
+
// helpful, and have given overly large values on the ultra long
|
|
44
|
+
// nanopore reads even with 500MB limits, so disabled with infinity
|
|
45
|
+
chunkSizeLimit: Infinity,
|
|
46
|
+
fetchSizeLimit: Infinity,
|
|
47
|
+
yieldThreadTime: Infinity,
|
|
48
|
+
})
|
|
55
49
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}),
|
|
63
|
-
)
|
|
64
|
-
} else {
|
|
65
|
-
this.configured = Promise.resolve({ bam })
|
|
50
|
+
const adapterConfig = this.getConf('sequenceAdapter')
|
|
51
|
+
if (adapterConfig && this.getSubAdapter) {
|
|
52
|
+
const { dataAdapter } = await this.getSubAdapter(adapterConfig)
|
|
53
|
+
return {
|
|
54
|
+
bam,
|
|
55
|
+
sequenceAdapter: dataAdapter as BaseFeatureDataAdapter,
|
|
66
56
|
}
|
|
57
|
+
} else {
|
|
58
|
+
return { bam }
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected async configure() {
|
|
63
|
+
if (!this.configureP) {
|
|
64
|
+
this.configureP = this.configurePre().catch(e => {
|
|
65
|
+
this.configureP = undefined
|
|
66
|
+
throw e
|
|
67
|
+
})
|
|
67
68
|
}
|
|
68
|
-
return this.
|
|
69
|
+
return this.configureP
|
|
69
70
|
}
|
|
70
71
|
|
|
71
72
|
async getHeader(opts?: BaseOptions) {
|
|
@@ -231,7 +232,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
|
|
|
231
232
|
// @ts-ignore
|
|
232
233
|
if (bam.index.filehandle !== '?') {
|
|
233
234
|
const bytes = await bytesForRegions(regions, bam)
|
|
234
|
-
const fetchSizeLimit =
|
|
235
|
+
const fetchSizeLimit = this.getConf('fetchSizeLimit')
|
|
235
236
|
return { bytes, fetchSizeLimit }
|
|
236
237
|
} else {
|
|
237
238
|
return super.estimateRegionsStats(regions, opts)
|
|
@@ -241,7 +242,7 @@ export default class BamAdapter extends BaseFeatureDataAdapter {
|
|
|
241
242
|
freeResources(/* { region } */): void {}
|
|
242
243
|
|
|
243
244
|
// depends on setup being called before the BAM constructor
|
|
244
|
-
refIdToName(refId: number)
|
|
245
|
+
refIdToName(refId: number) {
|
|
245
246
|
return this.samHeader?.idToName[refId]
|
|
246
247
|
}
|
|
247
248
|
}
|
|
@@ -4,8 +4,9 @@ import {
|
|
|
4
4
|
SimpleFeatureSerialized,
|
|
5
5
|
} from '@jbrowse/core/util/simpleFeature'
|
|
6
6
|
import { BamRecord } from '@gmod/bam'
|
|
7
|
-
import { getMismatches } from './MismatchParser'
|
|
8
7
|
|
|
8
|
+
// locals
|
|
9
|
+
import { getMismatches } from './MismatchParser'
|
|
9
10
|
import BamAdapter from './BamAdapter'
|
|
10
11
|
|
|
11
12
|
export default class BamSlightlyLazyFeature implements Feature {
|
|
@@ -139,79 +139,88 @@ test('more skip', () => {
|
|
|
139
139
|
(a, b) => a.start - b.start,
|
|
140
140
|
),
|
|
141
141
|
).toMatchInlineSnapshot(`
|
|
142
|
-
|
|
143
|
-
|
|
142
|
+
[
|
|
143
|
+
{
|
|
144
144
|
"altbase": "G",
|
|
145
145
|
"base": "A",
|
|
146
146
|
"length": 1,
|
|
147
|
+
"qual": undefined,
|
|
147
148
|
"start": 6,
|
|
148
149
|
"type": "mismatch",
|
|
149
150
|
},
|
|
150
|
-
|
|
151
|
+
{
|
|
151
152
|
"altbase": "C",
|
|
152
153
|
"base": "A",
|
|
153
154
|
"length": 1,
|
|
155
|
+
"qual": undefined,
|
|
154
156
|
"start": 11,
|
|
155
157
|
"type": "mismatch",
|
|
156
158
|
},
|
|
157
|
-
|
|
159
|
+
{
|
|
158
160
|
"base": "1",
|
|
159
161
|
"length": 0,
|
|
160
162
|
"start": 31,
|
|
161
163
|
"type": "insertion",
|
|
162
164
|
},
|
|
163
|
-
|
|
165
|
+
{
|
|
164
166
|
"altbase": "G",
|
|
165
167
|
"base": "C",
|
|
166
168
|
"length": 1,
|
|
169
|
+
"qual": undefined,
|
|
167
170
|
"start": 32,
|
|
168
171
|
"type": "mismatch",
|
|
169
172
|
},
|
|
170
|
-
|
|
173
|
+
{
|
|
171
174
|
"altbase": "A",
|
|
172
175
|
"base": "C",
|
|
173
176
|
"length": 1,
|
|
177
|
+
"qual": undefined,
|
|
174
178
|
"start": 34,
|
|
175
179
|
"type": "mismatch",
|
|
176
180
|
},
|
|
177
|
-
|
|
181
|
+
{
|
|
178
182
|
"altbase": "C",
|
|
179
183
|
"base": "C",
|
|
180
184
|
"length": 1,
|
|
185
|
+
"qual": undefined,
|
|
181
186
|
"start": 40,
|
|
182
187
|
"type": "mismatch",
|
|
183
188
|
},
|
|
184
|
-
|
|
189
|
+
{
|
|
185
190
|
"altbase": "A",
|
|
186
191
|
"base": "C",
|
|
187
192
|
"length": 1,
|
|
193
|
+
"qual": undefined,
|
|
188
194
|
"start": 46,
|
|
189
195
|
"type": "mismatch",
|
|
190
196
|
},
|
|
191
|
-
|
|
197
|
+
{
|
|
192
198
|
"base": "*",
|
|
193
199
|
"length": 1,
|
|
194
200
|
"start": 48,
|
|
195
201
|
"type": "deletion",
|
|
196
202
|
},
|
|
197
|
-
|
|
203
|
+
{
|
|
198
204
|
"altbase": "A",
|
|
199
205
|
"base": "G",
|
|
200
206
|
"length": 1,
|
|
207
|
+
"qual": undefined,
|
|
201
208
|
"start": 52,
|
|
202
209
|
"type": "mismatch",
|
|
203
210
|
},
|
|
204
|
-
|
|
211
|
+
{
|
|
205
212
|
"altbase": "G",
|
|
206
213
|
"base": "G",
|
|
207
214
|
"length": 1,
|
|
215
|
+
"qual": undefined,
|
|
208
216
|
"start": 68,
|
|
209
217
|
"type": "mismatch",
|
|
210
218
|
},
|
|
211
|
-
|
|
219
|
+
{
|
|
212
220
|
"altbase": "G",
|
|
213
221
|
"base": "G",
|
|
214
222
|
"length": 1,
|
|
223
|
+
"qual": undefined,
|
|
215
224
|
"start": 70,
|
|
216
225
|
"type": "mismatch",
|
|
217
226
|
},
|
|
@@ -16,7 +16,7 @@ export function parseCigar(cigar = '') {
|
|
|
16
16
|
}
|
|
17
17
|
export function cigarToMismatches(
|
|
18
18
|
ops: string[],
|
|
19
|
-
seq
|
|
19
|
+
seq?: string,
|
|
20
20
|
ref?: string,
|
|
21
21
|
qual?: Buffer,
|
|
22
22
|
): Mismatch[] {
|
|
@@ -70,7 +70,7 @@ export function cigarToMismatches(
|
|
|
70
70
|
length: len,
|
|
71
71
|
})
|
|
72
72
|
} else if (op === 'X') {
|
|
73
|
-
const r = seq
|
|
73
|
+
const r = seq?.slice(soffset, soffset + len) || []
|
|
74
74
|
const q = qual?.slice(soffset, soffset + len) || []
|
|
75
75
|
|
|
76
76
|
for (let j = 0; j < len; j++) {
|
|
@@ -195,10 +195,7 @@ export function mdToMismatches(
|
|
|
195
195
|
}
|
|
196
196
|
const s = getTemplateCoordLocal(curr.start)
|
|
197
197
|
curr.base = seq[s] || 'X'
|
|
198
|
-
|
|
199
|
-
if (qualScore) {
|
|
200
|
-
curr.qual = qualScore
|
|
201
|
-
}
|
|
198
|
+
curr.qual = qual?.[s]
|
|
202
199
|
curr.altbase = token
|
|
203
200
|
nextRecord()
|
|
204
201
|
}
|
|
@@ -209,8 +206,8 @@ export function mdToMismatches(
|
|
|
209
206
|
|
|
210
207
|
export function getMismatches(
|
|
211
208
|
cigar: string,
|
|
212
|
-
md
|
|
213
|
-
seq
|
|
209
|
+
md?: string,
|
|
210
|
+
seq?: string,
|
|
214
211
|
ref?: string,
|
|
215
212
|
qual?: Buffer,
|
|
216
213
|
): Mismatch[] {
|
|
@@ -223,7 +220,7 @@ export function getMismatches(
|
|
|
223
220
|
}
|
|
224
221
|
|
|
225
222
|
// now let's look for CRAM or MD mismatches
|
|
226
|
-
if (md) {
|
|
223
|
+
if (md && seq) {
|
|
227
224
|
mismatches = mismatches.concat(
|
|
228
225
|
mdToMismatches(md, ops, mismatches, seq, qual),
|
|
229
226
|
)
|
|
@@ -332,7 +329,7 @@ export function getModificationTypes(mm: string) {
|
|
|
332
329
|
|
|
333
330
|
const matches = basemod.match(modificationRegex)
|
|
334
331
|
if (!matches) {
|
|
335
|
-
throw new Error(
|
|
332
|
+
throw new Error(`bad format for MM tag: ${mm}`)
|
|
336
333
|
}
|
|
337
334
|
const [, , , typestr] = matches
|
|
338
335
|
|