@jbrowse/plugin-breakpoint-split-view 2.6.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/LICENSE +201 -0
- package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
- package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +21 -0
- package/dist/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
- package/dist/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
- package/dist/BreakpointAlignmentsFeatureDetail/index.js +57 -0
- package/dist/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
- package/dist/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
- package/dist/BreakpointSplitView/BreakpointSplitView.js +92 -0
- package/dist/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
- package/dist/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
- package/dist/BreakpointSplitView/components/AlignmentConnections.js +133 -0
- package/dist/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
- package/dist/BreakpointSplitView/components/Breakends.d.ts +9 -0
- package/dist/BreakpointSplitView/components/Breakends.js +117 -0
- package/dist/BreakpointSplitView/components/Breakends.js.map +1 -0
- package/dist/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
- package/dist/BreakpointSplitView/components/BreakpointSplitView.js +89 -0
- package/dist/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
- package/dist/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
- package/dist/BreakpointSplitView/components/ExportSvgDialog.js +84 -0
- package/dist/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
- package/dist/BreakpointSplitView/components/Overlay.d.ts +9 -0
- package/dist/BreakpointSplitView/components/Overlay.js +23 -0
- package/dist/BreakpointSplitView/components/Overlay.js.map +1 -0
- package/dist/BreakpointSplitView/components/Translocations.d.ts +9 -0
- package/dist/BreakpointSplitView/components/Translocations.js +113 -0
- package/dist/BreakpointSplitView/components/Translocations.js.map +1 -0
- package/dist/BreakpointSplitView/components/util.d.ts +7 -0
- package/dist/BreakpointSplitView/components/util.js +116 -0
- package/dist/BreakpointSplitView/components/util.js.map +1 -0
- package/dist/BreakpointSplitView/index.d.ts +3 -0
- package/dist/BreakpointSplitView/index.js +43 -0
- package/dist/BreakpointSplitView/index.js.map +1 -0
- package/dist/BreakpointSplitView/model.d.ts +299 -0
- package/dist/BreakpointSplitView/model.js +245 -0
- package/dist/BreakpointSplitView/model.js.map +1 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js +13 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +83 -0
- package/dist/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
- package/dist/BreakpointSplitView/util.d.ts +18 -0
- package/dist/BreakpointSplitView/util.js +56 -0
- package/dist/BreakpointSplitView/util.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.d.ts +5 -0
- package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js +16 -0
- package/esm/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.js.map +1 -0
- package/esm/BreakpointAlignmentsFeatureDetail/index.d.ts +3 -0
- package/esm/BreakpointAlignmentsFeatureDetail/index.js +32 -0
- package/esm/BreakpointAlignmentsFeatureDetail/index.js.map +1 -0
- package/esm/BreakpointSplitView/BreakpointSplitView.d.ts +23 -0
- package/esm/BreakpointSplitView/BreakpointSplitView.js +86 -0
- package/esm/BreakpointSplitView/BreakpointSplitView.js.map +1 -0
- package/esm/BreakpointSplitView/components/AlignmentConnections.d.ts +9 -0
- package/esm/BreakpointSplitView/components/AlignmentConnections.js +108 -0
- package/esm/BreakpointSplitView/components/AlignmentConnections.js.map +1 -0
- package/esm/BreakpointSplitView/components/Breakends.d.ts +9 -0
- package/esm/BreakpointSplitView/components/Breakends.js +92 -0
- package/esm/BreakpointSplitView/components/Breakends.js.map +1 -0
- package/esm/BreakpointSplitView/components/BreakpointSplitView.d.ts +6 -0
- package/esm/BreakpointSplitView/components/BreakpointSplitView.js +61 -0
- package/esm/BreakpointSplitView/components/BreakpointSplitView.js.map +1 -0
- package/esm/BreakpointSplitView/components/ExportSvgDialog.d.ts +8 -0
- package/esm/BreakpointSplitView/components/ExportSvgDialog.js +58 -0
- package/esm/BreakpointSplitView/components/ExportSvgDialog.js.map +1 -0
- package/esm/BreakpointSplitView/components/Overlay.d.ts +9 -0
- package/esm/BreakpointSplitView/components/Overlay.js +18 -0
- package/esm/BreakpointSplitView/components/Overlay.js.map +1 -0
- package/esm/BreakpointSplitView/components/Translocations.d.ts +9 -0
- package/esm/BreakpointSplitView/components/Translocations.js +88 -0
- package/esm/BreakpointSplitView/components/Translocations.js.map +1 -0
- package/esm/BreakpointSplitView/components/util.d.ts +7 -0
- package/esm/BreakpointSplitView/components/util.js +107 -0
- package/esm/BreakpointSplitView/components/util.js.map +1 -0
- package/esm/BreakpointSplitView/index.d.ts +3 -0
- package/esm/BreakpointSplitView/index.js +15 -0
- package/esm/BreakpointSplitView/index.js.map +1 -0
- package/esm/BreakpointSplitView/model.d.ts +299 -0
- package/esm/BreakpointSplitView/model.js +216 -0
- package/esm/BreakpointSplitView/model.js.map +1 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBackground.d.ts +6 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js +7 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBackground.js.map +1 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.d.ts +4 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js +76 -0
- package/esm/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.js.map +1 -0
- package/esm/BreakpointSplitView/util.d.ts +18 -0
- package/esm/BreakpointSplitView/util.js +49 -0
- package/esm/BreakpointSplitView/util.js.map +1 -0
- package/esm/index.d.ts +7 -0
- package/esm/index.js +15 -0
- package/esm/index.js.map +1 -0
- package/package.json +63 -0
- package/src/BreakpointAlignmentsFeatureDetail/BreakpointAlignmentsFeatureDetail.tsx +24 -0
- package/src/BreakpointAlignmentsFeatureDetail/index.ts +35 -0
- package/src/BreakpointSplitView/BreakpointSplitView.ts +100 -0
- package/src/BreakpointSplitView/components/AlignmentConnections.tsx +166 -0
- package/src/BreakpointSplitView/components/Breakends.tsx +141 -0
- package/src/BreakpointSplitView/components/BreakpointSplitView.tsx +95 -0
- package/src/BreakpointSplitView/components/ExportSvgDialog.tsx +149 -0
- package/src/BreakpointSplitView/components/Overlay.tsx +29 -0
- package/src/BreakpointSplitView/components/Translocations.tsx +147 -0
- package/src/BreakpointSplitView/components/util.ts +127 -0
- package/src/BreakpointSplitView/index.ts +17 -0
- package/src/BreakpointSplitView/model.ts +333 -0
- package/src/BreakpointSplitView/svgcomponents/SVGBackground.tsx +21 -0
- package/src/BreakpointSplitView/svgcomponents/SVGBreakpointSplitView.tsx +179 -0
- package/src/BreakpointSplitView/util.ts +89 -0
- package/src/index.test.ts +3 -0
- package/src/index.ts +15 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { getSession } from '@jbrowse/core/util';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { getSnapshot } from 'mobx-state-tree';
|
|
5
|
+
// locals
|
|
6
|
+
import { findMatchingAlt, getMatchedBreakendFeatures } from './util';
|
|
7
|
+
import { yPos, getPxFromCoordinate, useNextFrame } from '../util';
|
|
8
|
+
const [LEFT] = [0, 1, 2, 3];
|
|
9
|
+
const Breakends = observer(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
|
|
10
|
+
const { views } = model;
|
|
11
|
+
const session = getSession(model);
|
|
12
|
+
const { assemblyManager } = session;
|
|
13
|
+
const totalFeatures = model.getTrackFeatures(trackId);
|
|
14
|
+
const layoutMatches = useMemo(() => model.getMatchedFeaturesInLayout(trackId, getMatchedBreakendFeatures(totalFeatures)), [totalFeatures, trackId, model]);
|
|
15
|
+
const [mouseoverElt, setMouseoverElt] = useState();
|
|
16
|
+
const snap = getSnapshot(model);
|
|
17
|
+
useNextFrame(snap);
|
|
18
|
+
const assembly = assemblyManager.get(views[0].assemblyNames[0]);
|
|
19
|
+
if (!assembly) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
let yoff = 0;
|
|
23
|
+
if (ref.current) {
|
|
24
|
+
const rect = ref.current.getBoundingClientRect();
|
|
25
|
+
yoff = rect.top;
|
|
26
|
+
}
|
|
27
|
+
return (React.createElement("g", { stroke: "green", strokeWidth: 5, fill: "none", "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
|
|
28
|
+
const ret = [];
|
|
29
|
+
// we follow a path in the list of chunks, not from top to bottom, just
|
|
30
|
+
// in series following x1,y1 -> x2,y2
|
|
31
|
+
for (let i = 0; i < chunk.length - 1; i += 1) {
|
|
32
|
+
const { layout: c1, feature: f1, level: level1 } = chunk[i];
|
|
33
|
+
const { layout: c2, feature: f2, level: level2 } = chunk[i + 1];
|
|
34
|
+
const id = f1.id();
|
|
35
|
+
const relevantAlt = findMatchingAlt(f1, f2);
|
|
36
|
+
if (!c1 || !c2) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const f1origref = f1.get('refName');
|
|
40
|
+
const f2origref = f2.get('refName');
|
|
41
|
+
const f1ref = assembly.getCanonicalRefName(f1origref);
|
|
42
|
+
const f2ref = assembly.getCanonicalRefName(f2origref);
|
|
43
|
+
if (!f1ref || !f2ref) {
|
|
44
|
+
throw new Error(`unable to find ref for ${f1ref || f2ref}`);
|
|
45
|
+
}
|
|
46
|
+
const x1 = getPxFromCoordinate(views[level1], f1ref, c1[LEFT]);
|
|
47
|
+
const x2 = getPxFromCoordinate(views[level2], f2ref, c2[LEFT]);
|
|
48
|
+
const reversed1 = views[level1].pxToBp(x1).reversed;
|
|
49
|
+
const reversed2 = views[level2].pxToBp(x2).reversed;
|
|
50
|
+
const tracks = views.map(v => v.getTrack(trackId));
|
|
51
|
+
const y1 = yPos(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
|
|
52
|
+
yoff;
|
|
53
|
+
const y2 = yPos(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
|
|
54
|
+
yoff;
|
|
55
|
+
if (!relevantAlt) {
|
|
56
|
+
console.warn('the relevant ALT allele was not found, cannot render');
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
const path = [
|
|
60
|
+
'M',
|
|
61
|
+
x1 -
|
|
62
|
+
20 *
|
|
63
|
+
(relevantAlt.Join === 'left' ? -1 : 1) *
|
|
64
|
+
(reversed1 ? -1 : 1),
|
|
65
|
+
y1,
|
|
66
|
+
'L',
|
|
67
|
+
x1,
|
|
68
|
+
y1,
|
|
69
|
+
'L',
|
|
70
|
+
x2,
|
|
71
|
+
y2,
|
|
72
|
+
'L',
|
|
73
|
+
x2 -
|
|
74
|
+
20 *
|
|
75
|
+
(relevantAlt.MateDirection === 'left' ? 1 : -1) *
|
|
76
|
+
(reversed2 ? -1 : 1),
|
|
77
|
+
y2,
|
|
78
|
+
].join(' ');
|
|
79
|
+
ret.push(React.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
|
|
80
|
+
var _a, _b, _c;
|
|
81
|
+
const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
|
|
82
|
+
featureData: (_b = totalFeatures.get(id)) === null || _b === void 0 ? void 0 : _b.toJSON(),
|
|
83
|
+
});
|
|
84
|
+
(_c = session.showWidget) === null || _c === void 0 ? void 0 : _c.call(session, featureWidget);
|
|
85
|
+
}, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return ret;
|
|
89
|
+
})));
|
|
90
|
+
});
|
|
91
|
+
export default Breakends;
|
|
92
|
+
//# sourceMappingURL=Breakends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breakends.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Breakends.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { getEnv } from 'mobx-state-tree';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import Overlay from './Overlay';
|
|
6
|
+
const useStyles = makeStyles()(theme => ({
|
|
7
|
+
viewDivider: {
|
|
8
|
+
background: theme.palette.secondary.main,
|
|
9
|
+
height: 3,
|
|
10
|
+
},
|
|
11
|
+
container: {
|
|
12
|
+
display: 'grid',
|
|
13
|
+
},
|
|
14
|
+
overlay: {
|
|
15
|
+
display: 'flex',
|
|
16
|
+
width: '100%',
|
|
17
|
+
gridArea: '1/1',
|
|
18
|
+
'& path': {
|
|
19
|
+
cursor: 'crosshair',
|
|
20
|
+
fill: 'none',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
content: {
|
|
24
|
+
gridArea: '1/1',
|
|
25
|
+
},
|
|
26
|
+
}));
|
|
27
|
+
const BreakpointSplitView = observer(function ({ model, }) {
|
|
28
|
+
const { classes } = useStyles();
|
|
29
|
+
const { views } = model;
|
|
30
|
+
const { pluginManager } = getEnv(model);
|
|
31
|
+
const ref = useRef(null);
|
|
32
|
+
return (React.createElement("div", null,
|
|
33
|
+
React.createElement("div", { className: classes.container },
|
|
34
|
+
React.createElement("div", { className: classes.content },
|
|
35
|
+
React.createElement("div", { style: { position: 'relative' } }, views.map((view, idx) => {
|
|
36
|
+
const { ReactComponent } = pluginManager.getViewType(view.type);
|
|
37
|
+
const viewComponent = (React.createElement(ReactComponent, { key: view.id, model: view }));
|
|
38
|
+
if (idx === views.length - 1) {
|
|
39
|
+
return viewComponent;
|
|
40
|
+
}
|
|
41
|
+
return [
|
|
42
|
+
viewComponent,
|
|
43
|
+
React.createElement("div", { key: `${view.id}-divider`, className: classes.viewDivider }),
|
|
44
|
+
];
|
|
45
|
+
}))),
|
|
46
|
+
React.createElement("div", { className: classes.overlay },
|
|
47
|
+
React.createElement("svg", { ref: ref, style: {
|
|
48
|
+
width: '100%',
|
|
49
|
+
zIndex: 10,
|
|
50
|
+
pointerEvents: model.interactToggled ? undefined : 'none',
|
|
51
|
+
} }, model.matchedTracks.map(track => (
|
|
52
|
+
// note: we must pass ref down, because the child component
|
|
53
|
+
// needs to getBoundingClientRect on the this components SVG,
|
|
54
|
+
// and we cannot rely on using getBoundingClientRect in this
|
|
55
|
+
// component to make sure this works because if it gets
|
|
56
|
+
// shifted around by another element, this will not re-render
|
|
57
|
+
// necessarily
|
|
58
|
+
React.createElement(Overlay, { parentRef: ref, key: track.configuration.trackId, model: model, trackId: track.configuration.trackId }))))))));
|
|
59
|
+
});
|
|
60
|
+
export default BreakpointSplitView;
|
|
61
|
+
//# sourceMappingURL=BreakpointSplitView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BreakpointSplitView.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/BreakpointSplitView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Button, Checkbox, CircularProgress, DialogActions, DialogContent, FormControlLabel, MenuItem, TextField, Typography, } from '@mui/material';
|
|
3
|
+
import { Dialog, ErrorMessage } from '@jbrowse/core/ui';
|
|
4
|
+
import { getSession, useLocalStorage } from '@jbrowse/core/util';
|
|
5
|
+
function LoadingMessage() {
|
|
6
|
+
return (React.createElement("div", null,
|
|
7
|
+
React.createElement(CircularProgress, { size: 20, style: { marginRight: 20 } }),
|
|
8
|
+
React.createElement(Typography, { display: "inline" }, "Creating SVG")));
|
|
9
|
+
}
|
|
10
|
+
function useSvgLocal(key, val) {
|
|
11
|
+
return useLocalStorage('svg-' + key, val);
|
|
12
|
+
}
|
|
13
|
+
export default function ExportSvgDlg({ model, handleClose, }) {
|
|
14
|
+
const session = getSession(model);
|
|
15
|
+
const offscreenCanvas = typeof OffscreenCanvas !== 'undefined';
|
|
16
|
+
const [rasterizeLayers, setRasterizeLayers] = useState(offscreenCanvas);
|
|
17
|
+
const [loading, setLoading] = useState(false);
|
|
18
|
+
const [error, setError] = useState();
|
|
19
|
+
const [filename, setFilename] = useSvgLocal('file', 'jbrowse.svg');
|
|
20
|
+
const [trackLabels, setTrackLabels] = useSvgLocal('tracklabels', 'offset');
|
|
21
|
+
const [themeName, setThemeName] = useSvgLocal('theme', session.themeName || 'default');
|
|
22
|
+
return (React.createElement(Dialog, { open: true, onClose: handleClose, title: "Export SVG" },
|
|
23
|
+
React.createElement(DialogContent, null,
|
|
24
|
+
error ? (React.createElement(ErrorMessage, { error: error })) : loading ? (React.createElement(LoadingMessage, null)) : null,
|
|
25
|
+
React.createElement(TextField, { helperText: "filename", value: filename, onChange: event => setFilename(event.target.value) }),
|
|
26
|
+
React.createElement("br", null),
|
|
27
|
+
React.createElement(TextField, { select: true, label: "Track label positioning", variant: "outlined", style: { width: 150 }, value: trackLabels, onChange: event => setTrackLabels(event.target.value) },
|
|
28
|
+
React.createElement(MenuItem, { value: "offset" }, "Offset"),
|
|
29
|
+
React.createElement(MenuItem, { value: "overlay" }, "Overlay"),
|
|
30
|
+
React.createElement(MenuItem, { value: "left" }, "Left"),
|
|
31
|
+
React.createElement(MenuItem, { value: "none" }, "None")),
|
|
32
|
+
React.createElement("br", null),
|
|
33
|
+
session.allThemes ? (React.createElement(TextField, { select: true, label: "Theme", variant: "outlined", value: themeName, onChange: event => setThemeName(event.target.value) }, Object.entries(session.allThemes()).map(([key, val]) => (React.createElement(MenuItem, { key: key, value: key },
|
|
34
|
+
// @ts-expect-error
|
|
35
|
+
val.name || '(Unknown name)'))))) : null,
|
|
36
|
+
offscreenCanvas ? (React.createElement(FormControlLabel, { control: React.createElement(Checkbox, { checked: rasterizeLayers, onChange: () => setRasterizeLayers(val => !val) }), label: "Rasterize canvas based tracks? File may be much larger if this is turned off" })) : (React.createElement(Typography, null, "Note: rasterizing layers not yet supported in this browser, so SVG size may be large"))),
|
|
37
|
+
React.createElement(DialogActions, null,
|
|
38
|
+
React.createElement(Button, { variant: "contained", color: "secondary", onClick: () => handleClose() }, "Cancel"),
|
|
39
|
+
React.createElement(Button, { variant: "contained", color: "primary", type: "submit", onClick: async () => {
|
|
40
|
+
setLoading(true);
|
|
41
|
+
setError(undefined);
|
|
42
|
+
try {
|
|
43
|
+
await model.exportSvg({
|
|
44
|
+
rasterizeLayers,
|
|
45
|
+
filename,
|
|
46
|
+
trackLabels,
|
|
47
|
+
themeName,
|
|
48
|
+
});
|
|
49
|
+
handleClose();
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
console.error(e);
|
|
53
|
+
setError(e);
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}
|
|
56
|
+
} }, "Submit"))));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ExportSvgDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExportSvgDialog.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/ExportSvgDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BreakpointViewModel } from '../model';
|
|
3
|
+
declare const _default: (props: {
|
|
4
|
+
parentRef: React.RefObject<SVGSVGElement>;
|
|
5
|
+
model: BreakpointViewModel;
|
|
6
|
+
trackId: string;
|
|
7
|
+
getTrackYPosOverride?: ((trackId: string, level: number) => number) | undefined;
|
|
8
|
+
}) => React.JSX.Element | null;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import AlignmentConnections from './AlignmentConnections';
|
|
4
|
+
import Breakends from './Breakends';
|
|
5
|
+
import Translocations from './Translocations';
|
|
6
|
+
export default observer(function (props) {
|
|
7
|
+
var _a, _b;
|
|
8
|
+
const { model, trackId } = props;
|
|
9
|
+
const tracks = model.getMatchedTracks(trackId);
|
|
10
|
+
if (((_a = tracks[0]) === null || _a === void 0 ? void 0 : _a.type) === 'AlignmentsTrack') {
|
|
11
|
+
return React.createElement(AlignmentConnections, { ...props });
|
|
12
|
+
}
|
|
13
|
+
if (((_b = tracks[0]) === null || _b === void 0 ? void 0 : _b.type) === 'VariantTrack') {
|
|
14
|
+
return model.hasTranslocations(trackId) ? (React.createElement(Translocations, { ...props })) : (React.createElement(Breakends, { ...props }));
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=Overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Overlay.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAIrC,OAAO,oBAAoB,MAAM,wBAAwB,CAAA;AACzD,OAAO,SAAS,MAAM,aAAa,CAAA;AACnC,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,eAAe,QAAQ,CAAC,UAAU,KAKjC;;IACC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAA;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC9C,IAAI,CAAA,MAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAK,iBAAiB,EAAE;QACzC,OAAO,oBAAC,oBAAoB,OAAK,KAAK,GAAI,CAAA;KAC3C;IACD,IAAI,CAAA,MAAA,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,MAAK,cAAc,EAAE;QACtC,OAAO,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACxC,oBAAC,cAAc,OAAK,KAAK,GAAI,CAC9B,CAAC,CAAC,CAAC,CACF,oBAAC,SAAS,OAAK,KAAK,GAAI,CACzB,CAAA;KACF;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BreakpointViewModel } from '../model';
|
|
3
|
+
declare const Translocations: ({ model, trackId, parentRef: ref, getTrackYPosOverride, }: {
|
|
4
|
+
model: BreakpointViewModel;
|
|
5
|
+
trackId: string;
|
|
6
|
+
parentRef: React.RefObject<SVGSVGElement>;
|
|
7
|
+
getTrackYPosOverride?: ((trackId: string, level: number) => number) | undefined;
|
|
8
|
+
}) => React.JSX.Element | null;
|
|
9
|
+
export default Translocations;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import React, { useState, useMemo } from 'react';
|
|
2
|
+
import { getSession } from '@jbrowse/core/util';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { getSnapshot } from 'mobx-state-tree';
|
|
5
|
+
// locals
|
|
6
|
+
import { getMatchedTranslocationFeatures } from './util';
|
|
7
|
+
import { yPos, getPxFromCoordinate, useNextFrame } from '../util';
|
|
8
|
+
const [LEFT] = [0, 1, 2, 3];
|
|
9
|
+
const Translocations = observer(function ({ model, trackId, parentRef: ref, getTrackYPosOverride, }) {
|
|
10
|
+
const { views } = model;
|
|
11
|
+
const session = getSession(model);
|
|
12
|
+
const { assemblyManager } = session;
|
|
13
|
+
const totalFeatures = model.getTrackFeatures(trackId);
|
|
14
|
+
const layoutMatches = useMemo(() => model.getMatchedFeaturesInLayout(trackId, getMatchedTranslocationFeatures(totalFeatures)), [totalFeatures, trackId, model]);
|
|
15
|
+
const [mouseoverElt, setMouseoverElt] = useState();
|
|
16
|
+
const snap = getSnapshot(model);
|
|
17
|
+
useNextFrame(snap);
|
|
18
|
+
const assembly = assemblyManager.get(views[0].assemblyNames[0]);
|
|
19
|
+
if (!assembly) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
let yOffset = 0;
|
|
23
|
+
if (ref.current) {
|
|
24
|
+
const rect = ref.current.getBoundingClientRect();
|
|
25
|
+
yOffset = rect.top;
|
|
26
|
+
}
|
|
27
|
+
// we hardcode the TRA to go to the "other view" and if there is none, we
|
|
28
|
+
// just return null here note: would need to do processing of the INFO
|
|
29
|
+
// CHR2/END and see which view could contain those coordinates to really do
|
|
30
|
+
// it properly
|
|
31
|
+
if (views.length < 2) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return (React.createElement("g", { fill: "none", stroke: "green", strokeWidth: 5, "data-testid": layoutMatches.length ? `${trackId}-loaded` : trackId }, layoutMatches.map(chunk => {
|
|
35
|
+
// we follow a path in the list of chunks, not from top to bottom,
|
|
36
|
+
// just in series following x1,y1 -> x2,y2
|
|
37
|
+
const ret = [];
|
|
38
|
+
for (let i = 0; i < chunk.length; i += 1) {
|
|
39
|
+
const { layout: c1, feature: f1, level: level1 } = chunk[i];
|
|
40
|
+
const level2 = level1 === 0 ? 1 : 0;
|
|
41
|
+
const id = f1.id();
|
|
42
|
+
if (!c1) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const info = f1.get('INFO');
|
|
46
|
+
const chr2 = info.CHR2[0];
|
|
47
|
+
const end2 = info.END[0];
|
|
48
|
+
const [myDirection, mateDirection] = info.STRANDS[0].split('');
|
|
49
|
+
const r = getPxFromCoordinate(views[level2], chr2, end2);
|
|
50
|
+
if (r) {
|
|
51
|
+
const c2 = [r, 0, r + 1, 0];
|
|
52
|
+
const x1 = getPxFromCoordinate(views[level1], f1.get('refName'), c1[LEFT]);
|
|
53
|
+
const x2 = r;
|
|
54
|
+
const reversed1 = views[level1].pxToBp(x1).reversed;
|
|
55
|
+
const reversed2 = views[level2].pxToBp(x2).reversed;
|
|
56
|
+
const tracks = views.map(v => v.getTrack(trackId));
|
|
57
|
+
const y1 = yPos(trackId, level1, views, tracks, c1, getTrackYPosOverride) -
|
|
58
|
+
yOffset;
|
|
59
|
+
const y2 = yPos(trackId, level2, views, tracks, c2, getTrackYPosOverride) -
|
|
60
|
+
yOffset;
|
|
61
|
+
const path = [
|
|
62
|
+
'M',
|
|
63
|
+
x1 - 20 * (myDirection === '+' ? 1 : -1) * (reversed1 ? -1 : 1),
|
|
64
|
+
y1,
|
|
65
|
+
'L',
|
|
66
|
+
x1,
|
|
67
|
+
y1,
|
|
68
|
+
'L',
|
|
69
|
+
x2,
|
|
70
|
+
y2,
|
|
71
|
+
'L',
|
|
72
|
+
x2 - 20 * (mateDirection === '+' ? 1 : -1) * (reversed2 ? -1 : 1),
|
|
73
|
+
y2,
|
|
74
|
+
].join(' ');
|
|
75
|
+
ret.push(React.createElement("path", { d: path, key: JSON.stringify(path), strokeWidth: id === mouseoverElt ? 10 : 5, onClick: () => {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
const featureWidget = (_a = session.addWidget) === null || _a === void 0 ? void 0 : _a.call(session, 'VariantFeatureWidget', 'variantFeature', {
|
|
78
|
+
featureData: (totalFeatures.get(id) || { toJSON: () => { } }).toJSON(),
|
|
79
|
+
});
|
|
80
|
+
(_b = session.showWidget) === null || _b === void 0 ? void 0 : _b.call(session, featureWidget);
|
|
81
|
+
}, onMouseOver: () => setMouseoverElt(id), onMouseOut: () => setMouseoverElt(undefined) }));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return ret;
|
|
85
|
+
})));
|
|
86
|
+
});
|
|
87
|
+
export default Translocations;
|
|
88
|
+
//# sourceMappingURL=Translocations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Translocations.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/Translocations.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,SAAS;AACT,OAAO,EAAE,+BAA+B,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAGjE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;AAE3B,MAAM,cAAc,GAAG,QAAQ,CAAC,UAAU,EACxC,KAAK,EACL,OAAO,EACP,SAAS,EAAE,GAAG,EACd,oBAAoB,GAMrB;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IACvB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAA;IACnC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACrD,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,KAAK,CAAC,0BAA0B,CAC9B,OAAO,EACP,+BAA+B,CAAC,aAAa,CAAC,CAC/C,EAEH,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAChC,CAAA;IAED,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAU,CAAA;IAC1D,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAC/B,YAAY,CAAC,IAAI,CAAC,CAAA;IAElB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,GAAG,CAAC,OAAO,EAAE;QACf,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAChD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAA;KACnB;IAED,yEAAyE;IACzE,sEAAsE;IACtE,2EAA2E;IAC3E,cAAc;IACd,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO,IAAI,CAAA;KACZ;IACD,OAAO,CACL,2BACE,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,OAAO,EACd,WAAW,EAAE,CAAC,iBACD,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,IAEhE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACzB,kEAAkE;QAClE,0CAA0C;QAC1C,MAAM,GAAG,GAAG,EAAE,CAAA;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YACxC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;YAClB,IAAI,CAAC,EAAE,EAAE;gBACP,OAAO,IAAI,CAAA;aACZ;YAED,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACxB,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YAE9D,MAAM,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACxD,IAAI,CAAC,EAAE;gBACL,MAAM,EAAE,GAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;gBACzC,MAAM,EAAE,GAAG,mBAAmB,CAC5B,KAAK,CAAC,MAAM,CAAC,EACb,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EACjB,EAAE,CAAC,IAAI,CAAC,CACT,CAAA;gBACD,MAAM,EAAE,GAAG,CAAC,CAAA;gBACZ,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAA;gBACnD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAA;gBAEnD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;gBAClD,MAAM,EAAE,GACN,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,CAAC;oBAC9D,OAAO,CAAA;gBACT,MAAM,EAAE,GACN,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,CAAC;oBAC9D,OAAO,CAAA;gBAET,MAAM,IAAI,GAAG;oBACX,GAAG;oBACH,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/D,EAAE;oBACF,GAAG;oBACH,EAAE;oBACF,EAAE;oBACF,GAAG;oBACH,EAAE;oBACF,EAAE;oBACF,GAAG;oBACH,EAAE,GAAG,EAAE,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjE,EAAE;iBACH,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACX,GAAG,CAAC,IAAI,CACN,8BACE,CAAC,EAAE,IAAI,EACP,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EACzB,WAAW,EAAE,EAAE,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE;;wBACZ,MAAM,aAAa,GAAG,MAAA,OAAO,CAAC,SAAS,wDACrC,sBAAsB,EACtB,gBAAgB,EAChB;4BACE,WAAW,EAAE,CACX,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAC9C,CAAC,MAAM,EAAE;yBACX,CACF,CAAA;wBACD,MAAA,OAAO,CAAC,UAAU,wDAAG,aAAa,CAAC,CAAA;oBACrC,CAAC,EACD,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,EACtC,UAAU,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,GAC5C,CACH,CAAA;aACF;SACF;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CAAC,CACA,CACL,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,cAAc,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Feature } from '@jbrowse/core/util';
|
|
2
|
+
export declare function getBadlyPairedAlignments(features: Map<string, Feature>): Feature[][];
|
|
3
|
+
export declare function getMatchedAlignmentFeatures(features: Map<string, Feature>): Feature[][];
|
|
4
|
+
export declare function hasPairedReads(features: Map<string, Feature>): boolean;
|
|
5
|
+
export declare function findMatchingAlt(feat1: Feature, feat2: Feature): import("@gmod/vcf").Breakend | undefined;
|
|
6
|
+
export declare function getMatchedBreakendFeatures(feats: Map<string, Feature>): Feature[][];
|
|
7
|
+
export declare function getMatchedTranslocationFeatures(feats: Map<string, Feature>): Feature[][];
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { notEmpty } from '@jbrowse/core/util';
|
|
2
|
+
import { parseBreakend } from '@gmod/vcf';
|
|
3
|
+
// this finds candidate alignment features, aimed at plotting split reads from
|
|
4
|
+
// BAM/CRAM files
|
|
5
|
+
export function getBadlyPairedAlignments(features) {
|
|
6
|
+
const candidates = new Map();
|
|
7
|
+
const alreadySeen = new Set();
|
|
8
|
+
// this finds candidate features that share the same name
|
|
9
|
+
for (const feature of features.values()) {
|
|
10
|
+
const flags = feature.get('flags');
|
|
11
|
+
const id = feature.id();
|
|
12
|
+
const unmapped = flags & 4;
|
|
13
|
+
const correctlyPaired = flags & 2;
|
|
14
|
+
if (!alreadySeen.has(id) && !correctlyPaired && !unmapped) {
|
|
15
|
+
const n = feature.get('name');
|
|
16
|
+
let val = candidates.get(n);
|
|
17
|
+
if (!val) {
|
|
18
|
+
val = [];
|
|
19
|
+
candidates.set(n, val);
|
|
20
|
+
}
|
|
21
|
+
val.push(feature);
|
|
22
|
+
}
|
|
23
|
+
alreadySeen.add(feature.id());
|
|
24
|
+
}
|
|
25
|
+
return [...candidates.values()].filter(v => v.length > 1);
|
|
26
|
+
}
|
|
27
|
+
function getTag(f, tag) {
|
|
28
|
+
const tags = f.get('tags');
|
|
29
|
+
return tags ? tags[tag] : f.get(tag);
|
|
30
|
+
}
|
|
31
|
+
// this finds candidate alignment features, aimed at plotting split reads from
|
|
32
|
+
// BAM/CRAM files
|
|
33
|
+
export function getMatchedAlignmentFeatures(features) {
|
|
34
|
+
const candidates = new Map();
|
|
35
|
+
const alreadySeen = new Set();
|
|
36
|
+
// this finds candidate features that share the same name
|
|
37
|
+
for (const feature of features.values()) {
|
|
38
|
+
const id = feature.id();
|
|
39
|
+
const unmapped = feature.get('flags') & 4;
|
|
40
|
+
const hasSA = !!getTag(feature, 'SA');
|
|
41
|
+
if (!alreadySeen.has(id) && !unmapped && hasSA) {
|
|
42
|
+
const n = feature.get('name');
|
|
43
|
+
let val = candidates.get(n);
|
|
44
|
+
if (!val) {
|
|
45
|
+
val = [];
|
|
46
|
+
candidates.set(n, val);
|
|
47
|
+
}
|
|
48
|
+
val.push(feature);
|
|
49
|
+
}
|
|
50
|
+
alreadySeen.add(feature.id());
|
|
51
|
+
}
|
|
52
|
+
return [...candidates.values()].filter(v => v.length > 1);
|
|
53
|
+
}
|
|
54
|
+
export function hasPairedReads(features) {
|
|
55
|
+
for (const f of features.values()) {
|
|
56
|
+
if (f.get('flags') & 1) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
export function findMatchingAlt(feat1, feat2) {
|
|
63
|
+
const alts = feat1.get('ALT');
|
|
64
|
+
if (alts) {
|
|
65
|
+
return new Map(alts === null || alts === void 0 ? void 0 : alts.map(alt => parseBreakend(alt)).filter(notEmpty).map(bnd => [bnd.MatePosition, bnd])).get(`${feat2.get('refName')}:${feat2.get('start') + 1}`);
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
// Returns paired BND features across multiple views by inspecting the ALT
|
|
70
|
+
// field to get exact coordinate matches
|
|
71
|
+
export function getMatchedBreakendFeatures(feats) {
|
|
72
|
+
const candidates = new Map();
|
|
73
|
+
const alreadySeen = new Set();
|
|
74
|
+
for (const f of feats.values()) {
|
|
75
|
+
if (!alreadySeen.has(f.id()) && f.get('type') === 'breakend') {
|
|
76
|
+
const alts = f.get('ALT');
|
|
77
|
+
alts === null || alts === void 0 ? void 0 : alts.forEach(a => {
|
|
78
|
+
const cur = `${f.get('refName')}:${f.get('start') + 1}`;
|
|
79
|
+
const bnd = parseBreakend(a);
|
|
80
|
+
if (bnd) {
|
|
81
|
+
const val = candidates.get(cur);
|
|
82
|
+
if (!val) {
|
|
83
|
+
candidates.set(bnd.MatePosition || 'none', [f]);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
val.push(f);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
alreadySeen.add(f.id());
|
|
92
|
+
}
|
|
93
|
+
return [...candidates.values()].filter(v => v.length > 1);
|
|
94
|
+
}
|
|
95
|
+
// Getting "matched" TRA means just return all TRA
|
|
96
|
+
export function getMatchedTranslocationFeatures(feats) {
|
|
97
|
+
const ret = [];
|
|
98
|
+
const alreadySeen = new Set();
|
|
99
|
+
for (const f of feats.values()) {
|
|
100
|
+
if (!alreadySeen.has(f.id()) && f.get('ALT')[0] === '<TRA>') {
|
|
101
|
+
ret.push([f]);
|
|
102
|
+
}
|
|
103
|
+
alreadySeen.add(f.id());
|
|
104
|
+
}
|
|
105
|
+
return ret;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/BreakpointSplitView/components/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { lazy } from 'react';
|
|
2
|
+
// locals
|
|
3
|
+
import BreakpointSplitView from './BreakpointSplitView';
|
|
4
|
+
import stateModelFactory from './model';
|
|
5
|
+
export default (pluginManager) => {
|
|
6
|
+
pluginManager.addViewType(() => {
|
|
7
|
+
return new BreakpointSplitView({
|
|
8
|
+
name: 'BreakpointSplitView',
|
|
9
|
+
displayName: 'Breakpoint split view',
|
|
10
|
+
stateModel: stateModelFactory(pluginManager),
|
|
11
|
+
ReactComponent: lazy(() => import('./components/BreakpointSplitView')),
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/BreakpointSplitView/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAG5B,SAAS;AACT,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,iBAAiB,MAAM,SAAS,CAAA;AAEvC,eAAe,CAAC,aAA4B,EAAE,EAAE;IAC9C,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,IAAI,mBAAmB,CAAC;YAC7B,IAAI,EAAE,qBAAqB;YAC3B,WAAW,EAAE,uBAAuB;YACpC,UAAU,EAAE,iBAAiB,CAAC,aAAa,CAAC;YAC5C,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;SACvE,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|