Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardcode for REVUE + Protein Override Annotations #134

Open
wants to merge 35 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
951500c
Replacing API pulls with hardcode for Curious Case
aditigopalan Jul 19, 2022
7b1467e
commenting out errored lines
aditigopalan Jul 19, 2022
15d9d61
Running prettier!
aditigopalan Jul 19, 2022
6a0bd81
prettier again
aditigopalan Jul 19, 2022
e2492c1
prettier again
aditigopalan Jul 19, 2022
ed2eadc
Adding more variant cases
aditigopalan Jul 21, 2022
cdfc633
changing var annotation
aditigopalan Jul 21, 2022
61b6c28
=
aditigopalan Jul 21, 2022
94d4c57
prettier x 2
aditigopalan Jul 25, 2022
6b16827
fix0
aditigopalan Jul 25, 2022
8c8ed9d
Var annotation fix1
aditigopalan Jul 25, 2022
b47c0fc
Fixing genomic locations
aditigopalan Jul 25, 2022
fa971dd
Protein Override Annotation
aditigopalan Jul 28, 2022
ea6d64a
comment check
aditigopalan Jul 28, 2022
642715a
Replacing with REVUE + comment check
aditigopalan Jul 28, 2022
60a67e3
Replacing protein annotation header with override
aditigopalan Jul 28, 2022
3188a41
ran prettier >.<
aditigopalan Jul 28, 2022
1df727e
Fixing annotation error
aditigopalan Jul 28, 2022
2243fde
fix again
aditigopalan Jul 28, 2022
8d513dc
Changing variant classification on the header
aditigopalan Jul 28, 2022
31f5be6
Other examples
aditigopalan Aug 11, 2022
74c9df2
Pulling from json
aditigopalan Aug 24, 2022
a8c4fc9
ts errors
aditigopalan Aug 24, 2022
d00359b
Revue page commit
aditigopalan Oct 17, 2022
2010cc9
prettier
aditigopalan Oct 17, 2022
034063b
netlify error fix
aditigopalan Oct 17, 2022
8716a63
reVUE link > variant page
aditigopalan Oct 17, 2022
8f5bc39
prettier
aditigopalan Oct 17, 2022
49ec7aa
Linking to revue website
aditigopalan Oct 28, 2022
ea8cea9
Linking to reVUE website
aditigopalan Oct 28, 2022
81be862
fixing err
aditigopalan Oct 28, 2022
7d5c448
Prettier fix
aditigopalan Oct 28, 2022
400ec46
Switching KIT mutation
aditigopalan Oct 28, 2022
6ba3662
Fixing jsonData error
aditigopalan Oct 28, 2022
b97751a
Merge branch 'genome-nexus:master' into master
aditigopalan Nov 3, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
3 changes: 3 additions & 0 deletions src/component/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@ class Header extends React.Component<{}> {
<Nav.Link href="/news" className="ml-5">
News
</Nav.Link>
{/* <Nav.Link href="/Revue" className="ml-5">
Revue
</Nav.Link> */}
</Nav>
</Navbar.Collapse>
</Container>
Expand Down
99 changes: 88 additions & 11 deletions src/component/variantPage/BasicInfo.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import basicInfo from './BasicInfo.module.scss';
import { Link } from 'react-router-dom';
import { annotationQueryFields } from '../../config/configDefaults';
import Toggle from '../Toggle';
// importing revue eventually to check for entries and display VUE pill
//import { default as jsonData } from '../../data/CuriousCasesList.json';

interface IBasicInfoProps {
annotation: VariantAnnotationSummary | undefined;
Expand Down Expand Up @@ -210,6 +212,7 @@ export default class BasicInfo extends React.Component<IBasicInfoProps> {
if (transcript === undefined) {
return null;
}

let parsedData: BasicInfoData[] = [];
// gene
parsedData.push({
Expand All @@ -235,18 +238,92 @@ export default class BasicInfo extends React.Component<IBasicInfoProps> {
key: 'tsg',
category: 'tsg',
});

//REVUE blip for KIT variant based on transcript ID
if (transcript.transcriptId === 'ENST00000288135') {
parsedData.push({
value: 'VUE',
key: 'RevueAnnotation',
category: getMutationTypeClassName(transcript),
});
} else {
// variant classification
parsedData.push({
value: transcript.variantClassification,
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
}

// harcode for KIT protein change
if (transcript.transcriptId === 'ENST00000288135') {
parsedData.push({
value: 'p.549_557del',
key: 'hgvsShort',
category: 'default',
});
}

// protein change
parsedData.push({
value: transcript.hgvspShort,
key: 'hgvsShort',
category: 'default',
});
// variant classification
parsedData.push({
value: transcript.variantClassification,
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
else if (transcript.transcriptId !== 'ENST00000257430') {
parsedData.push({
value: transcript.hgvspShort,
key: 'hgvsShort',
category: 'default',
});
}

//hardcode for APC protein change
// if (transcript.transcriptId === 'ENST00000257430') {
// parsedData.push({
// value: 'Gly279Phefs*11',
// key: 'hgvsShort',
// category: 'default',
// });
// }
// // protein change
// else {
// parsedData.push({
// value: transcript.hgvspShort,
// key: 'hgvsShort',
// category: 'default',
// });
// }

//hardcode for KIT variant classification
if (transcript.transcriptId === 'ENST00000288135') {
parsedData.push({
value: 'In frame deletion',
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
} else if (transcript.transcriptId === 'ENST00000257430') {
parsedData.push({
value: 'Frameshift',
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
} else if (transcript.transcriptId === 'ENST00000460680') {
parsedData.push({
value: 'Exon Skipping',
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
} else if (transcript.transcriptId === 'ENST00000256078') {
parsedData.push({
value: 'Splice',
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
} else {
// variant classification
parsedData.push({
value: transcript.variantClassification,
key: 'variantClassification',
category: getMutationTypeClassName(transcript),
});
}

// variant type
parsedData.push({
value: this.props.annotation!.variantType,
Expand Down
47 changes: 43 additions & 4 deletions src/component/variantPage/biologicalFunction/CuriousCase.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,32 @@ const TooltipLinks: React.FunctionComponent<{ pubmedIds: number[] }> = (
return <>{tooltipLinks}</>;
};

// API pull
// const CuriousCaseContent: React.FunctionComponent<{
// curiousCases?: CuriousCases;
// }> = (props) => {
// return props.curiousCases ? (
// <span>
// {props.curiousCases.comment} {`. Pubmed ids: `}
// {props.curiousCases.pubmedIds ? (
// <TooltipLinks pubmedIds={props.curiousCases.pubmedIds} />
// ) : (
// 'NA'
// )}
// </span>
// ) : (
// <span>NA</span>
// );
// };

// Hardcode version
const CuriousCaseContent: React.FunctionComponent<{
curiousCases?: CuriousCases;
}> = (props) => {
return props.curiousCases ? (
<span>
{props.curiousCases.comment} {`. Pubmed ids: `}
{props.curiousCases.comment} <br />
{`Pubmed ids: `}
{props.curiousCases.pubmedIds ? (
<TooltipLinks pubmedIds={props.curiousCases.pubmedIds} />
) : (
Expand All @@ -44,6 +64,24 @@ const CuriousCaseContent: React.FunctionComponent<{
);
};

//Version to hardcode entire json
// const CuriousCaseContent: React.FunctionComponent<{
// curiousCases?: CuriousCases;
// }> = (props) => {
// return props.curiousCases ? (
// <span>
// {props.curiousCases.comment} {`. Pubmed ids: `}
// {props.curiousCases.pubmedIds ? (
// <TooltipLinks pubmedIds={props.curiousCases.pubmedIds} />
// ) : (
// 'NA'
// )}
// </span>
// ) : (
// <span>NA</span>
// );
// };

@observer
export default class CuriousCase extends React.Component<ICuriousCaseProps> {
public render() {
Expand All @@ -54,11 +92,12 @@ export default class CuriousCase extends React.Component<ICuriousCaseProps> {
placement="top"
overlay={<div>Curated list of splice variants.</div>}
>
<span
{/* <span
className={functionalGroupsStyle['without-linkout']}
>
Curious Case
</span>
reVUE
</span> */}
<a href={'https://www.cancerrevue.org/'}>reVUE</a>
</DefaultTooltip>
</div>
<CuriousCaseContent curiousCases={this.props.curiousCases} />
Expand Down
32 changes: 32 additions & 0 deletions src/data/CuriousCasesList.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[
{
"hugoGeneSymbol": "APC",
"genomicLocation": "5:g.112151184A>G",
"comment": "Introduces splice acceptor site causing a frameshift",
"pubmedIds": [29316426]
},
{
"genomicLocation": "3:g.52439306A>G",
"comment": "Leads to exon 11 skipping, recurrent in prognostic and kidney cancer",
"pubmedIds": [33681728],
"hugoGeneSymbol": "BAP1"
},
{
"genomicLocation": "4:g.55593576_55593606del",
"comment": "In-frame deletion event at intron10-exon 11 boundary, commmon in Gastrointestinal Stromal Tumors. Revised Protein Annotation: p.549_557del",
"pubmedIds": [15507676, 27600498, 32697050],
"hugoGeneSymbol": "KIT"
},
{
"genomicLocation": "17:g.7579883G>A",
"comment": "Affects mRNA structure, reduces HDM2 binding, recurrent in many cancer types",
"pubmedIds": [31671760],
"hugoGeneSymbol": "TP53"
},
{
"genomicLocation": "12:g.25380277G>T",
"comment": "Introduces a splice donor site if Q61K is not co-occurring with G60G, recurrent in many cancer types",
"pubmedIds": [35236983],
"hugoGeneSymbol": "KRAS"
}
]
7 changes: 7 additions & 0 deletions src/page/Main.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { VariantStore } from './VariantStore';
import { observer } from 'mobx-react';
import News from './News';
import { MainStore } from './MainStore';
import Revue from './REVUEPage';

@observer
class Main extends React.Component<{}> {
Expand Down Expand Up @@ -56,6 +57,12 @@ class Main extends React.Component<{}> {
component={Patient}
/>
<Route exact={true} path="/news" component={News} />
//adding revue
<Route
exact={true}
path="/Revue"
component={Revue}
/>
<Route exact={true} path="/api" component={Api} />
</Switch>
</div>
Expand Down
118 changes: 118 additions & 0 deletions src/page/REVUEPage.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
import * as React from 'react';
//import { useTable } from 'react-table';
//import { default as JsonData } from '../data/CuriousCasesList.json';

import JsonDataDisplay from '../page/REVUETable';
function App() {
return (
<div
className="App"
style={{
justifyContent: 'center',
alignItems: 'center',
height: '100vh',
}}
>
<h1>
reVUE: Repository for Variants with Unexpected Effects {'\n'}{' '}
</h1>

<p>
{' '}
{'\n'} Clinical sequencing of tumor samples has emerged as a
component of routine cancer care. By identifying genomic
alterations that contribute to tumor initiation or progression,
clinical sequencing may be used to identify predictive
biomarkers of drug response, refine patient cancer diagnoses,
assess heritable cancer risk, or inform patient prognosis. Most
genomic alterations are accurately annotated with tools such as
the Variant Effect Predictor (VEP) 1 that infer their effects on
the mRNA and protein by following basic rules of transcription,
mRNA post-transcriptional processing, and translation. For
example, most single nucleotide changes in coding regions of the
DNA lead to missense mutations, nonsense mutations, frameshift
insertions or deletions at the protein level, which may
hyperactivate or inactivate the protein. However, some genomic
variants are not as easily captured by these rules, which can
cause inappropriate or unclear annotation of the protein effect.
For example, a variant that alters an existing splice site or
creates a new one can inactivate or activate the protein. and,
similarly, specific mutations in the non-coding promoter region
of a gene may de-regulate gene expression. Collectively, we term
these variants “variants with unexpected effects (VUE)”. While
many of these are functionally characterized and documented in
the literature, there is currently no centralized database that
identifies, curates and programmatically stores these events,
enabling their annotation during routine clinical cancer genomic
sequencing. Certain VUEs may have therapeutic implications,
which, if mis-annotated may lead to suboptimal treatment
decisions for individual patients with cancer. For example,
in-frame KIT exon 11 deletions are recurrent in patients with
gastrointestinal stromal tumors (GIST) and are biomarkers for
the use of imatinib as first-line therapy. About 2-3% of GIST
tumors harbor KIT exon 11 deletions that extend into the
non-coding intron between exons 10 and 11. Although these events
have been shown to cause in-frame deletions, they are typically
misclassified as inactivating splice site mutations, precluding
patients carrying these mutations from receiving standard care
imatinib. To address this unmet clinical need, we propose to
build a novel bioinformatic application, REVUE, a REpository for
Variants with Unexpected Effect. The application will curate and
store all VUE relevant information, be freely accessible via an
intuitive website and through an application programming
interface (API), and will accept feedback and submission of new
VUEs from the cancer genomics community. It will be an important
resource for clinical bioinformatic pipelines to accurately
annotate all DNA mutations, with important implications for the
subset of patients with cancers harboring VUEs. {'\n'}
</p>
<JsonDataDisplay />
</div>
);
}

export default App;
// class Revue extends React.Component<{}> {
// public render() {
// return (
// <React.Fragment>
// <p>REVUE page is under construction.</p>
// </React.Fragment>
// );
// }
// }

// class Revue extends React.Component<{}> {
// public render() {
// return (
// function JsonDataDisplay() {
// const DisplayData = JsonData.map((info) => {
// return (
// <tr>
// <td>{info.hugoGeneSymbol}</td>
// <td>{info.genomicLocation}</td>
// <td>{info.comment}</td>
// </tr>
// );
// });

// return (
// <div>
// <table className="table table-striped">
// <thead>
// <tr>
// <th>Gene</th>
// <th>Genomic Location</th>
// <th>Comment</th>
// </tr>
// </thead>
// <tbody>{DisplayData}</tbody>
// </table>
// </div>
// );
// }
// )
// }
// }
//export default Revue;
//export default JsonDataDisplay;
Loading