@jbrowse/plugin-alignments 2.3.4 → 2.4.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/BamAdapter/BamAdapter.js +2 -2
- package/dist/BamAdapter/BamAdapter.js.map +1 -1
- package/dist/BamAdapter/BamSlightlyLazyFeature.js +2 -2
- package/dist/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
- package/dist/CramAdapter/CramAdapter.js +2 -2
- package/dist/CramAdapter/CramAdapter.js.map +1 -1
- package/dist/CramAdapter/CramSlightlyLazyFeature.js +2 -2
- package/dist/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
- package/dist/CramAdapter/util.js +10 -10
- package/dist/CramAdapter/util.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +2 -2
- package/dist/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/models/configSchema.js +7 -0
- package/dist/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
- package/dist/LinearAlignmentsDisplay/models/model.d.ts +21 -5
- package/dist/LinearAlignmentsDisplay/models/model.js +22 -6
- package/dist/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/dist/LinearPileupDisplay/index.d.ts +2 -3
- package/dist/LinearPileupDisplay/index.js +4 -2
- package/dist/LinearPileupDisplay/index.js.map +1 -1
- package/dist/LinearPileupDisplay/model.d.ts +70 -9
- package/dist/LinearPileupDisplay/model.js +4 -4
- package/dist/LinearPileupDisplay/model.js.map +1 -1
- package/dist/LinearReadArcsDisplay/components/ReactComponent.js +14 -11
- package/dist/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
- package/dist/LinearReadArcsDisplay/model.d.ts +77 -28
- package/dist/LinearReadArcsDisplay/model.js +16 -4
- package/dist/LinearReadArcsDisplay/model.js.map +1 -1
- package/dist/LinearReadCloudDisplay/model.d.ts +71 -19
- package/dist/LinearReadCloudDisplay/model.js +15 -3
- package/dist/LinearReadCloudDisplay/model.js.map +1 -1
- package/dist/LinearSNPCoverageDisplay/models/model.d.ts +8 -13
- package/dist/MismatchParser/index.js +4 -6
- package/dist/MismatchParser/index.js.map +1 -1
- package/dist/NestedFrequencyTable.js +3 -13
- package/dist/NestedFrequencyTable.js.map +1 -1
- package/dist/PileupRPC/rpcMethods.d.ts +3 -4
- package/dist/PileupRPC/rpcMethods.js +6 -6
- package/dist/PileupRPC/rpcMethods.js.map +1 -1
- package/dist/PileupRenderer/PileupRenderer.d.ts +6 -4
- package/dist/PileupRenderer/PileupRenderer.js +32 -38
- package/dist/PileupRenderer/PileupRenderer.js.map +1 -1
- package/dist/PileupRenderer/components/PileupRendering.js +2 -2
- package/dist/PileupRenderer/components/PileupRendering.js.map +1 -1
- package/dist/PileupRenderer/configSchema.js +1 -1
- package/dist/PileupRenderer/configSchema.js.map +1 -1
- package/dist/PileupRenderer/sortUtil.js +5 -4
- package/dist/PileupRenderer/sortUtil.js.map +1 -1
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js +10 -7
- package/dist/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
- package/dist/index.d.ts +3 -5
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/esm/BamAdapter/BamAdapter.js +2 -2
- package/esm/BamAdapter/BamAdapter.js.map +1 -1
- package/esm/BamAdapter/BamSlightlyLazyFeature.js +2 -2
- package/esm/BamAdapter/BamSlightlyLazyFeature.js.map +1 -1
- package/esm/CramAdapter/CramAdapter.js +2 -2
- package/esm/CramAdapter/CramAdapter.js.map +1 -1
- package/esm/CramAdapter/CramSlightlyLazyFeature.js +2 -2
- package/esm/CramAdapter/CramSlightlyLazyFeature.js.map +1 -1
- package/esm/CramAdapter/util.js +10 -10
- package/esm/CramAdapter/util.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js +2 -2
- package/esm/LinearAlignmentsDisplay/components/AlignmentsDisplay.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/models/configSchema.js +7 -0
- package/esm/LinearAlignmentsDisplay/models/configSchema.js.map +1 -1
- package/esm/LinearAlignmentsDisplay/models/model.d.ts +21 -5
- package/esm/LinearAlignmentsDisplay/models/model.js +22 -6
- package/esm/LinearAlignmentsDisplay/models/model.js.map +1 -1
- package/esm/LinearPileupDisplay/index.d.ts +2 -3
- package/esm/LinearPileupDisplay/index.js +2 -1
- package/esm/LinearPileupDisplay/index.js.map +1 -1
- package/esm/LinearPileupDisplay/model.d.ts +70 -9
- package/esm/LinearPileupDisplay/model.js +4 -4
- package/esm/LinearPileupDisplay/model.js.map +1 -1
- package/esm/LinearReadArcsDisplay/components/ReactComponent.js +14 -11
- package/esm/LinearReadArcsDisplay/components/ReactComponent.js.map +1 -1
- package/esm/LinearReadArcsDisplay/model.d.ts +77 -28
- package/esm/LinearReadArcsDisplay/model.js +16 -4
- package/esm/LinearReadArcsDisplay/model.js.map +1 -1
- package/esm/LinearReadCloudDisplay/model.d.ts +71 -19
- package/esm/LinearReadCloudDisplay/model.js +15 -3
- package/esm/LinearReadCloudDisplay/model.js.map +1 -1
- package/esm/LinearSNPCoverageDisplay/models/model.d.ts +8 -13
- package/esm/MismatchParser/index.js +4 -6
- package/esm/MismatchParser/index.js.map +1 -1
- package/esm/NestedFrequencyTable.js +3 -13
- package/esm/NestedFrequencyTable.js.map +1 -1
- package/esm/PileupRPC/rpcMethods.d.ts +3 -4
- package/esm/PileupRPC/rpcMethods.js +3 -4
- package/esm/PileupRPC/rpcMethods.js.map +1 -1
- package/esm/PileupRenderer/PileupRenderer.d.ts +6 -4
- package/esm/PileupRenderer/PileupRenderer.js +32 -38
- package/esm/PileupRenderer/PileupRenderer.js.map +1 -1
- package/esm/PileupRenderer/components/PileupRendering.js +2 -2
- package/esm/PileupRenderer/components/PileupRendering.js.map +1 -1
- package/esm/PileupRenderer/configSchema.js +1 -1
- package/esm/PileupRenderer/configSchema.js.map +1 -1
- package/esm/PileupRenderer/sortUtil.js +5 -4
- package/esm/PileupRenderer/sortUtil.js.map +1 -1
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js +10 -7
- package/esm/SNPCoverageRenderer/SNPCoverageRenderer.js.map +1 -1
- package/esm/index.d.ts +3 -5
- package/esm/index.js +3 -3
- package/esm/index.js.map +1 -1
- package/package.json +2 -2
- package/src/AlignmentsFeatureDetail/__snapshots__/index.test.tsx.snap +13 -13
- package/src/AlignmentsFeatureDetail/index.test.tsx +1 -1
- package/src/BamAdapter/BamAdapter.ts +2 -2
- package/src/BamAdapter/BamSlightlyLazyFeature.ts +2 -2
- package/src/CramAdapter/CramAdapter.ts +2 -2
- package/src/CramAdapter/CramSlightlyLazyFeature.ts +2 -2
- package/src/CramAdapter/util.ts +10 -10
- package/src/LinearAlignmentsDisplay/components/AlignmentsDisplay.tsx +2 -2
- package/src/LinearAlignmentsDisplay/models/configSchema.test.ts +1 -1
- package/src/LinearAlignmentsDisplay/models/configSchema.ts +8 -0
- package/src/LinearAlignmentsDisplay/models/model.tsx +21 -6
- package/src/LinearPileupDisplay/index.ts +2 -4
- package/src/LinearPileupDisplay/model.ts +4 -4
- package/src/LinearReadArcsDisplay/components/ReactComponent.tsx +14 -12
- package/src/LinearReadArcsDisplay/model.tsx +23 -5
- package/src/LinearReadCloudDisplay/model.tsx +23 -7
- package/src/LinearSNPCoverageDisplay/models/configSchema.test.ts +1 -1
- package/src/MismatchParser/index.ts +6 -8
- package/src/NestedFrequencyTable.ts +3 -11
- package/src/PileupRPC/rpcMethods.ts +3 -9
- package/src/PileupRenderer/PileupRenderer.ts +49 -65
- package/src/PileupRenderer/components/PileupRendering.tsx +2 -2
- package/src/PileupRenderer/configSchema.ts +1 -1
- package/src/PileupRenderer/sortUtil.ts +5 -4
- package/src/SNPCoverageRenderer/SNPCoverageRenderer.ts +14 -13
- package/src/index.ts +5 -10
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export {
|
|
6
|
-
PileupGetReducedFeatures,
|
|
7
|
-
PileupGetVisibleModifications,
|
|
8
|
-
PileupGetGlobalValueForTag,
|
|
9
|
-
}
|
|
1
|
+
export { default as PileupGetReducedFeatures } from './methods/GetReducedFeatures'
|
|
2
|
+
export { default as PileupGetVisibleModifications } from './methods/GetVisibleModifications'
|
|
3
|
+
export { default as PileupGetGlobalValueForTag } from './methods/GetGlobalValueForTag'
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { Theme } from '@mui/material/styles'
|
|
2
2
|
import BoxRendererType, {
|
|
3
|
-
RenderArgs,
|
|
4
|
-
RenderArgsSerialized,
|
|
5
3
|
RenderArgsDeserialized as BoxRenderArgsDeserialized,
|
|
6
|
-
RenderResults,
|
|
7
|
-
ResultsSerialized,
|
|
8
|
-
ResultsDeserialized,
|
|
9
4
|
} from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType'
|
|
10
5
|
import { createJBrowseTheme } from '@jbrowse/core/ui'
|
|
11
6
|
import {
|
|
@@ -74,11 +69,9 @@ function getColorBaseMap(theme: Theme) {
|
|
|
74
69
|
}
|
|
75
70
|
|
|
76
71
|
function getContrastBaseMap(theme: Theme) {
|
|
72
|
+
const map = getColorBaseMap(theme)
|
|
77
73
|
return Object.fromEntries(
|
|
78
|
-
Object.entries(
|
|
79
|
-
key,
|
|
80
|
-
theme.palette.getContrastText(value),
|
|
81
|
-
]),
|
|
74
|
+
Object.entries(map).map(([k, v]) => [k, theme.palette.getContrastText(v)]),
|
|
82
75
|
)
|
|
83
76
|
}
|
|
84
77
|
|
|
@@ -191,13 +184,10 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
191
184
|
}
|
|
192
185
|
}
|
|
193
186
|
}
|
|
187
|
+
const s = feature.get('start') - expansionBefore
|
|
188
|
+
const e = feature.get('end') + expansionAfter
|
|
194
189
|
|
|
195
|
-
const [leftPx, rightPx] = bpSpanPx(
|
|
196
|
-
feature.get('start') - expansionBefore,
|
|
197
|
-
feature.get('end') + expansionAfter,
|
|
198
|
-
region,
|
|
199
|
-
bpPerPx,
|
|
200
|
-
)
|
|
190
|
+
const [leftPx, rightPx] = bpSpanPx(s, e, region, bpPerPx)
|
|
201
191
|
|
|
202
192
|
if (displayMode === 'compact') {
|
|
203
193
|
heightPx /= 3
|
|
@@ -209,13 +199,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
209
199
|
}`,
|
|
210
200
|
)
|
|
211
201
|
}
|
|
212
|
-
const topPx = layout.addRect(
|
|
213
|
-
feature.id(),
|
|
214
|
-
feature.get('start') - expansionBefore,
|
|
215
|
-
feature.get('end') + expansionAfter,
|
|
216
|
-
heightPx,
|
|
217
|
-
feature,
|
|
218
|
-
)
|
|
202
|
+
const topPx = layout.addRect(feature.id(), s, e, heightPx, feature)
|
|
219
203
|
if (topPx === null) {
|
|
220
204
|
return null
|
|
221
205
|
}
|
|
@@ -475,11 +459,10 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
475
459
|
|
|
476
460
|
// probIndex applies across multiple modifications e.g.
|
|
477
461
|
let probIndex = 0
|
|
478
|
-
for (
|
|
479
|
-
const { type, positions } = modifications[i]
|
|
462
|
+
for (const { type, positions } of modifications) {
|
|
480
463
|
const col = modificationTagMap[type] || 'black'
|
|
481
464
|
|
|
482
|
-
// @ts-
|
|
465
|
+
// @ts-expect-error
|
|
483
466
|
const base = Color(col)
|
|
484
467
|
for (const readPos of getNextRefPos(cigarOps, positions)) {
|
|
485
468
|
const r = start + readPos
|
|
@@ -660,6 +643,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
660
643
|
charWidth,
|
|
661
644
|
charHeight,
|
|
662
645
|
defaultColor,
|
|
646
|
+
theme,
|
|
663
647
|
canvasWidth,
|
|
664
648
|
}: {
|
|
665
649
|
ctx: CanvasRenderingContext2D
|
|
@@ -671,9 +655,9 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
671
655
|
charHeight: number
|
|
672
656
|
defaultColor: boolean
|
|
673
657
|
canvasWidth: number
|
|
658
|
+
theme: Theme
|
|
674
659
|
}) {
|
|
675
660
|
const { config, bpPerPx, regions, colorBy, colorTagMap = {} } = renderArgs
|
|
676
|
-
|
|
677
661
|
const { tag = '', type: colorType = '' } = colorBy || {}
|
|
678
662
|
const { feature } = feat
|
|
679
663
|
const region = regions[0]
|
|
@@ -734,30 +718,25 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
734
718
|
}
|
|
735
719
|
break
|
|
736
720
|
}
|
|
737
|
-
case 'insertSizeAndPairOrientation':
|
|
721
|
+
case 'insertSizeAndPairOrientation': {
|
|
738
722
|
break
|
|
723
|
+
}
|
|
739
724
|
|
|
740
725
|
case 'modifications':
|
|
741
|
-
case 'methylation':
|
|
726
|
+
case 'methylation': {
|
|
742
727
|
// this coloring is similar to igv.js, and is helpful to color negative
|
|
743
728
|
// strand reads differently because their c-g will be flipped (e.g. g-c
|
|
744
729
|
// read right to left)
|
|
745
|
-
|
|
746
|
-
ctx.fillStyle = '#c8dcc8'
|
|
747
|
-
} else {
|
|
748
|
-
ctx.fillStyle = '#c8c8c8'
|
|
749
|
-
}
|
|
730
|
+
ctx.fillStyle = feature.get('flags') & 16 ? '#c8dcc8' : '#c8c8c8'
|
|
750
731
|
break
|
|
732
|
+
}
|
|
751
733
|
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
ctx.fillStyle = '#c8c8c8'
|
|
757
|
-
} else {
|
|
758
|
-
ctx.fillStyle = readConfObject(config, 'color', { feature })
|
|
759
|
-
}
|
|
734
|
+
default: {
|
|
735
|
+
ctx.fillStyle = defaultColor
|
|
736
|
+
? 'lightgrey'
|
|
737
|
+
: readConfObject(config, 'color', { feature })
|
|
760
738
|
break
|
|
739
|
+
}
|
|
761
740
|
}
|
|
762
741
|
|
|
763
742
|
this.drawRect(ctx, feat, renderArgs)
|
|
@@ -827,6 +806,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
827
806
|
canvasWidth,
|
|
828
807
|
drawSNPsMuted,
|
|
829
808
|
drawIndels = true,
|
|
809
|
+
theme,
|
|
830
810
|
}: {
|
|
831
811
|
ctx: CanvasRenderingContext2D
|
|
832
812
|
feat: LayoutFeature
|
|
@@ -841,6 +821,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
841
821
|
charWidth: number
|
|
842
822
|
charHeight: number
|
|
843
823
|
canvasWidth: number
|
|
824
|
+
theme: Theme
|
|
844
825
|
}) {
|
|
845
826
|
const { Color, bpPerPx, regions } = renderArgs
|
|
846
827
|
const { heightPx, topPx, feature } = feat
|
|
@@ -877,19 +858,20 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
877
858
|
|
|
878
859
|
fillRect(
|
|
879
860
|
ctx,
|
|
880
|
-
leftPx,
|
|
861
|
+
Math.round(leftPx),
|
|
881
862
|
topPx,
|
|
882
863
|
widthPx,
|
|
883
864
|
heightPx,
|
|
884
865
|
canvasWidth,
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
866
|
+
|
|
867
|
+
mismatchAlpha
|
|
868
|
+
? mismatch.qual === undefined
|
|
869
|
+
? baseColor
|
|
870
|
+
: // @ts-expect-error
|
|
871
|
+
Color(baseColor)
|
|
872
|
+
.alpha(Math.min(1, mismatch.qual / 50))
|
|
873
|
+
.hsl()
|
|
874
|
+
.string()
|
|
893
875
|
: baseColor,
|
|
894
876
|
)
|
|
895
877
|
}
|
|
@@ -899,14 +881,14 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
899
881
|
const contrastColor = drawSNPsMuted
|
|
900
882
|
? 'black'
|
|
901
883
|
: contrastForBase[mismatch.base] || 'black'
|
|
902
|
-
ctx.fillStyle =
|
|
903
|
-
?
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
884
|
+
ctx.fillStyle = mismatchAlpha
|
|
885
|
+
? mismatch.qual === undefined
|
|
886
|
+
? contrastColor
|
|
887
|
+
: // @ts-expect-error
|
|
888
|
+
Color(contrastColor)
|
|
889
|
+
.alpha(Math.min(1, mismatch.qual / 50))
|
|
890
|
+
.hsl()
|
|
891
|
+
.string()
|
|
910
892
|
: contrastColor
|
|
911
893
|
ctx.fillText(
|
|
912
894
|
mbase,
|
|
@@ -1167,6 +1149,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1167
1149
|
charWidth,
|
|
1168
1150
|
charHeight,
|
|
1169
1151
|
canvasWidth,
|
|
1152
|
+
theme,
|
|
1170
1153
|
})
|
|
1171
1154
|
this.drawMismatches({
|
|
1172
1155
|
ctx,
|
|
@@ -1182,6 +1165,7 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1182
1165
|
colorForBase,
|
|
1183
1166
|
contrastForBase,
|
|
1184
1167
|
canvasWidth,
|
|
1168
|
+
theme,
|
|
1185
1169
|
})
|
|
1186
1170
|
if (showSoftClip) {
|
|
1187
1171
|
this.drawSoftClipping({
|
|
@@ -1317,10 +1301,10 @@ export default class PileupRenderer extends BoxRendererType {
|
|
|
1317
1301
|
}
|
|
1318
1302
|
}
|
|
1319
1303
|
|
|
1320
|
-
export
|
|
1321
|
-
RenderArgs,
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
ResultsSerialized,
|
|
1325
|
-
ResultsDeserialized,
|
|
1326
|
-
}
|
|
1304
|
+
export {
|
|
1305
|
+
type RenderArgs,
|
|
1306
|
+
type RenderResults,
|
|
1307
|
+
type RenderArgsSerialized,
|
|
1308
|
+
type ResultsSerialized,
|
|
1309
|
+
type ResultsDeserialized,
|
|
1310
|
+
} from '@jbrowse/core/pluggableElementTypes/renderers/BoxRendererType'
|
|
@@ -159,10 +159,10 @@ function PileupRendering(props: {
|
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
function callMouseHandler(handlerName: string, event: React.MouseEvent) {
|
|
162
|
-
// @ts-
|
|
162
|
+
// @ts-expect-error
|
|
163
163
|
// eslint-disable-next-line react/destructuring-assignment
|
|
164
164
|
const featureHandler = props[`onFeature${handlerName}`]
|
|
165
|
-
// @ts-
|
|
165
|
+
// @ts-expect-error
|
|
166
166
|
// eslint-disable-next-line react/destructuring-assignment
|
|
167
167
|
const canvasHandler = props[`on${handlerName}`]
|
|
168
168
|
if (featureHandler && featureIdUnderMouse) {
|
|
@@ -50,7 +50,7 @@ const PileupRenderer = ConfigurationSchema(
|
|
|
50
50
|
type: 'number',
|
|
51
51
|
description:
|
|
52
52
|
'the minimum width in px for a pileup mismatch feature. use for increasing/decreasing mismatch marker widths when zoomed out, e.g. 0 or 1',
|
|
53
|
-
defaultValue:
|
|
53
|
+
defaultValue: 1,
|
|
54
54
|
},
|
|
55
55
|
/**
|
|
56
56
|
* #slot
|
|
@@ -78,7 +78,7 @@ export const sortFeature = (
|
|
|
78
78
|
const acode = bMismatch && bMismatch.base.toUpperCase()
|
|
79
79
|
const bcode = aMismatch && aMismatch.base.toUpperCase()
|
|
80
80
|
if (acode === bcode && acode === '*') {
|
|
81
|
-
// @ts-
|
|
81
|
+
// @ts-expect-error
|
|
82
82
|
return aMismatch.length - bMismatch.length
|
|
83
83
|
}
|
|
84
84
|
return (
|
|
@@ -99,9 +99,10 @@ export const sortFeature = (
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
const sortedMap = new Map(
|
|
102
|
-
featuresInCenterLine
|
|
103
|
-
.
|
|
104
|
-
|
|
102
|
+
[...featuresInCenterLine, ...featuresOutsideCenter].map(feature => [
|
|
103
|
+
feature.id(),
|
|
104
|
+
feature,
|
|
105
|
+
]),
|
|
105
106
|
)
|
|
106
107
|
|
|
107
108
|
return sortedMap
|
|
@@ -35,6 +35,8 @@ interface SNPInfo {
|
|
|
35
35
|
total: number
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
const fudgeFactor = 0.6
|
|
39
|
+
|
|
38
40
|
export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
39
41
|
// note: the snps are drawn on linear scale even if the data is drawn in log
|
|
40
42
|
// scape hence the two different scales being used
|
|
@@ -78,6 +80,7 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
78
80
|
scaleType: 'linear',
|
|
79
81
|
})
|
|
80
82
|
const originY = getOrigin(scaleOpts.scaleType)
|
|
83
|
+
const originLinear = getOrigin('linear')
|
|
81
84
|
|
|
82
85
|
const indicatorThreshold = readConfObject(cfg, 'indicatorThreshold')
|
|
83
86
|
const drawInterbaseCounts = readConfObject(cfg, 'drawInterbaseCounts')
|
|
@@ -87,11 +90,9 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
87
90
|
// get the y coordinate that we are plotting at, this can be log scale
|
|
88
91
|
const toY = (n: number) => height - (viewScale(n) || 0) + offset
|
|
89
92
|
const toHeight = (n: number) => toY(originY) - toY(n)
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
const indicatorToHeight = (n: number) =>
|
|
94
|
-
indicatorToY(getOrigin('linear')) - indicatorToY(n)
|
|
93
|
+
// used specifically for indicator
|
|
94
|
+
const toY2 = (n: number) => height - (indicatorViewScale(n) || 0) + offset
|
|
95
|
+
const toHeight2 = (n: number) => toY2(originLinear) - toY2(n)
|
|
95
96
|
|
|
96
97
|
const { bases } = theme.palette
|
|
97
98
|
const colorForBase: { [key: string]: string } = {
|
|
@@ -105,7 +106,6 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
105
106
|
hardclip: 'red',
|
|
106
107
|
meth: 'red',
|
|
107
108
|
unmeth: 'blue',
|
|
108
|
-
ref: 'lightgrey',
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
const feats = [...features.values()]
|
|
@@ -118,7 +118,7 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
118
118
|
for (let i = 0; i < coverage.length; i++) {
|
|
119
119
|
const feature = coverage[i]
|
|
120
120
|
const [leftPx, rightPx] = featureSpanPx(feature, region, bpPerPx)
|
|
121
|
-
const w = rightPx - leftPx +
|
|
121
|
+
const w = rightPx - leftPx + fudgeFactor
|
|
122
122
|
const score = feature.get('score') as number
|
|
123
123
|
ctx.fillRect(leftPx, toY(score), w, toHeight(score))
|
|
124
124
|
}
|
|
@@ -144,7 +144,7 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
144
144
|
|
|
145
145
|
const score = feature.get('score') as number
|
|
146
146
|
const snpinfo = feature.get('snpinfo') as SNPInfo
|
|
147
|
-
const w = Math.max(rightPx - leftPx +
|
|
147
|
+
const w = Math.max(rightPx - leftPx + fudgeFactor, 1)
|
|
148
148
|
const totalScore = snpinfo.total
|
|
149
149
|
const keys = Object.keys(snpinfo.cov).sort()
|
|
150
150
|
|
|
@@ -160,7 +160,7 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
160
160
|
const height = toHeight(score)
|
|
161
161
|
const bottom = toY(score) + height
|
|
162
162
|
ctx.fillRect(
|
|
163
|
-
leftPx,
|
|
163
|
+
Math.round(leftPx),
|
|
164
164
|
bottom - ((total + curr) / score) * height,
|
|
165
165
|
w,
|
|
166
166
|
(total / score) * height,
|
|
@@ -175,12 +175,13 @@ export default class SNPCoverageRenderer extends WiggleBaseRenderer {
|
|
|
175
175
|
for (let i = 0; i < interbaseEvents.length; i++) {
|
|
176
176
|
const base = interbaseEvents[i]
|
|
177
177
|
const { total } = snpinfo.noncov[base]
|
|
178
|
+
const r = 0.6
|
|
178
179
|
ctx.fillStyle = colorForBase[base]
|
|
179
180
|
ctx.fillRect(
|
|
180
|
-
leftPx -
|
|
181
|
-
indicatorHeight +
|
|
182
|
-
|
|
183
|
-
|
|
181
|
+
leftPx - r + extraHorizontallyFlippedOffset,
|
|
182
|
+
indicatorHeight + toHeight2(curr),
|
|
183
|
+
r * 2,
|
|
184
|
+
toHeight2(total),
|
|
184
185
|
)
|
|
185
186
|
curr += total
|
|
186
187
|
}
|
package/src/index.ts
CHANGED
|
@@ -14,12 +14,7 @@ import AlignmentsTrackF from './AlignmentsTrack'
|
|
|
14
14
|
import AlignmentsFeatureWidgetF from './AlignmentsFeatureDetail'
|
|
15
15
|
import PileupRPCMethodsF from './PileupRPC'
|
|
16
16
|
import GuessAlignmentsTypesF from './GuessAlignmentsTypes'
|
|
17
|
-
import LinearPileupDisplayF
|
|
18
|
-
linearPileupDisplayStateModelFactory,
|
|
19
|
-
linearPileupDisplayConfigSchemaFactory,
|
|
20
|
-
} from './LinearPileupDisplay'
|
|
21
|
-
import { LinearPileupDisplayModel } from './LinearPileupDisplay/model'
|
|
22
|
-
import * as MismatchParser from './MismatchParser'
|
|
17
|
+
import LinearPileupDisplayF from './LinearPileupDisplay'
|
|
23
18
|
|
|
24
19
|
export default class AlignmentsPlugin extends Plugin {
|
|
25
20
|
name = 'AlignmentsPlugin'
|
|
@@ -46,8 +41,8 @@ export default class AlignmentsPlugin extends Plugin {
|
|
|
46
41
|
}
|
|
47
42
|
|
|
48
43
|
export {
|
|
49
|
-
linearPileupDisplayConfigSchemaFactory,
|
|
50
44
|
linearPileupDisplayStateModelFactory,
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
export type
|
|
45
|
+
linearPileupDisplayConfigSchemaFactory,
|
|
46
|
+
} from './LinearPileupDisplay'
|
|
47
|
+
export { type LinearPileupDisplayModel } from './LinearPileupDisplay/model'
|
|
48
|
+
export * as MismatchParser from './MismatchParser'
|