@jbrowse/plugin-alignments 3.6.4 → 3.7.0
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/stateModelFactory.d.ts +4 -4
- package/dist/CramAdapter/CramAdapter.js +1 -1
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +8 -7
- package/dist/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
- package/dist/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
- package/dist/CramAdapter/readFeaturesToMismatches.js +106 -0
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
- package/dist/LinearAlignmentsDisplay/model.js +3 -2
- package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
- package/dist/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
- package/dist/LinearPileupDisplay/components/GroupByDialog.js +4 -4
- package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
- package/dist/LinearPileupDisplay/components/SetModificationThresholdDialog.js +39 -0
- package/dist/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
- package/dist/LinearPileupDisplay/doAfterAttach.js +3 -2
- package/dist/LinearPileupDisplay/model.d.ts +20 -2
- package/dist/LinearPileupDisplay/model.js +39 -4
- package/dist/LinearReadArcsDisplay/index.js +1 -1
- package/dist/LinearReadArcsDisplay/model.d.ts +23 -30
- package/dist/LinearReadArcsDisplay/model.js +5 -86
- package/dist/LinearReadCloudDisplay/components/ReactComponent.js +84 -2
- package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
- package/dist/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +26 -0
- package/dist/LinearReadCloudDisplay/configSchema.d.ts +7 -0
- package/dist/LinearReadCloudDisplay/configSchema.js +5 -0
- package/dist/LinearReadCloudDisplay/drawFeatsAbstract.js +13 -0
- package/dist/LinearReadCloudDisplay/drawFeatsCloud.js +24 -0
- package/dist/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
- package/dist/LinearReadCloudDisplay/drawFeatsCommon.js +198 -0
- package/dist/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
- package/dist/LinearReadCloudDisplay/drawFeatsStack.js +36 -0
- package/dist/LinearReadCloudDisplay/index.js +1 -1
- package/dist/LinearReadCloudDisplay/model.d.ts +51 -31
- package/dist/LinearReadCloudDisplay/model.js +93 -78
- package/dist/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
- package/dist/LinearSNPCoverageDisplay/components/TooltipContents.js +148 -19
- package/dist/LinearSNPCoverageDisplay/model.js +14 -3
- package/dist/MismatchParser/cigarToMismatches.js +1 -0
- package/dist/ModificationParser/detectSimplexModifications.d.ts +4 -0
- package/dist/ModificationParser/detectSimplexModifications.js +20 -0
- package/dist/ModificationParser/getModPositions.d.ts +1 -1
- package/dist/ModificationParser/getModPositions.js +13 -16
- package/dist/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
- package/dist/PileupRPC/methods/GetVisibleModifications.js +16 -3
- package/dist/PileupRenderer/PileupRenderer.d.ts +6 -1
- package/dist/PileupRenderer/PileupRenderer.js +11 -14
- package/dist/PileupRenderer/components/PileupRendering.d.ts +8 -15
- package/dist/PileupRenderer/components/PileupRendering.js +18 -2
- package/dist/PileupRenderer/makeImageData.d.ts +5 -2
- package/dist/PileupRenderer/makeImageData.js +37 -6
- package/dist/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
- package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
- package/dist/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
- package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
- package/dist/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
- package/dist/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
- package/dist/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
- package/dist/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
- package/dist/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
- package/dist/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
- package/dist/PileupRenderer/renderers/renderModifications.js +84 -0
- package/dist/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
- package/dist/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
- package/{esm/PileupRenderer → dist/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
- package/dist/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
- package/dist/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
- package/dist/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
- package/dist/PileupRenderer/types.d.ts +6 -0
- package/dist/SNPCoverageAdapter/generateCoverageBins.js +5 -4
- package/dist/SNPCoverageAdapter/processModifications.js +14 -4
- package/dist/SNPCoverageRenderer/makeImage.js +44 -33
- package/dist/SNPCoverageRenderer/types.d.ts +1 -0
- package/dist/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
- package/dist/shared/LinearReadDisplayBaseMixin.js +50 -0
- package/dist/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
- package/dist/shared/LinearReadDisplayWithLayoutMixin.js +24 -0
- package/dist/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
- package/dist/shared/LinearReadDisplayWithPairFiltersMixin.js +27 -0
- package/dist/shared/afterAttach.js +3 -2
- package/dist/shared/chainToSimpleFeature.d.ts +3 -0
- package/dist/shared/chainToSimpleFeature.js +43 -0
- package/dist/shared/chevron.d.ts +1 -0
- package/dist/shared/chevron.js +27 -0
- package/dist/shared/color.d.ts +43 -6
- package/dist/shared/color.js +101 -22
- package/dist/shared/components/BaseDisplayComponent.d.ts +12 -3
- package/dist/shared/components/BaseDisplayComponent.js +2 -2
- package/dist/shared/components/SetFeatureHeightDialog.d.ts +10 -0
- package/dist/shared/components/SetFeatureHeightDialog.js +26 -0
- package/dist/shared/components/SetMaxHeightDialog.d.ts +8 -0
- package/dist/shared/components/SetMaxHeightDialog.js +28 -0
- package/dist/shared/drawLongReadChains.d.ts +24 -0
- package/dist/shared/drawLongReadChains.js +104 -0
- package/dist/shared/drawPairChains.d.ts +24 -0
- package/dist/shared/drawPairChains.js +94 -0
- package/dist/shared/flatbushType.d.ts +12 -0
- package/dist/shared/flatbushType.js +2 -0
- package/dist/shared/getUniqueModifications.d.ts +4 -1
- package/dist/shared/menuItems.d.ts +23 -0
- package/dist/shared/menuItems.js +89 -0
- package/dist/shared/modificationData.d.ts +6 -0
- package/dist/shared/modificationData.js +22 -0
- package/dist/shared/primaryStrand.d.ts +3 -0
- package/dist/shared/primaryStrand.js +24 -0
- package/dist/shared/types.d.ts +2 -0
- package/dist/shared/util.d.ts +2 -0
- package/dist/shared/util.js +6 -1
- package/dist/util.d.ts +1 -6
- package/dist/util.js +4 -15
- package/esm/AlignmentsFeatureDetail/stateModelFactory.d.ts +4 -4
- package/esm/CramAdapter/CramAdapter.js +1 -1
- package/esm/CramAdapter/CramSlightlyLazyFeature.js +2 -1
- package/esm/CramAdapter/{util.js → readFeaturesToCIGAR.js} +4 -5
- package/esm/CramAdapter/readFeaturesToMismatches.d.ts +5 -0
- package/esm/CramAdapter/readFeaturesToMismatches.js +103 -0
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +6 -2
- package/esm/LinearAlignmentsDisplay/model.js +3 -2
- package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.d.ts +17 -2
- package/esm/LinearPileupDisplay/SharedLinearPileupDisplayMixin.js +2 -2
- package/esm/LinearPileupDisplay/components/GroupByDialog.js +4 -4
- package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.d.ts +10 -0
- package/esm/LinearPileupDisplay/components/SetModificationThresholdDialog.js +37 -0
- package/esm/LinearPileupDisplay/doAfterAttach.d.ts +1 -0
- package/esm/LinearPileupDisplay/doAfterAttach.js +3 -2
- package/esm/LinearPileupDisplay/model.d.ts +20 -2
- package/esm/LinearPileupDisplay/model.js +39 -4
- package/esm/LinearReadArcsDisplay/index.js +1 -1
- package/esm/LinearReadArcsDisplay/model.d.ts +23 -30
- package/esm/LinearReadArcsDisplay/model.js +5 -83
- package/esm/LinearReadCloudDisplay/components/ReactComponent.js +86 -4
- package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.d.ts +10 -0
- package/esm/LinearReadCloudDisplay/components/SetFeatureHeightDialog.js +24 -0
- package/esm/LinearReadCloudDisplay/configSchema.d.ts +7 -0
- package/esm/LinearReadCloudDisplay/configSchema.js +5 -0
- package/esm/LinearReadCloudDisplay/drawFeatsAbstract.d.ts +2 -0
- package/esm/LinearReadCloudDisplay/drawFeatsAbstract.js +10 -0
- package/esm/LinearReadCloudDisplay/drawFeatsCloud.d.ts +2 -0
- package/esm/LinearReadCloudDisplay/drawFeatsCloud.js +21 -0
- package/esm/LinearReadCloudDisplay/drawFeatsCommon.d.ts +23 -0
- package/esm/LinearReadCloudDisplay/drawFeatsCommon.js +187 -0
- package/esm/LinearReadCloudDisplay/drawFeatsStack.d.ts +2 -0
- package/esm/LinearReadCloudDisplay/drawFeatsStack.js +30 -0
- package/esm/LinearReadCloudDisplay/index.js +1 -1
- package/esm/LinearReadCloudDisplay/model.d.ts +51 -31
- package/esm/LinearReadCloudDisplay/model.js +94 -76
- package/esm/LinearSNPCoverageDisplay/components/TooltipContents.d.ts +3 -0
- package/esm/LinearSNPCoverageDisplay/components/TooltipContents.js +149 -20
- package/esm/LinearSNPCoverageDisplay/model.js +14 -3
- package/esm/MismatchParser/cigarToMismatches.js +1 -0
- package/esm/ModificationParser/detectSimplexModifications.d.ts +4 -0
- package/esm/ModificationParser/detectSimplexModifications.js +17 -0
- package/esm/ModificationParser/getModPositions.d.ts +1 -1
- package/esm/ModificationParser/getModPositions.js +13 -16
- package/esm/PileupRPC/methods/GetVisibleModifications.d.ts +4 -1
- package/esm/PileupRPC/methods/GetVisibleModifications.js +16 -3
- package/esm/PileupRenderer/PileupRenderer.d.ts +6 -1
- package/esm/PileupRenderer/PileupRenderer.js +11 -14
- package/esm/PileupRenderer/components/PileupRendering.d.ts +8 -15
- package/esm/PileupRenderer/components/PileupRendering.js +16 -3
- package/esm/PileupRenderer/makeImageData.d.ts +5 -2
- package/esm/PileupRenderer/makeImageData.js +34 -6
- package/esm/PileupRenderer/{getAlignmentShapeColor.js → renderers/getAlignmentShapeColor.js} +2 -2
- package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignment.d.ts +6 -3
- package/esm/PileupRenderer/{renderAlignment.js → renderers/renderAlignment.js} +12 -3
- package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderAlignmentShape.d.ts +2 -2
- package/esm/PileupRenderer/{renderAlignmentShape.js → renderers/renderAlignmentShape.js} +1 -1
- package/esm/PileupRenderer/{renderMethylation.d.ts → renderers/renderMethylation.d.ts} +2 -2
- package/esm/PileupRenderer/{renderMethylation.js → renderers/renderMethylation.js} +2 -2
- package/esm/PileupRenderer/{renderMismatches.d.ts → renderers/renderMismatches.d.ts} +6 -3
- package/esm/PileupRenderer/{renderMismatches.js → renderers/renderMismatches.js} +29 -5
- package/esm/PileupRenderer/{renderModifications.d.ts → renderers/renderModifications.d.ts} +6 -3
- package/esm/PileupRenderer/renderers/renderModifications.js +81 -0
- package/esm/PileupRenderer/{renderPerBaseLettering.d.ts → renderers/renderPerBaseLettering.d.ts} +1 -1
- package/esm/PileupRenderer/{renderPerBaseLettering.js → renderers/renderPerBaseLettering.js} +1 -1
- package/{dist/PileupRenderer → esm/PileupRenderer/renderers}/renderPerBaseQuality.d.ts +1 -1
- package/esm/PileupRenderer/{renderPerBaseQuality.js → renderers/renderPerBaseQuality.js} +1 -1
- package/esm/PileupRenderer/{renderSoftClipping.d.ts → renderers/renderSoftClipping.d.ts} +2 -2
- package/esm/PileupRenderer/{renderSoftClipping.js → renderers/renderSoftClipping.js} +2 -2
- package/esm/PileupRenderer/types.d.ts +6 -0
- package/esm/SNPCoverageAdapter/generateCoverageBins.js +5 -4
- package/esm/SNPCoverageAdapter/processModifications.js +14 -4
- package/esm/SNPCoverageRenderer/makeImage.js +44 -33
- package/esm/SNPCoverageRenderer/types.d.ts +1 -0
- package/esm/shared/LinearReadDisplayBaseMixin.d.ts +24 -0
- package/esm/shared/LinearReadDisplayBaseMixin.js +47 -0
- package/esm/shared/LinearReadDisplayWithLayoutMixin.d.ts +11 -0
- package/esm/shared/LinearReadDisplayWithLayoutMixin.js +21 -0
- package/esm/shared/LinearReadDisplayWithPairFiltersMixin.d.ts +11 -0
- package/esm/shared/LinearReadDisplayWithPairFiltersMixin.js +24 -0
- package/esm/shared/afterAttach.js +3 -2
- package/esm/shared/chainToSimpleFeature.d.ts +3 -0
- package/esm/shared/chainToSimpleFeature.js +40 -0
- package/esm/shared/chevron.d.ts +1 -0
- package/esm/shared/chevron.js +24 -0
- package/esm/shared/color.d.ts +43 -6
- package/esm/shared/color.js +96 -20
- package/esm/shared/components/BaseDisplayComponent.d.ts +12 -3
- package/esm/shared/components/BaseDisplayComponent.js +2 -2
- package/esm/shared/components/SetFeatureHeightDialog.d.ts +10 -0
- package/esm/shared/components/SetFeatureHeightDialog.js +24 -0
- package/esm/shared/components/SetMaxHeightDialog.d.ts +8 -0
- package/esm/shared/components/SetMaxHeightDialog.js +26 -0
- package/esm/shared/drawLongReadChains.d.ts +24 -0
- package/esm/shared/drawLongReadChains.js +101 -0
- package/esm/shared/drawPairChains.d.ts +24 -0
- package/esm/shared/drawPairChains.js +91 -0
- package/esm/shared/flatbushType.d.ts +12 -0
- package/esm/shared/flatbushType.js +1 -0
- package/esm/shared/getUniqueModifications.d.ts +4 -1
- package/esm/shared/menuItems.d.ts +23 -0
- package/esm/shared/menuItems.js +49 -0
- package/esm/shared/modificationData.d.ts +6 -0
- package/esm/shared/modificationData.js +18 -0
- package/esm/shared/primaryStrand.d.ts +3 -0
- package/esm/shared/primaryStrand.js +20 -0
- package/esm/shared/types.d.ts +2 -0
- package/esm/shared/util.d.ts +2 -0
- package/esm/shared/util.js +4 -0
- package/esm/util.d.ts +1 -6
- package/esm/util.js +2 -14
- package/package.json +6 -6
- package/dist/LinearReadCloudDisplay/drawFeats.js +0 -27
- package/dist/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
- package/dist/LinearReadCloudDisplay/drawLongReadChains.js +0 -64
- package/dist/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
- package/dist/LinearReadCloudDisplay/drawPairChains.js +0 -94
- package/dist/PileupRenderer/renderModifications.js +0 -44
- package/esm/LinearReadCloudDisplay/drawFeats.js +0 -24
- package/esm/LinearReadCloudDisplay/drawLongReadChains.d.ts +0 -11
- package/esm/LinearReadCloudDisplay/drawLongReadChains.js +0 -61
- package/esm/LinearReadCloudDisplay/drawPairChains.d.ts +0 -17
- package/esm/LinearReadCloudDisplay/drawPairChains.js +0 -90
- package/esm/PileupRenderer/renderModifications.js +0 -41
- /package/dist/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
- /package/dist/LinearReadCloudDisplay/{drawFeats.d.ts → drawFeatsAbstract.d.ts} +0 -0
- /package/{esm/LinearReadCloudDisplay/drawFeats.d.ts → dist/LinearReadCloudDisplay/drawFeatsCloud.d.ts} +0 -0
- /package/dist/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
- /package/dist/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
- /package/dist/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
- /package/esm/CramAdapter/{util.d.ts → readFeaturesToCIGAR.d.ts} +0 -0
- /package/esm/PileupRenderer/{getAlignmentShapeColor.d.ts → renderers/getAlignmentShapeColor.d.ts} +0 -0
- /package/esm/{LinearReadCloudDisplay/util.d.ts → shared/canvasUtils.d.ts} +0 -0
- /package/esm/{LinearReadCloudDisplay/util.js → shared/canvasUtils.js} +0 -0
|
@@ -18,14 +18,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
18
18
|
upperCaseCDS: boolean;
|
|
19
19
|
charactersPerRow: number;
|
|
20
20
|
feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
|
|
21
|
-
mode:
|
|
21
|
+
mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
|
|
22
22
|
} & {
|
|
23
23
|
setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
|
|
24
24
|
setUpDownBp(f: number): void;
|
|
25
25
|
setIntronBp(f: number): void;
|
|
26
26
|
setUpperCaseCDS(f: boolean): void;
|
|
27
27
|
setShowCoordinates(f: "none" | "relative" | "genomic"): void;
|
|
28
|
-
setMode(mode:
|
|
28
|
+
setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
|
|
29
29
|
} & {
|
|
30
30
|
readonly showCoordinates: boolean;
|
|
31
31
|
readonly showGenomicCoordsOption: boolean;
|
|
@@ -68,14 +68,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
68
68
|
upperCaseCDS: boolean;
|
|
69
69
|
charactersPerRow: number;
|
|
70
70
|
feature: import("@jbrowse/core/util").SimpleFeatureSerialized | undefined;
|
|
71
|
-
mode:
|
|
71
|
+
mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein";
|
|
72
72
|
} & {
|
|
73
73
|
setFeature(f: import("@jbrowse/core/util").SimpleFeatureSerialized): void;
|
|
74
74
|
setUpDownBp(f: number): void;
|
|
75
75
|
setIntronBp(f: number): void;
|
|
76
76
|
setUpperCaseCDS(f: boolean): void;
|
|
77
77
|
setShowCoordinates(f: "none" | "relative" | "genomic"): void;
|
|
78
|
-
setMode(mode:
|
|
78
|
+
setMode(mode: "" | "genomic" | "gene" | "gene_collapsed_intron" | "gene_updownstream" | "cdna" | "cds" | "genomic_sequence_updownstream" | "protein"): void;
|
|
79
79
|
} & {
|
|
80
80
|
readonly showCoordinates: boolean;
|
|
81
81
|
readonly showGenomicCoordsOption: boolean;
|
|
@@ -220,7 +220,7 @@ class CramAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
220
220
|
const chrId = this.refNameToId(refName);
|
|
221
221
|
return chrId !== undefined
|
|
222
222
|
? cram.index.getEntriesForRange(chrId, start, end)
|
|
223
|
-
: [{ sliceBytes: 0 }];
|
|
223
|
+
: Promise.resolve([{ sliceBytes: 0 }]);
|
|
224
224
|
}));
|
|
225
225
|
return blockResults.flat().reduce((a, b) => a + b.sliceBytes, 0);
|
|
226
226
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
const
|
|
3
|
+
const readFeaturesToCIGAR_1 = require("./readFeaturesToCIGAR");
|
|
4
|
+
const readFeaturesToMismatches_1 = require("./readFeaturesToMismatches");
|
|
5
|
+
const util_1 = require("../shared/util");
|
|
5
6
|
class CramSlightlyLazyFeature {
|
|
6
7
|
constructor(record, _store) {
|
|
7
8
|
this.record = record;
|
|
@@ -67,7 +68,7 @@ class CramSlightlyLazyFeature {
|
|
|
67
68
|
return this.record.getReadBases();
|
|
68
69
|
}
|
|
69
70
|
get CIGAR() {
|
|
70
|
-
return (0,
|
|
71
|
+
return (0, readFeaturesToCIGAR_1.readFeaturesToCIGAR)(this.record.readFeatures, this.record.alignmentStart, this.record.readLength, this.record._refRegion);
|
|
71
72
|
}
|
|
72
73
|
id() {
|
|
73
74
|
return `${this._store.id}-${this.record.uniqueId}`;
|
|
@@ -88,7 +89,7 @@ class CramSlightlyLazyFeature {
|
|
|
88
89
|
return undefined;
|
|
89
90
|
}
|
|
90
91
|
get mismatches() {
|
|
91
|
-
return (0,
|
|
92
|
+
return (0, readFeaturesToMismatches_1.readFeaturesToMismatches)(this.record.readFeatures, this.start, this.qualRaw);
|
|
92
93
|
}
|
|
93
94
|
get fields() {
|
|
94
95
|
return {
|
|
@@ -119,6 +120,6 @@ class CramSlightlyLazyFeature {
|
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
122
|
exports.default = CramSlightlyLazyFeature;
|
|
122
|
-
(0,
|
|
123
|
-
(0,
|
|
124
|
-
(0,
|
|
123
|
+
(0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'fields');
|
|
124
|
+
(0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'CIGAR');
|
|
125
|
+
(0, util_1.cacheGetter)(CramSlightlyLazyFeature, 'mismatches');
|
|
@@ -2,17 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.readFeaturesToMismatches = readFeaturesToMismatches;
|
|
4
4
|
exports.readFeaturesToCIGAR = readFeaturesToCIGAR;
|
|
5
|
-
function readFeaturesToMismatches(readFeatures, start, qual) {
|
|
6
|
-
if (!readFeatures) {
|
|
7
|
-
return [];
|
|
8
|
-
}
|
|
5
|
+
function readFeaturesToMismatches(readFeatures = [], start, qual) {
|
|
9
6
|
const mismatches = new Array(readFeatures.length);
|
|
10
7
|
let j = 0;
|
|
11
8
|
let insLen = 0;
|
|
12
9
|
let refPos = 0;
|
|
13
10
|
let sublen = 0;
|
|
14
11
|
let lastPos = start;
|
|
15
|
-
for (const
|
|
12
|
+
for (const ret of readFeatures) {
|
|
13
|
+
const { refPos: p, code, pos, data, sub, ref } = ret;
|
|
16
14
|
sublen = refPos - lastPos;
|
|
17
15
|
lastPos = refPos;
|
|
18
16
|
if (sublen && insLen > 0) {
|
|
@@ -20,6 +18,7 @@ function readFeaturesToMismatches(readFeatures, start, qual) {
|
|
|
20
18
|
start: refPos,
|
|
21
19
|
type: 'insertion',
|
|
22
20
|
base: `${insLen}`,
|
|
21
|
+
insertedBases: data,
|
|
23
22
|
length: 0,
|
|
24
23
|
};
|
|
25
24
|
insLen = 0;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Mismatch } from '../shared/types';
|
|
2
|
+
import type { CramRecord } from '@gmod/cram';
|
|
3
|
+
type ReadFeatures = CramRecord['readFeatures'];
|
|
4
|
+
export declare function readFeaturesToMismatches(readFeatures: ReadFeatures, start: number, qual?: number[] | null): Mismatch[];
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readFeaturesToMismatches = readFeaturesToMismatches;
|
|
4
|
+
function readFeaturesToMismatches(readFeatures = [], start, qual) {
|
|
5
|
+
const mismatches = new Array(readFeatures.length);
|
|
6
|
+
let j = 0;
|
|
7
|
+
let refPos = 0;
|
|
8
|
+
let sublen = 0;
|
|
9
|
+
let lastPos = start;
|
|
10
|
+
let insertedBases = '';
|
|
11
|
+
for (const ret of readFeatures) {
|
|
12
|
+
const { refPos: p, code, pos, data, sub, ref } = ret;
|
|
13
|
+
sublen = refPos - lastPos;
|
|
14
|
+
lastPos = refPos;
|
|
15
|
+
if (sublen && insertedBases.length > 0) {
|
|
16
|
+
mismatches[j++] = {
|
|
17
|
+
start: refPos,
|
|
18
|
+
type: 'insertion',
|
|
19
|
+
base: `${insertedBases.length}`,
|
|
20
|
+
insertedBases,
|
|
21
|
+
length: 0,
|
|
22
|
+
};
|
|
23
|
+
insertedBases = '';
|
|
24
|
+
}
|
|
25
|
+
refPos = p - 1 - start;
|
|
26
|
+
if (code === 'X') {
|
|
27
|
+
mismatches[j++] = {
|
|
28
|
+
start: refPos,
|
|
29
|
+
length: 1,
|
|
30
|
+
base: sub,
|
|
31
|
+
qual: qual === null || qual === void 0 ? void 0 : qual[pos - 1],
|
|
32
|
+
altbase: ref === null || ref === void 0 ? void 0 : ref.toUpperCase(),
|
|
33
|
+
type: 'mismatch',
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
else if (code === 'I') {
|
|
37
|
+
mismatches[j++] = {
|
|
38
|
+
start: refPos,
|
|
39
|
+
type: 'insertion',
|
|
40
|
+
base: `${data.length}`,
|
|
41
|
+
insertedBases: data,
|
|
42
|
+
length: 0,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else if (code === 'N') {
|
|
46
|
+
mismatches[j++] = {
|
|
47
|
+
type: 'skip',
|
|
48
|
+
length: data,
|
|
49
|
+
start: refPos,
|
|
50
|
+
base: 'N',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
else if (code === 'S') {
|
|
54
|
+
const len = data.length;
|
|
55
|
+
mismatches[j++] = {
|
|
56
|
+
start: refPos,
|
|
57
|
+
type: 'softclip',
|
|
58
|
+
base: `S${len}`,
|
|
59
|
+
cliplen: len,
|
|
60
|
+
length: 1,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
else if (code === 'P') {
|
|
64
|
+
}
|
|
65
|
+
else if (code === 'H') {
|
|
66
|
+
const len = data;
|
|
67
|
+
mismatches[j++] = {
|
|
68
|
+
start: refPos,
|
|
69
|
+
type: 'hardclip',
|
|
70
|
+
base: `H${len}`,
|
|
71
|
+
cliplen: len,
|
|
72
|
+
length: 1,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
else if (code === 'D') {
|
|
76
|
+
mismatches[j++] = {
|
|
77
|
+
type: 'deletion',
|
|
78
|
+
length: data,
|
|
79
|
+
start: refPos,
|
|
80
|
+
base: '*',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
else if (code === 'b') {
|
|
84
|
+
}
|
|
85
|
+
else if (code === 'q') {
|
|
86
|
+
}
|
|
87
|
+
else if (code === 'B') {
|
|
88
|
+
}
|
|
89
|
+
else if (code === 'i') {
|
|
90
|
+
insertedBases += data;
|
|
91
|
+
}
|
|
92
|
+
else if (code === 'Q') {
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (sublen && insertedBases.length > 0) {
|
|
96
|
+
mismatches[j++] = {
|
|
97
|
+
start: refPos,
|
|
98
|
+
type: 'insertion',
|
|
99
|
+
base: `${insertedBases.length}`,
|
|
100
|
+
insertedBases,
|
|
101
|
+
length: 0,
|
|
102
|
+
};
|
|
103
|
+
insertedBases = '';
|
|
104
|
+
}
|
|
105
|
+
return mismatches.slice(0, j);
|
|
106
|
+
}
|
|
@@ -5,13 +5,17 @@ const configuration_1 = require("@jbrowse/core/configuration");
|
|
|
5
5
|
const ui_1 = require("@jbrowse/core/ui");
|
|
6
6
|
const mobx_react_1 = require("mobx-react");
|
|
7
7
|
const mui_1 = require("tss-react/mui");
|
|
8
|
-
const useStyles = (0, mui_1.makeStyles)()({
|
|
8
|
+
const useStyles = (0, mui_1.makeStyles)()(theme => ({
|
|
9
9
|
resizeHandle: {
|
|
10
10
|
height: 5,
|
|
11
11
|
position: 'absolute',
|
|
12
12
|
zIndex: 2,
|
|
13
|
+
background: 'transparent',
|
|
14
|
+
'&:hover': {
|
|
15
|
+
background: theme.palette.divider,
|
|
16
|
+
},
|
|
13
17
|
},
|
|
14
|
-
});
|
|
18
|
+
}));
|
|
15
19
|
const AlignmentsDisplay = (0, mobx_react_1.observer)(function AlignmentsDisplay({ model, }) {
|
|
16
20
|
var _a;
|
|
17
21
|
const { PileupDisplay, SNPCoverageDisplay } = model;
|
|
@@ -99,8 +99,9 @@ function stateModelFactory(pluginManager, configSchema) {
|
|
|
99
99
|
};
|
|
100
100
|
},
|
|
101
101
|
notReady() {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
var _a, _b;
|
|
103
|
+
return (((_a = self.PileupDisplay) === null || _a === void 0 ? void 0 : _a.renderProps().notReady) ||
|
|
104
|
+
((_b = self.SNPCoverageDisplay) === null || _b === void 0 ? void 0 : _b.renderProps().notReady));
|
|
104
105
|
},
|
|
105
106
|
}))
|
|
106
107
|
.actions(self => ({
|
|
@@ -181,6 +181,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
|
|
|
181
181
|
regionCannotBeRenderedText(_region: import("@jbrowse/core/util").Region): "" | "Force load to see features";
|
|
182
182
|
regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
|
|
183
183
|
} & {
|
|
184
|
+
mouseoverExtraInformation: string | undefined;
|
|
184
185
|
featureIdUnderMouse: undefined | string;
|
|
185
186
|
contextMenuFeature: undefined | Feature;
|
|
186
187
|
} & {
|
|
@@ -195,9 +196,22 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
|
|
|
195
196
|
} & {
|
|
196
197
|
readonly features: import("@jbrowse/core/util/compositeMap").default<string, Feature>;
|
|
197
198
|
readonly featureUnderMouse: Feature | undefined;
|
|
199
|
+
readonly layoutFeatures: import("@jbrowse/core/util/compositeMap").default<string, [number, number, number, number] | [number, number, number, number, {
|
|
200
|
+
label?: string;
|
|
201
|
+
description?: string;
|
|
202
|
+
refName: string;
|
|
203
|
+
}]>;
|
|
198
204
|
getFeatureOverlapping(blockKey: string, x: number, y: number): string | undefined;
|
|
199
|
-
getFeatureByID(blockKey: string, id: string): [number, number, number, number] |
|
|
200
|
-
|
|
205
|
+
getFeatureByID(blockKey: string, id: string): ([number, number, number, number] | [number, number, number, number, {
|
|
206
|
+
label?: string;
|
|
207
|
+
description?: string;
|
|
208
|
+
refName: string;
|
|
209
|
+
}]) | undefined;
|
|
210
|
+
searchFeatureByID(id: string): ([number, number, number, number] | [number, number, number, number, {
|
|
211
|
+
label?: string;
|
|
212
|
+
description?: string;
|
|
213
|
+
refName: string;
|
|
214
|
+
}]) | undefined;
|
|
201
215
|
} & {
|
|
202
216
|
addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
|
|
203
217
|
deleteBlock(key: string): void;
|
|
@@ -206,6 +220,7 @@ export declare function SharedLinearPileupDisplayMixin(configSchema: AnyConfigur
|
|
|
206
220
|
clearFeatureSelection(): void;
|
|
207
221
|
setFeatureIdUnderMouse(feature?: string): void;
|
|
208
222
|
setContextMenuFeature(feature?: Feature): void;
|
|
223
|
+
setMouseoverExtraInformation(extra?: string): void;
|
|
209
224
|
} & {
|
|
210
225
|
reload(): Promise<void>;
|
|
211
226
|
} & {
|
|
@@ -54,8 +54,8 @@ const LinearPileupDisplayBlurb_1 = __importDefault(require("./components/LinearP
|
|
|
54
54
|
const getUniqueTags_1 = require("../shared/getUniqueTags");
|
|
55
55
|
const FilterByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/FilterByTagDialog'))));
|
|
56
56
|
const ColorByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/ColorByTagDialog'))));
|
|
57
|
-
const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('
|
|
58
|
-
const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('
|
|
57
|
+
const SetFeatureHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/SetFeatureHeightDialog'))));
|
|
58
|
+
const SetMaxHeightDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('../shared/components/SetMaxHeightDialog'))));
|
|
59
59
|
const rendererTypes = new Map([
|
|
60
60
|
['pileup', 'PileupRenderer'],
|
|
61
61
|
['svg', 'SvgFeatureRenderer'],
|
|
@@ -53,7 +53,7 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
53
53
|
maxLength: 2,
|
|
54
54
|
'data-testid': 'group-tag-name-input',
|
|
55
55
|
},
|
|
56
|
-
} }), error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : loading ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, {
|
|
56
|
+
} }), error ? ((0, jsx_runtime_1.jsx)(ui_1.ErrorMessage, { error: error })) : loading ? ((0, jsx_runtime_1.jsx)(ui_1.LoadingEllipses, { message: "Loading unique tags" })) : tagSet ? ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("div", { children: ["Found unique ", tag, " values:"] }), (0, jsx_runtime_1.jsx)("div", { children: tagSet.join(', ') })] })) : null] })) : null] }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", disabled: !tagSet, autoFocus: true, onClick: () => {
|
|
57
57
|
const track = (0, util_1.getContainingTrack)(model);
|
|
58
58
|
const trackConf = structuredClone((0, mobx_state_tree_1.getSnapshot)(track.configuration));
|
|
59
59
|
const session = (0, util_1.getSession)(model);
|
|
@@ -62,7 +62,7 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
62
62
|
if (tagSet) {
|
|
63
63
|
const ret = [...tagSet, undefined];
|
|
64
64
|
for (const tagValue of ret) {
|
|
65
|
-
const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${
|
|
65
|
+
const t1 = `${trackConf.trackId}-${tag}:${tagValue}-${Date.now()}-sessionTrack`;
|
|
66
66
|
session.addTrackConf({
|
|
67
67
|
...trackConf,
|
|
68
68
|
trackId: t1,
|
|
@@ -90,8 +90,8 @@ const GroupByTagDialog = (0, mobx_react_1.observer)(function (props) {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
else if (type === 'strand') {
|
|
93
|
-
const t1 = `${trackConf.trackId}-${tag}:(-)-${
|
|
94
|
-
const t2 = `${trackConf.trackId}-${tag}:(+)-${
|
|
93
|
+
const t1 = `${trackConf.trackId}-${tag}:(-)-${Date.now()}-sessionTrack`;
|
|
94
|
+
const t2 = `${trackConf.trackId}-${tag}:(+)-${Date.now()}-sessionTrack`;
|
|
95
95
|
session.addTrackConf({
|
|
96
96
|
...trackConf,
|
|
97
97
|
trackId: t1,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ColorBy } from '../../shared/types';
|
|
2
|
+
declare const SetModificationThresholdDialog: (props: {
|
|
3
|
+
model: {
|
|
4
|
+
modificationThreshold: number;
|
|
5
|
+
colorBy?: ColorBy;
|
|
6
|
+
setColorScheme: (colorBy: ColorBy) => void;
|
|
7
|
+
};
|
|
8
|
+
handleClose: () => void;
|
|
9
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export default SetModificationThresholdDialog;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const ui_1 = require("@jbrowse/core/ui");
|
|
6
|
+
const material_1 = require("@mui/material");
|
|
7
|
+
const mobx_react_1 = require("mobx-react");
|
|
8
|
+
const SetModificationThresholdDialog = (0, mobx_react_1.observer)(function (props) {
|
|
9
|
+
const { model, handleClose } = props;
|
|
10
|
+
const [threshold, setThreshold] = (0, react_1.useState)(String(model.modificationThreshold));
|
|
11
|
+
const numThreshold = Number.parseFloat(threshold);
|
|
12
|
+
const validThreshold = !Number.isNaN(numThreshold) && numThreshold >= 0 && numThreshold <= 100;
|
|
13
|
+
return ((0, jsx_runtime_1.jsx)(ui_1.Dialog, { open: true, onClose: handleClose, title: "Adjust modification threshold", children: (0, jsx_runtime_1.jsxs)(material_1.DialogContent, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, { children: "Set the minimum probability threshold for displaying modifications" }), (0, jsx_runtime_1.jsx)(material_1.Typography, { color: "textSecondary", children: "Only modifications with probability above this threshold will be displayed (0-100%)" }), (0, jsx_runtime_1.jsx)(material_1.TextField, { value: threshold, onChange: event => {
|
|
14
|
+
setThreshold(event.target.value);
|
|
15
|
+
}, placeholder: "Enter threshold (e.g., 10)", error: threshold !== '' && !validThreshold, helperText: threshold !== '' && !validThreshold
|
|
16
|
+
? 'Must be a number between 0 and 100'
|
|
17
|
+
: '', autoComplete: "off", type: "number", slotProps: {
|
|
18
|
+
htmlInput: {
|
|
19
|
+
min: 0,
|
|
20
|
+
max: 100,
|
|
21
|
+
step: 1,
|
|
22
|
+
},
|
|
23
|
+
} }), (0, jsx_runtime_1.jsxs)(material_1.DialogActions, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "primary", type: "submit", autoFocus: true, disabled: !validThreshold, onClick: () => {
|
|
24
|
+
const currentColorBy = model.colorBy || {
|
|
25
|
+
type: 'modifications',
|
|
26
|
+
};
|
|
27
|
+
model.setColorScheme({
|
|
28
|
+
...currentColorBy,
|
|
29
|
+
modifications: {
|
|
30
|
+
...currentColorBy.modifications,
|
|
31
|
+
threshold: numThreshold,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
handleClose();
|
|
35
|
+
}, children: "Submit" }), (0, jsx_runtime_1.jsx)(material_1.Button, { variant: "contained", color: "secondary", onClick: () => {
|
|
36
|
+
handleClose();
|
|
37
|
+
}, children: "Cancel" })] })] }) }));
|
|
38
|
+
});
|
|
39
|
+
exports.default = SetModificationThresholdDialog;
|
|
@@ -14,6 +14,7 @@ export declare function doAfterAttach(model: {
|
|
|
14
14
|
setCurrSortBpPerPx: (arg: number) => void;
|
|
15
15
|
setError: (arg: unknown) => void;
|
|
16
16
|
updateVisibleModifications: (arg: ModificationType[]) => void;
|
|
17
|
+
setSimplexModifications: (arg: string[]) => void;
|
|
17
18
|
setModificationsReady: (arg: boolean) => void;
|
|
18
19
|
setSortReady: (arg: boolean) => void;
|
|
19
20
|
setMessage: (arg: string) => void;
|
|
@@ -58,13 +58,14 @@ function doAfterAttach(model) {
|
|
|
58
58
|
}
|
|
59
59
|
const { adapterConfig } = model;
|
|
60
60
|
const { staticBlocks } = (0, util_1.getContainingView)(model);
|
|
61
|
-
const
|
|
61
|
+
const { modifications, simplexModifications } = await (0, getUniqueModifications_1.getUniqueModifications)({
|
|
62
62
|
model,
|
|
63
63
|
adapterConfig,
|
|
64
64
|
blocks: staticBlocks,
|
|
65
65
|
});
|
|
66
66
|
if ((0, mobx_state_tree_1.isAlive)(model)) {
|
|
67
|
-
model.updateVisibleModifications(
|
|
67
|
+
model.updateVisibleModifications(modifications);
|
|
68
|
+
model.setSimplexModifications(simplexModifications);
|
|
68
69
|
model.setModificationsReady(true);
|
|
69
70
|
}
|
|
70
71
|
}, { delay: 1000 });
|
|
@@ -186,6 +186,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
186
186
|
regionCannotBeRenderedText(_region: import("@jbrowse/core/util").Region): "" | "Force load to see features";
|
|
187
187
|
regionCannotBeRendered(_region: import("@jbrowse/core/util").Region): import("react/jsx-runtime").JSX.Element | null;
|
|
188
188
|
} & {
|
|
189
|
+
mouseoverExtraInformation: string | undefined;
|
|
189
190
|
featureIdUnderMouse: undefined | string;
|
|
190
191
|
contextMenuFeature: undefined | import("@jbrowse/core/util").Feature;
|
|
191
192
|
} & {
|
|
@@ -200,9 +201,22 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
200
201
|
} & {
|
|
201
202
|
readonly features: import("@jbrowse/core/util/compositeMap").default<string, import("@jbrowse/core/util").Feature>;
|
|
202
203
|
readonly featureUnderMouse: import("@jbrowse/core/util").Feature | undefined;
|
|
204
|
+
readonly layoutFeatures: import("@jbrowse/core/util/compositeMap").default<string, [number, number, number, number] | [number, number, number, number, {
|
|
205
|
+
label?: string;
|
|
206
|
+
description?: string;
|
|
207
|
+
refName: string;
|
|
208
|
+
}]>;
|
|
203
209
|
getFeatureOverlapping(blockKey: string, x: number, y: number): string | undefined;
|
|
204
|
-
getFeatureByID(blockKey: string, id: string): [number, number, number, number] |
|
|
205
|
-
|
|
210
|
+
getFeatureByID(blockKey: string, id: string): ([number, number, number, number] | [number, number, number, number, {
|
|
211
|
+
label?: string;
|
|
212
|
+
description?: string;
|
|
213
|
+
refName: string;
|
|
214
|
+
}]) | undefined;
|
|
215
|
+
searchFeatureByID(id: string): ([number, number, number, number] | [number, number, number, number, {
|
|
216
|
+
label?: string;
|
|
217
|
+
description?: string;
|
|
218
|
+
refName: string;
|
|
219
|
+
}]) | undefined;
|
|
206
220
|
} & {
|
|
207
221
|
addBlock(key: string, block: import("@jbrowse/core/util/blockTypes").BaseBlock): void;
|
|
208
222
|
deleteBlock(key: string): void;
|
|
@@ -211,6 +225,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
211
225
|
clearFeatureSelection(): void;
|
|
212
226
|
setFeatureIdUnderMouse(feature?: string): void;
|
|
213
227
|
setContextMenuFeature(feature?: import("@jbrowse/core/util").Feature): void;
|
|
228
|
+
setMouseoverExtraInformation(extra?: string): void;
|
|
214
229
|
} & {
|
|
215
230
|
reload(): Promise<void>;
|
|
216
231
|
} & {
|
|
@@ -306,10 +321,12 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
306
321
|
sortReady: boolean;
|
|
307
322
|
currSortBpPerPx: number;
|
|
308
323
|
visibleModifications: import("mobx").ObservableMap<string, ModificationTypeWithColor>;
|
|
324
|
+
simplexModifications: Set<string>;
|
|
309
325
|
modificationsReady: boolean;
|
|
310
326
|
} & {
|
|
311
327
|
setCurrSortBpPerPx(n: number): void;
|
|
312
328
|
updateVisibleModifications(uniqueModifications: ModificationType[]): void;
|
|
329
|
+
setSimplexModifications(simplex: string[]): void;
|
|
313
330
|
setModificationsReady(flag: boolean): void;
|
|
314
331
|
setSortReady(flag: boolean): void;
|
|
315
332
|
clearSelected(): void;
|
|
@@ -321,6 +338,7 @@ declare function stateModelFactory(configSchema: AnyConfigurationSchemaType): im
|
|
|
321
338
|
reload(): void;
|
|
322
339
|
} & {
|
|
323
340
|
readonly visibleModificationTypes: string[];
|
|
341
|
+
readonly modificationThreshold: any;
|
|
324
342
|
readonly rendererConfig: {
|
|
325
343
|
[x: string]: any;
|
|
326
344
|
} & import("mobx-state-tree/dist/internal").NonEmptyObject & {
|
|
@@ -46,9 +46,11 @@ const Workspaces_1 = __importDefault(require("@mui/icons-material/Workspaces"));
|
|
|
46
46
|
const mobx_1 = require("mobx");
|
|
47
47
|
const mobx_state_tree_1 = require("mobx-state-tree");
|
|
48
48
|
const SharedLinearPileupDisplayMixin_1 = require("./SharedLinearPileupDisplayMixin");
|
|
49
|
+
const modificationData_1 = require("../shared/modificationData");
|
|
49
50
|
const util_2 = require("../util");
|
|
50
51
|
const SortByTagDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SortByTagDialog'))));
|
|
51
52
|
const GroupByDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/GroupByDialog'))));
|
|
53
|
+
const SetModificationThresholdDialog = (0, react_1.lazy)(() => Promise.resolve().then(() => __importStar(require('./components/SetModificationThresholdDialog'))));
|
|
52
54
|
function stateModelFactory(configSchema) {
|
|
53
55
|
return mobx_state_tree_1.types
|
|
54
56
|
.compose('LinearPileupDisplay', (0, SharedLinearPileupDisplayMixin_1.SharedLinearPileupDisplayMixin)(configSchema), mobx_state_tree_1.types.model({
|
|
@@ -62,6 +64,7 @@ function stateModelFactory(configSchema) {
|
|
|
62
64
|
sortReady: false,
|
|
63
65
|
currSortBpPerPx: 0,
|
|
64
66
|
visibleModifications: mobx_1.observable.map({}),
|
|
67
|
+
simplexModifications: new Set(),
|
|
65
68
|
modificationsReady: false,
|
|
66
69
|
}))
|
|
67
70
|
.actions(self => ({
|
|
@@ -78,6 +81,11 @@ function stateModelFactory(configSchema) {
|
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
83
|
},
|
|
84
|
+
setSimplexModifications(simplex) {
|
|
85
|
+
for (const entry of simplex) {
|
|
86
|
+
self.simplexModifications.add(entry);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
81
89
|
setModificationsReady(flag) {
|
|
82
90
|
self.modificationsReady = flag;
|
|
83
91
|
},
|
|
@@ -130,6 +138,10 @@ function stateModelFactory(configSchema) {
|
|
|
130
138
|
get visibleModificationTypes() {
|
|
131
139
|
return [...self.visibleModifications.keys()];
|
|
132
140
|
},
|
|
141
|
+
get modificationThreshold() {
|
|
142
|
+
var _a, _b, _c;
|
|
143
|
+
return (_c = (_b = (_a = self.colorBy) === null || _a === void 0 ? void 0 : _a.modifications) === null || _b === void 0 ? void 0 : _b.threshold) !== null && _c !== void 0 ? _c : 10;
|
|
144
|
+
},
|
|
133
145
|
get rendererConfig() {
|
|
134
146
|
const { featureHeight, noSpacing, trackMaxHeight, mismatchAlpha, rendererTypeName, hideSmallIndels, } = self;
|
|
135
147
|
const configBlob = (0, configuration_1.getConf)(self, ['renderers', rendererTypeName]) || {};
|
|
@@ -163,13 +175,14 @@ function stateModelFactory(configSchema) {
|
|
|
163
175
|
const { trackMenuItems: superTrackMenuItems, renderPropsPre: superRenderPropsPre, renderProps: superRenderProps, colorSchemeSubMenuItems: superColorSchemeSubMenuItems, } = self;
|
|
164
176
|
return {
|
|
165
177
|
renderPropsPre() {
|
|
166
|
-
const { sortedBy, showSoftClipping, visibleModifications } = self;
|
|
178
|
+
const { sortedBy, showSoftClipping, visibleModifications, simplexModifications, } = self;
|
|
167
179
|
const superProps = superRenderPropsPre();
|
|
168
180
|
return {
|
|
169
181
|
...superProps,
|
|
170
182
|
showSoftClip: showSoftClipping,
|
|
171
183
|
sortedBy,
|
|
172
184
|
visibleModifications: Object.fromEntries(visibleModifications.toJSON()),
|
|
185
|
+
simplexModifications: [...simplexModifications],
|
|
173
186
|
};
|
|
174
187
|
},
|
|
175
188
|
renderProps() {
|
|
@@ -232,22 +245,26 @@ function stateModelFactory(configSchema) {
|
|
|
232
245
|
subMenu: self.modificationsReady
|
|
233
246
|
? [
|
|
234
247
|
{
|
|
235
|
-
label:
|
|
248
|
+
label: `All modifications (>= ${self.modificationThreshold}% prob)`,
|
|
236
249
|
onClick: () => {
|
|
237
250
|
self.setColorScheme({
|
|
238
251
|
type: 'modifications',
|
|
252
|
+
modifications: {
|
|
253
|
+
threshold: self.modificationThreshold,
|
|
254
|
+
},
|
|
239
255
|
});
|
|
240
256
|
},
|
|
241
257
|
},
|
|
242
258
|
...self.visibleModificationTypes.map(key => {
|
|
243
259
|
var _a;
|
|
244
260
|
return ({
|
|
245
|
-
label: `Show only ${((_a =
|
|
261
|
+
label: `Show only ${((_a = modificationData_1.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (>= ${self.modificationThreshold}% prob)`,
|
|
246
262
|
onClick: () => {
|
|
247
263
|
self.setColorScheme({
|
|
248
264
|
type: 'modifications',
|
|
249
265
|
modifications: {
|
|
250
266
|
isolatedModification: key,
|
|
267
|
+
threshold: self.modificationThreshold,
|
|
251
268
|
},
|
|
252
269
|
});
|
|
253
270
|
},
|
|
@@ -261,6 +278,7 @@ function stateModelFactory(configSchema) {
|
|
|
261
278
|
type: 'modifications',
|
|
262
279
|
modifications: {
|
|
263
280
|
twoColor: true,
|
|
281
|
+
threshold: self.modificationThreshold,
|
|
264
282
|
},
|
|
265
283
|
});
|
|
266
284
|
},
|
|
@@ -268,13 +286,14 @@ function stateModelFactory(configSchema) {
|
|
|
268
286
|
...self.visibleModificationTypes.map(key => {
|
|
269
287
|
var _a;
|
|
270
288
|
return ({
|
|
271
|
-
label: `Show only ${((_a =
|
|
289
|
+
label: `Show only ${((_a = modificationData_1.modificationData[key]) === null || _a === void 0 ? void 0 : _a.name) || key} (<50% prob colored blue)`,
|
|
272
290
|
onClick: () => {
|
|
273
291
|
self.setColorScheme({
|
|
274
292
|
type: 'modifications',
|
|
275
293
|
modifications: {
|
|
276
294
|
isolatedModification: key,
|
|
277
295
|
twoColor: true,
|
|
296
|
+
threshold: self.modificationThreshold,
|
|
278
297
|
},
|
|
279
298
|
});
|
|
280
299
|
},
|
|
@@ -286,9 +305,25 @@ function stateModelFactory(configSchema) {
|
|
|
286
305
|
onClick: () => {
|
|
287
306
|
self.setColorScheme({
|
|
288
307
|
type: 'methylation',
|
|
308
|
+
modifications: {
|
|
309
|
+
threshold: self.modificationThreshold,
|
|
310
|
+
},
|
|
289
311
|
});
|
|
290
312
|
},
|
|
291
313
|
},
|
|
314
|
+
{ type: 'divider' },
|
|
315
|
+
{
|
|
316
|
+
label: `Adjust threshold (${self.modificationThreshold}%)`,
|
|
317
|
+
onClick: () => {
|
|
318
|
+
(0, util_1.getSession)(self).queueDialog(handleClose => [
|
|
319
|
+
SetModificationThresholdDialog,
|
|
320
|
+
{
|
|
321
|
+
model: self,
|
|
322
|
+
handleClose,
|
|
323
|
+
},
|
|
324
|
+
]);
|
|
325
|
+
},
|
|
326
|
+
},
|
|
292
327
|
]
|
|
293
328
|
: [
|
|
294
329
|
{
|
|
@@ -46,7 +46,7 @@ function register(pluginManager) {
|
|
|
46
46
|
const configSchema = (0, configSchema_1.default)(pluginManager);
|
|
47
47
|
return new DisplayType_1.default({
|
|
48
48
|
name: 'LinearReadArcsDisplay',
|
|
49
|
-
displayName: '
|
|
49
|
+
displayName: 'Read arc display',
|
|
50
50
|
configSchema,
|
|
51
51
|
stateModel: (0, model_1.default)(configSchema),
|
|
52
52
|
trackType: 'AlignmentsTrack',
|