jbrowse-plugin-msaview 1.0.17 → 2.0.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/CHANGELOG.md +10 -4
- package/README.md +6 -4
- package/dist/AddHighlightModel/GenomeMouseoverHighlight.d.ts +6 -0
- package/dist/AddHighlightModel/GenomeMouseoverHighlight.js +30 -0
- package/dist/AddHighlightModel/GenomeMouseoverHighlight.js.map +1 -0
- package/dist/AddHighlightModel/HighlightComponents.d.ts +7 -0
- package/dist/AddHighlightModel/HighlightComponents.js +12 -0
- package/dist/AddHighlightModel/HighlightComponents.js.map +1 -0
- package/dist/AddHighlightModel/MsaToGenomeHighlight.d.ts +7 -0
- package/dist/AddHighlightModel/MsaToGenomeHighlight.js +26 -0
- package/dist/AddHighlightModel/MsaToGenomeHighlight.js.map +1 -0
- package/dist/AddHighlightModel/index.d.ts +2 -0
- package/dist/AddHighlightModel/index.js +14 -0
- package/dist/AddHighlightModel/index.js.map +1 -0
- package/dist/AddHighlightModel/util.d.ts +9 -0
- package/dist/AddHighlightModel/util.js +14 -0
- package/dist/AddHighlightModel/util.js.map +1 -0
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.d.ts +7 -0
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js +20 -0
- package/dist/LaunchMsaView/components/LaunchMsaViewDialog.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.d.ts +8 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js +76 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.d.ts +26 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.js +48 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.d.ts +2 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js +3 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/index.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.d.ts +8 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.js +17 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.d.ts +20 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.js +64 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.js.map +1 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.d.ts +5 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.js +7 -0
- package/dist/LaunchMsaView/components/NewNCBIBlastQuery/util.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.d.ts +8 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js +90 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.d.ts +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js +12 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.js.map +1 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.d.ts +9 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js +36 -0
- package/dist/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.js.map +1 -0
- package/dist/LaunchMsaView/components/TabUtils.d.ts +12 -0
- package/dist/LaunchMsaView/components/TabUtils.js +13 -0
- package/dist/LaunchMsaView/components/TabUtils.js.map +1 -0
- package/dist/LaunchMsaView/index.d.ts +2 -0
- package/dist/LaunchMsaView/index.js +50 -0
- package/dist/LaunchMsaView/index.js.map +1 -0
- package/dist/LaunchMsaView/util.d.ts +5 -0
- package/dist/LaunchMsaView/util.js +25 -0
- package/dist/LaunchMsaView/util.js.map +1 -0
- package/dist/MsaViewPanel/components/LoadingBLAST.d.ts +6 -0
- package/dist/MsaViewPanel/components/LoadingBLAST.js +36 -0
- package/dist/MsaViewPanel/components/LoadingBLAST.js.map +1 -0
- package/dist/MsaViewPanel/components/MsaViewPanel.d.ts +6 -0
- package/dist/MsaViewPanel/components/MsaViewPanel.js +10 -0
- package/dist/MsaViewPanel/components/MsaViewPanel.js.map +1 -0
- package/dist/MsaViewPanel/components/RIDLink.d.ts +5 -0
- package/dist/MsaViewPanel/components/RIDLink.js +17 -0
- package/dist/MsaViewPanel/components/RIDLink.js.map +1 -0
- package/dist/MsaViewPanel/doLaunchBlast.d.ts +7 -0
- package/dist/MsaViewPanel/doLaunchBlast.js +27 -0
- package/dist/MsaViewPanel/doLaunchBlast.js.map +1 -0
- package/dist/MsaViewPanel/genomeToMSA.d.ts +4 -0
- package/dist/MsaViewPanel/genomeToMSA.js +18 -0
- package/dist/MsaViewPanel/genomeToMSA.js.map +1 -0
- package/dist/MsaViewPanel/index.d.ts +2 -0
- package/dist/MsaViewPanel/index.js +16 -0
- package/dist/MsaViewPanel/index.js.map +1 -0
- package/dist/MsaViewPanel/model.d.ts +596 -0
- package/dist/MsaViewPanel/model.js +235 -0
- package/dist/MsaViewPanel/model.js.map +1 -0
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.d.ts +9 -0
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js +20 -0
- package/dist/MsaViewPanel/msaCoordToGenomeCoord.js.map +1 -0
- package/dist/MsaViewPanel/util.d.ts +8 -0
- package/dist/MsaViewPanel/util.js +7 -0
- package/dist/MsaViewPanel/util.js.map +1 -0
- package/dist/OpenInNewIcon.d.ts +3 -0
- package/dist/OpenInNewIcon.js +8 -0
- package/dist/OpenInNewIcon.js.map +1 -0
- package/dist/TextField2.d.ts +4 -0
- package/dist/TextField2.js +8 -0
- package/dist/TextField2.js.map +1 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.js +32 -7
- package/dist/index.js.map +1 -0
- package/dist/jbrowse-plugin-msaview.umd.production.min.js +109 -1
- package/dist/jbrowse-plugin-msaview.umd.production.min.js.map +7 -1
- package/dist/utils/fetch.d.ts +4 -0
- package/dist/utils/fetch.js +19 -0
- package/dist/utils/fetch.js.map +1 -0
- package/dist/utils/msa.d.ts +8 -0
- package/dist/utils/msa.js +75 -0
- package/dist/utils/msa.js.map +1 -0
- package/dist/utils/ncbiBlast.d.ts +20 -0
- package/dist/utils/ncbiBlast.js +66 -0
- package/dist/utils/ncbiBlast.js.map +1 -0
- package/package.json +51 -40
- package/src/AddHighlightModel/GenomeMouseoverHighlight.tsx +44 -0
- package/src/AddHighlightModel/HighlightComponents.tsx +24 -0
- package/src/AddHighlightModel/MsaToGenomeHighlight.tsx +50 -0
- package/src/AddHighlightModel/index.tsx +27 -0
- package/src/AddHighlightModel/util.ts +14 -0
- package/src/LaunchMsaView/components/LaunchMsaViewDialog.tsx +52 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/NcbiBlastPanel.tsx +160 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/calculateProteinSequence.ts +92 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/index.tsx +2 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/ncbiBlastLaunchView.ts +28 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/useFeatureSequence.ts +85 -0
- package/src/LaunchMsaView/components/NewNCBIBlastQuery/util.ts +7 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx +149 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.ts +13 -0
- package/src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts +54 -0
- package/src/LaunchMsaView/components/TabUtils.tsx +30 -0
- package/src/LaunchMsaView/index.ts +61 -0
- package/src/LaunchMsaView/util.ts +30 -0
- package/src/MsaViewPanel/components/LoadingBLAST.tsx +59 -0
- package/src/MsaViewPanel/components/MsaViewPanel.tsx +22 -0
- package/src/MsaViewPanel/components/RIDLink.tsx +18 -0
- package/src/MsaViewPanel/doLaunchBlast.ts +38 -0
- package/src/MsaViewPanel/genomeToMSA.ts +21 -0
- package/src/MsaViewPanel/index.ts +19 -0
- package/src/MsaViewPanel/model.ts +290 -0
- package/src/MsaViewPanel/msaCoordToGenomeCoord.ts +29 -0
- package/src/MsaViewPanel/util.ts +13 -0
- package/src/OpenInNewIcon.tsx +11 -0
- package/src/TextField2.tsx +12 -0
- package/src/index.ts +12 -14
- package/src/utils/fetch.ts +25 -0
- package/src/utils/msa.ts +111 -0
- package/src/utils/ncbiBlast.ts +105 -0
- package/dist/config.json +0 -8
- package/dist/jbrowse-plugin-msaview.cjs.development.js +0 -168
- package/dist/jbrowse-plugin-msaview.cjs.development.js.map +0 -1
- package/dist/jbrowse-plugin-msaview.cjs.production.min.js +0 -2
- package/dist/jbrowse-plugin-msaview.cjs.production.min.js.map +0 -1
- package/dist/jbrowse-plugin-msaview.esm.js +0 -163
- package/dist/jbrowse-plugin-msaview.esm.js.map +0 -1
- package/dist/jbrowse-plugin-msaview.umd.development.js +0 -8641
- package/dist/jbrowse-plugin-msaview.umd.development.js.map +0 -1
- package/src/index.test.ts +0 -3
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { ErrorMessage } from '@jbrowse/core/ui';
|
|
4
|
+
import { Button, DialogActions, DialogContent, MenuItem, TextField, Typography, } from '@mui/material';
|
|
5
|
+
import { getContainingView, getSession, } from '@jbrowse/core/util';
|
|
6
|
+
import { makeStyles } from 'tss-react/mui';
|
|
7
|
+
// locals
|
|
8
|
+
import { getTranscriptDisplayName, getId, getTranscriptFeatures, } from '../../util';
|
|
9
|
+
import { fetchGeneList } from './fetchGeneList';
|
|
10
|
+
import { preCalculatedLaunchView } from './preCalculatedLaunchView';
|
|
11
|
+
const useStyles = makeStyles()({
|
|
12
|
+
dialogContent: {
|
|
13
|
+
width: '80em',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
const PreLoadedMSA = observer(function PreLoadedMSA2({ model, feature, handleClose, }) {
|
|
17
|
+
const session = getSession(model);
|
|
18
|
+
const view = getContainingView(model);
|
|
19
|
+
const { classes } = useStyles();
|
|
20
|
+
const [error, setError] = useState();
|
|
21
|
+
const [geneNameList, setGeneNameList] = useState();
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
24
|
+
;
|
|
25
|
+
(async () => {
|
|
26
|
+
try {
|
|
27
|
+
const data = await fetchGeneList();
|
|
28
|
+
setGeneNameList(data);
|
|
29
|
+
const set = new Set(data);
|
|
30
|
+
const options = getTranscriptFeatures(feature);
|
|
31
|
+
const ret = options.find(val => set.has(getId(val)));
|
|
32
|
+
if (ret) {
|
|
33
|
+
setUserSelection(getId(ret));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (e) {
|
|
37
|
+
console.error(e);
|
|
38
|
+
setError(e);
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
}, [feature]);
|
|
42
|
+
const set = new Set(geneNameList);
|
|
43
|
+
const options = getTranscriptFeatures(feature);
|
|
44
|
+
const ret = options.find(val => set.has(getId(val)));
|
|
45
|
+
const [userSelection, setUserSelection] = useState(getId(options[0]));
|
|
46
|
+
return (React.createElement(React.Fragment, null,
|
|
47
|
+
React.createElement(DialogContent, { className: classes.dialogContent },
|
|
48
|
+
React.createElement(Typography, null,
|
|
49
|
+
"The source data for these multiple sequence alignments is from",
|
|
50
|
+
' ',
|
|
51
|
+
React.createElement("a", { href: "https://hgdownload.soe.ucsc.edu/goldenPath/hg38/multiz100way/alignments/" }, "knownCanonical.multiz100way.protAA.fa.gz")),
|
|
52
|
+
error ? React.createElement(ErrorMessage, { error: error }) : null,
|
|
53
|
+
geneNameList && !ret ? (React.createElement("div", { style: { color: 'red' } }, "No MSA data for this gene found")) : null,
|
|
54
|
+
React.createElement(TextField, { value: userSelection, onChange: event => setUserSelection(event.target.value), label: "Choose isoform to view MSA for", select: true },
|
|
55
|
+
options
|
|
56
|
+
.filter(val => set.has(getId(val)))
|
|
57
|
+
.map(val => (React.createElement(MenuItem, { value: getId(val), key: val.id() },
|
|
58
|
+
getTranscriptDisplayName(val),
|
|
59
|
+
" (has data)"))),
|
|
60
|
+
options
|
|
61
|
+
.filter(val => !set.has(getId(val)))
|
|
62
|
+
.map(val => (React.createElement(MenuItem, { value: getId(val), key: val.id(), disabled: true }, getTranscriptDisplayName(val)))))),
|
|
63
|
+
React.createElement(DialogActions, null,
|
|
64
|
+
React.createElement(Button, { color: "primary", variant: "contained", onClick: () => {
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
66
|
+
;
|
|
67
|
+
(async () => {
|
|
68
|
+
try {
|
|
69
|
+
if (!ret) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
await preCalculatedLaunchView({
|
|
73
|
+
userSelection,
|
|
74
|
+
session,
|
|
75
|
+
newViewTitle: '',
|
|
76
|
+
view,
|
|
77
|
+
feature: ret,
|
|
78
|
+
});
|
|
79
|
+
handleClose();
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
console.error(e);
|
|
83
|
+
setError(e);
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
} }, "Submit"),
|
|
87
|
+
React.createElement(Button, { color: "secondary", variant: "contained", onClick: () => handleClose() }, "Cancel"))));
|
|
88
|
+
});
|
|
89
|
+
export default PreLoadedMSA;
|
|
90
|
+
//# sourceMappingURL=PreLoadedMSADataPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreLoadedMSADataPanel.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/PreLoadedMSADataPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fetchGeneList(): Promise<string[]>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export async function fetchGeneList() {
|
|
2
|
+
const res = await fetch('https://jbrowse.org/demos/msaview/knownCanonical/list.txt');
|
|
3
|
+
if (!res.ok) {
|
|
4
|
+
throw new Error(`HTTP ${res.status} fetching list ${await res.text()}`);
|
|
5
|
+
}
|
|
6
|
+
const result = await res.text();
|
|
7
|
+
return result
|
|
8
|
+
.split('\n')
|
|
9
|
+
.map(f => f.trim())
|
|
10
|
+
.filter(f => !!f);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=fetchGeneList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetchGeneList.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/fetchGeneList.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,2DAA2D,CAC5D,CAAA;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,kBAAkB,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IAC/B,OAAO,MAAM;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AbstractSessionModel, Feature } from '@jbrowse/core/util';
|
|
2
|
+
import { LinearGenomeViewModel } from '@jbrowse/plugin-linear-genome-view';
|
|
3
|
+
export declare function preCalculatedLaunchView({ userSelection, session, newViewTitle, view, feature, }: {
|
|
4
|
+
session: AbstractSessionModel;
|
|
5
|
+
userSelection: string;
|
|
6
|
+
newViewTitle: string;
|
|
7
|
+
view: LinearGenomeViewModel;
|
|
8
|
+
feature: Feature;
|
|
9
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ungzip } from 'pako';
|
|
2
|
+
async function myfetch(url) {
|
|
3
|
+
const res = await fetch(url);
|
|
4
|
+
if (!res.ok) {
|
|
5
|
+
throw new Error(`HTTP ${res.status} fetching ${await res.text()}`);
|
|
6
|
+
}
|
|
7
|
+
const data = await res.arrayBuffer();
|
|
8
|
+
return new TextDecoder().decode(ungzip(data));
|
|
9
|
+
}
|
|
10
|
+
export async function preCalculatedLaunchView({ userSelection, session, newViewTitle, view, feature, }) {
|
|
11
|
+
const d = await myfetch(`https://jbrowse.org/demos/msaview/knownCanonical/${userSelection}.mfa.gz`);
|
|
12
|
+
session.addView('MsaView', {
|
|
13
|
+
type: 'MsaView',
|
|
14
|
+
displayName: newViewTitle,
|
|
15
|
+
treeAreaWidth: 200,
|
|
16
|
+
treeWidth: 100,
|
|
17
|
+
drawNodeBubbles: false,
|
|
18
|
+
labelsAlignRight: true,
|
|
19
|
+
showBranchLen: false,
|
|
20
|
+
colWidth: 10,
|
|
21
|
+
rowHeight: 12,
|
|
22
|
+
colorSchemeName: 'percent_identity_dynamic',
|
|
23
|
+
treeFilehandle: {
|
|
24
|
+
uri: 'https://hgdownload.soe.ucsc.edu/goldenPath/hg38/multiz100way/hg38.100way.nh',
|
|
25
|
+
},
|
|
26
|
+
treeMetadataFilehandle: {
|
|
27
|
+
uri: 'https://s3.amazonaws.com/jbrowse.org/demos/app/species.json',
|
|
28
|
+
},
|
|
29
|
+
data: {
|
|
30
|
+
msa: d,
|
|
31
|
+
},
|
|
32
|
+
connectedViewId: view.id,
|
|
33
|
+
connectedFeature: feature.toJSON(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=preCalculatedLaunchView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preCalculatedLaunchView.js","sourceRoot":"","sources":["../../../../src/LaunchMsaView/components/PreLoadedMSA/preCalculatedLaunchView.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAE7B,KAAK,UAAU,OAAO,CAAC,GAAW;IAChC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,aAAa,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACpE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAC5C,aAAa,EACb,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,OAAO,GAOR;IACC,MAAM,CAAC,GAAG,MAAM,OAAO,CACrB,oDAAoD,aAAa,SAAS,CAC3E,CAAA;IAED,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;QACzB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,YAAY;QACzB,aAAa,EAAE,GAAG;QAClB,SAAS,EAAE,GAAG;QACd,eAAe,EAAE,KAAK;QACtB,gBAAgB,EAAE,IAAI;QACtB,aAAa,EAAE,KAAK;QACpB,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,eAAe,EAAE,0BAA0B;QAC3C,cAAc,EAAE;YACd,GAAG,EAAE,6EAA6E;SACnF;QACD,sBAAsB,EAAE;YACtB,GAAG,EAAE,6DAA6D;SACnE;QACD,IAAI,EAAE;YACJ,GAAG,EAAE,CAAC;SACP;QACD,eAAe,EAAE,IAAI,CAAC,EAAE;QACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,EAAE;KACnC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface TabPanelProps {
|
|
3
|
+
children?: React.ReactNode;
|
|
4
|
+
index: number;
|
|
5
|
+
value: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function CustomTabPanel(props: TabPanelProps): React.JSX.Element;
|
|
8
|
+
export declare function a11yProps(index: number): {
|
|
9
|
+
id: string;
|
|
10
|
+
'aria-controls': string;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Box } from '@mui/material';
|
|
3
|
+
export function CustomTabPanel(props) {
|
|
4
|
+
const { children, value, index, ...other } = props;
|
|
5
|
+
return (React.createElement("div", { role: "tabpanel", hidden: value !== index, id: `gtabpanel-${index}`, "aria-labelledby": `gtab-${index}`, ...other }, value === index && React.createElement(Box, { sx: { p: 3 } }, children)));
|
|
6
|
+
}
|
|
7
|
+
export function a11yProps(index) {
|
|
8
|
+
return {
|
|
9
|
+
id: `gtab-${index}`,
|
|
10
|
+
'aria-controls': `gtabpanel-${index}`,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=TabUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabUtils.js","sourceRoot":"","sources":["../../../src/LaunchMsaView/components/TabUtils.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAA;AAQnC,MAAM,UAAU,cAAc,CAAC,KAAoB;IACjD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAA;IAElD,OAAO,CACL,6BACE,IAAI,EAAC,UAAU,EACf,MAAM,EAAE,KAAK,KAAK,KAAK,EACvB,EAAE,EAAE,aAAa,KAAK,EAAE,qBACP,QAAQ,KAAK,EAAE,KAC5B,KAAK,IAER,KAAK,KAAK,KAAK,IAAI,oBAAC,GAAG,IAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAG,QAAQ,CAAO,CACnD,CACP,CAAA;AACH,CAAC;AACD,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO;QACL,EAAE,EAAE,QAAQ,KAAK,EAAE;QACnB,eAAe,EAAE,aAAa,KAAK,EAAE;KACtC,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { getSession, getContainingTrack } from '@jbrowse/core/util';
|
|
2
|
+
// icons
|
|
3
|
+
import AddIcon from '@mui/icons-material/Add';
|
|
4
|
+
// locals
|
|
5
|
+
import LaunchMsaViewDialog from './components/LaunchMsaViewDialog';
|
|
6
|
+
function isDisplay(elt) {
|
|
7
|
+
return elt.name === 'LinearBasicDisplay';
|
|
8
|
+
}
|
|
9
|
+
function extendStateModel(stateModel) {
|
|
10
|
+
return stateModel.views(self => {
|
|
11
|
+
const superContextMenuItems = self.contextMenuItems;
|
|
12
|
+
return {
|
|
13
|
+
contextMenuItems() {
|
|
14
|
+
const feature = self.contextMenuFeature;
|
|
15
|
+
const track = getContainingTrack(self);
|
|
16
|
+
return [
|
|
17
|
+
...superContextMenuItems(),
|
|
18
|
+
...(feature
|
|
19
|
+
? [
|
|
20
|
+
{
|
|
21
|
+
label: 'Launch MSA view',
|
|
22
|
+
icon: AddIcon,
|
|
23
|
+
onClick: () => {
|
|
24
|
+
const session = getSession(track);
|
|
25
|
+
session.queueDialog(handleClose => [
|
|
26
|
+
LaunchMsaViewDialog,
|
|
27
|
+
{
|
|
28
|
+
model: track,
|
|
29
|
+
handleClose,
|
|
30
|
+
feature,
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
]
|
|
36
|
+
: []),
|
|
37
|
+
];
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export default function LaunchMsaViewF(pluginManager) {
|
|
43
|
+
pluginManager.addToExtensionPoint('Core-extendPluggableElement', (elt) => {
|
|
44
|
+
if (isDisplay(elt)) {
|
|
45
|
+
elt.stateModel = extendStateModel(elt.stateModel);
|
|
46
|
+
}
|
|
47
|
+
return elt;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LaunchMsaView/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEnE,QAAQ;AACR,OAAO,OAAO,MAAM,yBAAyB,CAAA;AAE7C,SAAS;AACT,OAAO,mBAAmB,MAAM,kCAAkC,CAAA;AAElE,SAAS,SAAS,CAAC,GAAqB;IACtC,OAAO,GAAG,CAAC,IAAI,KAAK,oBAAoB,CAAA;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAyB;IACjD,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QACnD,OAAO;YACL,gBAAgB;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAA;gBACvC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;gBACtC,OAAO;oBACL,GAAG,qBAAqB,EAAE;oBAC1B,GAAG,CAAC,OAAO;wBACT,CAAC,CAAC;4BACE;gCACE,KAAK,EAAE,iBAAiB;gCACxB,IAAI,EAAE,OAAO;gCACb,OAAO,EAAE,GAAG,EAAE;oCACZ,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;oCACjC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;wCACjC,mBAAmB;wCACnB;4CACE,KAAK,EAAE,KAAK;4CACZ,WAAW;4CACX,OAAO;yCACR;qCACF,CAAC,CAAA;gCACJ,CAAC;6BACF;yBACF;wBACH,CAAC,CAAC,EAAE,CAAC;iBACR,CAAA;YACH,CAAC;SACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,aAA4B;IACjE,aAAa,CAAC,mBAAmB,CAC/B,6BAA6B,EAC7B,CAAC,GAAyB,EAAE,EAAE;QAC5B,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACnD,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,CACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Feature } from '@jbrowse/core/util';
|
|
2
|
+
export declare function getTranscriptFeatures(feature: Feature): Feature[];
|
|
3
|
+
export declare function getId(val?: Feature): any;
|
|
4
|
+
export declare function getTranscriptDisplayName(val?: Feature): string;
|
|
5
|
+
export declare function getGeneDisplayName(val?: Feature): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function getTranscriptFeatures(feature) {
|
|
2
|
+
// check if we are looking at a 'two-level' or 'three-level' feature by
|
|
3
|
+
// finding exon/CDS subfeatures. we want to select from transcript names
|
|
4
|
+
const subfeatures = feature.get('subfeatures') ?? [];
|
|
5
|
+
return subfeatures.some(f => f.get('type') === 'CDS')
|
|
6
|
+
? [feature]
|
|
7
|
+
: // filter out non-coding by finding subfeatures with CDS subfeatures
|
|
8
|
+
subfeatures.filter(f => f.get('subfeatures')?.some(f => f.get('type') === 'CDS'));
|
|
9
|
+
}
|
|
10
|
+
export function getId(val) {
|
|
11
|
+
return val === undefined ? '' : val.get('name') || val.get('id');
|
|
12
|
+
}
|
|
13
|
+
export function getTranscriptDisplayName(val) {
|
|
14
|
+
return val === undefined
|
|
15
|
+
? ''
|
|
16
|
+
: [val.get('name'), val.get('id')].filter(f => !!f).join(' ');
|
|
17
|
+
}
|
|
18
|
+
export function getGeneDisplayName(val) {
|
|
19
|
+
return val === undefined
|
|
20
|
+
? ''
|
|
21
|
+
: [val.get('gene_name') || val.get('name'), val.get('id')]
|
|
22
|
+
.filter(f => !!f)
|
|
23
|
+
.join(' ');
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/LaunchMsaView/util.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,uEAAuE;IACvE,wEAAwE;IACxE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;IACpD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC;QACnD,CAAC,CAAC,CAAC,OAAO,CAAC;QACX,CAAC,CAAC,oEAAoE;YACpE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrB,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CACzD,CAAA;AACP,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,GAAa;IACjC,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAa;IACpD,OAAO,GAAG,KAAK,SAAS;QACtB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC9C,OAAO,GAAG,KAAK,SAAS;QACtB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;aACrD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB,IAAI,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Typography } from '@mui/material';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import { makeStyles } from 'tss-react/mui';
|
|
5
|
+
import { ErrorMessage, LoadingEllipses } from '@jbrowse/core/ui';
|
|
6
|
+
// locals
|
|
7
|
+
import RIDLink from './RIDLink';
|
|
8
|
+
const useStyles = makeStyles()(theme => ({
|
|
9
|
+
margin: {
|
|
10
|
+
padding: 20,
|
|
11
|
+
},
|
|
12
|
+
loading: {
|
|
13
|
+
background: theme.palette.background.paper,
|
|
14
|
+
},
|
|
15
|
+
}));
|
|
16
|
+
function RIDError({ rid, error }) {
|
|
17
|
+
return (React.createElement("div", null,
|
|
18
|
+
rid ? React.createElement(RIDLink, { rid: rid }) : null,
|
|
19
|
+
React.createElement(ErrorMessage, { error: error })));
|
|
20
|
+
}
|
|
21
|
+
function RIDProgress({ rid, progress }) {
|
|
22
|
+
const { classes } = useStyles();
|
|
23
|
+
return (React.createElement("div", { className: classes.loading },
|
|
24
|
+
rid ? React.createElement(RIDLink, { rid: rid }) : null,
|
|
25
|
+
React.createElement(Typography, null, progress)));
|
|
26
|
+
}
|
|
27
|
+
const LoadingBLAST = observer(function LoadingBLAST2({ model, }) {
|
|
28
|
+
const { progress, rid, error, processing } = model;
|
|
29
|
+
const { classes } = useStyles();
|
|
30
|
+
return (React.createElement("div", { className: classes.margin },
|
|
31
|
+
React.createElement(LoadingEllipses, { message: "Running NCBI BLAST", variant: "h5" }),
|
|
32
|
+
error ? (React.createElement(RIDError, { rid: rid, error: error })) : rid ? (React.createElement(RIDProgress, { rid: rid, progress: progress })) : null,
|
|
33
|
+
React.createElement(Typography, null, processing || 'Initializing BLAST query')));
|
|
34
|
+
});
|
|
35
|
+
export default LoadingBLAST;
|
|
36
|
+
//# sourceMappingURL=LoadingBLAST.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LoadingBLAST.js","sourceRoot":"","sources":["../../../src/MsaViewPanel/components/LoadingBLAST.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAEhE,SAAS;AACT,OAAO,OAAO,MAAM,WAAW,CAAA;AAE/B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;KACZ;IACD,OAAO,EAAE;QACP,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;KAC3C;CACF,CAAC,CAAC,CAAA;AAEH,SAAS,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAoC;IAChE,OAAO,CACL;QACG,GAAG,CAAC,CAAC,CAAC,oBAAC,OAAO,IAAC,GAAG,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,IAAI;QACnC,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAC1B,CACP,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAqC;IACvE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,OAAO;QAC5B,GAAG,CAAC,CAAC,CAAC,oBAAC,OAAO,IAAC,GAAG,EAAE,GAAG,GAAI,CAAC,CAAC,CAAC,IAAI;QACnC,oBAAC,UAAU,QAAE,QAAQ,CAAc,CAC/B,CACP,CAAA;AACH,CAAC;AAED,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,aAAa,CAAC,EACnD,KAAK,GAGN;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAA;IAClD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAAE,CAAA;IAC/B,OAAO,CACL,6BAAK,SAAS,EAAE,OAAO,CAAC,MAAM;QAC5B,oBAAC,eAAe,IAAC,OAAO,EAAC,oBAAoB,EAAC,OAAO,EAAC,IAAI,GAAG;QAC5D,KAAK,CAAC,CAAC,CAAC,CACP,oBAAC,QAAQ,IAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,GAAI,CACrC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CACR,oBAAC,WAAW,IAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAC9C,CAAC,CAAC,CAAC,IAAI;QACR,oBAAC,UAAU,QAAE,UAAU,IAAI,0BAA0B,CAAc,CAC/D,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { observer } from 'mobx-react';
|
|
3
|
+
import { MSAView } from 'react-msaview';
|
|
4
|
+
import LoadingBLAST from './LoadingBLAST';
|
|
5
|
+
const MsaViewPanel = observer(function MsaViewPanel2({ model, }) {
|
|
6
|
+
const { blastParams } = model;
|
|
7
|
+
return (React.createElement("div", null, blastParams ? React.createElement(LoadingBLAST, { model: model }) : React.createElement(MSAView, { model: model })));
|
|
8
|
+
});
|
|
9
|
+
export default MsaViewPanel;
|
|
10
|
+
//# sourceMappingURL=MsaViewPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MsaViewPanel.js","sourceRoot":"","sources":["../../../src/MsaViewPanel/components/MsaViewPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAIvC,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,aAAa,CAAC,EACnD,KAAK,GAGN;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAA;IAC7B,OAAO,CACL,iCACG,WAAW,CAAC,CAAC,CAAC,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,oBAAC,OAAO,IAAC,KAAK,EAAE,KAAK,GAAI,CACrE,CACP,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Link, Typography } from '@mui/material';
|
|
3
|
+
// locals
|
|
4
|
+
import OpenInNewIcon from '../../OpenInNewIcon';
|
|
5
|
+
import { BLAST_URL } from '../../utils/ncbiBlast';
|
|
6
|
+
function RIDLink({ rid }) {
|
|
7
|
+
return (React.createElement(Typography, null,
|
|
8
|
+
"RID ",
|
|
9
|
+
rid,
|
|
10
|
+
' ',
|
|
11
|
+
React.createElement(Link, { target: "_black", href: `${BLAST_URL}?CMD=Get&RID=${rid}` },
|
|
12
|
+
"(see status at NCBI ",
|
|
13
|
+
React.createElement(OpenInNewIcon, null),
|
|
14
|
+
")")));
|
|
15
|
+
}
|
|
16
|
+
export default RIDLink;
|
|
17
|
+
//# sourceMappingURL=RIDLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RIDLink.js","sourceRoot":"","sources":["../../../src/MsaViewPanel/components/RIDLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAChD,SAAS;AACT,OAAO,aAAa,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD,SAAS,OAAO,CAAC,EAAE,GAAG,EAAmB;IACvC,OAAO,CACL,oBAAC,UAAU;;QACJ,GAAG;QAAE,GAAG;QACb,oBAAC,IAAI,IAAC,MAAM,EAAC,QAAQ,EAAC,IAAI,EAAE,GAAG,SAAS,gBAAgB,GAAG,EAAE;;YACvC,oBAAC,aAAa,OAAG;gBAChC,CACI,CACd,CAAA;AACH,CAAC;AAED,eAAe,OAAO,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { launchMSA } from '../utils/msa';
|
|
2
|
+
import { queryBlast } from '../utils/ncbiBlast';
|
|
3
|
+
import { makeId, strip, } from '../LaunchMsaView/components/NewNCBIBlastQuery/util';
|
|
4
|
+
export async function doLaunchBlast({ self, }) {
|
|
5
|
+
const { blastDatabase, blastProgram, msaAlgorithm, proteinSequence } = self.blastParams;
|
|
6
|
+
const query = proteinSequence.replaceAll('*', '').replaceAll('&', '');
|
|
7
|
+
const { hits } = await queryBlast({
|
|
8
|
+
query,
|
|
9
|
+
blastDatabase,
|
|
10
|
+
blastProgram,
|
|
11
|
+
onProgress: arg => self.setProgress(arg),
|
|
12
|
+
onRid: rid => self.setRid(rid),
|
|
13
|
+
});
|
|
14
|
+
const sequence = [
|
|
15
|
+
`>QUERY\n${query}`,
|
|
16
|
+
...hits
|
|
17
|
+
.map(h => [makeId(h.description[0]), strip(h.hsps[0].hseq)])
|
|
18
|
+
.map(([id, seq]) => `>${id}\n${seq}`),
|
|
19
|
+
].join('\n');
|
|
20
|
+
const data = await launchMSA({
|
|
21
|
+
algorithm: msaAlgorithm,
|
|
22
|
+
sequence,
|
|
23
|
+
onProgress: arg => self.setProgress(arg),
|
|
24
|
+
});
|
|
25
|
+
return data;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=doLaunchBlast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doLaunchBlast.js","sourceRoot":"","sources":["../../src/MsaViewPanel/doLaunchBlast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EACL,MAAM,EACN,KAAK,GACN,MAAM,oDAAoD,CAAA;AAG3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,IAAI,GAGL;IACC,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,GAClE,IAAI,CAAC,WAAY,CAAA;IACnB,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACrE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,UAAU,CAAC;QAChC,KAAK;QACL,aAAa;QACb,YAAY;QACZ,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;QACxC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;KAC/B,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG;QACf,WAAW,KAAK,EAAE;QAClB,GAAG,IAAI;aACJ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAU,CAAC;aACpE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;KACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEZ,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC;QAC3B,SAAS,EAAE,YAAY;QACvB,QAAQ;QACR,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;KACzC,CAAC,CAAA;IACF,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getSession } from '@jbrowse/core/util';
|
|
2
|
+
import { checkHovered } from './util';
|
|
3
|
+
export function genomeToMSA({ model }) {
|
|
4
|
+
const { hovered } = getSession(model);
|
|
5
|
+
const { transcriptToMsaMap, connectedView } = model;
|
|
6
|
+
if (connectedView?.initialized &&
|
|
7
|
+
transcriptToMsaMap &&
|
|
8
|
+
checkHovered(hovered)) {
|
|
9
|
+
const { coord: hoverCoord } = hovered.hoverPosition;
|
|
10
|
+
const { g2p } = transcriptToMsaMap;
|
|
11
|
+
const ret = g2p[hoverCoord];
|
|
12
|
+
if (ret !== undefined) {
|
|
13
|
+
return model.seqCoordToRowSpecificGlobalCoord('QUERY', ret + 1);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=genomeToMSA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genomeToMSA.js","sourceRoot":"","sources":["../../src/MsaViewPanel/genomeToMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAGrC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAwC;IACzE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,GAAG,KAAK,CAAA;IACnD,IACE,aAAa,EAAE,WAAW;QAC1B,kBAAkB;QAClB,YAAY,CAAC,OAAO,CAAC,EACrB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,CAAA;QACnD,MAAM,EAAE,GAAG,EAAE,GAAG,kBAAkB,CAAA;QAClC,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAAA;QAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC,gCAAgC,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QACjE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { lazy } from 'react';
|
|
2
|
+
import ViewType from '@jbrowse/core/pluggableElementTypes/ViewType';
|
|
3
|
+
// locals
|
|
4
|
+
import stateModelFactory from './model';
|
|
5
|
+
// lazies
|
|
6
|
+
const MsaViewPanel = lazy(() => import('./components/MsaViewPanel'));
|
|
7
|
+
export default function MsaViewF(pluginManager) {
|
|
8
|
+
pluginManager.addViewType(() => {
|
|
9
|
+
return new ViewType({
|
|
10
|
+
name: 'MsaView',
|
|
11
|
+
stateModel: stateModelFactory(),
|
|
12
|
+
ReactComponent: MsaViewPanel,
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/MsaViewPanel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAA;AAE5B,OAAO,QAAQ,MAAM,8CAA8C,CAAA;AAEnE,SAAS;AACT,OAAO,iBAAiB,MAAM,SAAS,CAAA;AAEvC,SAAS;AACT,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAA;AAEpE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,aAA4B;IAC3D,aAAa,CAAC,WAAW,CAAC,GAAG,EAAE;QAC7B,OAAO,IAAI,QAAQ,CAAC;YAClB,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,iBAAiB,EAAE;YAC/B,cAAc,EAAE,YAAY;SAC7B,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC"}
|