diff --git a/appyters/Tumor_Gene_Target_Screener/README.md b/appyters/Tumor_Gene_Target_Screener/README.md index 89a992551..3dc2ac198 100644 --- a/appyters/Tumor_Gene_Target_Screener/README.md +++ b/appyters/Tumor_Gene_Target_Screener/README.md @@ -2,7 +2,7 @@ This Appyter is inspired by the work of Bosse, Kristopher R et al [1] which compared neurobastomas vs normal tissue in GTEx [2] to identify a promising candidate immunotherapeutic target. -The goal is to allow rapid screening of targets with the help of normal tissue data from GTEx and GEO data through ARCHS4 [3], as well as single-cell data from Tabula Sapiens and the Human Cell Atlas. The Appyter takes tumor expression data and attempts to rank significantly differentially expressed genes when compared with with either bulk RNA-seq data from GTEx or ARCHS4, or single-cell RNA-seq data from Tabula Sapiens or Human Cell Atlas, across all tissues. +The goal is to allow rapid screening of targets with the help of normal tissue data from GTEx and GEO data through ARCHS4 [3], as well as single-cell data from Tabula Sapiens and the Human Cell Atlas. The Appyter takes input expression data (such as from a tumor) and attempts to rank significantly differentially expressed genes when compared with with either bulk RNA-seq data from GTEx or ARCHS4, or single-cell RNA-seq data from Tabula Sapiens or Human Cell Atlas, across all tissues. The Genotype-Tissue Expression (GTEx) Project was supported by the Common Fund of the Office of the Director of the National Institutes of Health, and by NCI, NHGRI, NHLBI, NIDA, NIMH, and NINDS. [2] GTEx Version 8 gene counts was processed to produce gene summary statistics. diff --git a/appyters/Tumor_Gene_Target_Screener/Tumor_Gene_Target_Screener.ipynb b/appyters/Tumor_Gene_Target_Screener/Tumor_Gene_Target_Screener.ipynb index 89f39ebb4..28e1bfd4d 100644 --- a/appyters/Tumor_Gene_Target_Screener/Tumor_Gene_Target_Screener.ipynb +++ b/appyters/Tumor_Gene_Target_Screener/Tumor_Gene_Target_Screener.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f52748ad", + "id": "30e2f31d", "metadata": {}, "outputs": [], "source": [ @@ -15,7 +15,7 @@ { "cell_type": "code", "execution_count": null, - "id": "49bd7e3d", + "id": "c3f1685d", "metadata": {}, "outputs": [], "source": [ @@ -23,13 +23,14 @@ "\n", "{% do SectionField(\n", " name='primary',\n", - " title='Tumor Gene Target Screener',\n", + " title='Target Identifier',\n", + " img='target_identifier_logo.jpg'\n", ") %}\n", "\n", "{% do DescriptionField(\n", " name='data_file_description',\n", " text='''\n", - " Files should be a tsv/csv of the form:
\n", + " If you are uploading scRNA-seq data, please only include cells from a single cluster. Files should be a tsv/csv of the form:
\n", " \n", " \n", " \n", @@ -60,8 +61,8 @@ ") %}\n", "\n", "{% set file = FileField(\n", - " name='tumor_expression',\n", - " label='Tumor RNA-seq expression vectors',\n", + " name='input_expression',\n", + " label='Input RNA-seq expression vectors, such as from a tumor',\n", " description='Gene/Transcripts on the rows, replicates on the columns',\n", " default='GSE49155-lung-squamous-cell-carcinoma.tsv',\n", " required=True,\n", @@ -71,26 +72,35 @@ " section='primary',\n", ") %}\n", "\n", - "{% set tumor_transcript_level = BoolField(\n", - " name='tumor_transcript_level',\n", - " label='Whether the tumor RNA-seq expression vectors is at the level of transcripts or genes',\n", + "{% set input_transcript_level = BoolField(\n", + " name='input_transcript_level',\n", + " label='Whether the input RNA-seq expression vectors are at the level of transcripts or genes',\n", " default=False,\n", " yes_label='Transcript Level',\n", " no_label='Gene Level',\n", " section='primary',\n", ") %}\n", "\n", + "{% set input_single_cell = BoolField(\n", + " name='input_single_cell',\n", + " label='Whether the input is scRNA-seq or bulk RNA-seq',\n", + " default=False,\n", + " yes_label='scRNA-seq',\n", + " no_label='Bulk RNA-seq',\n", + " section='primary',\n", + ") %}\n", + "\n", "{% set background = TabField(\n", " name='background',\n", " label='Normal tissue background',\n", - " description='Tumor expression will be contrasted against this background',\n", + " description='Input expression will be contrasted against this background',\n", " default='Precomputed',\n", " choices={\n", " 'Precomputed': [\n", " ChoiceField(\n", " name='background_dataset',\n", - " label='Normal tissue background',\n", - " description='Choose Gene or Transcript Background variant if your tumor vectors are at the Gene or Transcript level.',\n", + " label='Normal bulk RNA or scRNA-seq background',\n", + " description='Choose Gene or Transcript Background variant if your input vectors are at the Gene or Transcript level.',\n", " choices={\n", " 'GTEx (bulk RNA-seq) - Gene': '\"s3://storage/Tumor_Gene_Target_Screener/gtex-gene-stats.tsv\", storage_options=dict(client_kwargs=dict(endpoint_url=\"https://appyters.maayanlab.cloud\"), anon=True)',\n", " 'GTEx (bulk RNA-seq) - Transcript': '\"s3://storage/Tumor_Gene_Target_Screener/gtex-transcript-stats.tsv\", storage_options=dict(client_kwargs=dict(endpoint_url=\"https://appyters.maayanlab.cloud\"), anon=True)',\n", @@ -125,7 +135,7 @@ " no_label='Gene Level',\n", " ),\n", " BoolField(\n", - " name='single_cell',\n", + " name='background_single_cell',\n", " label='Whether this file is scRNA-seq or bulk RNA-seq',\n", " default=False,\n", " yes_label='scRNA-seq',\n", @@ -139,7 +149,7 @@ " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -174,7 +184,7 @@ " background.value[1].raw_value or False\n", ") %}\n", "\n", - "{% set single_cell = (\n", + "{% set background_single_cell = (\n", " 'scRNA-seq' in background.value[0].raw_value\n", ") if background.raw_value == 'Precomputed' else (\n", " background.value[2].raw_value or False\n", @@ -206,18 +216,18 @@ }, { "cell_type": "markdown", - "id": "3e4a2d1a", + "id": "007d75b1", "metadata": {}, "source": [ "# Overexpressed Candidate Identification\n", "\n", - "This appyter uses RNA-seq expression data for a tumor and identifies over-expressed proteins verses a baseline dataset of normal tissues such those in GTEx or ARCHS4. It then prioritizes candidates by significance and targetability." + "This appyter uses RNA-seq expression data from the input, such as a tumor, and identifies over-expressed proteins verses a baseline dataset of either normal tissues (such those in GTEx or ARCHS4) or normal single-cells (such as those in Tabula Sapiens or Human Cell Atlas). It then prioritizes candidates by significance and targetability." ] }, { "cell_type": "code", "execution_count": null, - "id": "00662f38", + "id": "b33fd1e0", "metadata": {}, "outputs": [], "source": [ @@ -262,18 +272,18 @@ }, { "cell_type": "markdown", - "id": "06a04801", + "id": "254f8067", "metadata": {}, "source": [ - "## Load Tumor RNA-seq Expression Data\n", + "## Load Input RNA-seq Expression Data\n", "\n", - "Load RNA-seq expression data for the tumor." + "Load RNA-seq expression data for the input." ] }, { "cell_type": "code", "execution_count": null, - "id": "73169523", + "id": "b13e82ab", "metadata": {}, "outputs": [], "source": [ @@ -291,13 +301,16 @@ { "cell_type": "code", "execution_count": null, - "id": "e9105c09", + "id": "f5000377", "metadata": {}, "outputs": [], "source": [ "%%appyter code_eval\n", "df_expr = read_table({{ file }})\n", - "{% if tumor_transcript_level.raw_value %}\n", + "{% if input_single_cell.raw_value %}\n", + "df_expr = df_expr.sum(axis=1).to_frame()\n", + "{% endif %}\n", + "{% if input_transcript_level.raw_value %}\n", "df_expr_transcripts = df_expr.index.map(lambda idx: idx.partition('.')[0])\n", "df_expr = df_expr.groupby(df_expr_transcripts, observed=True).sum()\n", "{% else %}\n", @@ -309,7 +322,7 @@ }, { "cell_type": "markdown", - "id": "ebcb9d0b", + "id": "a9bf2192", "metadata": {}, "source": [ "## Load Background Dataset\n", @@ -320,7 +333,7 @@ { "cell_type": "code", "execution_count": null, - "id": "943b3727", + "id": "4cfe29da", "metadata": {}, "outputs": [], "source": [ @@ -340,12 +353,12 @@ { "cell_type": "code", "execution_count": null, - "id": "f9570baa", + "id": "8b68ca30", "metadata": {}, "outputs": [], "source": [ "%%appyter markdown\n", - "{% if background_transcript_level or tumor_transcript_level.raw_value %}\n", + "{% if background_transcript_level or input_transcript_level.raw_value %}\n", "## Load Transcript <=> Gene Mappings\n", "{% endif %}" ] @@ -353,12 +366,12 @@ { "cell_type": "code", "execution_count": null, - "id": "72b486b4", + "id": "761244b8", "metadata": {}, "outputs": [], "source": [ "%%appyter code_eval\n", - "{% if background_transcript_level or tumor_transcript_level.raw_value %}\n", + "{% if background_transcript_level or input_transcript_level.raw_value %}\n", "df_transcript_gene_map = pd.read_csv(\"s3://storage/Tumor_Gene_Target_Screener/transcript-gene-map.tsv.gz\", storage_options=dict(client_kwargs=dict(endpoint_url=\"https://appyters.maayanlab.cloud\"), anon=True), sep='\\t', header=0, index_col=0, compression='gzip')\n", "df_transcript_gene_map\n", "{% endif %}" @@ -367,7 +380,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9817fe33", + "id": "d270adcf", "metadata": {}, "outputs": [], "source": [ @@ -382,7 +395,7 @@ { "cell_type": "code", "execution_count": null, - "id": "159cff0e", + "id": "b2852e5e", "metadata": {}, "outputs": [], "source": [ @@ -398,13 +411,13 @@ { "cell_type": "code", "execution_count": null, - "id": "8fab8107", + "id": "74c487bc", "metadata": {}, "outputs": [], "source": [ "%%appyter markdown\n", - "{% if background_transcript_level and tumor_transcript_level.raw_value %}\n", - "## Background (Transcript) - Tumor (Transcript) Gene Interoperability\n", + "{% if background_transcript_level and input_transcript_level.raw_value %}\n", + "## Background (Transcript) - Input (Transcript) Gene Interoperability\n", "\n", "Several features of this appyter operate at the gene level, thus while we will find significant transcripts, we\n", "will use the associated gene for the other features.\n", @@ -414,15 +427,15 @@ { "cell_type": "code", "execution_count": null, - "id": "f92686e4", + "id": "5a1f97c9", "metadata": {}, "outputs": [], "source": [ "%%appyter markdown\n", - "{% if background_transcript_level and not tumor_transcript_level.raw_value %}\n", - "## Background (Transcript) - Tumor (Gene) Interoperability\n", + "{% if background_transcript_level and not input_transcript_level.raw_value %}\n", + "## Background (Transcript) - Input (Gene) Interoperability\n", "\n", - "As the tumor RNA-seq expression data is at the gene level, we will map the\n", + "As the input RNA-seq expression data is at the gene level, we will map the\n", "background to genes for differential expression but later highlight significant transcripts in the background.\n", "{% endif %}" ] @@ -430,12 +443,12 @@ { "cell_type": "code", "execution_count": null, - "id": "cc5fa83f", + "id": "cec25b5d", "metadata": {}, "outputs": [], "source": [ "%%appyter code_eval\n", - "{% if background_transcript_level and not tumor_transcript_level.raw_value %}\n", + "{% if background_transcript_level and not input_transcript_level.raw_value %}\n", "df_bg_expr = df_bg_expr.groupby(df_transcript_gene_map['gene_symbol']).sum().groupby(lookup).median()\n", "df_bg_expr\n", "{% endif %}" @@ -444,16 +457,16 @@ { "cell_type": "code", "execution_count": null, - "id": "dcca6b98", + "id": "8c05fcbd", "metadata": {}, "outputs": [], "source": [ "%%appyter markdown\n", - "{% if not background_transcript_level and tumor_transcript_level.raw_value %}\n", - "## Background (Gene) - Tumor (Transcript) Interoperability\n", + "{% if not background_transcript_level and input_transcript_level.raw_value %}\n", + "## Background (Gene) - Input (Transcript) Interoperability\n", "\n", - "Though the tumor RNA-seq expression data is at the transcript level, the background is only at the gene level.\n", - "This is not ideal, but we can still highlight individual transcripts in the tumor that are over-expressed\n", + "Although the input RNA-seq expression data is at the transcript level, the background is only at the gene level.\n", + "This is not ideal, but we can still highlight individual transcripts in the input that are over-expressed\n", "when compared to the average background expression across all transcripts.\n", "{% endif %}" ] @@ -461,12 +474,12 @@ { "cell_type": "code", "execution_count": null, - "id": "c9ed9810", + "id": "5e56bb2a", "metadata": {}, "outputs": [], "source": [ "%%appyter code_eval\n", - "{% if not background_transcript_level and tumor_transcript_level.raw_value %}\n", + "{% if not background_transcript_level and input_transcript_level.raw_value %}\n", "# \"melt\" from wide format to long format with the columns: (index, type, stat, value)\n", "df_bg_expr_melted = df_bg_expr.melt(ignore_index=False)\n", "# merge with transcript_gene_map will transform the index from gene_symbol to ensembl_transcript_id\n", @@ -483,25 +496,25 @@ }, { "cell_type": "markdown", - "id": "5e6e5301", + "id": "0763ba3a", "metadata": {}, "source": [ - "## Distribution matching between tumor sample(s) & the background\n", + "## Distribution matching between input sample(s) & the background\n", "\n", - "We show the median gene expression distribution in the tumor and in the background before and after normalization." + "We show the median gene expression distribution in the input and in the background before and after normalization." ] }, { "cell_type": "code", "execution_count": null, - "id": "b847cb51", + "id": "416950d2", "metadata": {}, "outputs": [], "source": [ "fig, ((ax11, ax12), (ax21, ax22)) = plt.subplots(2, 2)\n", "log2_normalize(df_expr).median(axis=1).hist(bins=100, ax=ax11)\n", "ax11.set_title('Median Expression')\n", - "ax11.set_ylabel('Tumor')\n", + "ax11.set_ylabel('Input')\n", "log2_normalize(df_expr).median(axis=0).hist(bins=100, ax=ax12)\n", "ax12.set_title('Median Sample Expression')\n", "log2_normalize(df_bg_expr).median(axis=1).hist(bins=100, ax=ax21)\n", @@ -515,28 +528,28 @@ }, { "cell_type": "markdown", - "id": "93025e94", + "id": "606d0718", "metadata": {}, "source": [ - "The following venn diagram shows the gene/transcript overlap between the tumor and the background, ideally it should be very high, otherwise additional identifier mapping may be required. If the two are completely disjoint, you've most likely incorrectly labeled your data as gene or transcript data." + "The following venn diagram shows the gene/transcript overlap between the input and the background, ideally it should be very high, otherwise additional identifier mapping may be required. If the two are completely disjoint, you've most likely incorrectly labeled your data as gene or transcript data." ] }, { "cell_type": "code", "execution_count": null, - "id": "5eceec8c", + "id": "739dd065", "metadata": {}, "outputs": [], "source": [ "common_index = list(set(df_expr.index) & set(df_bg_expr.index))\n", "venn2([set(df_expr.index), set(df_bg_expr.index)],\n", - " ['Tumor ', ' Background'])" + " ['Input ', ' Background'])" ] }, { "cell_type": "code", "execution_count": null, - "id": "554ac42d", + "id": "5d2e8a1e", "metadata": {}, "outputs": [], "source": [ @@ -551,7 +564,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97b46a2c", + "id": "6f3911b5", "metadata": {}, "outputs": [], "source": [ @@ -564,7 +577,7 @@ "fig, ((ax11, ax12), (ax21, ax22)) = plt.subplots(2, 2)\n", "log2_normalize(df_expr_norm).median(axis=1).hist(bins=100, ax=ax11)\n", "ax11.set_title('Median Expression')\n", - "ax11.set_ylabel('Tumor')\n", + "ax11.set_ylabel('Input')\n", "log2_normalize(df_expr_norm).median(axis=0).hist(bins=100, ax=ax12)\n", "ax12.set_title('Median Sample Expression')\n", "log2_normalize(df_bg_expr_norm).median(axis=1).hist(bins=100, ax=ax21)\n", @@ -583,18 +596,18 @@ }, { "cell_type": "markdown", - "id": "6c76086e", + "id": "b2a12359", "metadata": {}, "source": [ - "## Perform Differential Expression between Tumor & Background\n", + "## Perform Differential Expression between Input & Background\n", "\n", - "We use voom-limma to identify significantly differentially expressed genes between the background healthy expression quantiles and the tumor expression." + "We use voom-limma to identify significantly differentially expressed genes between the background healthy expression quantiles and the input expression." ] }, { "cell_type": "code", "execution_count": null, - "id": "b6181fa8", + "id": "f1bc6df1", "metadata": {}, "outputs": [], "source": [ @@ -605,7 +618,7 @@ " df_bg_expr_norm, df_expr_norm,\n", " voom_design=True,\n", " )\n", - " {% if tumor_transcript_level.raw_value %}\n", + " {% if input_transcript_level.raw_value %}\n", " dge['ensembl_transcript_id'] = dge.index\n", " dge['gene_symbol'] = df_transcript_gene_map.loc[dge.index, 'gene_symbol'].apply(lambda g: lookup(g) or g)\n", " dge['label'] = dge.apply(lambda r: f\"{r['ensembl_transcript_id']} - {r['gene_symbol']}\", axis=1)\n", @@ -618,7 +631,7 @@ }, { "cell_type": "markdown", - "id": "8869ded9", + "id": "12778291", "metadata": {}, "source": [ "## Narrow Down Candidate Set\n", @@ -629,7 +642,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04193f58", + "id": "1eec43be", "metadata": {}, "outputs": [], "source": [ @@ -671,7 +684,7 @@ " )\n", "))\n", "fig.update_layout(\n", - " title='Background vs Tumor Differential Expression',\n", + " title='Background vs Input Differential Expression',\n", " xaxis_title='Log Fold Change',\n", " yaxis_title='-Log[Adjusted P-Value]',\n", " autosize=True,\n", @@ -682,7 +695,7 @@ { "cell_type": "code", "execution_count": null, - "id": "020ced6e", + "id": "5726ef67", "metadata": {}, "outputs": [], "source": [ @@ -733,7 +746,7 @@ " )\n", "))\n", "fig.update_layout(\n", - " title='Background vs Tumor',\n", + " title='Background vs Input',\n", " xaxis_title='Log Fold Change',\n", " yaxis_title='-Log[Adjusted P-Value]',\n", " autosize=True,\n", @@ -745,7 +758,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cda74d78", + "id": "ff262708", "metadata": {}, "outputs": [], "source": [ @@ -781,7 +794,7 @@ }, { "cell_type": "markdown", - "id": "d9c66963", + "id": "0610e875", "metadata": {}, "source": [ "## Review Expression Levels of Selected Candidates" @@ -790,7 +803,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c1beccff", + "id": "a2734d08", "metadata": {}, "outputs": [], "source": [ @@ -812,7 +825,7 @@ { "cell_type": "code", "execution_count": null, - "id": "79621dc2", + "id": "4bf2a941", "metadata": {}, "outputs": [], "source": [ @@ -835,7 +848,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0e8d423b", + "id": "51f57cda", "metadata": {}, "outputs": [], "source": [ @@ -866,10 +879,10 @@ " mean=stats.loc['mean'],\n", " sd=stats.loc['std'],\n", " y=stats.columns,\n", - " {% if tumor_transcript_level.raw_value and background_transcript_level %}\n", - " name=f'{% if single_cell %}{tissue} - {% endif %}Background (Transcript Expression)',\n", + " {% if input_transcript_level.raw_value and background_transcript_level %}\n", + " name=f'{% if background_single_cell %}{tissue}{% else%}Background (Transcript Expression){% endif %}',\n", " {% else %}\n", - " name=f'{% if single_cell %}{tissue} - {% endif %}Background (Gene Expression)',\n", + " name=f'{% if background_single_cell %}{tissue}{% else%}Background (Gene Expression){% endif %}',\n", " {% endif %}\n", " orientation='h'\n", " ))" @@ -878,7 +891,7 @@ { "cell_type": "code", "execution_count": null, - "id": "84c86837", + "id": "1d41b14f", "metadata": {}, "outputs": [], "source": [ @@ -894,7 +907,7 @@ " gene_symbol = row['gene_symbol']\n", " label = row['label']\n", " display(Markdown(f\"### {label}\"))\n", - " {% if background_transcript_level and not tumor_transcript_level.raw_value %}\n", + " {% if background_transcript_level and not input_transcript_level.raw_value %}\n", " # get stats for all transcripts corresponding to this gene symbol\n", " stats = df_bg_stats.loc[(df_transcript_gene_map[df_transcript_gene_map['gene_symbol'] == gene_symbol].index, slice(None))].unstack()\n", " # identify per-tissue mask based top 5 medians, the dropped level here is the stats level since we're going\n", @@ -905,7 +918,7 @@ " stats = stats.stack()[mask].unstack(0).dropna(how='all', axis=1)\n", " # flatten column for next step, creating columns of the form: {tissue} - {transcript_id}\n", " stats.columns = stats.columns.to_flat_index().map(lambda col: ' - '.join(col))\n", - " {% elif not background_transcript_level and tumor_transcript_level.raw_value %}\n", + " {% elif not background_transcript_level and input_transcript_level.raw_value %}\n", " stats = df_bg_stats.loc[(gene_symbol, slice(None))]\n", " {% else %}\n", " stats = df_bg_stats.loc[(index, slice(None))]\n", @@ -913,7 +926,7 @@ "\n", " fig = go.Figure()\n", " \n", - " {% if single_cell %}\n", + " {% if background_single_cell %}\n", " stats_all = stats\n", " # store all of the cell types with non-zero expression\n", " stats = stats_all.loc[:, (stats_all != 0).any(axis=0)]\n", @@ -948,15 +961,15 @@ "\n", " fig.add_trace(go.Box(\n", " x=df_expr_norm.loc[index],\n", - " {% if tumor_transcript_level.raw_value %}\n", - " name=f\"Tumor (Normalized Transcript Expression)\",\n", + " {% if input_transcript_level.raw_value %}\n", + " name=f\"Patient Input\",\n", " {% else %}\n", - " name=f\"Tumor (Normalized Gene Expression)\",\n", + " name=f\"Patient Input\",\n", " {% endif %}\n", " orientation='h'\n", " ))\n", " \n", - " fig.update_layout(title=label+f\" ({% if single_cell %}sc{% else %}Bulk {% endif %}RNA-seq)\", height= 300 if len(stats.columns) < 2 else len(stats.columns)*50)\n", + " fig.update_layout(title=label+f\" ({% if background_single_cell %}sc{% else %}Bulk {% endif %}RNA-seq)\", height= 300 if len(stats.columns) < 2 else len(stats.columns)*50)\n", " fig.show()\n", " \n", " {% if proteomics_vis.raw_value %}\n", @@ -1011,7 +1024,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3.9.12 ('base')", "language": "python", "name": "python3" }, @@ -1025,11 +1038,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.5" + "version": "3.9.12" }, "vscode": { "interpreter": { - "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" + "hash": "bc6a549fc5b5a2ab0c472566a8b55e89aadd87484d87304664828dfe61ef602a" } } }, diff --git a/appyters/Tumor_Gene_Target_Screener/appyter.json b/appyters/Tumor_Gene_Target_Screener/appyter.json index 5dda5ec49..155ee46d2 100644 --- a/appyters/Tumor_Gene_Target_Screener/appyter.json +++ b/appyters/Tumor_Gene_Target_Screener/appyter.json @@ -2,8 +2,8 @@ "$schema": "https://raw.githubusercontent.com/MaayanLab/appyter-catalog/main/schema/appyter-validator.json", "name": "Tumor_Gene_Target_Screener", "title": "Tumor Gene Target Screener", - "version": "0.3.2", - "description": "An appyter for gene target screening of tumors", + "version": "0.4.0", + "description": "An appyter for gene target screening of input data, such as a tumor", "authors": [ { "name": "Daniel J. B. Clarke", diff --git a/appyters/Tumor_Gene_Target_Screener/static/target_identifier_logo.jpg b/appyters/Tumor_Gene_Target_Screener/static/target_identifier_logo.jpg new file mode 100644 index 000000000..2e899917a Binary files /dev/null and b/appyters/Tumor_Gene_Target_Screener/static/target_identifier_logo.jpg differ
 
  Tissue 1Tissue|Tissue-Cell Type 1...