From 8f6af2d596b8fffdb94a67c05077d9ce618888d0 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 14 Jul 2023 11:00:01 +0200 Subject: [PATCH 01/39] Extra files from mageck count --- modules/nf-core/mageck/count/mageck-count.diff | 9 ++++++--- modules/nf-core/mageck/count/main.nf | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/mageck/count/mageck-count.diff b/modules/nf-core/mageck/count/mageck-count.diff index 50ee78b1..48cd0c4f 100644 --- a/modules/nf-core/mageck/count/mageck-count.diff +++ b/modules/nf-core/mageck/count/mageck-count.diff @@ -1,24 +1,27 @@ Changes in module 'nf-core/mageck/count' --- modules/nf-core/mageck/count/main.nf +++ modules/nf-core/mageck/count/main.nf -@@ -12,8 +12,10 @@ +@@ -12,8 +12,13 @@ path(library) output: - tuple val(meta), path("*count*.txt"), emit: count + tuple val(meta), path("*count.txt"), emit: count tuple val(meta), path("*.count_normalized.txt"), emit: norm ++ tuple val(meta), path("*.countsummary.txt"), emit: summary ++ tuple val(meta), path("*.count_normalized.txt"), emit: normalized ++ tuple val(meta), path("*.count_report.Rmd"), emit: report + tuple val(meta), path("*.log"), emit: logs + path "versions.yml" , emit: versions when: -@@ -22,7 +24,7 @@ +@@ -22,7 +27,7 @@ script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input_file = ("$inputfile".endsWith(".fastq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" -+ def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" ++ def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" def sample_label = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--sample-label ${meta.id}" : '' """ diff --git a/modules/nf-core/mageck/count/main.nf b/modules/nf-core/mageck/count/main.nf index 30fbd8fe..91ea3fe2 100644 --- a/modules/nf-core/mageck/count/main.nf +++ b/modules/nf-core/mageck/count/main.nf @@ -14,6 +14,9 @@ process MAGECK_COUNT { output: tuple val(meta), path("*count.txt"), emit: count tuple val(meta), path("*.count_normalized.txt"), emit: norm + tuple val(meta), path("*.countsummary.txt"), emit: summary + tuple val(meta), path("*.count_normalized.txt"), emit: normalized + tuple val(meta), path("*.count_report.Rmd"), emit: report tuple val(meta), path("*.log"), emit: logs path "versions.yml" , emit: versions From 13181f093fe4b45b90c324f484c857d5e593424d Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 14 Jul 2023 14:17:02 +0200 Subject: [PATCH 02/39] fix bug in rra --- modules/nf-core/mageck/count/mageck-count.diff | 5 ++--- modules/nf-core/mageck/count/main.nf | 1 - modules/nf-core/mageck/test/mageck-test.diff | 12 +++--------- modules/nf-core/mageck/test/main.nf | 1 - 4 files changed, 5 insertions(+), 14 deletions(-) diff --git a/modules/nf-core/mageck/count/mageck-count.diff b/modules/nf-core/mageck/count/mageck-count.diff index 48cd0c4f..87f8e83c 100644 --- a/modules/nf-core/mageck/count/mageck-count.diff +++ b/modules/nf-core/mageck/count/mageck-count.diff @@ -1,7 +1,7 @@ Changes in module 'nf-core/mageck/count' --- modules/nf-core/mageck/count/main.nf +++ modules/nf-core/mageck/count/main.nf -@@ -12,8 +12,13 @@ +@@ -12,8 +12,12 @@ path(library) output: @@ -10,13 +10,12 @@ Changes in module 'nf-core/mageck/count' tuple val(meta), path("*.count_normalized.txt"), emit: norm + tuple val(meta), path("*.countsummary.txt"), emit: summary + tuple val(meta), path("*.count_normalized.txt"), emit: normalized -+ tuple val(meta), path("*.count_report.Rmd"), emit: report + tuple val(meta), path("*.log"), emit: logs + path "versions.yml" , emit: versions when: -@@ -22,7 +27,7 @@ +@@ -22,7 +26,7 @@ script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" diff --git a/modules/nf-core/mageck/count/main.nf b/modules/nf-core/mageck/count/main.nf index 91ea3fe2..01691029 100644 --- a/modules/nf-core/mageck/count/main.nf +++ b/modules/nf-core/mageck/count/main.nf @@ -16,7 +16,6 @@ process MAGECK_COUNT { tuple val(meta), path("*.count_normalized.txt"), emit: norm tuple val(meta), path("*.countsummary.txt"), emit: summary tuple val(meta), path("*.count_normalized.txt"), emit: normalized - tuple val(meta), path("*.count_report.Rmd"), emit: report tuple val(meta), path("*.log"), emit: logs path "versions.yml" , emit: versions diff --git a/modules/nf-core/mageck/test/mageck-test.diff b/modules/nf-core/mageck/test/mageck-test.diff index ee8558c3..9da13d3b 100644 --- a/modules/nf-core/mageck/test/mageck-test.diff +++ b/modules/nf-core/mageck/test/mageck-test.diff @@ -8,17 +8,16 @@ Changes in module 'nf-core/mageck/test' label 'process_medium' conda "bioconda::mageck=0.5.9" -@@ -14,6 +14,9 @@ +@@ -14,6 +14,8 @@ tuple val(meta), path("*.gene_summary.txt") , emit: gene_summary tuple val(meta), path("*.sgrna_summary.txt") , emit: sgrna_summary tuple val(meta), path("*.R") , emit: r_script -+ tuple val(meta), path("*.Rmd") , emit: r_report + tuple val(meta), path("*.Rnw") , emit: r_summary + tuple val(meta), path("*.log") , emit: logs path "versions.yml" , emit: versions when: -@@ -21,14 +24,18 @@ +@@ -21,14 +23,18 @@ script: def args = task.ext.args ?: '' @@ -38,10 +37,5 @@ Changes in module 'nf-core/mageck/test' cat <<-END_VERSIONS > versions.yml -@@ -36,4 +43,4 @@ - mageck: \$(mageck -v) - END_VERSIONS - """ --} -+} + ************************************************************ diff --git a/modules/nf-core/mageck/test/main.nf b/modules/nf-core/mageck/test/main.nf index 420edcc1..78d5f58c 100644 --- a/modules/nf-core/mageck/test/main.nf +++ b/modules/nf-core/mageck/test/main.nf @@ -14,7 +14,6 @@ process MAGECK_TEST { tuple val(meta), path("*.gene_summary.txt") , emit: gene_summary tuple val(meta), path("*.sgrna_summary.txt") , emit: sgrna_summary tuple val(meta), path("*.R") , emit: r_script - tuple val(meta), path("*.Rmd") , emit: r_report tuple val(meta), path("*.Rnw") , emit: r_summary tuple val(meta), path("*.log") , emit: logs path "versions.yml" , emit: versions From b66f7e55c5badd38c17ed6371445d2e0cce62e7e Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 21 Jul 2023 08:55:47 +0200 Subject: [PATCH 03/39] Add bagel fold change --- bin/BAGEL.py | 1104 ++++++++++++++++++++++++++++++ modules/local/bagel2_fc.nf | 57 ++ workflows/crisprseq_screening.nf | 18 +- 3 files changed, 1177 insertions(+), 2 deletions(-) create mode 100755 bin/BAGEL.py create mode 100644 modules/local/bagel2_fc.nf diff --git a/bin/BAGEL.py b/bin/BAGEL.py new file mode 100755 index 00000000..6077e5dc --- /dev/null +++ b/bin/BAGEL.py @@ -0,0 +1,1104 @@ +#!/usr/bin/env python + +import click +import numpy as np +import pandas as pd +import scipy.stats as stats +from sklearn.linear_model import LinearRegression +import sys +import time + +VERSION = 2.0 + +BUILD = 115 + + + +''' +Update history + +Build 115 +1. Add single pass without resampling + +Build 114 +1. Add option for normalizing rep counts + +Build 113 +1. Fixed bugs + +Build 112 +1. Add sgRNA filtering options +2. Implemented 'Click' library. Thanks to John McGonigle + + +Build 111 +1. Add an option to equalize # of sgRNA per gene + +Build 110 +1. Enable multi control for fold-change calculation +2. Now user can input column names +3. Fix Threshold function + +''' + + +class OptionRequiredIf(click.Option): + + def full_process_value(self, ctx, value): + value = super(OptionRequiredIf, self).full_process_value(ctx, value) + + if value is None and ctx.params['filter_multi_target'] is True: + msg = 'Error! Multi-target-filtering selected and not align-info provided.\n' \ + 'Please indicate align-info file.' + raise click.MissingParameter(ctx=ctx, param=self, message=msg) + return value + + +# --------------------------------- +# BAGEL: Bayesian Analysis of Gene EssentaLity +# (c) Traver Hart , Eiru Kim 2017. + +# Acknowledgements: John McGonigle +# modified 10/2019 +# Free to modify and redistribute with attribution +# --------------------------------- + +# ------------------------------------ +# constants + + + +CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help']) + + +def round_to_hundredth(x): + return np.around(x * 100) / 100.0 + + +def func_linear(x, a, b): + return (a * x) + b + + +class Training: + def __init__(self, X, n=None, cvnum=10): + + if n == None: + self._n = len(X) + self._cvnum = cvnum + self._bid = int(self._n / cvnum) + self._bucket = np.arange(len(X)) + self._X = X + self._step = 0 + + + def cross_validation(self): + if self._bid < 1: # bid check + print("The number of genes is too small! n<" + str(self._cvnum)) + sys.exit(1) + drawing = list() + mask = np.array([True] * self._n) + for j in range(self._bid): + # drawing.append(delete(self._bucket, np.random.randrange(len(self._bucket)))) + select = np.random.randint(len(self._bucket)) + drawing.append(self._bucket[select]) + mask[self._bucket[select]] = False + self._bucket = np.delete(self._bucket, select) + if self._step < self._n % self._cvnum: # for distribute remain.. + select = np.random.randint(len(self._bucket)) + drawing.append(self._bucket[select]) + mask[self._bucket[select]] = False + self._bucket = np.delete(self._bucket, select) + self._step += 1 + X_resample = self._X[mask] + return X_resample, self._X[~mask] + + def get_cv_step(self): + return self._step + + def bootstrap_resample(self): + mask = np.array([False] * self._n) + resample_i = np.floor(np.random.rand(self._n) * len(self._X)).astype(int) + + mask[resample_i] = True + X_resample = self._X[mask] + return X_resample, self._X[~mask] + + def get_data(self, method=0): + if method == 0: + train, test = self.bootstrap_resample() + elif method == 1: + train, test = self.cross_validation() + else: + print('Method passed as a value that was neither 0 nor 1.') + sys.exit(1) + return train, test + + +def fibo_weighted_sum(listofscore): + value = p1 = p2 = 0.0 + c = 1.0 # current value + for v in listofscore: + value += v / c + p2 = p1 # go one step + p1 = c + c = p1 + p2 + return value + + +# Note the \b in the doc string below is prevent click from wrapping the lines on the terminal. +@click.group(context_settings=CONTEXT_SETTINGS) +def bagel(): + """ + -------------------------------------------------------------------- + BAGEL.py + -------------------------------------------------------------------- + A tool from the Bayesian Analysis of Gene EssentiaLity (BAGEL) suite. + + \b + Calculate fold changes from read count data: + + \b + BAGEL.py fc -i [read count file] -o [output label] -c [control column] + + Calculate Bayes Factors from foldchange data: + + \b + BAGEL.py bf -i [fold change] -o [output file] -e [essentials genes] -n [nonessentials genes] -c [columns] + + + Calculate precision-recall from Bayes Factors: + + \b + BAGEL.py pr -i [Bayes Factor file] -o [output file] -e [essentials genes] -n [nonessentials genes] + + + + To print the current build and version use: + + \b + BAGEL.py version + """ + + +@click.command(name='version') +def report_bagel_version(): + """ + Report the current build and version no. + """ + print( + 'Bayesian Analysis of Gene EssentiaLity (BAGEL) suite:\n' + 'Version: {VERSION}\n' + 'Build: {BUILD}'.format(VERSION=VERSION, BUILD=BUILD) + ) + + +@click.command(name='fc') +@click.option('-i', '--read-count-file', required=True, type=click.Path(exists=True)) +@click.option('-o', '--output-label', required=True) +@click.option('-c', '--control-columns', required=True) +@click.option('-m', '--min-reads', type=int, default=0) +@click.option('-Np', '--pseudo-count', type=int, default=5) +def calculate_fold_change(read_count_file, output_label, control_columns, min_reads, pseudo_count): + """ + \b + Calculate fold changes from read count data outputting a fold change column: + + \b + BAGEL.py fc -i [read count file] -o [output label] -c [control column] + + \b + Required options: + -i --read-count-file Tab-delimited file of reagents and fold changes. See documentation for format. + -o --output-label Label for all output files + -c --control-columns A comma-delimited list of columns of control (T0 or plasmid) columns. + Input can be either number or name. + \b + Other options: + --min-reads=N Discard gRNA with T0 counts < N (default 0) + -Np, --pseudo-count=N Add a pseudocount of N to every readcount (default 5) + -h, --help Show this help text + + + \b + Example: + BAGEL.py fc -i readcount_file.txt -o experiment_name -c 1 + + This command calculates fold change, and writes [output label].foldchange and [output label].normalized_reads + + """ + + # ---------------------------------------------------------------- # + # Import raw read data, normalize, filter for T0 min read counts # + # Output: [output label].foldchange # + # ---------------------------------------------------------------- # + reads = pd.read_csv(read_count_file, sep='\t', index_col=0) + + reads[reads.columns.values[0]].fillna('NO_GENE_NAME', inplace=True) + reads.fillna(0, inplace=True) + control_columns = control_columns.split(",") + # + # check if controls are given as numeric or name + # + + try: + try: + ctrl_columns = list(map(int, control_columns)) + ctrl_labels = reads.columns.values[ctrl_columns] + except ValueError: + ctrl_labels = control_columns + + ctrl_sum = reads[ctrl_labels].sum(axis=1) + reads.drop(ctrl_labels, axis=1, inplace=True) + ctrl_label_new = ';'.join(ctrl_labels) + reads[ctrl_label_new] = ctrl_sum + except: + print(reads[ctrl_labels].sum(axis=1)) + print("Invalid input controls") + sys.exit(1) + + numClones, numColumns = reads.shape + print("Controls: " + ", ".join(ctrl_labels)) + + # + # Add pseudo count + # + + reads.iloc[:, list(range(1, numColumns))] += pseudo_count + + # + # normalize each sample to a fixed total readcount + # + sumReads = reads.iloc[:, list(range(1, numColumns))].sum(0) + normed = pd.DataFrame(index=reads.index.values) + normed['GENE'] = reads.iloc[:, 0] # first column is gene name + normed = reads.iloc[:, list(range(1, numColumns))] / np.tile(sumReads, + [numClones, 1]) * 10000000 # normalize to 10M reads + + # + # filter for minimum readcount + # + f = np.where(reads[ctrl_label_new] >= min_reads)[0] + normed = normed.iloc[f, :] + + # + # calculate fold change + # + foldchange = pd.DataFrame(index=normed.index.values) + foldchange.index.name = 'REAGENT_ID' + foldchange['GENE'] = reads.iloc[f, 0] # dataframe 'normed' has no GENE column + for i in range(numColumns - 1): + foldchange[normed.columns.values[i]] = np.log2( + (normed.loc[:, normed.columns.values[i]]) / normed[ctrl_label_new] + ) + # + # we have calculated a foldchange for the control column. Drop it. + # + foldchange.drop(ctrl_label_new, axis=1, inplace=True) + + # + # write normed readcount file + # write foldchange file + # + + foldchange_filename = output_label + '.foldchange' + foldchange.to_csv(foldchange_filename, sep='\t', float_format='%4.3f') + + normedreads_filename = output_label + '.normed_readcount' + normed.to_csv(normedreads_filename, sep='\t', float_format='%3.2f') + + +@click.command(name='bf') +@click.option('-i', '--fold-change', required=True, type=click.Path(exists=True)) +@click.option('-o', '--output-file', required=True) +@click.option('-e', '--essential-genes', required=True, type=click.Path(exists=True)) +@click.option('-n', '--non-essential-genes', required=True, type=click.Path(exists=True)) +@click.option('-c', '--columns-to-test', required=True) +@click.option('-w', '--network-file', metavar='[network File]', default=None, type=click.Path(exists=True)) +@click.option('-m', '--filter-multi-target', is_flag=True) +@click.option('-m0', '--loci-without-mismatch', type=int, default=10) +@click.option('-m1', '--loci-with-mismatch', type=int, default=10) +@click.option('--align-info', metavar='--align-info [File]', default=None, + type=click.Path(exists=True), cls=OptionRequiredIf) +@click.option('-b', '--use-bootstrapping', is_flag=True) +@click.option('-NS', '--no-resampling', is_flag=True) +@click.option('-s', '--use-small-sample', is_flag=True) +@click.option('-N', '--no-of-cross-validations', type=int, default=10) +@click.option('-NB', '--bootstrap-iterations', type=int, default=1000) +@click.option('-r', '--sgrna-bayes-factors', is_flag=True) +@click.option('-f', '--equalise-sgrna-no', type=int) +@click.option('-s', '--seed', default=int(time.time() * 100000 % 100000), type=int) +@click.option('-t', '--run-test-mode', is_flag=True) +@click.option('-p', '--equalise-rep-no', type=int) +def calculate_bayes_factors( + fold_change, output_file, essential_genes, non_essential_genes, columns_to_test, network_file, align_info, + use_bootstrapping, no_resampling, use_small_sample, filter_multi_target, loci_without_mismatch, loci_with_mismatch, + bootstrap_iterations, no_of_cross_validations, sgrna_bayes_factors, equalise_sgrna_no, seed, run_test_mode, equalise_rep_no +): + """ + \b + Calculate Bayes Factors from an input fold change file: + + \b + BAGEL.py bf -i [fold change] -o [output file] -e [essentials genes] -n [nonessentials genes] -c [columns] + + + \b + Calculates a log2 Bayes Factor for each gene. Positive BFs indicate confidence that the gene is essential. + Output written to the [output file] contains: gene name, mean Bayes Factor across all iterations, std deviation of + BFs, and number of iterations in which the gene was part of the test set (and a BF was calculated[output file]. + + + \b + Required options: + -i --fold-change [fold change file] Tab-delimited file of reagents and fold changes + (see documentation for format). + -o, --output-file [output file] Output filename + -e, --essential-genes [reference essentials] File with list of training set of essential genes + -n, --non-essential-genes [reference nonessentials] File with list of training set of nonessential genes + -c [columns to test] comma-delimited list of columns in input file to + include in analyisis + + \b + Network options: + -w [network file] Enable Network boosting. Tab-delmited file of edges. [GeneA (\\t) GeneB]\n' + + \b + Multi-target guides filtering options: + -m, --filter-multi-target Enable filtering multi-targeting guide RNAs + --align-info [file] Input precalculated align-info file + -m0, --loci-without-mismatch Filtering guide RNAs without mismatch targeting over than [N] loci, default = 10 + -m1, --loci-with-mismatch Filtering guide RNAs with 1-bp mismatch targeting over than [N] loci, default = 10 + + \b + Other options: + -b, --bootstrapping Use bootstrapping instead of cross-validation (Slow) + -NS, --no-resampling Run BAGEL without resampling + -s, --small-sample Low-fat BAGEL, Only resampled training set (Bootstrapping, iteration = 100) + -r --sgrna-bayes-factors Calculate sgRNA-wise Bayes Factor + -f --equalise-sgrna-no Equalize the number of sgRNAs per gene to particular value [Number] + -p --equalise-rep-no Equalize the number of repicates to particular value [Number] + -N --no-of-cross-validations Number of sections for cross validation (default 10) + -NB --bootstraps-iterations Number of bootstrap iterations (default 1000) + -s, --seed=N Define random seed + -h, --help Show this help text + + \b + Example: + + \b + BAGEL.py bf -i fc_file.txt -o results.bf -e ess_training_set.txt -n noness_training_set.txt -c 1,2,3 + + """ + np.random.seed(seed) # set random seed + if network_file: + network_boost = True + else: + network_boost = False + + if sgrna_bayes_factors: + rna_level = True + else: + rna_level = False + + if network_file and sgrna_bayes_factors: + network_boost = False + + if equalise_sgrna_no: + flat_sgrna = True + else: + flat_sgrna = False + + if equalise_rep_no: + flat_rep = True + else: + flat_rep = False + + if use_small_sample: + train_method = 0 + bootstrap_iterations = 100 + + elif use_bootstrapping: + train_method = 0 + + else: + train_method = 1 + + genes = {} + fc = {} + gene2rna = {} + rna2gene = {} + + multi_targeting_sgrnas = dict() + multi_targeting_sgrnas_info = dict() + + if filter_multi_target: + + try: + aligninfo = pd.read_csv(align_info, header=None, index_col=0, sep="\t").fillna("") + for seqid in aligninfo.index: + perfectmatch = 0 + mismatch_1bp = 0 + perfectmatch_gene = 0 + mismatch_1bp_gene = 0 + if aligninfo[1][seqid] != "": + perfectmatch = len(aligninfo[1][seqid].split(",")) + if aligninfo[2][seqid] != "": + perfectmatch_gene = len(aligninfo[2][seqid].split(",")) + if aligninfo[3][seqid] != "": + mismatch_1bp = len(aligninfo[3][seqid].split(",")) + if aligninfo[4][seqid] != "": + mismatch_1bp_gene = len(aligninfo[4][seqid].split(",")) + if perfectmatch > loci_without_mismatch or mismatch_1bp > loci_with_mismatch: + multi_targeting_sgrnas[seqid] = True + elif perfectmatch > 1 or mismatch_1bp > 0: + multi_targeting_sgrnas_info[seqid] = ( + perfectmatch, mismatch_1bp, perfectmatch_gene, mismatch_1bp_gene + ) + + except: + print("Please check align-info file") + sys.exit(1) + + print("Total %d multi-targeting gRNAs are discarded" % len(multi_targeting_sgrnas)) + + # + # LOAD FOLDCHANGES + # + rnatagset = set() + with open(fold_change) as fin: + fieldname = fin.readline().rstrip().split('\t') + # + # DEFINE CONTROLS + # + columns = columns_to_test.split(',') + try: + try: + column_list = list(map(int, columns)) + column_labels = [fieldname[x + 1] for x in column_list] + except ValueError: + column_labels = columns + column_list = [x for x in range(len(fieldname) - 1) if + fieldname[x + 1] in column_labels] # +1 because of First column start 2 + print("Using column: " + ", ".join(column_labels)) + # print "Using column: " + ", ".join(map(str,column_list)) + + except: + print("Invalid columns") + sys.exit(1) + + for line in fin: + fields = line.rstrip().split('\t') + rnatag = fields[0] + if filter_multi_target is True: # multitargeting sgrna filtering + if rnatag in multi_targeting_sgrnas: + continue # skip multitargeting sgrna. + if rnatag in rnatagset: + print("Error! sgRNA tag duplicates") + sys.exit(1) + rnatagset.add(rnatag) + gsym = fields[1] + + genes[gsym] = 1 + if gsym not in gene2rna: + gene2rna[gsym] = [] + gene2rna[gsym].append(rnatag) + rna2gene[rnatag] = gsym + fc[rnatag] = {} + for i in column_list: + fc[rnatag][i] = float(fields[i + 1]) # per user docs, GENE is column 0, first data column is col 1. + + genes_array = np.array(list(genes.keys())) + gene_idx = np.arange(len(genes)) + print("Number of unique genes: " + str(len(genes))) + + # + # DEFINE REFERENCE SETS + # + coreEss = [] + + with open(essential_genes) as fin: + skip_header = fin.readline() + for line in fin: + coreEss.append(line.rstrip().split('\t')[0]) + coreEss = np.array(coreEss) + print("Number of reference essentials: " + str(len(coreEss))) + + nonEss = [] + with open(non_essential_genes) as fin: + skip_header = fin.readline() + for line in fin: + nonEss.append(line.rstrip().split('\t')[0]) + + nonEss = np.array(nonEss) + print("Number of reference nonessentials: " + str(len(nonEss))) + + # + # LOAD NETWORK + # + + if network_boost is True: + network = {} + edgecount = 0 + with open(network_file) as fin: + for line in fin: + linearray = line.rstrip().split('\t') # GeneA \t GeneB format + if linearray[0] in genes_array and linearray[1] in genes_array: + for i in [0, 1]: + if linearray[i] not in network: + network[linearray[i]] = {} + network[linearray[i]][linearray[-1 * (i - 1)]] = 1 # save edge information + edgecount += 1 + + print("Number of network edges: " + str(edgecount)) + + # + # INITIALIZE BFS + # + + # Define foldchange dynamic threshold. logarithm decay. + # Parameters are defined by regression (achilles data) 2**-7 was used in previous version. + + FC_THRESH = 2 ** (-1.1535 * np.log(len(np.intersect1d(genes_array, + nonEss)) + 13.324) + 0.7728) + bf = {} + boostedbf = {} + for g in genes_array: + for rnatag in gene2rna[g]: + bf[rnatag] = [] + + boostedbf[g] = [] # boosted bf at gene level + + # + # TRAINING + # + if use_small_sample: + # declare training class + # training_data = Training(setdiff1d(gene_idx,np.where(in1d(genes_array,coreEss))),cvnum=NUMCV) + # declare training class (only for Gold-standard gene set) + training_data = Training(np.where(np.in1d(genes_array, np.union1d(coreEss, nonEss)))[0], + cvnum=no_of_cross_validations) + # all non-goldstandards + all_non_gs = np.where(np.logical_not(np.in1d(genes_array, np.union1d(coreEss, nonEss))))[0] + else: + training_data = Training(gene_idx, cvnum=no_of_cross_validations) # declare training class + + if train_method == 0: + LOOPCOUNT = bootstrap_iterations + elif train_method == 1: + LOOPCOUNT = no_of_cross_validations # 10-folds + + if run_test_mode == True: + fp = open(output_file + ".traininfo", "w") + fp.write("#1: Loopcount\n#2: Training set\n#3: Testset\n") + # No resampling option + if no_resampling == True: + print("# Caution: Resampling is disabled") + LOOPCOUNT = 1 + + print("Iter TrainEss TrainNon TestSet") + sys.stdout.flush() + for loop in range(LOOPCOUNT): + currentbf = {} + printstr = "" + printstr += str(loop) + + # + # bootstrap resample (10-folds cross-validation) from gene list to get the training set + # test set for this iteration is everything not selected in bootstrap resampled (10-folds cross-validation) + # training set + # define essential and nonessential training sets: arrays of indexes + # + if no_resampling == True: + # no resampling + gene_train_idx = gene_idx + gene_test_idx = gene_idx + else: + # CV or bootstrapping + gene_train_idx, gene_test_idx = training_data.get_data(train_method) + if use_small_sample: + # test set is union of rest of training set (gold-standard) and the other genes (all of non-gold-standard) + gene_test_idx = np.union1d(gene_test_idx, all_non_gs) + + if run_test_mode: + fp.write( + "%d\n%s\n%s\n" % (loop, ",".join(genes_array[gene_train_idx]), ",".join(genes_array[gene_test_idx]))) + + train_ess = np.where(np.in1d(genes_array[gene_train_idx], coreEss))[0] + train_non = np.where(np.in1d(genes_array[gene_train_idx], nonEss))[0] + printstr += " " + str(len(train_ess)) + printstr += " " + str(len(train_non)) + printstr += " " + str(len(gene_test_idx)) + print(printstr) + sys.stdout.flush() + # + # define ess_train: vector of observed fold changes of essential genes in training set + # + ess_train_fc_list_of_lists = [fc[rnatag] for g in genes_array[gene_train_idx[train_ess]] for rnatag in + gene2rna[g]] + ess_train_fc_flat_list = [obs for sublist in ess_train_fc_list_of_lists for obs in list(sublist.values())] + # + # define non_train vector of observed fold changes of nonessential genes in training set + # + non_train_fc_list_of_lists = [fc[rnatag] for g in genes_array[gene_train_idx[train_non]] for rnatag in + gene2rna[g]] + non_train_fc_flat_list = [obs for sublist in non_train_fc_list_of_lists for obs in list(sublist.values())] + # + # calculate empirical fold change distributions for both + # + kess = stats.gaussian_kde(ess_train_fc_flat_list) + knon = stats.gaussian_kde(non_train_fc_flat_list) + # + # define empirical upper and lower bounds within which to calculate BF = f(fold change) + # + x = np.arange(-10, 2, 0.01) + nonfitx = knon.evaluate(x) + # define lower bound empirical fold change threshold: minimum FC np.where knon is above threshold + f = np.where(nonfitx > FC_THRESH) + xmin = round_to_hundredth(min(x[f])) + # define upper bound empirical fold change threshold: minimum value of log2(ess/non) + subx = np.arange(xmin, max(x[f]), 0.01) + logratio_sample = np.log2(kess.evaluate(subx) / knon.evaluate(subx)) + f = np.where(logratio_sample == logratio_sample.min()) + xmax = round_to_hundredth(subx[f]) + # + # round foldchanges to nearest 0.01 + # precalculate logratios and build lookup table (for speed) + # + logratio_lookup = {} + for i in np.arange(xmin, xmax + 0.01, 0.01): + logratio_lookup[np.around(i * 100)] = np.log2(kess.evaluate(i) / knon.evaluate(i)) + # + # calculate BFs from lookup table for withheld test set + # + + # liner interpolation + testx = list() + testy = list() + + for g in genes_array[gene_train_idx]: + for rnatag in gene2rna[g]: + for foldchange in list(fc[rnatag].values()): + if foldchange >= xmin and foldchange <= xmax: + testx.append(np.around(foldchange * 100) / 100) + testy.append(logratio_lookup[np.around(foldchange * 100)][0]) + try: + slope, intercept, r_value, p_value, std_err = stats.linregress(np.array(testx), np.array(testy)) + except: + print("Regression failed. Check quality of the screen") + sys.exit(1) + # + # BF calculation + # + + for g in genes_array[gene_test_idx]: + for rnatag in gene2rna[g]: + bayes_factor = [] + for rep in column_list: + bayes_factor.append(slope * fc[rnatag][rep] + intercept) + bf[rnatag].append(bayes_factor) + + if run_test_mode == True: + fp.close() + + num_obs = dict() + if rna_level is False: + bf_mean = dict() + bf_std = dict() + bf_norm = dict() # sgRNA number complement + if rna_level or filter_multi_target: + bf_mean_rna_rep = dict() + bf_std_rna_rep = dict() + # bf_norm_rna_rep = dict() + + for g in gene2rna: + num_obs[g] = len(bf[gene2rna[g][0]]) + if rna_level or filter_multi_target: + for rnatag in gene2rna[g]: + bf_mean_rna_rep[rnatag] = dict() + bf_std_rna_rep[rnatag] = dict() + t = list(zip(*bf[rnatag])) + for rep in range(len(column_list)): + bf_mean_rna_rep[rnatag][column_list[rep]] = np.mean(t[rep]) + bf_std_rna_rep[rnatag][column_list[rep]] = np.std(t[rep]) + + if rna_level == False: + sumofbf_list = list() + for i in range(num_obs[g]): + sumofbf = 0.0 + for rnatag in gene2rna[g]: + sumofbf += sum(bf[rnatag][i]) + sumofbf_list.append(sumofbf) # append each iter + bf_mean[g] = np.mean(sumofbf_list) + bf_std[g] = np.std(sumofbf_list) + + # + # BUILD MULTIPLE REGRESSION MODEL FOR MULTI TARGETING GUIDE RNAs + # + if filter_multi_target: + count = 0 + trainset = dict() + bf_multi_corrected_gene = dict() + bf_multi_corrected_rna = dict() + for gene in gene2rna: + # multi_targeting_sgrnas_info[seqid] = (perfectmatch, mismatch_1bp, perfectmatch_gene, mismatch_1bp_gene) + multitarget = list() + onlytarget = list() + for seqid in gene2rna[gene]: + if seqid not in aligninfo.index: + continue + if seqid in multi_targeting_sgrnas_info: + multitarget.append(seqid) + else: + onlytarget.append(seqid) + + if len(onlytarget) > 0: # comparsion between sgRNAs targeting one locus and multiple loci + if len(multitarget) > 0: + + bf_only = np.mean([sum(list(bf_mean_rna_rep[seqid].values())) for seqid in onlytarget]) + for seqid in onlytarget: + trainset[seqid] = [1, 0, 0] + + for seqid in multitarget: + if multi_targeting_sgrnas_info[seqid][2] > 1 or multi_targeting_sgrnas_info[seqid][ + 3] > 0: # train model using multi-targeting only targeting one protein coding gene + continue + + count += 1 + increment = sum(list(bf_mean_rna_rep[seqid].values())) - bf_only + + trainset[seqid] = [multi_targeting_sgrnas_info[seqid][0], multi_targeting_sgrnas_info[seqid][1], + increment] + + if count < 10: + print("Not enough train set for calculating multi-targeting effect.\n") + print("It may cause due to unmatched gRNA names between the foldchange file and the align info file.\n") + print("Filtering is not finished\n") + filter_multi_target = False + + else: + + trainset = pd.DataFrame().from_dict(trainset).T + X = trainset[[0, 1]] + y = trainset[2] + + regressor = LinearRegression() + regressor.fit(X, y) + coeff_df = pd.DataFrame(regressor.coef_, X.columns, columns=['Coefficient']) + for i in [0, 1]: + if coeff_df['Coefficient'][i] < 0: + print("Regression coefficient is below than zero. Substituted to zero\n") + coeff_df['Coefficient'][i] = 0.0 + print("Multiple effects from perfect matched loci = %.3f and 1bp mis-matched loci = %.3f" % ( + coeff_df['Coefficient'][0], coeff_df['Coefficient'][1])) + + if rna_level == False: + for g in gene2rna: + penalty = 0.0 + for seqid in gene2rna[g]: + if seqid in multi_targeting_sgrnas_info: + penalty += float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df['Coefficient'][ + 0] + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df['Coefficient'][1] + bf_multi_corrected_gene[g] = bf_mean[g] - penalty + else: + for g in gene2rna: + for seqid in gene2rna[g]: + if seqid in multi_targeting_sgrnas_info: + penalty = float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df['Coefficient'][ + 0] + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df['Coefficient'][1] + else: + penalty = 0.0 + bf_multi_corrected_rna[seqid] = sum(list(bf_mean_rna_rep[seqid].values())) - penalty + + # + # NORMALIZE sgRNA COUNT + # + if rna_level is False and flat_sgrna == True: + if filter_multi_target == True: + targetbf = bf_multi_corrected_gene + else: + targetbf = bf_mean + + for g in gene2rna: + multiple_factor = equalise_sgrna_no / float(len(gene2rna[g])) + bf_norm[g] = targetbf[g] * multiple_factor + + ''' + if bf_std[rnatag] == 0.0: + bf_norm[rnatag] = float('inf') + else: + bf_norm[g] = ( bf[rnatag] - bf_mean[rnatag] ) / bf_std[rnatag] + ''' + training_data = Training(gene_idx) # set training class reset + + # + # calculate network scores + # + + if network_boost == True and rna_level == False: # Network boost is only working for gene level + if run_test_mode == True: # TEST MODE + fp = open(output_file + ".netscore", "w") + print("\nNetwork score calculation start\n") + + networkscores = {} + for g in genes_array[gene_idx]: + if g in network: + templist = list() + for neighbor in network[g]: + if neighbor in bf_mean: + templist.append(bf_mean[neighbor]) + + templist.sort(reverse=True) + + networkscores[g] = fibo_weighted_sum(templist) + # + # start training + # + + for loop in range(LOOPCOUNT): + currentnbf = {} + printstr = "" + printstr += str(loop) + + # + # draw train, test sets + # + gene_train_idx, gene_test_idx = training_data.get_data(train_method) + # + # define essential and nonessential training sets: arrays of indexes + # + train_ess = np.where(np.in1d(genes_array[gene_train_idx], coreEss))[0] + train_non = np.where(np.in1d(genes_array[gene_train_idx], nonEss))[0] + printstr += " " + str(len(train_ess)) + printstr += " " + str(len(train_non)) + printstr += " " + str(len(gene_test_idx)) + + sys.stdout.flush() + # + # calculate Network BF for test set + # + ess_ns_list = [networkscores[x] for x in genes_array[gene_train_idx[train_ess]] if x in networkscores] + non_ns_list = [networkscores[x] for x in genes_array[gene_train_idx[train_non]] if x in networkscores] + + kess = stats.gaussian_kde(ess_ns_list) + knon = stats.gaussian_kde(non_ns_list) + # + # set x boundary for liner regression + # + testx = list() + testy = list() + xmin = float(np.inf) + xmax = float(-np.inf) + + for networkscore in np.arange(max(ess_ns_list), min(ess_ns_list), -0.01): + density_ess = kess.evaluate(networkscore)[0] + density_non = knon.evaluate(networkscore)[0] + if density_ess == 0.0 or density_non == 0.0: + continue + + if np.log2(density_ess / density_non) > -5 and networkscore < np.array(ess_ns_list).mean(): # reverse + xmin = min(xmin, networkscore) + + for networkscore in np.arange(min(non_ns_list), max(non_ns_list), 0.01): + density_ess = kess.evaluate(networkscore)[0] + density_non = knon.evaluate(networkscore)[0] + if density_ess == 0.0 or density_non == 0.0: + continue + if np.log2(density_ess / density_non) < 5 and networkscore > np.array(non_ns_list).mean(): # reverse + xmax = max(xmax, networkscore) + # + # liner regression + # + testx = list() + testy = list() + for g in genes_array[gene_train_idx]: + if g in networkscores: + if networkscores[g] >= xmin and networkscores[g] <= xmax: + testx.append(np.around(networkscores[g] * 100) / 100) + testy.append(np.log2(kess.evaluate(networkscores[g])[0] / knon.evaluate(networkscores[g])[0])) + + slope, intercept, r_value, p_value, std_err = stats.linregress(np.array(testx), np.array(testy)) + + for g in genes_array[gene_test_idx]: + if g in networkscores: + if run_test_mode == True: + fp.write("%s\t%f\t%f\n" % (g, networkscores[g], slope * networkscores[g] + intercept)) + nbf = slope * networkscores[g] + intercept + else: + nbf = 0.0 + + boostedbf[g].append(bf_mean[g] + nbf) + if flat_sgrna == True: + boostedbf[g].append(bf_norm[g] + nbf) + + if run_test_mode == True: + fp.close() + + + + + # + # print out results + # + + # Equalizing factor (Replicates) + if flat_rep==True: + eqf = equalise_rep_no/float(len(column_labels)) + else: + eqf = 1 + + # print out + with open(output_file, 'w') as fout: + + if rna_level == True: + fout.write('RNA\tGENE') + for i in range(len(column_list)): + fout.write('\t{0:s}'.format(column_labels[i])) + if train_method == 0: + fout.write('\t{0:s}'.format(column_labels[i] + "_STD")) + fout.write('\tBF') + if train_method == 0: + fout.write('\tNumObs') + fout.write('\n') + + for rnatag in sorted(bf.keys()): + # RNA tag + fout.write('{0:s}\t'.format(rnatag)) + # Gene + gene = rna2gene[rnatag] + fout.write('{0:s}\t'.format(gene)) + + # BF of replicates + for rep in column_list: + fout.write('{0:4.3f}\t'.format(bf_mean_rna_rep[rnatag][rep])) + if train_method == 0: + fout.write('{0:4.3f}\t'.format(bf_std_rna_rep[rnatag][rep])) + + # Sum BF of replicates + if filter_multi_target == True: + fout.write('{0:4.3f}'.format(float(bf_multi_corrected_rna[rnatag]) * eqf)) # eqf = equalizing factor for the number of replicates + else: + fout.write('{0:4.3f}'.format(float(sum(list(bf_mean_rna_rep[rnatag].values()))) * eqf)) + + # Num obs + if train_method == 0: + fout.write('\t{0:d}'.format(num_obs[gene])) + fout.write('\n') + else: + fout.write('GENE') + if network_boost == True: + fout.write('\tBoostedBF') + if train_method == 0: + fout.write('\tSTD_BoostedBF') + fout.write('\tBF') + if train_method == 0: + fout.write('\tSTD\tNumObs') + if flat_sgrna == True: + fout.write('\tNormBF') + fout.write('\n') + + for g in sorted(genes.keys()): + # Gene + fout.write('{0:s}'.format(g)) + if network_boost == True: + boostedbf_mean = np.mean(boostedbf[g]) + boostedbf_std = np.std(boostedbf[g]) + fout.write('\t{0:4.3f}'.format(float(boostedbf_mean) * eqf)) + if train_method == 0: + fout.write('\t{0:4.3f}'.format(float(boostedbf_std) * eqf)) + + # BF + if filter_multi_target == True: + fout.write('\t{0:4.3f}'.format(float(bf_multi_corrected_gene[g]) * eqf)) # eqf = equalizing factor for the number of replicates + else: + fout.write('\t{0:4.3f}'.format(float(bf_mean[g]) * eqf )) + # STD, Count + if train_method == 0: + fout.write('\t{0:4.3f}\t{1:d}'.format(float(bf_std[g]), num_obs[g])) + # Normalized BF + if flat_sgrna == True: + fout.write('\t{0:4.3f}'.format(float(bf_norm[g]))) + + fout.write('\n') + + +@click.command(name='pr') +@click.option('-i', '--bayes-factors', required=True, + type=click.Path(exists=True)) +@click.option('-o', '--output-file', required=True) +@click.option('-e', '--essential-genes', required=True, + type=click.Path(exists=True)) +@click.option('-n', '--non-essential-genes', required=True, type=click.Path(exists=True)) +@click.option('-k', '--use-column', default=None) +def calculate_precision_recall(bayes_factors, output_file, essential_genes, non_essential_genes, use_column): + """ + Calculate precision-recall from an input Bayes Factors file: + + \b + BAGEL.py pr -i [Bayes Factor file] -o [output file] -e [essentials genes] -n [nonessentials genes] + + \b + Required options: + -i, --bayes-factors [Bayes factors] BAGEL output file. + -o, --output-file [output file] Output filename + -e, --essential-genes [reference essentials] File with list of training set of essential genes + -n, --non-essential-genes [reference nonessentials] File with list of training set of nonessential genes + + \b + Other options: + -k [column name] Use other column (default \BF\) + + \b + Example: + BAGEL.py pr -i input.bf -o output.PR -e ref_essentials.txt -n ref_nonessentials.txt + + """ + # + # test for availability of all files + # + essentials = pd.read_csv(essential_genes, index_col=0, sep="\t") + nonessentials = pd.read_csv(non_essential_genes, index_col=0, sep="\t") + bf = pd.read_csv(bayes_factors, index_col=0, sep="\t") + + if use_column is not None: + bf_column = use_column + if bf_column not in bf.dtypes.index: + print("Error! the column name is not in the file") + sys.exit(1) + else: + bf_column = 'BF' + + bf.sort_values(by=bf_column, ascending=False, inplace=True) + + cumulative_tp = 0. + cumulative_fp = 0. + precision = 1. + recall = 0. + # note float formats + + ess = essentials.index.values + non = nonessentials.index.values + totNumEssentials = len([x for x in bf.index.values if x in ess]) + + with open(output_file, 'w') as fout: + + fout.write('Gene\t') + fout.write(bf_column) + fout.write('\tRecall\tPrecision\tFDR\n') + + for g in bf.index.values: + if (g in ess): + cumulative_tp += 1 + elif (g in non): + cumulative_fp += 1 + recall = cumulative_tp / totNumEssentials + if ((cumulative_tp > 0) | (cumulative_fp > 0)): + precision = cumulative_tp / (cumulative_tp + cumulative_fp) + fout.write('{0:s}\t{1:4.3f}\t{2:4.3f}\t{3:4.3f}\t{4:4.3f}\n'.format(g, bf.loc[g, bf_column], recall, precision, 1.0-precision)) + + +if __name__ == '__main__': + bagel.add_command(calculate_fold_change) + bagel.add_command(calculate_bayes_factors) + bagel.add_command(calculate_precision_recall) + bagel.add_command(report_bagel_version) + bagel() diff --git a/modules/local/bagel2_fc.nf b/modules/local/bagel2_fc.nf new file mode 100644 index 00000000..9fe4ccc9 --- /dev/null +++ b/modules/local/bagel2_fc.nf @@ -0,0 +1,57 @@ +// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) +// https://github.com/nf-core/modules/tree/master/modules/nf-core/ +// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: +// https://nf-co.re/join +// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. +// All other parameters MUST be provided using the "task.ext" directive, see here: +// https://www.nextflow.io/docs/latest/process.html#ext +// where "task.ext" is a string. +// Any parameters that need to be evaluated in the context of a particular sample +// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. +// TODO nf-core: Software that can be piped together SHOULD be added to separate module files +// unless there is a run-time, storage advantage in implementing in this way +// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: +// bwa mem | samtools view -B -T ref.fasta +// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty +// list (`[]`) instead of a file can be used to work around this issue. + +process BAGEL2_FC { + tag "${meta.treatment}_${meta.reference}" + label 'process_single' + + // TODO nf-core: List required Conda package(s). + // Software MUST be pinned to channel (i.e. "bioconda"), version (i.e. "1.10"). + // For Conda, the build (i.e. "h9402c20_2") must be EXCLUDED to support installation on different operating systems. + // TODO nf-core: See section in main README for further information regarding finding and adding container addresses to the section below. + conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0': + 'biocontainers/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0' }" + + input: + // TODO nf-core: Where applicable all sample-specific information e.g. "id", "single_end", "read_group" + // MUST be provided as an input via a Groovy Map called "meta". + // This information may not be required in some instances e.g. indexing reference genome files: + // https://github.com/nf-core/modules/blob/master/modules/nf-core/bwa/index/main.nf + // TODO nf-core: Where applicable please provide/convert compressed files as input/output + // e.g. "*.fastq.gz" and NOT "*.fastq", "*.bam" and NOT "*.sam" etc. + tuple val(meta), path(count_table) + + output: + tuple val(meta), path("*.foldchange"), emit: foldchange + tuple val(meta), path("*.normed_readcount"), emit: normed_counts + //path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + BAGEL.py fc -i $count_table -o ${meta.treatment}_${meta.reference} -c $meta.reference $args + + """ + +} diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index ed8f28aa..45280efa 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -14,7 +14,7 @@ def checkPathParamList = [ params.multiqc_config, params.reference_fasta, params for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } // Check mandatory parameters -if (!params.count_table) { ch_input = file(params.input) } else { error('Input samplesheet not specified!') } +//if (!params.count_table) { ch_input = file(params.input) } else { error('Input samplesheet not specified!') } if (params.library) { ch_library = file(params.library) } if (params.crisprcleanr) { ch_crisprcleanr= Channel.value(params.crisprcleanr) } @@ -60,6 +60,8 @@ include { MAGECK_MLE } from '../modules/nf-core/mageck/mle/main include { MAGECK_TEST } from '../modules/nf-core/mageck/test/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/normalize/main' +include { BAGEL2_FC } from '../modules/local/bagel2_fc' + /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ RUN MAIN WORKFLOW @@ -138,7 +140,7 @@ workflow CRISPRSEQ_SCREENING { if(params.rra_contrasts) { Channel.fromPath(params.rra_contrasts) - .splitCsv(header:true, sep:',' ) + .splitCsv(header:true, sep:';' ) .set { ch_contrasts } counts = ch_contrasts.combine(ch_counts) @@ -147,6 +149,18 @@ workflow CRISPRSEQ_SCREENING { ) } + if(params.rra_contrasts) { + Channel.fromPath(params.rra_contrasts) + .splitCsv(header:true, sep:';' ) + .set { ch_bagel } + counts = ch_bagel.combine(ch_counts) + + BAGEL2_FC ( + counts + ) + } + + if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) ch_mle.map { From ac2ca2c09651bcb3e5ffbee5fa0d4eb6349c7f01 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Thu, 27 Jul 2023 16:17:16 +0200 Subject: [PATCH 04/39] Trying to add BAGEL_BF --- assets/CEGv2.txt | 685 +++++++++++++++++++++++++++++++ assets/NEGv1.txt | 1 + assets/schema_input.json | 4 +- modules/local/bagel2_bf.nf | 33 ++ modules/local/bagel2_fc.nf | 27 -- nextflow.config | 2 + nextflow_schema.json | 23 +- workflows/crisprseq_screening.nf | 30 +- 8 files changed, 762 insertions(+), 43 deletions(-) create mode 100644 assets/CEGv2.txt create mode 100644 assets/NEGv1.txt create mode 100644 modules/local/bagel2_bf.nf diff --git a/assets/CEGv2.txt b/assets/CEGv2.txt new file mode 100644 index 00000000..fa3ce335 --- /dev/null +++ b/assets/CEGv2.txt @@ -0,0 +1,685 @@ +GENE HGNC_ID ENTREZ_ID +AARS HGNC:20 16 +ABCE1 HGNC:69 6059 +ABCF1 HGNC:70 23 +ACTB HGNC:132 60 +ACTL6A HGNC:24124 86 +ACTR10 HGNC:17372 55860 +ACTR2 HGNC:169 10097 +ADSL HGNC:291 158 +ADSS HGNC:292 159 +AHCY HGNC:343 191 +ALG1 HGNC:18294 56052 +ALG14 HGNC:28287 199857 +ALG2 HGNC:23159 85365 +ANAPC2 HGNC:19989 29882 +ANAPC4 HGNC:19990 29945 +ANAPC5 HGNC:15713 51433 +AQR HGNC:29513 9716 +ARCN1 HGNC:649 372 +ARIH1 HGNC:689 25820 +ARL2 HGNC:693 402 +ATP2A2 HGNC:812 488 +ATP5F1A HGNC:823 498 +ATP5F1B HGNC:830 506 +ATP5F1C HGNC:833 509 +ATP5F1D HGNC:837 513 +ATP5J2-PTCD1 NA +ATP5MG HGNC:14247 10632 +ATP5PO HGNC:850 539 +ATP6V0B HGNC:861 533 +ATP6V0C HGNC:855 527 +ATP6V1A HGNC:851 523 +ATP6V1D HGNC:13527 51382 +ATP6V1E1 HGNC:857 529 +ATR HGNC:882 545 +AURKB HGNC:11390 9212 +BANF1 HGNC:17397 8815 +BIRC5 HGNC:593 332 +BUB1B HGNC:1149 701 +BUB3 HGNC:1151 9184 +BUD31 HGNC:29629 8896 +BYSL HGNC:1157 705 +TWNK HGNC:1160 56652 +C1orf109 HGNC:26039 54955 +CFAP298 HGNC:1301 56683 +NEPRO HGNC:24496 25871 +SPOUT1 HGNC:26933 51490 +CCDC84 HGNC:30460 338657 +YJU2 HGNC:25518 55702 +CCNA2 HGNC:1578 890 +CCNH HGNC:1594 902 +CCNK HGNC:1596 8812 +CCT2 HGNC:1615 10576 +CCT3 HGNC:1616 7203 +CCT4 HGNC:1617 10575 +CCT5 HGNC:1618 22948 +CCT6A HGNC:1620 908 +CCT7 HGNC:1622 10574 +CCT8 HGNC:1623 10694 +CDC123 HGNC:16827 8872 +CDC16 HGNC:1720 8881 +CDC20 HGNC:1723 991 +CDC27 HGNC:1728 996 +CDC37 HGNC:1735 11140 +CDC5L HGNC:1743 988 +CDC73 HGNC:16783 79577 +CDK1 HGNC:1722 983 +CDK7 HGNC:1778 1022 +CDK9 HGNC:1780 1025 +CDT1 HGNC:24576 81620 +CEBPZ HGNC:24218 10153 +CENPA HGNC:1851 1058 +CENPC NA +CFL1 HGNC:1874 1072 +CHAF1A HGNC:1910 10036 +CHAF1B HGNC:1911 8208 +CHEK1 HGNC:1925 1111 +CHERP HGNC:16930 10523 +CHMP2A HGNC:30216 27243 +CHMP6 HGNC:25675 79643 +CIAO1 HGNC:14280 9391 +CINP HGNC:23789 51550 +UTP4 HGNC:1983 84916 +CKAP5 HGNC:28959 9793 +CLNS1A HGNC:2080 1207 +CLP1 HGNC:16999 10978 +CLTC HGNC:2092 1213 +CMPK1 HGNC:18170 51727 +CMTR1 NA +CNOT3 HGNC:7879 4849 +COA5 HGNC:33848 493753 +COPA HGNC:2230 1314 +COPB1 HGNC:2231 1315 +COPB2 HGNC:2232 9276 +COPS3 HGNC:2239 8533 +COPS6 HGNC:21749 10980 +COPZ1 HGNC:2243 22818 +COQ4 HGNC:19693 51117 +COX10 HGNC:2260 1352 +COX11 HGNC:2261 1353 +COX15 HGNC:2263 1355 +COX4I1 HGNC:2265 1327 +COX5B HGNC:2269 1329 +COX6B1 HGNC:2280 1340 +CPSF1 HGNC:2324 29894 +CPSF2 HGNC:2325 53981 +CPSF3 HGNC:2326 51692 +CPSF4 HGNC:2327 10898 +CRNKL1 HGNC:15762 51340 +CSE1L HGNC:2431 1434 +CTDP1 HGNC:2498 9150 +CTPS1 HGNC:2519 1503 +CTR9 HGNC:16850 9646 +CYCS HGNC:19986 54205 +DAD1 HGNC:2664 1603 +DBR1 HGNC:15594 51163 +DCTN5 HGNC:24594 84516 +DDB1 HGNC:2717 1642 +DDOST HGNC:2728 1650 +DDX10 HGNC:2735 1662 +DDX18 HGNC:2741 8886 +DDX20 HGNC:2743 11218 +DDX21 HGNC:2744 9188 +DDX27 HGNC:15837 55661 +DDX41 HGNC:18674 51428 +DDX47 HGNC:18682 51202 +DDX49 HGNC:18684 54555 +DDX55 HGNC:20085 57696 +DDX56 HGNC:18193 54606 +DGCR8 HGNC:2847 54487 +DHODH HGNC:2867 1723 +DHPS HGNC:2869 1725 +DHX15 HGNC:2738 1665 +DHX33 HGNC:16718 56919 +DHX37 HGNC:17210 57647 +DHX8 HGNC:2749 1659 +DHX9 HGNC:2750 1660 +UTP25 HGNC:28440 27042 +DIMT1 HGNC:30217 27292 +DIS3 HGNC:20604 22894 +DKC1 HGNC:2890 1736 +DLST HGNC:2911 1743 +DMAP1 HGNC:18291 55929 +DNAJA3 HGNC:11808 9093 +DNAJC9 HGNC:19123 23234 +DNM2 HGNC:2974 1785 +DNMT1 HGNC:2976 1786 +DOLK HGNC:23406 22845 +DONSON HGNC:2993 29980 +DPAGT1 HGNC:2995 1798 +DTL HGNC:30288 51514 +DTYMK HGNC:3061 1841 +DYNC1I2 HGNC:2964 1781 +ECD HGNC:17029 11319 +EEF2 HGNC:3214 1938 +EFTUD2 HGNC:30858 9343 +EIF2B1 HGNC:3257 1967 +EIF2B3 HGNC:3259 8891 +EIF2B5 HGNC:3261 8893 +EIF2S1 HGNC:3265 1965 +EIF2S2 HGNC:3266 8894 +EIF2S3 HGNC:3267 1968 +EIF3A HGNC:3271 8661 +EIF3B HGNC:3280 8662 +EIF3C HGNC:3279 8663 +EIF3D HGNC:3278 8664 +EIF3G HGNC:3274 8666 +EIF3I HGNC:3272 8668 +EIF4A3 HGNC:18683 9775 +EIF5A HGNC:3300 1984 +EIF5B HGNC:30793 9669 +EIF6 HGNC:6159 3692 +ELAC2 HGNC:14198 60528 +ELL HGNC:23114 8178 +EPRS HGNC:3418 2058 +ERCC2 HGNC:3434 2068 +ERCC3 HGNC:3435 2071 +ERH HGNC:3447 2079 +EXOSC2 HGNC:17097 23404 +EXOSC3 HGNC:17944 51010 +EXOSC4 HGNC:18189 54512 +EXOSC6 HGNC:19055 118460 +EXOSC7 HGNC:28112 23016 +EXOSC8 HGNC:17035 11340 +CIAO2B HGNC:24261 51647 +FARS2 HGNC:21062 10667 +FARSA HGNC:3592 2193 +FARSB HGNC:17800 10056 +FAU HGNC:3597 2197 +FNTA HGNC:3782 2339 +FNTB HGNC:3785 2342 +FTSJ3 HGNC:17136 117246 +GABPA HGNC:4071 2551 +GAPDH HGNC:4141 2597 +GART HGNC:4163 2618 +GEMIN5 HGNC:20043 25929 +GEMIN8 HGNC:26044 54960 +GFM1 HGNC:13780 85476 +GGPS1 HGNC:4249 9453 +GINS2 HGNC:24575 51659 +GINS3 HGNC:25851 64785 +GINS4 HGNC:28226 84296 +GMPPB HGNC:22932 29925 +GMPS HGNC:4378 8833 +RACK1 HGNC:4399 10399 +GNL3 HGNC:29931 26354 +GPN3 HGNC:30186 51184 +GPS1 HGNC:4549 2873 +GRPEL1 HGNC:19696 80273 +GRWD1 HGNC:21270 83743 +GSPT1 HGNC:4621 2935 +GTF2B HGNC:4648 2959 +GTF2H1 HGNC:4655 2965 +GTF2H2C HGNC:31394 728340 +GTF2H4 HGNC:4658 2968 +GTF3A HGNC:4662 2971 +GTF3C1 HGNC:4664 2975 +GTF3C2 HGNC:4665 2976 +GTF3C5 HGNC:4668 9328 +GTPBP4 HGNC:21535 23560 +GUK1 HGNC:4693 2987 +HARS HGNC:4816 3035 +HAUS1 HGNC:25174 115106 +HAUS5 HGNC:29130 23354 +HCFC1 HGNC:4839 3054 +HDAC3 HGNC:4854 8841 +HEATR1 HGNC:25517 55127 +HINFP HGNC:17850 25988 +HIST1H2AJ HGNC:4727 8331 +HIST2H2AA3 HGNC:4736 8337 +HJURP HGNC:25444 55355 +HNRNPC HGNC:5035 3183 +HNRNPK HGNC:5044 3190 +HNRNPL HGNC:5045 3191 +HNRNPU HGNC:5048 3192 +HSD17B10 HGNC:4800 3028 +HSPA9 HGNC:5244 3313 +HSPD1 HGNC:5261 3329 +HUWE1 HGNC:30892 10075 +HYPK HGNC:18418 25764 +IARS HGNC:5330 3376 +IGBP1 HGNC:5461 3476 +ILF3 HGNC:6038 3609 +IMP3 HGNC:14497 55272 +IMP4 HGNC:30856 92856 +INTS1 HGNC:24555 26173 +INTS3 HGNC:26153 65123 +INTS8 HGNC:26048 55656 +INTS9 HGNC:25592 55756 +IPO13 HGNC:16853 9670 +ISCU HGNC:29882 23479 +ISG20L2 HGNC:25745 81875 +KANSL3 HGNC:25473 55683 +KARS HGNC:6215 3735 +KAT8 HGNC:17933 84148 +KIF11 HGNC:6388 3832 +KIF23 HGNC:6392 9493 +KPNB1 HGNC:6400 3837 +KRI1 HGNC:25769 65095 +KRR1 HGNC:5176 11103 +LARS HGNC:6512 51520 +LAS1L HGNC:25726 81887 +LONP1 HGNC:9479 9361 +LRR1 HGNC:19742 122769 +LSG1 HGNC:25652 55341 +LSM11 HGNC:30860 134353 +LSM12 HGNC:26407 124801 +LSM2 HGNC:13940 57819 +LSM7 HGNC:20470 51690 +LUC7L3 HGNC:24309 51747 +MAD2L1 HGNC:6763 4085 +MAGOH HGNC:6815 4116 +MAK16 HGNC:13703 84549 +MARS HGNC:6898 4141 +MARS2 HGNC:25133 92935 +MASTL HGNC:19042 84930 +MCM3 HGNC:6945 4172 +MCM3AP HGNC:6946 8888 +MCM4 HGNC:6947 4173 +MCM5 HGNC:6948 4174 +MCM7 HGNC:6950 4176 +MDN1 HGNC:18302 23195 +MED11 HGNC:32687 400569 +MED12 HGNC:11957 9968 +MED18 HGNC:25944 54797 +MED27 HGNC:2377 9442 +MED30 HGNC:23032 90390 +MEPCE HGNC:20247 56257 +METTL16 HGNC:28484 79066 +MMS22L HGNC:21475 253714 +MPHOSPH10 HGNC:7213 10199 +MRPL57 HGNC:14514 78988 +MRPL18 HGNC:14477 29074 +MRPL28 HGNC:14484 10573 +MRPL38 HGNC:14033 64978 +MRPL4 HGNC:14276 51073 +MRPL43 HGNC:14517 84545 +MRPL45 HGNC:16651 84311 +MRPL46 HGNC:1192 26589 +MRPL53 HGNC:16684 116540 +MRPS14 HGNC:14049 63931 +MRPS24 HGNC:14510 64951 +MRPS34 HGNC:16618 65993 +MSTO1 HGNC:29678 55154 +MTG2 HGNC:16239 26164 +MVK HGNC:7530 4598 +MYBBP1A HGNC:7546 10514 +MYC HGNC:7553 4609 +NAA10 HGNC:18704 8260 +LSM8 HGNC:20471 51691 +NAA50 HGNC:29533 80218 +NAMPT HGNC:30092 10135 +NAPA HGNC:7641 8775 +CIAO3 HGNC:14179 64428 +NARS HGNC:7643 4677 +NAT10 HGNC:29830 55226 +NCBP1 HGNC:7658 4686 +NCBP2 HGNC:7659 22916 +NDC80 HGNC:16909 10403 +NDUFA13 HGNC:17194 51079 +NEDD8 HGNC:7732 4738 +NELFB HGNC:24324 25920 +NHP2 HGNC:14377 55651 +SNU13 HGNC:7819 4809 +NIP7 HGNC:24328 51388 +NKAP HGNC:29873 79576 +NLE1 HGNC:19889 54475 +NMD3 HGNC:24250 51068 +NMT1 HGNC:7857 4836 +NOC4L HGNC:28461 79050 +NOL10 HGNC:25862 79954 +NOL11 HGNC:24557 25926 +NOL6 HGNC:19910 65083 +NOL9 HGNC:26265 79707 +NOP16 HGNC:26934 51491 +NOP2 HGNC:7867 4839 +NOP56 HGNC:15911 10528 +NOP9 HGNC:19826 161424 +NPLOC4 HGNC:18261 55666 +NSA2 HGNC:30728 10412 +NSF HGNC:8016 4905 +NUDC HGNC:8045 10726 +NUDCD3 HGNC:22208 23386 +NUDT21 HGNC:13870 11051 +NUDT4 HGNC:8051 11163 +NUF2 HGNC:14621 83540 +NUP133 HGNC:18016 55746 +NUP155 HGNC:8063 9631 +NUP160 HGNC:18017 23279 +NUP214 HGNC:8064 8021 +NUP85 HGNC:8734 79902 +NUP88 HGNC:8067 4927 +NUP93 HGNC:28958 9688 +NUS1 HGNC:21042 116150 +NUTF2 HGNC:13722 10204 +NVL HGNC:8070 4931 +NXF1 HGNC:8071 10482 +OGDH HGNC:8124 4967 +OGT HGNC:8127 8473 +LTO1 HGNC:17589 220064 +ORC6 HGNC:17151 23594 +OSGEP HGNC:18028 55644 +PABPC1 HGNC:8554 26986 +PAFAH1B1 HGNC:8574 5048 +PAICS HGNC:8587 10606 +PAK1IP1 HGNC:20882 55003 +PCID2 HGNC:25653 55795 +PCNA HGNC:8729 5111 +PFDN2 HGNC:8867 5202 +PFN1 HGNC:8881 5216 +PGAM1 HGNC:8888 5223 +PGGT1B HGNC:8895 5229 +PGK1 HGNC:8896 5230 +PHB HGNC:8912 5245 +PHB2 HGNC:30306 11331 +PHF5A HGNC:18000 84844 +PKMYT1 HGNC:29650 9088 +PLK1 HGNC:9077 5347 +PLRG1 HGNC:9089 5356 +PMPCA HGNC:18667 23203 +PMPCB HGNC:9119 9512 +PNKP HGNC:9154 11284 +POLA2 HGNC:30073 23649 +POLR1A HGNC:17264 25885 +POLR1B HGNC:20454 84172 +POLR1C HGNC:20194 9533 +POLR2A HGNC:9187 5430 +POLR2B HGNC:9188 5431 +POLR2C HGNC:9189 5432 +POLR2D HGNC:9191 5433 +POLR2E HGNC:9192 5434 +POLR2G HGNC:9194 5436 +POLR2H HGNC:9195 5437 +POLR2I HGNC:9196 5438 +POLR2L HGNC:9199 5441 +POLR3A HGNC:30074 11128 +POLR3C HGNC:30076 10623 +POLR3H HGNC:30349 171568 +POLR3K HGNC:14121 51728 +POLRMT HGNC:9200 5442 +POP1 HGNC:30129 10940 +POP5 HGNC:17689 51367 +PPA1 HGNC:9226 5464 +PPAN HGNC:9227 56342 +PPAT HGNC:9238 5471 +PPIL2 HGNC:9261 23759 +PPP2CA HGNC:9299 5515 +PTPA HGNC:9308 5524 +PPP4C HGNC:9319 5531 +PPWD1 HGNC:28954 23398 +PREB HGNC:9356 10113 +PRELID1 HGNC:30255 27166 +PRIM1 HGNC:9369 5557 +PRMT1 HGNC:5187 3276 +PRMT5 HGNC:10894 10419 +PRPF19 HGNC:17896 27339 +PRPF31 HGNC:15446 26121 +PRPF38A HGNC:25930 84950 +PRPF38B HGNC:25512 55119 +PRPF4 HGNC:17349 9128 +PRPF8 HGNC:17340 10594 +PSMA1 HGNC:9530 5682 +PSMA2 HGNC:9531 5683 +PSMA3 HGNC:9532 5684 +PSMA4 HGNC:9533 5685 +PSMA5 HGNC:9534 5686 +PSMA6 HGNC:9535 5687 +PSMA7 HGNC:9536 5688 +PSMB1 HGNC:9537 5689 +PSMB2 HGNC:9539 5690 +PSMB3 HGNC:9540 5691 +PSMB4 HGNC:9541 5692 +PSMB7 HGNC:9544 5695 +PSMC2 HGNC:9548 5701 +PSMC3 HGNC:9549 5702 +PSMC5 HGNC:9552 5705 +PSMC6 HGNC:9553 5706 +PSMD1 HGNC:9554 5707 +PSMD11 HGNC:9556 5717 +PSMD12 HGNC:9557 5718 +PSMD13 HGNC:9558 5719 +PSMD14 HGNC:16889 10213 +PSMD3 HGNC:9560 5709 +PSMD4 HGNC:9561 5710 +PSMG3 HGNC:22420 84262 +PTPN23 HGNC:14406 25930 +PUF60 HGNC:17042 22827 +PWP2 HGNC:9711 5822 +QARS HGNC:9751 5859 +RABGGTB HGNC:9796 5876 +RACGAP1 HGNC:9804 29127 +RAD21 HGNC:9811 5885 +RAD51C HGNC:9820 5889 +RAD51D HGNC:9823 5892 +RAE1 HGNC:9828 8480 +RAN HGNC:9846 5901 +RANGAP1 HGNC:9854 5905 +RARS2 HGNC:21406 57038 +RBBP6 HGNC:9889 5930 +RBM14 HGNC:14219 10432 +RBM17 HGNC:16944 84991 +RBM8A HGNC:9905 9939 +RBMX HGNC:9910 27316 +RBX1 HGNC:9928 9978 +RCC1 HGNC:1913 1104 +RCL1 HGNC:17687 10171 +RFC2 HGNC:9970 5982 +RFC4 HGNC:9972 5984 +RFC5 HGNC:9973 5985 +RFK HGNC:30324 55312 +RHEB HGNC:10011 6009 +RIOK2 HGNC:18999 55781 +RNF20 HGNC:10062 56254 +RNGTT HGNC:10073 8732 +ROMO1 HGNC:16185 140823 +RPA1 HGNC:10289 6117 +RPA2 HGNC:10290 6118 +RPF2 HGNC:20870 84154 +RPL10A HGNC:10299 4736 +RPL11 HGNC:10301 6135 +RPL12 HGNC:10302 6136 +RPL13 HGNC:10303 6137 +RPL14 HGNC:10305 9045 +RPL18 HGNC:10310 6141 +RPL18A HGNC:10311 6142 +RPL19 HGNC:10312 6143 +RPL23 HGNC:10316 9349 +RPL24 HGNC:10325 6152 +RPL27 HGNC:10328 6155 +RPL27A HGNC:10329 6157 +RPL3 HGNC:10332 6122 +RPL30 HGNC:10333 6156 +RPL35 HGNC:10344 11224 +RPL35A HGNC:10345 6165 +RPL36 HGNC:13631 25873 +RPL37A HGNC:10348 6168 +RPL4 HGNC:10353 6124 +RPL6 HGNC:10362 6128 +RPL8 HGNC:10368 6132 +RPLP0 HGNC:10371 6175 +RPLP1 HGNC:10372 6176 +RPLP2 HGNC:10377 6181 +RPP21 HGNC:21300 79897 +RPP38 HGNC:30329 10557 +RPS11 HGNC:10384 6205 +RPS12 HGNC:10385 6206 +RPS13 HGNC:10386 6207 +RPS15A HGNC:10389 6210 +RPS16 HGNC:10396 6217 +RPS18 HGNC:10401 6222 +RPS19 HGNC:10402 6223 +RPS2 HGNC:10404 6187 +RPS20 HGNC:10405 6224 +RPS21 HGNC:10409 6227 +RPS23 HGNC:10410 6228 +RPS3 HGNC:10420 6188 +RPS4X HGNC:10424 6191 +RPS5 HGNC:10426 6193 +RPS6 HGNC:10429 6194 +RPS7 HGNC:10440 6201 +RPS8 HGNC:10441 6202 +RRM1 HGNC:10451 6240 +RRP1 HGNC:18785 8568 +RRP12 HGNC:29100 23223 +RRS1 HGNC:17083 23212 +RTCB HGNC:26935 51493 +RUVBL2 HGNC:10475 10856 +SACM1L HGNC:17059 22908 +SAE1 HGNC:30660 10055 +SAMM50 HGNC:24276 25813 +SAP18 HGNC:10530 10284 +SARS HGNC:10537 6301 +SARS2 HGNC:17697 54938 +SART3 HGNC:16860 9733 +SBNO1 HGNC:22973 55206 +SDAD1 HGNC:25537 55153 +SDHC HGNC:10682 6391 +SEC13 HGNC:10697 6396 +SEH1L HGNC:30379 81929 +SF1 HGNC:12950 7536 +SF3A2 HGNC:10766 8175 +SF3A3 HGNC:10767 10946 +SF3B1 HGNC:10768 23451 +SF3B2 HGNC:10769 10992 +SF3B3 HGNC:10770 23450 +SF3B5 HGNC:21083 83443 +SKP1 HGNC:10899 6500 +SLC35B1 HGNC:20798 10237 +PRELID3B HGNC:15892 51012 +SLU7 HGNC:16939 10569 +SMC1A HGNC:11111 8243 +SMC2 HGNC:14011 10592 +SMC4 HGNC:14013 10051 +SMU1 HGNC:18247 55234 +SNAPC1 HGNC:11134 6617 +SNAPC2 HGNC:11135 6618 +SNAPC4 HGNC:11137 6621 +SNRNP200 HGNC:30859 23020 +SNRNP25 HGNC:14161 79622 +SNRNP27 HGNC:30240 11017 +SNRNP35 HGNC:30852 11066 +SNRNP70 HGNC:11150 6625 +SNRPA1 HGNC:11152 6627 +SNRPD1 HGNC:11158 6632 +SNRPD2 HGNC:11159 6633 +SNRPD3 HGNC:11160 6634 +SNRPF HGNC:11162 6636 +SNW1 HGNC:16696 22938 +SPATA5L1 HGNC:28762 79029 +SPC24 HGNC:26913 147841 +SPC25 HGNC:24031 57405 +SRBD1 HGNC:25521 55133 +SRP19 HGNC:11300 6728 +SRRM1 HGNC:16638 10250 +SRRT HGNC:24101 51593 +SRSF1 HGNC:10780 6426 +SRSF2 HGNC:10783 6427 +SRSF3 HGNC:10785 6428 +SRSF7 HGNC:10789 6432 +SS18L2 HGNC:15593 51188 +SSU72 HGNC:25016 29101 +SUPT5H HGNC:11469 6829 +SUPT6H HGNC:11470 6830 +SUPV3L1 HGNC:11471 6832 +SYMPK HGNC:22935 8189 +SYS1 HGNC:16162 90196 +TAF1B HGNC:11533 9014 +TAF6 HGNC:11540 6878 +TANGO6 HGNC:25749 79613 +TARS HGNC:11572 6897 +TBCD HGNC:11581 6904 +TBL3 HGNC:11587 10607 +TCP1 HGNC:11655 6950 +TELO2 HGNC:29099 9894 +TFAM HGNC:11741 7019 +TFRC HGNC:11763 7037 +THOC2 HGNC:19073 57187 +THOC3 HGNC:19072 84321 +THOC5 HGNC:19074 8563 +TICRR HGNC:28704 90381 +TIMM10 HGNC:11814 26519 +TIMM13 HGNC:11816 26517 +TIMM23 HGNC:17312 100287932 +TIMM44 HGNC:17316 10469 +TMEM258 HGNC:1164 746 +TNPO3 HGNC:17103 23534 +TOMM22 HGNC:18002 56993 +TOMM40 HGNC:18001 10452 +TONSL HGNC:7801 4796 +TOP1 HGNC:11986 7150 +TOP2A HGNC:11989 7153 +TPT1 HGNC:12022 7178 +TPX2 HGNC:1249 22974 +TRAPPC1 HGNC:19894 58485 +TRAPPC3 HGNC:19942 27095 +TRIAP1 HGNC:26937 51499 +TRMT112 HGNC:26940 51504 +TRMT5 HGNC:23141 57570 +TRNAU1AP HGNC:30813 54952 +TRRAP HGNC:12347 8295 +TSR1 HGNC:25542 55720 +TTC1 HGNC:12391 7265 +TTC27 HGNC:25986 55622 +TTI1 HGNC:29029 9675 +TTI2 HGNC:26262 80185 +TUBB HGNC:20778 203068 +TUBG1 HGNC:12417 7283 +TUBGCP2 HGNC:18599 10844 +TUBGCP3 HGNC:18598 10426 +TUBGCP6 HGNC:18127 85378 +TUFM HGNC:12420 7284 +TUT1 HGNC:26184 64852 +TXN HGNC:12435 7295 +TXNL4A HGNC:30551 10907 +U2AF1 HGNC:12453 7307 +U2AF2 HGNC:23156 11338 +UBA1 HGNC:12469 7317 +UBA52 HGNC:12458 7311 +UBE2L3 HGNC:12488 7332 +UBE2M HGNC:12491 9040 +UBE2N HGNC:12492 7334 +UBL5 HGNC:13736 59286 +UBTF HGNC:12511 7343 +UPF1 HGNC:9962 5976 +UPF2 HGNC:17854 26019 +UQCRC1 HGNC:12585 7384 +UQCRFS1 HGNC:12587 7386 +UROD HGNC:12591 7389 +USP39 HGNC:20071 10713 +USP5 HGNC:12628 8078 +USPL1 HGNC:20294 10208 +UTP15 HGNC:25758 84135 +UTP20 HGNC:17897 27340 +UTP23 HGNC:28224 84294 +UXT HGNC:12641 8409 +VARS HGNC:12651 7407 +VARS2 HGNC:21642 57176 +VCP HGNC:12666 7415 +VPS25 HGNC:28122 84313 +VPS28 HGNC:18178 51160 +WARS HGNC:12729 7453 +BUD23 HGNC:16405 114049 +WDR12 HGNC:14098 55759 +WDR25 HGNC:21064 79446 +WDR3 HGNC:12755 10885 +WDR33 HGNC:25651 55339 +WDR43 HGNC:28945 23160 +WDR61 HGNC:30300 80349 +WDR70 HGNC:25495 55100 +WDR74 HGNC:25529 54663 +WDR75 HGNC:25725 84128 +WDR77 HGNC:29652 79084 +WDR92 HGNC:25176 116143 +WEE1 HGNC:12761 7465 +XAB2 HGNC:14089 56949 +XPO1 HGNC:12825 7514 +XRCC6 HGNC:4055 2547 +YARS HGNC:12840 8565 +YARS2 HGNC:24249 51067 +YRDC HGNC:28905 79693 +ZBTB8OS HGNC:24094 339487 +ZMAT5 HGNC:28046 55954 +ZNF131 HGNC:12915 7690 +ZPR1 HGNC:13051 8882 +ZNF574 HGNC:26166 64763 diff --git a/assets/NEGv1.txt b/assets/NEGv1.txt new file mode 100644 index 00000000..32701540 --- /dev/null +++ b/assets/NEGv1.txt @@ -0,0 +1 @@ +{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"archive","path":"archive","contentType":"directory"},{"name":"data","path":"data","contentType":"directory"},{"name":"pipeline-script-example","path":"pipeline-script-example","contentType":"directory"},{"name":"BAGEL-v2-tutorial.html","path":"BAGEL-v2-tutorial.html","contentType":"file"},{"name":"BAGEL.py","path":"BAGEL.py","contentType":"file"},{"name":"CEG_mouse.txt","path":"CEG_mouse.txt","contentType":"file"},{"name":"CEGv2.txt","path":"CEGv2.txt","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"NEG_mouse.txt","path":"NEG_mouse.txt","contentType":"file"},{"name":"NEGv1.txt","path":"NEGv1.txt","contentType":"file"},{"name":"Network_STRING_v10.txt","path":"Network_STRING_v10.txt","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"pan-species-control-essentials-50genes.txt","path":"pan-species-control-essentials-50genes.txt","contentType":"file"},{"name":"pan-species-control-nonessentials-50genes.txt","path":"pan-species-control-nonessentials-50genes.txt","contentType":"file"},{"name":"precalc_library_alignment_info.py","path":"precalc_library_alignment_info.py","contentType":"file"},{"name":"reads_hap1.txt","path":"reads_hap1.txt","contentType":"file"}],"totalCount":16}},"fileTreeProcessingTime":2.2530900000000003,"foldersToFetch":[],"reducedMotionEnabled":null,"repo":{"id":93685947,"defaultBranch":"master","name":"bagel","ownerLogin":"hart-lab","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-06-07T22:46:04.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/29264780?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"master","listCacheKey":"v0:1609982357.0","canEdit":false,"refType":"branch","currentOid":"53388adbb4fb0931e5c9dda135502be19e4555f0"},"path":"NEGv1.txt","currentUser":null,"blob":{"rawLines":["GENE\tHGNC_ID\tENTREZ_ID","ABCG8\tHGNC:13887\t64241","ACCSL\tHGNC:34391\t390110","ACTL7A\tHGNC:161\t10881","ACTL7B\tHGNC:162\t10880","ACTL9\tHGNC:28494\t284382","ACTRT1\tHGNC:24027\t139741","ADAD1\tHGNC:30713\t132612","ADAM18\tHGNC:196\t8749","ADAM2\tHGNC:198\t2515","ADAM20\tHGNC:199\t8748","ADAM30\tHGNC:208\t11085","ADH7\tHGNC:256\t131","AFM\tHGNC:316\t173","AICDA\tHGNC:13203\t57379","AIPL1\tHGNC:359\t23746","ALPI\tHGNC:437\t248","ALPG\tHGNC:441\t251","ALX3\tHGNC:449\t257","AMELX\tHGNC:461\t265","ANKRD30A\tHGNC:17234\t91074","ANKRD60\tHGNC:16217\t140731","ANTXRL\tHGNC:27277\t195977","APOA4\tHGNC:602\t337","APOBEC1\tHGNC:604\t339","APOF\tHGNC:615\t319","AQP12A\tHGNC:19941\t375318","AQP8\tHGNC:642\t343","ARGFX\tHGNC:30146\t503582","ART1\tHGNC:723\t417","ASB17\tHGNC:19769\t127247","ASIC5\tHGNC:17537\t51802","ASZ1\tHGNC:1350\t136991","ATOH1\tHGNC:797\t474","ATP4B\tHGNC:820\t496","ATP6V1G3\tHGNC:18265\t127124","AWAT1\tHGNC:23252\t158833","AWAT2\tHGNC:23251\t158835","B3GNT6\tHGNC:24141\t192134","BANF2\tHGNC:16172\t140836","BARHL1\tHGNC:953\t56751","BEND2\tHGNC:28509\t139105","BHLHE23\tHGNC:16093\t128408","BIRC8\tHGNC:14878\t112401","BMP10\tHGNC:20869\t27302","BMP15\tHGNC:1068\t9210","BPIFA1\tHGNC:15749\t51297","BPIFA3\tHGNC:16204\t128861","BPIFB3\tHGNC:16178\t359710","BPIFB6\tHGNC:16504\t128859","BPIFC\tHGNC:16503\t254240","BPY2\tHGNC:13508\t9083","BRDT\tHGNC:1105\t676","BSND\tHGNC:16512\t7809","C10orf113\tHGNC:31447\t387638","C10orf120\tHGNC:25707\t399814","C10orf53\tHGNC:27421\t282966","C11orf40\tHGNC:23986\t143501","C12orf40\tHGNC:26846\t283461","C14orf183\tHGNC:27285\t196913","NUTM1\tHGNC:29919\t256646","C16orf78\tHGNC:28479\t123970","C17orf102\tHGNC:34412\t400591","C17orf78\tHGNC:26831\t284099","DYNAP\tHGNC:26808\t284254","TEX45\tHGNC:24745\t374877","C1orf146\tHGNC:24032\t388649","C20orf173\tHGNC:16166\t140873","C20orf203\tHGNC:26592\t284805","SCP2D1\tHGNC:16211\t140856","TEX44\tHGNC:28563\t165100","STPG4\tHGNC:26850\t285051","PCARE\tHGNC:34383\t388939","C2orf83\tHGNC:25344\t56918","C3orf30\tHGNC:26553\t152405","PRR27\tHGNC:33193\t401137","DCANP1\tHGNC:24459\t140947","C6orf10\tHGNC:13922\t10665","C7orf66\tHGNC:33712\t154907","C7orf71\tHGNC:22364\t285941","C8A\tHGNC:1352\t731","C8B\tHGNC:1353\t732","C8orf17\tHGNC:17737\t100507249","C8orf86\tHGNC:33774\t389649","C9orf53\tHGNC:23831\t51198","CABP2\tHGNC:1385\t51475","CABP5\tHGNC:13714\t56344","CABS1\tHGNC:30710\t85438","CACNG2\tHGNC:1406\t10369","CACNG3\tHGNC:1407\t10368","CACNG5\tHGNC:1409\t27091","CATSPER4\tHGNC:23220\t378807","CCDC155\tHGNC:26520\t147872","CCDC172\tHGNC:30524\t374355","CCDC83\tHGNC:28535\t220047","CCKAR\tHGNC:1570\t886","CCL1\tHGNC:10609\t6346","CCT8L2\tHGNC:15553\t150160","CD200R1L\tHGNC:24665\t344807","CDCP2\tHGNC:27297\t200008","CDX2\tHGNC:1806\t1045","CDX4\tHGNC:1808\t1046","CDY1\tHGNC:1809\t9085","CDY1B\tHGNC:23920\t253175","CDY2A\tHGNC:1810\t9426","CDY2B\tHGNC:23921\t203611","CEACAM7\tHGNC:1819\t1087","CELA2A\tHGNC:24609\t63036","CELA3A\tHGNC:15944\t10136","CELA3B\tHGNC:15945\t23436","CER1\tHGNC:1862\t9350","CETN1\tHGNC:1866\t1068","CFHR2\tHGNC:4890\t3080","CFHR5\tHGNC:24668\t81494","CHAT\tHGNC:1912\t1103","CHRNA6\tHGNC:15963\t8973","CHRNB3\tHGNC:1963\t1142","CLCA1\tHGNC:2015\t1179","CLDN17\tHGNC:2038\t26285","CLEC2A\tHGNC:24191\t387836","CLEC3A\tHGNC:2052\t10143","CLEC6A\tHGNC:14556\t93978","CLRN1\tHGNC:12605\t7401","CNBD1\tHGNC:26663\t168975","CNGA2\tHGNC:2149\t1260","CNGB3\tHGNC:2153\t54714","CNPY1\tHGNC:27786\t285888","CNTNAP5\tHGNC:18748\t129684","COL20A1\tHGNC:14670\t57642","COX7B2\tHGNC:24381\t170712","CPXCR1\tHGNC:2332\t53336","CRNN\tHGNC:1230\t49860","CRX\tHGNC:2383\t1406","CRYGB\tHGNC:2409\t1419","CSH1\tHGNC:2440\t1442","CSHL1\tHGNC:2442\t1444","CSN2\tHGNC:2447\t1447","CSN3\tHGNC:2446\t1448","CST11\tHGNC:15959\t140880","CST4\tHGNC:2476\t1472","CST5\tHGNC:2477\t1473","CST8\tHGNC:2480\t10047","CST9\tHGNC:13261\t128822","CST9L\tHGNC:16233\t128821","CSTL1\tHGNC:15958\t128817","CT45A2\tHGNC:28400\t728911","CT45A4\tHGNC:33269\t","CT45A5\tHGNC:33270\t441521","CT47A11\tHGNC:27397\t255313","CTCFL\tHGNC:16234\t140690","CTRB1\tHGNC:2521\t1504","CXorf1\tHGNC:2562\t","CXorf66\tHGNC:33743\t347487","CYLC2\tHGNC:2583\t1539","CYP11B1\tHGNC:2591\t1584","CYP11B2\tHGNC:2592\t1585","CYP26C1\tHGNC:20577\t340665","CYP2A13\tHGNC:2608\t1553","CYP2C19\tHGNC:2621\t1557","CYP4A22\tHGNC:20575\t284541","CYP4F8\tHGNC:2648\t11283","CYP7A1\tHGNC:2651\t1581","DAZ1\tHGNC:2682\t1617","DAZ2\tHGNC:15964\t57055","DAZ3\tHGNC:15965\t57054","DAZ4\tHGNC:15966\t57135","DAZL\tHGNC:2685\t1618","DCAF4L2\tHGNC:26657\t138009","DCAF8L1\tHGNC:31810\t139425","DDI1\tHGNC:18961\t414301","DDX4\tHGNC:18700\t54514","DEFA5\tHGNC:2764\t1670","DEFA6\tHGNC:2765\t1671","DEFB103B\tHGNC:31702\t55894","DEFB104A\tHGNC:18115\t140596","DEFB106A\tHGNC:18088\t245909","DEFB107A\tHGNC:18086\t245910","DEFB118\tHGNC:16196\t117285","DEFB123\tHGNC:18103\t245936","DEFB126\tHGNC:15900\t81623","DEFB127\tHGNC:16206\t140850","DEFB129\tHGNC:16218\t140881","DGAT2L6\tHGNC:23250\t347516","DGKK\tHGNC:32395\t139189","DIRC1\tHGNC:15760\t116093","DMP1\tHGNC:2932\t1758","DMRT1\tHGNC:2934\t1761","DMRTB1\tHGNC:13913\t63948","DMRTC2\tHGNC:13911\t63946","MUCL3\tHGNC:21666\t135656","DPRX\tHGNC:32166\t503834","DRD3\tHGNC:3024\t1814","DRGX\tHGNC:21536\t644168","DSCR4\tHGNC:3045\t10281","DSG4\tHGNC:21307\t147409","DSPP\tHGNC:3054\t1834","DTX2\tHGNC:15973\t113878","DUSP21\tHGNC:20476\t63904","DUX4\tHGNC:50800\t100288687","DUX4L7\tHGNC:37266\t653543","DUXA\tHGNC:32179\t503835","EFCAB3\tHGNC:26379\t146779","EGR4\tHGNC:3241\t1961","ENTHD1\tHGNC:26352\t150350","ESX1\tHGNC:14865\t80712","EVX1\tHGNC:3506\t2128","F13B\tHGNC:3534\t2165","F9\tHGNC:3551\t2158","FABP2\tHGNC:3556\t2169","FAM106A\tHGNC:25682\t80039","FAM47A\tHGNC:29962\t158724","FAM47B\tHGNC:26659\t170062","FAM47C\tHGNC:25301\t442444","FAM71A\tHGNC:26541\t149647","FAM71B\tHGNC:28397\t153745","FAM71C\tHGNC:28594\t196472","SPATA31A7\tHGNC:32007\t26165","SPATA31D1\tHGNC:37283\t389763","FCRL4\tHGNC:18507\t83417","FEZF1\tHGNC:22788\t389549","FEZF2\tHGNC:13506\t55079","FFAR1\tHGNC:4498\t2864","FGF3\tHGNC:3681\t2248","FGF4\tHGNC:3682\t2249","FGF6\tHGNC:3684\t2251","FIGLA\tHGNC:24669\t344018","FLG2\tHGNC:33276\t388698","FMR1NB\tHGNC:26372\t158521","FNDC7\tHGNC:26668\t163479","FNDC9\tHGNC:33547\t408263","FOXB1\tHGNC:3799\t27023","FOXB2\tHGNC:23315\t442425","FOXD4L3\tHGNC:18523\t286380","FOXD4L4\tHGNC:23762\t349334","FOXE3\tHGNC:3808\t2301","FOXN1\tHGNC:12765\t8456","FOXR1\tHGNC:29980\t283150","FRG2\tHGNC:19136\t448831","FRMD7\tHGNC:8079\t90167","FSCB\tHGNC:20494\t84075","FUT5\tHGNC:4016\t2527","FUT9\tHGNC:4020\t10690","G6PC\tHGNC:4056\t2538","GABRA1\tHGNC:4075\t2554","GABRA6\tHGNC:4080\t2559","GAGE1\tHGNC:4098\t2543","GAGE2C\tHGNC:31958\t2574","GALNTL5\tHGNC:21725\t168391","GALR1\tHGNC:4132\t2587","GALR3\tHGNC:4134\t8484","GBP7\tHGNC:29606\t388646","GCG\tHGNC:4191\t2641","GCM2\tHGNC:4198\t9247","GDF2\tHGNC:4217\t2658","GFRA4\tHGNC:13821\t64096","GFRAL\tHGNC:32789\t389400","GH2\tHGNC:4262\t2689","GHRH\tHGNC:4265\t2691","GHSR\tHGNC:4267\t2693","GIF\tHGNC:4268\t2694","GJA9\tHGNC:19155\t81025","GJA8\tHGNC:4281\t2703","GK2\tHGNC:4291\t2712","GKN2\tHGNC:24588\t200504","GLRA1\tHGNC:4326\t2741","GLRA2\tHGNC:4327\t2742","GLT6D1\tHGNC:23671\t360203","GML\tHGNC:4375\t2765","GOLGA6L2\tHGNC:26695\t283685","GOT1L1\tHGNC:28487\t137362","GPR101\tHGNC:14963\t83550","GPR111\tHGNC:18991\t222611","GPR119\tHGNC:19060\t139760","ADGRG7\tHGNC:19241\t84873","GPR139\tHGNC:19995\t124274","GPR144\tHGNC:18651\t347088","GPR148\tHGNC:23623\t344561","GPR151\tHGNC:23624\t134391","GPR152\tHGNC:23622\t390212","GPR26\tHGNC:4481\t2849","GPR31\tHGNC:4486\t2853","GPR32\tHGNC:4487\t2854","GPR45\tHGNC:4503\t11250","GPR50\tHGNC:4506\t9248","GPR52\tHGNC:4508\t9293","GPR78\tHGNC:4528\t27201","GPRC6A\tHGNC:18510\t222545","GPX5\tHGNC:4557\t2880","GPX6\tHGNC:4558\t257202","GRK1\tHGNC:10013\t6011","GRM4\tHGNC:4596\t2914","GRM5\tHGNC:4597\t2915","GRM6\tHGNC:4598\t2916","GSC2\tHGNC:4613\t2928","GSTA5\tHGNC:19662\t221357","GSX1\tHGNC:20374\t219409","GSX2\tHGNC:24959\t170825","GUCA2A\tHGNC:4682\t2980","GUCY2F\tHGNC:4691\t2986","H1FOO\tHGNC:18463\t132243","H2BFM\tHGNC:27867\t286436","H2BFWT\tHGNC:27252\t158983","HAO1\tHGNC:4809\t54363","HCRTR2\tHGNC:4849\t3062","HDGFL1\tHGNC:21095\t154150","HHLA1\tHGNC:4904\t10086","HIST1H2AA\tHGNC:18729\t221613","HIST1H2BA\tHGNC:18730\t255626","HIST1H4G\tHGNC:4792\t8369","HMX1\tHGNC:5017\t3166","HOXB1\tHGNC:5111\t3211","HOXD12\tHGNC:5135\t3238","HRG\tHGNC:5181\t3273","HRH3\tHGNC:5184\t11255","HSFY1\tHGNC:18568\t86614","HSFY2\tHGNC:23950\t159119","HTN3\tHGNC:5284\t3347","HTR1A\tHGNC:5286\t3350","HTR2C\tHGNC:5295\t3358","HTR3C\tHGNC:24003\t170572","HTR3D\tHGNC:24004\t200909","HTR3E\tHGNC:24005\t285242","HTR5A\tHGNC:5300\t3361","HTR6\tHGNC:5301\t3362","IAPP\tHGNC:5329\t3375","IFIT1B\tHGNC:23442\t439996","IFNA10\tHGNC:5418\t3446","IFNA14\tHGNC:5420\t3448","IFNA16\tHGNC:5421\t3449","IFNA17\tHGNC:5422\t3451","IFNA2\tHGNC:5423\t3440","IFNA21\tHGNC:5424\t3452","IFNA4\tHGNC:5425\t3441","IFNA5\tHGNC:5426\t3442","IFNA6\tHGNC:5427\t3443","IFNA7\tHGNC:5428\t3444","IFNA8\tHGNC:5429\t3445","IFNB1\tHGNC:5434\t3456","IFNK\tHGNC:21714\t56832","IFNW1\tHGNC:5448\t3467","IL12B\tHGNC:5970\t3593","IL13\tHGNC:5973\t3596","IL17A\tHGNC:5981\t3605","IL17F\tHGNC:16404\t112744","IL1F10\tHGNC:15552\t84639","IL21\tHGNC:6005\t59067","IL22\tHGNC:14900\t50616","IL25\tHGNC:13765\t64806","IL26\tHGNC:17119\t55801","IFNL2\tHGNC:18364\t282616","IFNL3\tHGNC:18365\t282617","IFNL1\tHGNC:18363\t282618","IL3\tHGNC:6011\t3562","IL31\tHGNC:19372\t386653","IL36A\tHGNC:15562\t27179","IL36B\tHGNC:15564\t27177","IL36RN\tHGNC:15561\t26525","IL9\tHGNC:6029\t3578","INS\tHGNC:6081\t3630","INSL5\tHGNC:6088\t10022","INSL6\tHGNC:6089\t11172","INSM2\tHGNC:17539\t84684","INSRR\tHGNC:6093\t3645","IQCF1\tHGNC:28607\t132141","IRGC\tHGNC:28835\t56269","ISX\tHGNC:28084\t91464","ITIH6\tHGNC:28907\t347365","IZUMO2\tHGNC:28518\t126123","KCNA10\tHGNC:6219\t3744","KCNB2\tHGNC:6232\t9312","KCNG4\tHGNC:19697\t93107","KCNK10\tHGNC:6273\t54207","KCNK16\tHGNC:14464\t83795","KCNK18\tHGNC:19439\t338567","KCNV1\tHGNC:18861\t27012","KHDC3L\tHGNC:33699\t154288","KIF2B\tHGNC:29443\t84643","KIR2DL1\tHGNC:6329\t3802","KIR3DL3\tHGNC:16312\t115653","KLK12\tHGNC:6360\t43849","KLK9\tHGNC:6370\t284366","KRT2\tHGNC:6439\t3849","KRT25\tHGNC:30839\t147183","KRT26\tHGNC:30840\t353288","KRT28\tHGNC:30842\t162605","KRT33A\tHGNC:6450\t3883","KRT35\tHGNC:6453\t3886","KRT36\tHGNC:6454\t8689","KRT37\tHGNC:6455\t8688","KRT38\tHGNC:6456\t8687","KRT40\tHGNC:26707\t125115","KRT71\tHGNC:28927\t112802","KRT73\tHGNC:28928\t319101","KRT74\tHGNC:28929\t121391","KRT75\tHGNC:24431\t9119","KRT76\tHGNC:24430\t51350","KRT77\tHGNC:20411\t374454","KRT78\tHGNC:28926\t196374","KRT82\tHGNC:6459\t3888","KRT84\tHGNC:6461\t3890","KRT85\tHGNC:6462\t3891","KRT86\tHGNC:6463\t3892","KRT9\tHGNC:6447\t3857","KRTAP1-1\tHGNC:16772\t81851","KRTAP10-1\tHGNC:22966\t386677","KRTAP10-10\tHGNC:22972\t353333","KRTAP10-11\tHGNC:20528\t386678","KRTAP10-12\tHGNC:20533\t386685","KRTAP10-2\tHGNC:22967\t386679","KRTAP10-4\tHGNC:20521\t386672","KRTAP10-5\tHGNC:22969\t386680","KRTAP10-6\tHGNC:20523\t386674","KRTAP10-7\tHGNC:22970\t386675","KRTAP10-8\tHGNC:20525\t386681","KRTAP10-9\tHGNC:22971\t386676","KRTAP11-1\tHGNC:18922\t337880","KRTAP13-1\tHGNC:18924\t140258","KRTAP13-2\tHGNC:18923\t337959","KRTAP13-3\tHGNC:18925\t337960","KRTAP13-4\tHGNC:18926\t284827","KRTAP15-1\tHGNC:18927\t254950","KRTAP17-1\tHGNC:18917\t83902","KRTAP19-3\tHGNC:18938\t337970","KRTAP23-1\tHGNC:18928\t337963","KRTAP26-1\tHGNC:33760\t388818","KRTAP3-2\tHGNC:16779\t83897","KRTAP4-11\tHGNC:18911\t653240","KRTAP4-12\tHGNC:16776\t83755","KRTAP4-2\tHGNC:18900\t85291","KRTAP4-4\tHGNC:16928\t84616","KRTAP4-7\tHGNC:18898\t100132476","KRTAP5-2\tHGNC:23597\t440021","KRTAP9-2\tHGNC:16926\t83899","KRTAP9-3\tHGNC:16927\t83900","KRTAP9-4\tHGNC:18902\t85280","LALBA\tHGNC:6480\t3906","LBX1\tHGNC:16960\t10660","LCN9\tHGNC:17442\t392399","LCT\tHGNC:6530\t3938","LGALS13\tHGNC:15449\t29124","LGALS14\tHGNC:30054\t56891","LHFPL5\tHGNC:21253\t222662","LHX3\tHGNC:6595\t8022","LHX5\tHGNC:14216\t64211","LIM2\tHGNC:6610\t3982","LIN28A\tHGNC:15986\t79727","LIPM\tHGNC:23455\t340654","LOR\tHGNC:6663\t4014","LRIT1\tHGNC:23404\t26103","LRIT2\tHGNC:23443\t340745","LRRC10\tHGNC:20264\t376132","LUZP4\tHGNC:24971\t51213","LYZL1\tHGNC:30502\t84569","LYZL2\tHGNC:29613\t119180","LYZL6\tHGNC:29614\t57151","MAGEA10\tHGNC:6797\t4109","MAGEA11\tHGNC:6798\t4110","MAGEB1\tHGNC:6808\t4112","MAGEB10\tHGNC:25377\t139422","MAGEB18\tHGNC:28515\t286514","MAGEB3\tHGNC:6810\t4114","MAGEB4\tHGNC:6811\t4115","MAGEC3\tHGNC:23798\t139081","MAS1\tHGNC:6899\t4142","MAS1L\tHGNC:13961\t116511","MBD3L1\tHGNC:15774\t85509","MBD3L2\tHGNC:18532\t125997","MBL2\tHGNC:6922\t4153","MC2R\tHGNC:6930\t4158","MC3R\tHGNC:6931\t4159","MC5R\tHGNC:6933\t4161","MEP1A\tHGNC:7015\t4224","MEP1B\tHGNC:7020\t4225","MEPE\tHGNC:13361\t56955","MFRP\tHGNC:18121\t83552","MMD2\tHGNC:30133\t221938","MMP20\tHGNC:7167\t9313","MMP21\tHGNC:7170\t8511","MMP26\tHGNC:14249\t56547","MMP27\tHGNC:14250\t64066","MOGAT3\tHGNC:23249\t346606","MORC1\tHGNC:7198\t27136","MRGPRD\tHGNC:29626\t116512","MRGPRX1\tHGNC:17962\t259249","MRGPRX2\tHGNC:17983\t117194","MRGPRX4\tHGNC:17617\t117196","MS4A10\tHGNC:13368\t341116","MS4A13\tHGNC:16674\t503497","MS4A5\tHGNC:13374\t64232","MSGN1\tHGNC:14907\t343930","MT1B\tHGNC:7394\t4490","MTNR1B\tHGNC:7464\t4544","MUC17\tHGNC:16800\t140453","MUC7\tHGNC:7518\t4589","MYBPC3\tHGNC:7551\t4607","MYF5\tHGNC:7565\t4617","NANOGNB\tHGNC:24958\t360030","NANOS2\tHGNC:23292\t339345","NCR2\tHGNC:6732\t9436","NDST4\tHGNC:20779\t64579","NEUROD2\tHGNC:7763\t4761","NEUROD4\tHGNC:13802\t58158","NEUROD6\tHGNC:13804\t63974","NEUROG1\tHGNC:7764\t4762","NKX2-1\tHGNC:11825\t7080","NKX2-2\tHGNC:7835\t4821","NLRP4\tHGNC:22943\t147945","NLRP5\tHGNC:21269\t126206","NLRP8\tHGNC:22940\t126205","NLRP9\tHGNC:22941\t338321","NMS\tHGNC:32203\t129521","NOBOX\tHGNC:22448\t135935","NOTO\tHGNC:31839\t344022","NOX3\tHGNC:7890\t50508","NPFFR1\tHGNC:17425\t64106","NPHS2\tHGNC:13394\t7827","NPSR1\tHGNC:23631\t387129","NPVF\tHGNC:13782\t64111","NR2E1\tHGNC:7973\t7101","NYX\tHGNC:8082\t60506","OC90\tHGNC:8100\t729330","OLIG2\tHGNC:9398\t10215","OLIG3\tHGNC:18003\t167826","OPALIN\tHGNC:20707\t93377","OPN1LW\tHGNC:9936\t5956","OPN5\tHGNC:19992\t221391","OR10A2\tHGNC:8161\t341276","OR10A4\tHGNC:15130\t283297","OR10A5\tHGNC:15131\t144124","OR10H1\tHGNC:8172\t26539","OR10H2\tHGNC:8173\t26538","OR10H3\tHGNC:8174\t26532","OR10J1\tHGNC:8175\t26476","OR10R2\tHGNC:14820\t343406","OR10S1\tHGNC:14807\t219873","OR10X1\tHGNC:14995\t128367","OR10Z1\tHGNC:14996\t128368","OR11A1\tHGNC:8176\t26531","OR12D2\tHGNC:8178\t26529","OR12D3\tHGNC:13963\t81797","OR13C3\tHGNC:14704\t138803","OR13D1\tHGNC:14695\t286365","OR14A16\tHGNC:15022\t284532","OR1A1\tHGNC:8179\t8383","OR1A2\tHGNC:8180\t26189","OR1B1\tHGNC:8181\t347169","OR1D2\tHGNC:8183\t4991","OR1E1\tHGNC:8189\t8387","OR1E2\tHGNC:8190\t8388","OR1G1\tHGNC:8204\t8390","OR1L6\tHGNC:8218\t392390","OR1N2\tHGNC:15111\t138882","OR1S1\tHGNC:8227\t219959","OR1S2\tHGNC:15141\t219958","OR2AK2\tHGNC:19569\t391191","OR2AT4\tHGNC:19620\t341152","OR2C1\tHGNC:8242\t4993","OR2C3\tHGNC:15005\t81472","OR2D2\tHGNC:8244\t120776","OR2D3\tHGNC:15146\t120775","OR2F1\tHGNC:8246\t26211","OR2G2\tHGNC:15007\t81470","OR2G3\tHGNC:15008\t81469","OR2H1\tHGNC:8252\t26716","OR2J2\tHGNC:8260\t26707","OR2L3\tHGNC:15009\t391192","OR2T1\tHGNC:8277\t26696","OR2T10\tHGNC:19573\t127069","OR2T12\tHGNC:19592\t127064","OR2T2\tHGNC:14725\t401992","OR2T27\tHGNC:31252\t403239","OR2T33\tHGNC:31255\t391195","OR2T4\tHGNC:15016\t127074","OR2T5\tHGNC:15017\t401993","OR2W1\tHGNC:8281\t26692","OR3A1\tHGNC:8282\t4994","OR3A2\tHGNC:8283\t4995","OR3A3\tHGNC:8284\t8392","OR4C11\tHGNC:15167\t219429","OR4C3\tHGNC:14697\t256144","OR4D1\tHGNC:8293\t26689","OR4D10\tHGNC:15173\t390197","OR4D11\tHGNC:15174\t219986","OR4D9\tHGNC:15178\t390199","OR4K17\tHGNC:15355\t390436","OR51B6\tHGNC:19600\t390058","OR51D1\tHGNC:15193\t390038","OR51F2\tHGNC:15197\t119694","OR51T1\tHGNC:15205\t401665","OR51V1\tHGNC:19597\t283111","OR52A1\tHGNC:8318\t23538","OR52A5\tHGNC:19580\t390054","OR52B2\tHGNC:15207\t255725","OR52B6\tHGNC:15211\t340980","OR52E8\tHGNC:15217\t390079","OR52I2\tHGNC:15221\t143502","OR52K2\tHGNC:15223\t119774","OR52L1\tHGNC:14785\t338751","OR52M1\tHGNC:15225\t119772","OR52R1\tHGNC:15235\t119695","OR52W1\tHGNC:15239\t120787","OR56A1\tHGNC:14781\t120796","OR56A4\tHGNC:14791\t120793","OR56B1\tHGNC:15245\t387748","OR5AU1\tHGNC:15362\t390445","OR5C1\tHGNC:8331\t392391","OR5I1\tHGNC:8347\t10798","OR5M1\tHGNC:8352\t390168","OR5M10\tHGNC:15290\t390167","OR5P2\tHGNC:14783\t120065","OR5P3\tHGNC:14784\t120066","OR5R1\tHGNC:14841\t219479","OR5T1\tHGNC:14821\t390155","OR5T2\tHGNC:15296\t219464","OR5T3\tHGNC:15297\t390154","OR5V1\tHGNC:13972\t81696","OR5W2\tHGNC:15299\t390148","OR6A2\tHGNC:15301\t8590","OR6K6\tHGNC:15033\t128371","OR6S1\tHGNC:15363\t341799","OR6V1\tHGNC:15090\t346517","OR7A17\tHGNC:8363\t26333","OR7C2\tHGNC:8374\t26658","OR7D4\tHGNC:8380\t125958","OR7G2\tHGNC:8466\t390882","OR8A1\tHGNC:8469\t390275","OR8B8\tHGNC:8477\t26493","OR8G5\tHGNC:19622\t219865","OR8U1\tHGNC:19611\t219417","OR9Q2\tHGNC:15328\t219957","OTOP1\tHGNC:19656\t133060","OTOP3\tHGNC:19658\t347741","OTOR\tHGNC:8517\t56914","OTP\tHGNC:8518\t23440","OTUD6A\tHGNC:32312\t139562","OTX2\tHGNC:8522\t5015","PAGE3\tHGNC:4110\t139793","PANX3\tHGNC:20573\t116337","PASD1\tHGNC:20686\t139135","PAX1\tHGNC:8615\t5075","PAX4\tHGNC:8618\t5078","PBOV1\tHGNC:21079\t59351","PDCL2\tHGNC:29524\t132954","PDE6H\tHGNC:8790\t5149","PDILT\tHGNC:27338\t204474","PDX1\tHGNC:6107\t3651","PDYN\tHGNC:8820\t5173","PGK2\tHGNC:8898\t5232","PGLYRP2\tHGNC:30013\t114770","PGLYRP3\tHGNC:30014\t114771","PIWIL1\tHGNC:9007\t9271","PIWIL3\tHGNC:18443\t440822","PKD1L3\tHGNC:21716\t342372","PLA2G2E\tHGNC:13414\t30814","PLA2G2F\tHGNC:30040\t64600","PLA2G4E\tHGNC:24791\t123745","OOSP2\tHGNC:26699\t219990","PNLIP\tHGNC:9155\t5406","PNLIPRP1\tHGNC:9156\t5407","PNLIPRP2\tHGNC:9157\t5408","PNPLA5\tHGNC:24888\t150379","POM121L12\tHGNC:25369\t285877","POTEA\tHGNC:33893\t340441","POTED\tHGNC:23822\t317754","POTEG\tHGNC:33896\t404785","POTEH\tHGNC:133\t23784","POU3F4\tHGNC:9217\t5456","POU4F2\tHGNC:9219\t5458","POU4F3\tHGNC:9220\t5459","POU5F2\tHGNC:26367\t134187","PPP3R2\tHGNC:9318\t5535","PRAMEF1\tHGNC:28840\t65121","PRAMEF19\tHGNC:24908\t645414","PRAMEF2\tHGNC:28841\t65122","PRAMEF3\tHGNC:14087\t","PRAMEF4\tHGNC:31971\t400735","PRAMEF7\tHGNC:28415\t441871","PRB1\tHGNC:9337\t5542","PRB4\tHGNC:9340\t5545","PRDM13\tHGNC:13998\t59336","PRDM14\tHGNC:14001\t63978","PRDM7\tHGNC:9351\t11105","PRDM9\tHGNC:13994\t56979","PRG3\tHGNC:9363\t10394","PRLH\tHGNC:17945\t51052","PRLHR\tHGNC:4464\t2834","PROP1\tHGNC:9455\t5626","PRSS33\tHGNC:30405\t260429","PRSS37\tHGNC:29211\t136242","PRSS38\tHGNC:29625\t339501","PRSS41\tHGNC:30715\t360226","PRSS55\tHGNC:30824\t203074","PRSS58\tHGNC:39125\t136541","PRY2\tHGNC:21504\t442862","PSKH2\tHGNC:18997\t85481","PTF1A\tHGNC:23734\t256297","RAX\tHGNC:18662\t30062","RAX2\tHGNC:18286\t84839","RBM46\tHGNC:28401\t166863","RBMXL2\tHGNC:17886\t27288","RBMY1A1\tHGNC:9912\t5940","RBMY1B\tHGNC:23914\t378948","RBMY1D\tHGNC:23915\t378949","RBMY1E\tHGNC:23916\t378950","RBMY1F\tHGNC:23974\t159163","RBMY1J\tHGNC:23917\t378951","RBP3\tHGNC:9921\t5949","RBPJL\tHGNC:13761\t11317","RD3\tHGNC:19689\t343035","RDH8\tHGNC:14423\t50700","REG3A\tHGNC:8601\t5068","RESP18\tHGNC:33762\t389075","RETNLB\tHGNC:20388\t84666","REXO1L1\tHGNC:24660\t254958","RFPL3\tHGNC:9980\t10738","RFPL4B\tHGNC:33264\t442247","RFX6\tHGNC:21478\t222546","RHO\tHGNC:10012\t6010","RHOXF2\tHGNC:30011\t84528","RNASE10\tHGNC:19275\t338879","RNASE11\tHGNC:19269\t122651","RNASE12\tHGNC:24211\t493901","RNASE13\tHGNC:25285\t440163","RNASE8\tHGNC:19277\t122665","RNASE9\tHGNC:20673\t390443","RND2\tHGNC:18315\t8153","RNF113B\tHGNC:17267\t140432","RNF17\tHGNC:10060\t56163","RP1\tHGNC:10263\t6101","RP1L1\tHGNC:15946\t94137","RPE65\tHGNC:10294\t6121","RPTN\tHGNC:26809\t126638","RS1\tHGNC:10457\t6247","RTP1\tHGNC:28580\t132112","RTP2\tHGNC:32486\t344892","RXFP2\tHGNC:17318\t122042","RXFP3\tHGNC:24883\t51289","S100A7A\tHGNC:21657\t338324","S100G\tHGNC:1436\t795","SAGE1\tHGNC:30369\t55511","SAMD7\tHGNC:25394\t344658","SCGB1D1\tHGNC:18395\t10648","SCN10A\tHGNC:10582\t6336","SCRT2\tHGNC:15952\t85508","SDR9C7\tHGNC:29958\t121214","SEC14L3\tHGNC:18655\t266629","SEMG2\tHGNC:10743\t6407","SEPT14\tHGNC:33280\t346288","SERPINA12\tHGNC:18359\t145264","SERPINA7\tHGNC:11583\t6906","SERPINA9\tHGNC:15995\t327657","SERPINB12\tHGNC:14220\t89777","SHCBP1L\tHGNC:16788\t81626","SHOX\tHGNC:10853\t6473","SI\tHGNC:10856\t6476","SIGLECL1\tHGNC:26856\t284369","SIX6\tHGNC:10892\t4990","SLC10A2\tHGNC:10906\t6555","SLC13A1\tHGNC:10916\t6561","SLC34A1\tHGNC:11019\t6569","SLC17A6\tHGNC:16703\t57084","SLC18A3\tHGNC:10936\t6572","SLC22A12\tHGNC:17989\t116085","SLC22A13\tHGNC:8494\t9390","SLC22A24\tHGNC:28542\t283238","SLC22A25\tHGNC:32935\t387601","SLC22A6\tHGNC:10970\t9356","SLC22A8\tHGNC:10972\t9376","SLC22A9\tHGNC:16261\t114571","SLC25A2\tHGNC:22921\t83884","SLC25A31\tHGNC:25319\t83447","SLC2A2\tHGNC:11006\t6514","SLC2A7\tHGNC:13445\t155184","SLC32A1\tHGNC:11018\t140679","SLC34A1\tHGNC:11019\t6569","SLC36A3\tHGNC:19659\t285641","SLC39A12\tHGNC:20860\t221074","SLC6A18\tHGNC:26441\t348932","SLC6A5\tHGNC:11051\t9152","SLC6A7\tHGNC:11054\t6534","SLC7A13\tHGNC:23092\t157724","SLCO1B1\tHGNC:10959\t10599","SLCO6A1\tHGNC:23613\t133482","SLITRK1\tHGNC:20297\t114798","SOHLH1\tHGNC:27845\t402381","SOX1\tHGNC:11189\t6656","SOX14\tHGNC:11193\t8403","SP8\tHGNC:19196\t221833","SPACA1\tHGNC:14967\t81833","SPACA5\tHGNC:31353\t389852","SPACA7\tHGNC:29575\t122258","SPATA16\tHGNC:29935\t83893","SPATA21\tHGNC:28026\t374955","SPEM1\tHGNC:32429\t374768","SPHAR\tHGNC:16957\t10638","SPINK14\tHGNC:33825\t408187","SPO11\tHGNC:11250\t23626","SPPL2C\tHGNC:28902\t162540","SPRR4\tHGNC:23173\t163778","SSTR4\tHGNC:11333\t6754","SSX3\tHGNC:11337\t10214","SSX5\tHGNC:11339\t6758","SSX7\tHGNC:19653\t280658","SSX8\tHGNC:19654\t280659","SSX9\tHGNC:19655\t280660","STATH\tHGNC:11369\t6779","SULT6B1\tHGNC:33433\t391365","SUN5\tHGNC:16252\t140732","TBXT\tHGNC:11515\t6862","TAAR1\tHGNC:17734\t134864","TAAR2\tHGNC:4514\t9287","TAAR5\tHGNC:30236\t9038","TAAR6\tHGNC:20978\t319100","TAAR8\tHGNC:14964\t83551","TAAR9\tHGNC:20977\t134860","TAS1R2\tHGNC:14905\t80834","TAS2R1\tHGNC:14909\t50834","TAS2R13\tHGNC:14919\t50838","TAS2R16\tHGNC:14921\t50833","TAS2R39\tHGNC:18886\t259285","TAS2R40\tHGNC:18885\t259286","TAS2R41\tHGNC:18883\t259287","TAS2R42\tHGNC:18888\t353164","TAS2R43\tHGNC:18875\t259289","TAS2R46\tHGNC:18877\t259292","TAS2R50\tHGNC:18882\t259296","TAS2R60\tHGNC:20639\t338398","TAS2R7\tHGNC:14913\t50837","TAS2R8\tHGNC:14915\t50836","TAS2R9\tHGNC:14917\t50835","TBC1D21\tHGNC:28536\t161514","TBC1D29\tHGNC:24509\t26083","TBL1Y\tHGNC:18502\t90665","TBPL2\tHGNC:19841\t387332","TBR1\tHGNC:11590\t10716","TBX10\tHGNC:11593\t347853","ELOA2\tHGNC:30771\t51224","ELOA3\tHGNC:24617\t162699","TCHHL1\tHGNC:31796\t126637","TCP10L2\tHGNC:21254\t401285","TEDDM1\tHGNC:30233\t127670","TEX101\tHGNC:30722\t83639","TEX13A\tHGNC:11735\t56157","TEX28\tHGNC:2563\t1527","SPATA32\tHGNC:26349\t124783","TFAP2D\tHGNC:15581\t83741","TFDP3\tHGNC:24603\t51270","TGIF2LX\tHGNC:18570\t90316","TGIF2LY\tHGNC:18569\t90655","TGM6\tHGNC:16255\t343641","TKTL2\tHGNC:25313\t84076","TLX1\tHGNC:5056\t3195","TMEM132D\tHGNC:29411\t121256","TMEM174\tHGNC:28187\t134288","TMEM207\tHGNC:33705\t131920","TMEM225\tHGNC:32390\t338661","TMIGD1\tHGNC:32431\t388364","TMPRSS11A\tHGNC:27954\t339967","TMPRSS11B\tHGNC:25398\t132724","TMPRSS11F\tHGNC:29994\t389208","TMPRSS12\tHGNC:28779\t283471","TMPRSS15\tHGNC:9490\t5651","TNR\tHGNC:11953\t7143","TPD52L3\tHGNC:23382\t89882","TPH2\tHGNC:20692\t121278","TPRX1\tHGNC:32174\t284355","TPTE\tHGNC:12023\t7179","TREML4\tHGNC:30807\t285852","TRHR\tHGNC:12299\t7201","TRIM40\tHGNC:18736\t135644","TRIM42\tHGNC:19014\t287015","TRIM43\tHGNC:19015\t129868","TRIM48\tHGNC:19021\t79097","TRIM49\tHGNC:13431\t57093","TRIM51\tHGNC:19023\t84767","TRIM60\tHGNC:21162\t166655","TRIM67\tHGNC:31859\t440730","TRIML1\tHGNC:26698\t339976","TRPC5\tHGNC:12337\t7224","TRPC7\tHGNC:20754\t57113","TRPM1\tHGNC:7146\t4308","TRPV5\tHGNC:3145\t56302","TSGA13\tHGNC:12369\t114960","TSHB\tHGNC:12372\t7252","TSPAN16\tHGNC:30725\t26526","TSPO2\tHGNC:21256\t222642","TSPY1\tHGNC:12381\t7258","TSPYL6\tHGNC:14521\t388951","TSSK1B\tHGNC:14968\t83942","TSSK2\tHGNC:11401\t23617","TXNDC8\tHGNC:31454\t255220","TYR\tHGNC:12442\t7299","UBQLN3\tHGNC:12510\t50613","UMOD\tHGNC:12559\t7369","UROC1\tHGNC:26444\t131669","USP17L2\tHGNC:34434\t377630","USP26\tHGNC:13485\t83844","USP29\tHGNC:18563\t57663","UTS2R\tHGNC:4468\t2837","VAX1\tHGNC:12660\t11023","VCX3A\tHGNC:18159\t51481","VHLL\tHGNC:30666\t391104","VN1R2\tHGNC:19872\t317701","VN1R4\tHGNC:19871\t317703","VN1R5\tHGNC:19870\t317705","VPREB1\tHGNC:12709\t7441","VRTN\tHGNC:20223\t55237","VSX2\tHGNC:1975\t338917","WFDC10A\tHGNC:16139\t140832","WFDC11\tHGNC:20478\t259239","WFDC9\tHGNC:20380\t259240","XAGE2\tHGNC:4112\t9502","XAGE5\tHGNC:30930\t170627","XKR7\tHGNC:23062\t343702","ZAN\tHGNC:12857\t7455","ZCCHC13\tHGNC:31749\t389874","RTL4\tHGNC:25214\t340595","ZG16\tHGNC:30961\t653808","ZIC3\tHGNC:12874\t7547","ZIM3\tHGNC:16366\t114026","CBLL2\tHGNC:26371\t158506","ZNF648\tHGNC:18190\t127665","ZNF679\tHGNC:28650\t168417","ZNF804B\tHGNC:21958\t219578","ZNRF4\tHGNC:17726\t148066","ZP2\tHGNC:13188\t7783","ZP4\tHGNC:15770\t57829","ZSWIM2\tHGNC:30990\t151112"],"stylingDirectives":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/hart-lab/bagel/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null,"repoAlertsPath":"/hart-lab/bagel/security/dependabot","repoSecurityAndAnalysisPath":"/hart-lab/bagel/settings/security_analysis","repoOwnerIsOrg":true,"currentUserCanAdminRepo":false},"displayName":"NEGv1.txt","displayUrl":"https://github.com/hart-lab/bagel/blob/master/NEGv1.txt?raw=true","headerInfo":{"blobSize":"21.2 KB","deleteInfo":{"deletePath":null,"deleteTooltip":"You must be signed in to make or propose changes"},"editInfo":{"editTooltip":"You must be signed in to make or propose changes"},"ghDesktopPath":"https://desktop.github.com","gitLfsPath":null,"onBranch":true,"shortPath":"9640181","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fhart-lab%2Fbagel%2Fblob%2Fmaster%2FNEGv1.txt","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"929","truncatedSloc":"928"},"mode":"file"},"image":false,"isCodeownersFile":null,"isValidLegacyIssueTemplate":false,"issueTemplateHelpUrl":"https://docs.github.com/articles/about-issue-and-pull-request-templates","issueTemplate":null,"discussionTemplate":null,"language":"Text","large":false,"loggedIn":false,"newDiscussionPath":"/hart-lab/bagel/discussions/new","newIssuePath":"/hart-lab/bagel/issues/new","planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/hart-lab/bagel/blob/master/NEGv1.txt","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","dismissStackNoticePath":"/settings/dismiss-notice/publish_stack_from_file","releasePath":"/hart-lab/bagel/releases/new?marketplace=true","showPublishActionBanner":false,"showPublishStackBanner":false},"renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"repoOwner":"hart-lab","repoName":"bagel","showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","showDependabotConfigurationBanner":false,"actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timedOut":false,"notAnalyzed":true,"symbols":[]}},"copilotUserAccess":null,"csrf_tokens":{"/hart-lab/bagel/branches":{"post":"pYLWEpeG9RoxdtoYXQJ5y8-trx6KAJSl7LLqOLZ-2cESTKQmFBTzFls26c8sdQ8miAFjbcsFlrlb9JOP0frNWg"}}},"title":"bagel/NEGv1.txt at master · hart-lab/bagel","locale":"en"} \ No newline at end of file diff --git a/assets/schema_input.json b/assets/schema_input.json index 21c8c38a..dfc3dc1c 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/nf-core/crisprseq/master/assets/schema_input.json", "title": "nf-core/crisprseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", @@ -30,8 +30,6 @@ "condition": { "type": "string", "pattern": "^\\S+$", - "enum": ["control", "treatment"], - "errorMessage": "Condition name must be one of 'control' or 'treatment'", "meta": ["condition"] }, "reference": { diff --git a/modules/local/bagel2_bf.nf b/modules/local/bagel2_bf.nf new file mode 100644 index 00000000..5299915a --- /dev/null +++ b/modules/local/bagel2_bf.nf @@ -0,0 +1,33 @@ +process BAGEL2_BF { + tag "$meta.treatment" + label 'process_single' + + + conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0': + 'biocontainers/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0' }" + + + input: + tuple val(meta), path(foldchange) + path(reference_essentials) + path(reference_nonessentials) + + output: + tuple val(meta), path("*.pr"), emit: pr + //path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.treatment}" + + """ + BAGEL.py bf -i $foldchange -o ${meta.treatment} $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} + + """ + +} diff --git a/modules/local/bagel2_fc.nf b/modules/local/bagel2_fc.nf index 9fe4ccc9..bc0c4f12 100644 --- a/modules/local/bagel2_fc.nf +++ b/modules/local/bagel2_fc.nf @@ -1,40 +1,13 @@ -// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) -// https://github.com/nf-core/modules/tree/master/modules/nf-core/ -// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: -// https://nf-co.re/join -// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. -// All other parameters MUST be provided using the "task.ext" directive, see here: -// https://www.nextflow.io/docs/latest/process.html#ext -// where "task.ext" is a string. -// Any parameters that need to be evaluated in the context of a particular sample -// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. -// TODO nf-core: Software that can be piped together SHOULD be added to separate module files -// unless there is a run-time, storage advantage in implementing in this way -// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: -// bwa mem | samtools view -B -T ref.fasta -// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty -// list (`[]`) instead of a file can be used to work around this issue. - process BAGEL2_FC { tag "${meta.treatment}_${meta.reference}" label 'process_single' - // TODO nf-core: List required Conda package(s). - // Software MUST be pinned to channel (i.e. "bioconda"), version (i.e. "1.10"). - // For Conda, the build (i.e. "h9402c20_2") must be EXCLUDED to support installation on different operating systems. - // TODO nf-core: See section in main README for further information regarding finding and adding container addresses to the section below. conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? 'https://depot.galaxyproject.org/singularity/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0': 'biocontainers/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0' }" input: - // TODO nf-core: Where applicable all sample-specific information e.g. "id", "single_end", "read_group" - // MUST be provided as an input via a Groovy Map called "meta". - // This information may not be required in some instances e.g. indexing reference genome files: - // https://github.com/nf-core/modules/blob/master/modules/nf-core/bwa/index/main.nf - // TODO nf-core: Where applicable please provide/convert compressed files as input/output - // e.g. "*.fastq.gz" and NOT "*.fastq", "*.bam" and NOT "*.sam" etc. tuple val(meta), path(count_table) output: diff --git a/nextflow.config b/nextflow.config index 4b01987c..bf675e5f 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,6 +21,8 @@ params { count_table = null min_reads = 30 min_targeted_genes = 3 + bagel_reference_essentials = 'https://raw.githubusercontent.com/hart-lab/bagel/master/CEGv2.txt' + bagel_reference_nonessentials = 'https://raw.githubusercontent.com/hart-lab/bagel/master/NEGv1.txt' // Pipeline steps overrepresented = false diff --git a/nextflow_schema.json b/nextflow_schema.json index c75c5a2d..c5774253 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -186,12 +186,22 @@ "min_reads": { "type": "number", "description": "a filter threshold value for sgRNAs, based on their average counts in the control sample", - "default": 30 + "default": 30.0 }, "min_targeted_genes": { "type": "number", "description": "Minimal number of different genes targeted by sgRNAs in a biased segment in order for the corresponding counts to be corrected for CRISPRcleanR", - "default": 3 + "default": 3.0 + }, + "bagel_reference_essentials": { + "type": "string", + "description": "Core essential gene set for BAGEL2", + "default": "https://github.com/hart-lab/bagel/blob/master/CEGv2.txt" + }, + "bagel_reference_nonessentials": { + "type": "string", + "description": "Non essential gene set for BAGEL2", + "default": "https://github.com/hart-lab/bagel/blob/master/NEGv1.txt" } } }, @@ -450,21 +460,12 @@ { "$ref": "#/definitions/umi_parameters" }, - { - "$ref": "#/definitions/targeted_pipeline_steps" - }, - { - "$ref": "#/definitions/umi_parameters" - }, { "$ref": "#/definitions/targeted_parameters" }, { "$ref": "#/definitions/vsearch_parameters" }, - { - "$ref": "#/definitions/vsearch_parameters" - }, { "$ref": "#/definitions/screening_parameters" }, diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index e0e9e478..129c1229 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -67,6 +67,7 @@ include { MAGECK_TEST } from '../modules/nf-core/mageck/test/mai include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/normalize/main' include { BAGEL2_FC } from '../modules/local/bagel2_fc' +include { BAGEL2_BF } from '../modules/local/bagel2_bf' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -85,17 +86,19 @@ workflow CRISPRSEQ_SCREENING { // // Create input channel from input file provided through params.input // + single_end = true Channel.fromSamplesheet("input") .map{ meta, fastq_1, fastq_2, x, y, z -> // x (reference), y (protospacer), and z (template) are part of the targeted workflows and we don't need them if (!fastq_2) { + single_end = true return [ meta, [ fastq_1 ] ] } else { + single_end = false return [ meta, [ fastq_1, fastq_2 ] ] } } .set { ch_input } - // // MODULE: Run FastQC // @@ -104,6 +107,7 @@ workflow CRISPRSEQ_SCREENING { ) ch_versions = ch_versions.mix(FASTQC.out.versions.first()) + if(single_end==true) { ch_input .map { meta, fastq -> [meta.condition, fastq] @@ -116,6 +120,10 @@ workflow CRISPRSEQ_SCREENING { } .set { joined } + joined.dump(tag: "input joined") + } + + // // MODULE: Run mageck count // @@ -167,12 +175,30 @@ workflow CRISPRSEQ_SCREENING { .set { ch_bagel } counts = ch_bagel.combine(ch_counts) + if(!params.bagel_reference_essentials) { + ch_bagel_reference_essentials = Channel.fromPath("${projectDir}/assets/CEGv2.txt", checkIfExists: true) + } + + ch_bagel_reference_essentials.dump(tag: "input joined") + + if(!params.bagel_reference_nonessentials) { + ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt", checkIfExists: true) + } + + BAGEL2_FC ( - counts + counts, + ch_bagel_reference_essentials, + ch_bagel_reference_nonessentials ) } + //BAGEL2_BF ( + // BAGEL2_FC.out.foldchange + //) + + if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) ch_mle.map { From 8a888035d1b9197ae4b8ce0e1880c7ac25e670ea Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 28 Jul 2023 16:01:57 +0200 Subject: [PATCH 05/39] Adding bagel2_bf --- assets/NEGv1.txt | 930 ++++++++++++++++++++++++++++++- modules/local/bagel2_bf.nf | 2 +- modules/local/bagel2_fc.nf | 2 +- workflows/crisprseq_screening.nf | 29 +- 4 files changed, 950 insertions(+), 13 deletions(-) diff --git a/assets/NEGv1.txt b/assets/NEGv1.txt index 32701540..96401816 100644 --- a/assets/NEGv1.txt +++ b/assets/NEGv1.txt @@ -1 +1,929 @@ -{"payload":{"allShortcutsEnabled":false,"fileTree":{"":{"items":[{"name":"archive","path":"archive","contentType":"directory"},{"name":"data","path":"data","contentType":"directory"},{"name":"pipeline-script-example","path":"pipeline-script-example","contentType":"directory"},{"name":"BAGEL-v2-tutorial.html","path":"BAGEL-v2-tutorial.html","contentType":"file"},{"name":"BAGEL.py","path":"BAGEL.py","contentType":"file"},{"name":"CEG_mouse.txt","path":"CEG_mouse.txt","contentType":"file"},{"name":"CEGv2.txt","path":"CEGv2.txt","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"NEG_mouse.txt","path":"NEG_mouse.txt","contentType":"file"},{"name":"NEGv1.txt","path":"NEGv1.txt","contentType":"file"},{"name":"Network_STRING_v10.txt","path":"Network_STRING_v10.txt","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"pan-species-control-essentials-50genes.txt","path":"pan-species-control-essentials-50genes.txt","contentType":"file"},{"name":"pan-species-control-nonessentials-50genes.txt","path":"pan-species-control-nonessentials-50genes.txt","contentType":"file"},{"name":"precalc_library_alignment_info.py","path":"precalc_library_alignment_info.py","contentType":"file"},{"name":"reads_hap1.txt","path":"reads_hap1.txt","contentType":"file"}],"totalCount":16}},"fileTreeProcessingTime":2.2530900000000003,"foldersToFetch":[],"reducedMotionEnabled":null,"repo":{"id":93685947,"defaultBranch":"master","name":"bagel","ownerLogin":"hart-lab","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2017-06-07T22:46:04.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/29264780?v=4","public":true,"private":false,"isOrgOwned":true},"refInfo":{"name":"master","listCacheKey":"v0:1609982357.0","canEdit":false,"refType":"branch","currentOid":"53388adbb4fb0931e5c9dda135502be19e4555f0"},"path":"NEGv1.txt","currentUser":null,"blob":{"rawLines":["GENE\tHGNC_ID\tENTREZ_ID","ABCG8\tHGNC:13887\t64241","ACCSL\tHGNC:34391\t390110","ACTL7A\tHGNC:161\t10881","ACTL7B\tHGNC:162\t10880","ACTL9\tHGNC:28494\t284382","ACTRT1\tHGNC:24027\t139741","ADAD1\tHGNC:30713\t132612","ADAM18\tHGNC:196\t8749","ADAM2\tHGNC:198\t2515","ADAM20\tHGNC:199\t8748","ADAM30\tHGNC:208\t11085","ADH7\tHGNC:256\t131","AFM\tHGNC:316\t173","AICDA\tHGNC:13203\t57379","AIPL1\tHGNC:359\t23746","ALPI\tHGNC:437\t248","ALPG\tHGNC:441\t251","ALX3\tHGNC:449\t257","AMELX\tHGNC:461\t265","ANKRD30A\tHGNC:17234\t91074","ANKRD60\tHGNC:16217\t140731","ANTXRL\tHGNC:27277\t195977","APOA4\tHGNC:602\t337","APOBEC1\tHGNC:604\t339","APOF\tHGNC:615\t319","AQP12A\tHGNC:19941\t375318","AQP8\tHGNC:642\t343","ARGFX\tHGNC:30146\t503582","ART1\tHGNC:723\t417","ASB17\tHGNC:19769\t127247","ASIC5\tHGNC:17537\t51802","ASZ1\tHGNC:1350\t136991","ATOH1\tHGNC:797\t474","ATP4B\tHGNC:820\t496","ATP6V1G3\tHGNC:18265\t127124","AWAT1\tHGNC:23252\t158833","AWAT2\tHGNC:23251\t158835","B3GNT6\tHGNC:24141\t192134","BANF2\tHGNC:16172\t140836","BARHL1\tHGNC:953\t56751","BEND2\tHGNC:28509\t139105","BHLHE23\tHGNC:16093\t128408","BIRC8\tHGNC:14878\t112401","BMP10\tHGNC:20869\t27302","BMP15\tHGNC:1068\t9210","BPIFA1\tHGNC:15749\t51297","BPIFA3\tHGNC:16204\t128861","BPIFB3\tHGNC:16178\t359710","BPIFB6\tHGNC:16504\t128859","BPIFC\tHGNC:16503\t254240","BPY2\tHGNC:13508\t9083","BRDT\tHGNC:1105\t676","BSND\tHGNC:16512\t7809","C10orf113\tHGNC:31447\t387638","C10orf120\tHGNC:25707\t399814","C10orf53\tHGNC:27421\t282966","C11orf40\tHGNC:23986\t143501","C12orf40\tHGNC:26846\t283461","C14orf183\tHGNC:27285\t196913","NUTM1\tHGNC:29919\t256646","C16orf78\tHGNC:28479\t123970","C17orf102\tHGNC:34412\t400591","C17orf78\tHGNC:26831\t284099","DYNAP\tHGNC:26808\t284254","TEX45\tHGNC:24745\t374877","C1orf146\tHGNC:24032\t388649","C20orf173\tHGNC:16166\t140873","C20orf203\tHGNC:26592\t284805","SCP2D1\tHGNC:16211\t140856","TEX44\tHGNC:28563\t165100","STPG4\tHGNC:26850\t285051","PCARE\tHGNC:34383\t388939","C2orf83\tHGNC:25344\t56918","C3orf30\tHGNC:26553\t152405","PRR27\tHGNC:33193\t401137","DCANP1\tHGNC:24459\t140947","C6orf10\tHGNC:13922\t10665","C7orf66\tHGNC:33712\t154907","C7orf71\tHGNC:22364\t285941","C8A\tHGNC:1352\t731","C8B\tHGNC:1353\t732","C8orf17\tHGNC:17737\t100507249","C8orf86\tHGNC:33774\t389649","C9orf53\tHGNC:23831\t51198","CABP2\tHGNC:1385\t51475","CABP5\tHGNC:13714\t56344","CABS1\tHGNC:30710\t85438","CACNG2\tHGNC:1406\t10369","CACNG3\tHGNC:1407\t10368","CACNG5\tHGNC:1409\t27091","CATSPER4\tHGNC:23220\t378807","CCDC155\tHGNC:26520\t147872","CCDC172\tHGNC:30524\t374355","CCDC83\tHGNC:28535\t220047","CCKAR\tHGNC:1570\t886","CCL1\tHGNC:10609\t6346","CCT8L2\tHGNC:15553\t150160","CD200R1L\tHGNC:24665\t344807","CDCP2\tHGNC:27297\t200008","CDX2\tHGNC:1806\t1045","CDX4\tHGNC:1808\t1046","CDY1\tHGNC:1809\t9085","CDY1B\tHGNC:23920\t253175","CDY2A\tHGNC:1810\t9426","CDY2B\tHGNC:23921\t203611","CEACAM7\tHGNC:1819\t1087","CELA2A\tHGNC:24609\t63036","CELA3A\tHGNC:15944\t10136","CELA3B\tHGNC:15945\t23436","CER1\tHGNC:1862\t9350","CETN1\tHGNC:1866\t1068","CFHR2\tHGNC:4890\t3080","CFHR5\tHGNC:24668\t81494","CHAT\tHGNC:1912\t1103","CHRNA6\tHGNC:15963\t8973","CHRNB3\tHGNC:1963\t1142","CLCA1\tHGNC:2015\t1179","CLDN17\tHGNC:2038\t26285","CLEC2A\tHGNC:24191\t387836","CLEC3A\tHGNC:2052\t10143","CLEC6A\tHGNC:14556\t93978","CLRN1\tHGNC:12605\t7401","CNBD1\tHGNC:26663\t168975","CNGA2\tHGNC:2149\t1260","CNGB3\tHGNC:2153\t54714","CNPY1\tHGNC:27786\t285888","CNTNAP5\tHGNC:18748\t129684","COL20A1\tHGNC:14670\t57642","COX7B2\tHGNC:24381\t170712","CPXCR1\tHGNC:2332\t53336","CRNN\tHGNC:1230\t49860","CRX\tHGNC:2383\t1406","CRYGB\tHGNC:2409\t1419","CSH1\tHGNC:2440\t1442","CSHL1\tHGNC:2442\t1444","CSN2\tHGNC:2447\t1447","CSN3\tHGNC:2446\t1448","CST11\tHGNC:15959\t140880","CST4\tHGNC:2476\t1472","CST5\tHGNC:2477\t1473","CST8\tHGNC:2480\t10047","CST9\tHGNC:13261\t128822","CST9L\tHGNC:16233\t128821","CSTL1\tHGNC:15958\t128817","CT45A2\tHGNC:28400\t728911","CT45A4\tHGNC:33269\t","CT45A5\tHGNC:33270\t441521","CT47A11\tHGNC:27397\t255313","CTCFL\tHGNC:16234\t140690","CTRB1\tHGNC:2521\t1504","CXorf1\tHGNC:2562\t","CXorf66\tHGNC:33743\t347487","CYLC2\tHGNC:2583\t1539","CYP11B1\tHGNC:2591\t1584","CYP11B2\tHGNC:2592\t1585","CYP26C1\tHGNC:20577\t340665","CYP2A13\tHGNC:2608\t1553","CYP2C19\tHGNC:2621\t1557","CYP4A22\tHGNC:20575\t284541","CYP4F8\tHGNC:2648\t11283","CYP7A1\tHGNC:2651\t1581","DAZ1\tHGNC:2682\t1617","DAZ2\tHGNC:15964\t57055","DAZ3\tHGNC:15965\t57054","DAZ4\tHGNC:15966\t57135","DAZL\tHGNC:2685\t1618","DCAF4L2\tHGNC:26657\t138009","DCAF8L1\tHGNC:31810\t139425","DDI1\tHGNC:18961\t414301","DDX4\tHGNC:18700\t54514","DEFA5\tHGNC:2764\t1670","DEFA6\tHGNC:2765\t1671","DEFB103B\tHGNC:31702\t55894","DEFB104A\tHGNC:18115\t140596","DEFB106A\tHGNC:18088\t245909","DEFB107A\tHGNC:18086\t245910","DEFB118\tHGNC:16196\t117285","DEFB123\tHGNC:18103\t245936","DEFB126\tHGNC:15900\t81623","DEFB127\tHGNC:16206\t140850","DEFB129\tHGNC:16218\t140881","DGAT2L6\tHGNC:23250\t347516","DGKK\tHGNC:32395\t139189","DIRC1\tHGNC:15760\t116093","DMP1\tHGNC:2932\t1758","DMRT1\tHGNC:2934\t1761","DMRTB1\tHGNC:13913\t63948","DMRTC2\tHGNC:13911\t63946","MUCL3\tHGNC:21666\t135656","DPRX\tHGNC:32166\t503834","DRD3\tHGNC:3024\t1814","DRGX\tHGNC:21536\t644168","DSCR4\tHGNC:3045\t10281","DSG4\tHGNC:21307\t147409","DSPP\tHGNC:3054\t1834","DTX2\tHGNC:15973\t113878","DUSP21\tHGNC:20476\t63904","DUX4\tHGNC:50800\t100288687","DUX4L7\tHGNC:37266\t653543","DUXA\tHGNC:32179\t503835","EFCAB3\tHGNC:26379\t146779","EGR4\tHGNC:3241\t1961","ENTHD1\tHGNC:26352\t150350","ESX1\tHGNC:14865\t80712","EVX1\tHGNC:3506\t2128","F13B\tHGNC:3534\t2165","F9\tHGNC:3551\t2158","FABP2\tHGNC:3556\t2169","FAM106A\tHGNC:25682\t80039","FAM47A\tHGNC:29962\t158724","FAM47B\tHGNC:26659\t170062","FAM47C\tHGNC:25301\t442444","FAM71A\tHGNC:26541\t149647","FAM71B\tHGNC:28397\t153745","FAM71C\tHGNC:28594\t196472","SPATA31A7\tHGNC:32007\t26165","SPATA31D1\tHGNC:37283\t389763","FCRL4\tHGNC:18507\t83417","FEZF1\tHGNC:22788\t389549","FEZF2\tHGNC:13506\t55079","FFAR1\tHGNC:4498\t2864","FGF3\tHGNC:3681\t2248","FGF4\tHGNC:3682\t2249","FGF6\tHGNC:3684\t2251","FIGLA\tHGNC:24669\t344018","FLG2\tHGNC:33276\t388698","FMR1NB\tHGNC:26372\t158521","FNDC7\tHGNC:26668\t163479","FNDC9\tHGNC:33547\t408263","FOXB1\tHGNC:3799\t27023","FOXB2\tHGNC:23315\t442425","FOXD4L3\tHGNC:18523\t286380","FOXD4L4\tHGNC:23762\t349334","FOXE3\tHGNC:3808\t2301","FOXN1\tHGNC:12765\t8456","FOXR1\tHGNC:29980\t283150","FRG2\tHGNC:19136\t448831","FRMD7\tHGNC:8079\t90167","FSCB\tHGNC:20494\t84075","FUT5\tHGNC:4016\t2527","FUT9\tHGNC:4020\t10690","G6PC\tHGNC:4056\t2538","GABRA1\tHGNC:4075\t2554","GABRA6\tHGNC:4080\t2559","GAGE1\tHGNC:4098\t2543","GAGE2C\tHGNC:31958\t2574","GALNTL5\tHGNC:21725\t168391","GALR1\tHGNC:4132\t2587","GALR3\tHGNC:4134\t8484","GBP7\tHGNC:29606\t388646","GCG\tHGNC:4191\t2641","GCM2\tHGNC:4198\t9247","GDF2\tHGNC:4217\t2658","GFRA4\tHGNC:13821\t64096","GFRAL\tHGNC:32789\t389400","GH2\tHGNC:4262\t2689","GHRH\tHGNC:4265\t2691","GHSR\tHGNC:4267\t2693","GIF\tHGNC:4268\t2694","GJA9\tHGNC:19155\t81025","GJA8\tHGNC:4281\t2703","GK2\tHGNC:4291\t2712","GKN2\tHGNC:24588\t200504","GLRA1\tHGNC:4326\t2741","GLRA2\tHGNC:4327\t2742","GLT6D1\tHGNC:23671\t360203","GML\tHGNC:4375\t2765","GOLGA6L2\tHGNC:26695\t283685","GOT1L1\tHGNC:28487\t137362","GPR101\tHGNC:14963\t83550","GPR111\tHGNC:18991\t222611","GPR119\tHGNC:19060\t139760","ADGRG7\tHGNC:19241\t84873","GPR139\tHGNC:19995\t124274","GPR144\tHGNC:18651\t347088","GPR148\tHGNC:23623\t344561","GPR151\tHGNC:23624\t134391","GPR152\tHGNC:23622\t390212","GPR26\tHGNC:4481\t2849","GPR31\tHGNC:4486\t2853","GPR32\tHGNC:4487\t2854","GPR45\tHGNC:4503\t11250","GPR50\tHGNC:4506\t9248","GPR52\tHGNC:4508\t9293","GPR78\tHGNC:4528\t27201","GPRC6A\tHGNC:18510\t222545","GPX5\tHGNC:4557\t2880","GPX6\tHGNC:4558\t257202","GRK1\tHGNC:10013\t6011","GRM4\tHGNC:4596\t2914","GRM5\tHGNC:4597\t2915","GRM6\tHGNC:4598\t2916","GSC2\tHGNC:4613\t2928","GSTA5\tHGNC:19662\t221357","GSX1\tHGNC:20374\t219409","GSX2\tHGNC:24959\t170825","GUCA2A\tHGNC:4682\t2980","GUCY2F\tHGNC:4691\t2986","H1FOO\tHGNC:18463\t132243","H2BFM\tHGNC:27867\t286436","H2BFWT\tHGNC:27252\t158983","HAO1\tHGNC:4809\t54363","HCRTR2\tHGNC:4849\t3062","HDGFL1\tHGNC:21095\t154150","HHLA1\tHGNC:4904\t10086","HIST1H2AA\tHGNC:18729\t221613","HIST1H2BA\tHGNC:18730\t255626","HIST1H4G\tHGNC:4792\t8369","HMX1\tHGNC:5017\t3166","HOXB1\tHGNC:5111\t3211","HOXD12\tHGNC:5135\t3238","HRG\tHGNC:5181\t3273","HRH3\tHGNC:5184\t11255","HSFY1\tHGNC:18568\t86614","HSFY2\tHGNC:23950\t159119","HTN3\tHGNC:5284\t3347","HTR1A\tHGNC:5286\t3350","HTR2C\tHGNC:5295\t3358","HTR3C\tHGNC:24003\t170572","HTR3D\tHGNC:24004\t200909","HTR3E\tHGNC:24005\t285242","HTR5A\tHGNC:5300\t3361","HTR6\tHGNC:5301\t3362","IAPP\tHGNC:5329\t3375","IFIT1B\tHGNC:23442\t439996","IFNA10\tHGNC:5418\t3446","IFNA14\tHGNC:5420\t3448","IFNA16\tHGNC:5421\t3449","IFNA17\tHGNC:5422\t3451","IFNA2\tHGNC:5423\t3440","IFNA21\tHGNC:5424\t3452","IFNA4\tHGNC:5425\t3441","IFNA5\tHGNC:5426\t3442","IFNA6\tHGNC:5427\t3443","IFNA7\tHGNC:5428\t3444","IFNA8\tHGNC:5429\t3445","IFNB1\tHGNC:5434\t3456","IFNK\tHGNC:21714\t56832","IFNW1\tHGNC:5448\t3467","IL12B\tHGNC:5970\t3593","IL13\tHGNC:5973\t3596","IL17A\tHGNC:5981\t3605","IL17F\tHGNC:16404\t112744","IL1F10\tHGNC:15552\t84639","IL21\tHGNC:6005\t59067","IL22\tHGNC:14900\t50616","IL25\tHGNC:13765\t64806","IL26\tHGNC:17119\t55801","IFNL2\tHGNC:18364\t282616","IFNL3\tHGNC:18365\t282617","IFNL1\tHGNC:18363\t282618","IL3\tHGNC:6011\t3562","IL31\tHGNC:19372\t386653","IL36A\tHGNC:15562\t27179","IL36B\tHGNC:15564\t27177","IL36RN\tHGNC:15561\t26525","IL9\tHGNC:6029\t3578","INS\tHGNC:6081\t3630","INSL5\tHGNC:6088\t10022","INSL6\tHGNC:6089\t11172","INSM2\tHGNC:17539\t84684","INSRR\tHGNC:6093\t3645","IQCF1\tHGNC:28607\t132141","IRGC\tHGNC:28835\t56269","ISX\tHGNC:28084\t91464","ITIH6\tHGNC:28907\t347365","IZUMO2\tHGNC:28518\t126123","KCNA10\tHGNC:6219\t3744","KCNB2\tHGNC:6232\t9312","KCNG4\tHGNC:19697\t93107","KCNK10\tHGNC:6273\t54207","KCNK16\tHGNC:14464\t83795","KCNK18\tHGNC:19439\t338567","KCNV1\tHGNC:18861\t27012","KHDC3L\tHGNC:33699\t154288","KIF2B\tHGNC:29443\t84643","KIR2DL1\tHGNC:6329\t3802","KIR3DL3\tHGNC:16312\t115653","KLK12\tHGNC:6360\t43849","KLK9\tHGNC:6370\t284366","KRT2\tHGNC:6439\t3849","KRT25\tHGNC:30839\t147183","KRT26\tHGNC:30840\t353288","KRT28\tHGNC:30842\t162605","KRT33A\tHGNC:6450\t3883","KRT35\tHGNC:6453\t3886","KRT36\tHGNC:6454\t8689","KRT37\tHGNC:6455\t8688","KRT38\tHGNC:6456\t8687","KRT40\tHGNC:26707\t125115","KRT71\tHGNC:28927\t112802","KRT73\tHGNC:28928\t319101","KRT74\tHGNC:28929\t121391","KRT75\tHGNC:24431\t9119","KRT76\tHGNC:24430\t51350","KRT77\tHGNC:20411\t374454","KRT78\tHGNC:28926\t196374","KRT82\tHGNC:6459\t3888","KRT84\tHGNC:6461\t3890","KRT85\tHGNC:6462\t3891","KRT86\tHGNC:6463\t3892","KRT9\tHGNC:6447\t3857","KRTAP1-1\tHGNC:16772\t81851","KRTAP10-1\tHGNC:22966\t386677","KRTAP10-10\tHGNC:22972\t353333","KRTAP10-11\tHGNC:20528\t386678","KRTAP10-12\tHGNC:20533\t386685","KRTAP10-2\tHGNC:22967\t386679","KRTAP10-4\tHGNC:20521\t386672","KRTAP10-5\tHGNC:22969\t386680","KRTAP10-6\tHGNC:20523\t386674","KRTAP10-7\tHGNC:22970\t386675","KRTAP10-8\tHGNC:20525\t386681","KRTAP10-9\tHGNC:22971\t386676","KRTAP11-1\tHGNC:18922\t337880","KRTAP13-1\tHGNC:18924\t140258","KRTAP13-2\tHGNC:18923\t337959","KRTAP13-3\tHGNC:18925\t337960","KRTAP13-4\tHGNC:18926\t284827","KRTAP15-1\tHGNC:18927\t254950","KRTAP17-1\tHGNC:18917\t83902","KRTAP19-3\tHGNC:18938\t337970","KRTAP23-1\tHGNC:18928\t337963","KRTAP26-1\tHGNC:33760\t388818","KRTAP3-2\tHGNC:16779\t83897","KRTAP4-11\tHGNC:18911\t653240","KRTAP4-12\tHGNC:16776\t83755","KRTAP4-2\tHGNC:18900\t85291","KRTAP4-4\tHGNC:16928\t84616","KRTAP4-7\tHGNC:18898\t100132476","KRTAP5-2\tHGNC:23597\t440021","KRTAP9-2\tHGNC:16926\t83899","KRTAP9-3\tHGNC:16927\t83900","KRTAP9-4\tHGNC:18902\t85280","LALBA\tHGNC:6480\t3906","LBX1\tHGNC:16960\t10660","LCN9\tHGNC:17442\t392399","LCT\tHGNC:6530\t3938","LGALS13\tHGNC:15449\t29124","LGALS14\tHGNC:30054\t56891","LHFPL5\tHGNC:21253\t222662","LHX3\tHGNC:6595\t8022","LHX5\tHGNC:14216\t64211","LIM2\tHGNC:6610\t3982","LIN28A\tHGNC:15986\t79727","LIPM\tHGNC:23455\t340654","LOR\tHGNC:6663\t4014","LRIT1\tHGNC:23404\t26103","LRIT2\tHGNC:23443\t340745","LRRC10\tHGNC:20264\t376132","LUZP4\tHGNC:24971\t51213","LYZL1\tHGNC:30502\t84569","LYZL2\tHGNC:29613\t119180","LYZL6\tHGNC:29614\t57151","MAGEA10\tHGNC:6797\t4109","MAGEA11\tHGNC:6798\t4110","MAGEB1\tHGNC:6808\t4112","MAGEB10\tHGNC:25377\t139422","MAGEB18\tHGNC:28515\t286514","MAGEB3\tHGNC:6810\t4114","MAGEB4\tHGNC:6811\t4115","MAGEC3\tHGNC:23798\t139081","MAS1\tHGNC:6899\t4142","MAS1L\tHGNC:13961\t116511","MBD3L1\tHGNC:15774\t85509","MBD3L2\tHGNC:18532\t125997","MBL2\tHGNC:6922\t4153","MC2R\tHGNC:6930\t4158","MC3R\tHGNC:6931\t4159","MC5R\tHGNC:6933\t4161","MEP1A\tHGNC:7015\t4224","MEP1B\tHGNC:7020\t4225","MEPE\tHGNC:13361\t56955","MFRP\tHGNC:18121\t83552","MMD2\tHGNC:30133\t221938","MMP20\tHGNC:7167\t9313","MMP21\tHGNC:7170\t8511","MMP26\tHGNC:14249\t56547","MMP27\tHGNC:14250\t64066","MOGAT3\tHGNC:23249\t346606","MORC1\tHGNC:7198\t27136","MRGPRD\tHGNC:29626\t116512","MRGPRX1\tHGNC:17962\t259249","MRGPRX2\tHGNC:17983\t117194","MRGPRX4\tHGNC:17617\t117196","MS4A10\tHGNC:13368\t341116","MS4A13\tHGNC:16674\t503497","MS4A5\tHGNC:13374\t64232","MSGN1\tHGNC:14907\t343930","MT1B\tHGNC:7394\t4490","MTNR1B\tHGNC:7464\t4544","MUC17\tHGNC:16800\t140453","MUC7\tHGNC:7518\t4589","MYBPC3\tHGNC:7551\t4607","MYF5\tHGNC:7565\t4617","NANOGNB\tHGNC:24958\t360030","NANOS2\tHGNC:23292\t339345","NCR2\tHGNC:6732\t9436","NDST4\tHGNC:20779\t64579","NEUROD2\tHGNC:7763\t4761","NEUROD4\tHGNC:13802\t58158","NEUROD6\tHGNC:13804\t63974","NEUROG1\tHGNC:7764\t4762","NKX2-1\tHGNC:11825\t7080","NKX2-2\tHGNC:7835\t4821","NLRP4\tHGNC:22943\t147945","NLRP5\tHGNC:21269\t126206","NLRP8\tHGNC:22940\t126205","NLRP9\tHGNC:22941\t338321","NMS\tHGNC:32203\t129521","NOBOX\tHGNC:22448\t135935","NOTO\tHGNC:31839\t344022","NOX3\tHGNC:7890\t50508","NPFFR1\tHGNC:17425\t64106","NPHS2\tHGNC:13394\t7827","NPSR1\tHGNC:23631\t387129","NPVF\tHGNC:13782\t64111","NR2E1\tHGNC:7973\t7101","NYX\tHGNC:8082\t60506","OC90\tHGNC:8100\t729330","OLIG2\tHGNC:9398\t10215","OLIG3\tHGNC:18003\t167826","OPALIN\tHGNC:20707\t93377","OPN1LW\tHGNC:9936\t5956","OPN5\tHGNC:19992\t221391","OR10A2\tHGNC:8161\t341276","OR10A4\tHGNC:15130\t283297","OR10A5\tHGNC:15131\t144124","OR10H1\tHGNC:8172\t26539","OR10H2\tHGNC:8173\t26538","OR10H3\tHGNC:8174\t26532","OR10J1\tHGNC:8175\t26476","OR10R2\tHGNC:14820\t343406","OR10S1\tHGNC:14807\t219873","OR10X1\tHGNC:14995\t128367","OR10Z1\tHGNC:14996\t128368","OR11A1\tHGNC:8176\t26531","OR12D2\tHGNC:8178\t26529","OR12D3\tHGNC:13963\t81797","OR13C3\tHGNC:14704\t138803","OR13D1\tHGNC:14695\t286365","OR14A16\tHGNC:15022\t284532","OR1A1\tHGNC:8179\t8383","OR1A2\tHGNC:8180\t26189","OR1B1\tHGNC:8181\t347169","OR1D2\tHGNC:8183\t4991","OR1E1\tHGNC:8189\t8387","OR1E2\tHGNC:8190\t8388","OR1G1\tHGNC:8204\t8390","OR1L6\tHGNC:8218\t392390","OR1N2\tHGNC:15111\t138882","OR1S1\tHGNC:8227\t219959","OR1S2\tHGNC:15141\t219958","OR2AK2\tHGNC:19569\t391191","OR2AT4\tHGNC:19620\t341152","OR2C1\tHGNC:8242\t4993","OR2C3\tHGNC:15005\t81472","OR2D2\tHGNC:8244\t120776","OR2D3\tHGNC:15146\t120775","OR2F1\tHGNC:8246\t26211","OR2G2\tHGNC:15007\t81470","OR2G3\tHGNC:15008\t81469","OR2H1\tHGNC:8252\t26716","OR2J2\tHGNC:8260\t26707","OR2L3\tHGNC:15009\t391192","OR2T1\tHGNC:8277\t26696","OR2T10\tHGNC:19573\t127069","OR2T12\tHGNC:19592\t127064","OR2T2\tHGNC:14725\t401992","OR2T27\tHGNC:31252\t403239","OR2T33\tHGNC:31255\t391195","OR2T4\tHGNC:15016\t127074","OR2T5\tHGNC:15017\t401993","OR2W1\tHGNC:8281\t26692","OR3A1\tHGNC:8282\t4994","OR3A2\tHGNC:8283\t4995","OR3A3\tHGNC:8284\t8392","OR4C11\tHGNC:15167\t219429","OR4C3\tHGNC:14697\t256144","OR4D1\tHGNC:8293\t26689","OR4D10\tHGNC:15173\t390197","OR4D11\tHGNC:15174\t219986","OR4D9\tHGNC:15178\t390199","OR4K17\tHGNC:15355\t390436","OR51B6\tHGNC:19600\t390058","OR51D1\tHGNC:15193\t390038","OR51F2\tHGNC:15197\t119694","OR51T1\tHGNC:15205\t401665","OR51V1\tHGNC:19597\t283111","OR52A1\tHGNC:8318\t23538","OR52A5\tHGNC:19580\t390054","OR52B2\tHGNC:15207\t255725","OR52B6\tHGNC:15211\t340980","OR52E8\tHGNC:15217\t390079","OR52I2\tHGNC:15221\t143502","OR52K2\tHGNC:15223\t119774","OR52L1\tHGNC:14785\t338751","OR52M1\tHGNC:15225\t119772","OR52R1\tHGNC:15235\t119695","OR52W1\tHGNC:15239\t120787","OR56A1\tHGNC:14781\t120796","OR56A4\tHGNC:14791\t120793","OR56B1\tHGNC:15245\t387748","OR5AU1\tHGNC:15362\t390445","OR5C1\tHGNC:8331\t392391","OR5I1\tHGNC:8347\t10798","OR5M1\tHGNC:8352\t390168","OR5M10\tHGNC:15290\t390167","OR5P2\tHGNC:14783\t120065","OR5P3\tHGNC:14784\t120066","OR5R1\tHGNC:14841\t219479","OR5T1\tHGNC:14821\t390155","OR5T2\tHGNC:15296\t219464","OR5T3\tHGNC:15297\t390154","OR5V1\tHGNC:13972\t81696","OR5W2\tHGNC:15299\t390148","OR6A2\tHGNC:15301\t8590","OR6K6\tHGNC:15033\t128371","OR6S1\tHGNC:15363\t341799","OR6V1\tHGNC:15090\t346517","OR7A17\tHGNC:8363\t26333","OR7C2\tHGNC:8374\t26658","OR7D4\tHGNC:8380\t125958","OR7G2\tHGNC:8466\t390882","OR8A1\tHGNC:8469\t390275","OR8B8\tHGNC:8477\t26493","OR8G5\tHGNC:19622\t219865","OR8U1\tHGNC:19611\t219417","OR9Q2\tHGNC:15328\t219957","OTOP1\tHGNC:19656\t133060","OTOP3\tHGNC:19658\t347741","OTOR\tHGNC:8517\t56914","OTP\tHGNC:8518\t23440","OTUD6A\tHGNC:32312\t139562","OTX2\tHGNC:8522\t5015","PAGE3\tHGNC:4110\t139793","PANX3\tHGNC:20573\t116337","PASD1\tHGNC:20686\t139135","PAX1\tHGNC:8615\t5075","PAX4\tHGNC:8618\t5078","PBOV1\tHGNC:21079\t59351","PDCL2\tHGNC:29524\t132954","PDE6H\tHGNC:8790\t5149","PDILT\tHGNC:27338\t204474","PDX1\tHGNC:6107\t3651","PDYN\tHGNC:8820\t5173","PGK2\tHGNC:8898\t5232","PGLYRP2\tHGNC:30013\t114770","PGLYRP3\tHGNC:30014\t114771","PIWIL1\tHGNC:9007\t9271","PIWIL3\tHGNC:18443\t440822","PKD1L3\tHGNC:21716\t342372","PLA2G2E\tHGNC:13414\t30814","PLA2G2F\tHGNC:30040\t64600","PLA2G4E\tHGNC:24791\t123745","OOSP2\tHGNC:26699\t219990","PNLIP\tHGNC:9155\t5406","PNLIPRP1\tHGNC:9156\t5407","PNLIPRP2\tHGNC:9157\t5408","PNPLA5\tHGNC:24888\t150379","POM121L12\tHGNC:25369\t285877","POTEA\tHGNC:33893\t340441","POTED\tHGNC:23822\t317754","POTEG\tHGNC:33896\t404785","POTEH\tHGNC:133\t23784","POU3F4\tHGNC:9217\t5456","POU4F2\tHGNC:9219\t5458","POU4F3\tHGNC:9220\t5459","POU5F2\tHGNC:26367\t134187","PPP3R2\tHGNC:9318\t5535","PRAMEF1\tHGNC:28840\t65121","PRAMEF19\tHGNC:24908\t645414","PRAMEF2\tHGNC:28841\t65122","PRAMEF3\tHGNC:14087\t","PRAMEF4\tHGNC:31971\t400735","PRAMEF7\tHGNC:28415\t441871","PRB1\tHGNC:9337\t5542","PRB4\tHGNC:9340\t5545","PRDM13\tHGNC:13998\t59336","PRDM14\tHGNC:14001\t63978","PRDM7\tHGNC:9351\t11105","PRDM9\tHGNC:13994\t56979","PRG3\tHGNC:9363\t10394","PRLH\tHGNC:17945\t51052","PRLHR\tHGNC:4464\t2834","PROP1\tHGNC:9455\t5626","PRSS33\tHGNC:30405\t260429","PRSS37\tHGNC:29211\t136242","PRSS38\tHGNC:29625\t339501","PRSS41\tHGNC:30715\t360226","PRSS55\tHGNC:30824\t203074","PRSS58\tHGNC:39125\t136541","PRY2\tHGNC:21504\t442862","PSKH2\tHGNC:18997\t85481","PTF1A\tHGNC:23734\t256297","RAX\tHGNC:18662\t30062","RAX2\tHGNC:18286\t84839","RBM46\tHGNC:28401\t166863","RBMXL2\tHGNC:17886\t27288","RBMY1A1\tHGNC:9912\t5940","RBMY1B\tHGNC:23914\t378948","RBMY1D\tHGNC:23915\t378949","RBMY1E\tHGNC:23916\t378950","RBMY1F\tHGNC:23974\t159163","RBMY1J\tHGNC:23917\t378951","RBP3\tHGNC:9921\t5949","RBPJL\tHGNC:13761\t11317","RD3\tHGNC:19689\t343035","RDH8\tHGNC:14423\t50700","REG3A\tHGNC:8601\t5068","RESP18\tHGNC:33762\t389075","RETNLB\tHGNC:20388\t84666","REXO1L1\tHGNC:24660\t254958","RFPL3\tHGNC:9980\t10738","RFPL4B\tHGNC:33264\t442247","RFX6\tHGNC:21478\t222546","RHO\tHGNC:10012\t6010","RHOXF2\tHGNC:30011\t84528","RNASE10\tHGNC:19275\t338879","RNASE11\tHGNC:19269\t122651","RNASE12\tHGNC:24211\t493901","RNASE13\tHGNC:25285\t440163","RNASE8\tHGNC:19277\t122665","RNASE9\tHGNC:20673\t390443","RND2\tHGNC:18315\t8153","RNF113B\tHGNC:17267\t140432","RNF17\tHGNC:10060\t56163","RP1\tHGNC:10263\t6101","RP1L1\tHGNC:15946\t94137","RPE65\tHGNC:10294\t6121","RPTN\tHGNC:26809\t126638","RS1\tHGNC:10457\t6247","RTP1\tHGNC:28580\t132112","RTP2\tHGNC:32486\t344892","RXFP2\tHGNC:17318\t122042","RXFP3\tHGNC:24883\t51289","S100A7A\tHGNC:21657\t338324","S100G\tHGNC:1436\t795","SAGE1\tHGNC:30369\t55511","SAMD7\tHGNC:25394\t344658","SCGB1D1\tHGNC:18395\t10648","SCN10A\tHGNC:10582\t6336","SCRT2\tHGNC:15952\t85508","SDR9C7\tHGNC:29958\t121214","SEC14L3\tHGNC:18655\t266629","SEMG2\tHGNC:10743\t6407","SEPT14\tHGNC:33280\t346288","SERPINA12\tHGNC:18359\t145264","SERPINA7\tHGNC:11583\t6906","SERPINA9\tHGNC:15995\t327657","SERPINB12\tHGNC:14220\t89777","SHCBP1L\tHGNC:16788\t81626","SHOX\tHGNC:10853\t6473","SI\tHGNC:10856\t6476","SIGLECL1\tHGNC:26856\t284369","SIX6\tHGNC:10892\t4990","SLC10A2\tHGNC:10906\t6555","SLC13A1\tHGNC:10916\t6561","SLC34A1\tHGNC:11019\t6569","SLC17A6\tHGNC:16703\t57084","SLC18A3\tHGNC:10936\t6572","SLC22A12\tHGNC:17989\t116085","SLC22A13\tHGNC:8494\t9390","SLC22A24\tHGNC:28542\t283238","SLC22A25\tHGNC:32935\t387601","SLC22A6\tHGNC:10970\t9356","SLC22A8\tHGNC:10972\t9376","SLC22A9\tHGNC:16261\t114571","SLC25A2\tHGNC:22921\t83884","SLC25A31\tHGNC:25319\t83447","SLC2A2\tHGNC:11006\t6514","SLC2A7\tHGNC:13445\t155184","SLC32A1\tHGNC:11018\t140679","SLC34A1\tHGNC:11019\t6569","SLC36A3\tHGNC:19659\t285641","SLC39A12\tHGNC:20860\t221074","SLC6A18\tHGNC:26441\t348932","SLC6A5\tHGNC:11051\t9152","SLC6A7\tHGNC:11054\t6534","SLC7A13\tHGNC:23092\t157724","SLCO1B1\tHGNC:10959\t10599","SLCO6A1\tHGNC:23613\t133482","SLITRK1\tHGNC:20297\t114798","SOHLH1\tHGNC:27845\t402381","SOX1\tHGNC:11189\t6656","SOX14\tHGNC:11193\t8403","SP8\tHGNC:19196\t221833","SPACA1\tHGNC:14967\t81833","SPACA5\tHGNC:31353\t389852","SPACA7\tHGNC:29575\t122258","SPATA16\tHGNC:29935\t83893","SPATA21\tHGNC:28026\t374955","SPEM1\tHGNC:32429\t374768","SPHAR\tHGNC:16957\t10638","SPINK14\tHGNC:33825\t408187","SPO11\tHGNC:11250\t23626","SPPL2C\tHGNC:28902\t162540","SPRR4\tHGNC:23173\t163778","SSTR4\tHGNC:11333\t6754","SSX3\tHGNC:11337\t10214","SSX5\tHGNC:11339\t6758","SSX7\tHGNC:19653\t280658","SSX8\tHGNC:19654\t280659","SSX9\tHGNC:19655\t280660","STATH\tHGNC:11369\t6779","SULT6B1\tHGNC:33433\t391365","SUN5\tHGNC:16252\t140732","TBXT\tHGNC:11515\t6862","TAAR1\tHGNC:17734\t134864","TAAR2\tHGNC:4514\t9287","TAAR5\tHGNC:30236\t9038","TAAR6\tHGNC:20978\t319100","TAAR8\tHGNC:14964\t83551","TAAR9\tHGNC:20977\t134860","TAS1R2\tHGNC:14905\t80834","TAS2R1\tHGNC:14909\t50834","TAS2R13\tHGNC:14919\t50838","TAS2R16\tHGNC:14921\t50833","TAS2R39\tHGNC:18886\t259285","TAS2R40\tHGNC:18885\t259286","TAS2R41\tHGNC:18883\t259287","TAS2R42\tHGNC:18888\t353164","TAS2R43\tHGNC:18875\t259289","TAS2R46\tHGNC:18877\t259292","TAS2R50\tHGNC:18882\t259296","TAS2R60\tHGNC:20639\t338398","TAS2R7\tHGNC:14913\t50837","TAS2R8\tHGNC:14915\t50836","TAS2R9\tHGNC:14917\t50835","TBC1D21\tHGNC:28536\t161514","TBC1D29\tHGNC:24509\t26083","TBL1Y\tHGNC:18502\t90665","TBPL2\tHGNC:19841\t387332","TBR1\tHGNC:11590\t10716","TBX10\tHGNC:11593\t347853","ELOA2\tHGNC:30771\t51224","ELOA3\tHGNC:24617\t162699","TCHHL1\tHGNC:31796\t126637","TCP10L2\tHGNC:21254\t401285","TEDDM1\tHGNC:30233\t127670","TEX101\tHGNC:30722\t83639","TEX13A\tHGNC:11735\t56157","TEX28\tHGNC:2563\t1527","SPATA32\tHGNC:26349\t124783","TFAP2D\tHGNC:15581\t83741","TFDP3\tHGNC:24603\t51270","TGIF2LX\tHGNC:18570\t90316","TGIF2LY\tHGNC:18569\t90655","TGM6\tHGNC:16255\t343641","TKTL2\tHGNC:25313\t84076","TLX1\tHGNC:5056\t3195","TMEM132D\tHGNC:29411\t121256","TMEM174\tHGNC:28187\t134288","TMEM207\tHGNC:33705\t131920","TMEM225\tHGNC:32390\t338661","TMIGD1\tHGNC:32431\t388364","TMPRSS11A\tHGNC:27954\t339967","TMPRSS11B\tHGNC:25398\t132724","TMPRSS11F\tHGNC:29994\t389208","TMPRSS12\tHGNC:28779\t283471","TMPRSS15\tHGNC:9490\t5651","TNR\tHGNC:11953\t7143","TPD52L3\tHGNC:23382\t89882","TPH2\tHGNC:20692\t121278","TPRX1\tHGNC:32174\t284355","TPTE\tHGNC:12023\t7179","TREML4\tHGNC:30807\t285852","TRHR\tHGNC:12299\t7201","TRIM40\tHGNC:18736\t135644","TRIM42\tHGNC:19014\t287015","TRIM43\tHGNC:19015\t129868","TRIM48\tHGNC:19021\t79097","TRIM49\tHGNC:13431\t57093","TRIM51\tHGNC:19023\t84767","TRIM60\tHGNC:21162\t166655","TRIM67\tHGNC:31859\t440730","TRIML1\tHGNC:26698\t339976","TRPC5\tHGNC:12337\t7224","TRPC7\tHGNC:20754\t57113","TRPM1\tHGNC:7146\t4308","TRPV5\tHGNC:3145\t56302","TSGA13\tHGNC:12369\t114960","TSHB\tHGNC:12372\t7252","TSPAN16\tHGNC:30725\t26526","TSPO2\tHGNC:21256\t222642","TSPY1\tHGNC:12381\t7258","TSPYL6\tHGNC:14521\t388951","TSSK1B\tHGNC:14968\t83942","TSSK2\tHGNC:11401\t23617","TXNDC8\tHGNC:31454\t255220","TYR\tHGNC:12442\t7299","UBQLN3\tHGNC:12510\t50613","UMOD\tHGNC:12559\t7369","UROC1\tHGNC:26444\t131669","USP17L2\tHGNC:34434\t377630","USP26\tHGNC:13485\t83844","USP29\tHGNC:18563\t57663","UTS2R\tHGNC:4468\t2837","VAX1\tHGNC:12660\t11023","VCX3A\tHGNC:18159\t51481","VHLL\tHGNC:30666\t391104","VN1R2\tHGNC:19872\t317701","VN1R4\tHGNC:19871\t317703","VN1R5\tHGNC:19870\t317705","VPREB1\tHGNC:12709\t7441","VRTN\tHGNC:20223\t55237","VSX2\tHGNC:1975\t338917","WFDC10A\tHGNC:16139\t140832","WFDC11\tHGNC:20478\t259239","WFDC9\tHGNC:20380\t259240","XAGE2\tHGNC:4112\t9502","XAGE5\tHGNC:30930\t170627","XKR7\tHGNC:23062\t343702","ZAN\tHGNC:12857\t7455","ZCCHC13\tHGNC:31749\t389874","RTL4\tHGNC:25214\t340595","ZG16\tHGNC:30961\t653808","ZIC3\tHGNC:12874\t7547","ZIM3\tHGNC:16366\t114026","CBLL2\tHGNC:26371\t158506","ZNF648\tHGNC:18190\t127665","ZNF679\tHGNC:28650\t168417","ZNF804B\tHGNC:21958\t219578","ZNRF4\tHGNC:17726\t148066","ZP2\tHGNC:13188\t7783","ZP4\tHGNC:15770\t57829","ZSWIM2\tHGNC:30990\t151112"],"stylingDirectives":[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],"csv":null,"csvError":null,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/hart-lab/bagel/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null,"repoAlertsPath":"/hart-lab/bagel/security/dependabot","repoSecurityAndAnalysisPath":"/hart-lab/bagel/settings/security_analysis","repoOwnerIsOrg":true,"currentUserCanAdminRepo":false},"displayName":"NEGv1.txt","displayUrl":"https://github.com/hart-lab/bagel/blob/master/NEGv1.txt?raw=true","headerInfo":{"blobSize":"21.2 KB","deleteInfo":{"deletePath":null,"deleteTooltip":"You must be signed in to make or propose changes"},"editInfo":{"editTooltip":"You must be signed in to make or propose changes"},"ghDesktopPath":"https://desktop.github.com","gitLfsPath":null,"onBranch":true,"shortPath":"9640181","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2Fhart-lab%2Fbagel%2Fblob%2Fmaster%2FNEGv1.txt","isCSV":false,"isRichtext":false,"toc":null,"lineInfo":{"truncatedLoc":"929","truncatedSloc":"928"},"mode":"file"},"image":false,"isCodeownersFile":null,"isValidLegacyIssueTemplate":false,"issueTemplateHelpUrl":"https://docs.github.com/articles/about-issue-and-pull-request-templates","issueTemplate":null,"discussionTemplate":null,"language":"Text","large":false,"loggedIn":false,"newDiscussionPath":"/hart-lab/bagel/discussions/new","newIssuePath":"/hart-lab/bagel/issues/new","planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/hart-lab/bagel/blob/master/NEGv1.txt","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","dismissStackNoticePath":"/settings/dismiss-notice/publish_stack_from_file","releasePath":"/hart-lab/bagel/releases/new?marketplace=true","showPublishActionBanner":false,"showPublishStackBanner":false},"renderImageOrRaw":false,"richText":null,"renderedFileInfo":null,"tabSize":8,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"repoOwner":"hart-lab","repoName":"bagel","showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","showDependabotConfigurationBanner":false,"actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null,"symbols":{"timedOut":false,"notAnalyzed":true,"symbols":[]}},"copilotUserAccess":null,"csrf_tokens":{"/hart-lab/bagel/branches":{"post":"pYLWEpeG9RoxdtoYXQJ5y8-trx6KAJSl7LLqOLZ-2cESTKQmFBTzFls26c8sdQ8miAFjbcsFlrlb9JOP0frNWg"}}},"title":"bagel/NEGv1.txt at master · hart-lab/bagel","locale":"en"} \ No newline at end of file +GENE HGNC_ID ENTREZ_ID +ABCG8 HGNC:13887 64241 +ACCSL HGNC:34391 390110 +ACTL7A HGNC:161 10881 +ACTL7B HGNC:162 10880 +ACTL9 HGNC:28494 284382 +ACTRT1 HGNC:24027 139741 +ADAD1 HGNC:30713 132612 +ADAM18 HGNC:196 8749 +ADAM2 HGNC:198 2515 +ADAM20 HGNC:199 8748 +ADAM30 HGNC:208 11085 +ADH7 HGNC:256 131 +AFM HGNC:316 173 +AICDA HGNC:13203 57379 +AIPL1 HGNC:359 23746 +ALPI HGNC:437 248 +ALPG HGNC:441 251 +ALX3 HGNC:449 257 +AMELX HGNC:461 265 +ANKRD30A HGNC:17234 91074 +ANKRD60 HGNC:16217 140731 +ANTXRL HGNC:27277 195977 +APOA4 HGNC:602 337 +APOBEC1 HGNC:604 339 +APOF HGNC:615 319 +AQP12A HGNC:19941 375318 +AQP8 HGNC:642 343 +ARGFX HGNC:30146 503582 +ART1 HGNC:723 417 +ASB17 HGNC:19769 127247 +ASIC5 HGNC:17537 51802 +ASZ1 HGNC:1350 136991 +ATOH1 HGNC:797 474 +ATP4B HGNC:820 496 +ATP6V1G3 HGNC:18265 127124 +AWAT1 HGNC:23252 158833 +AWAT2 HGNC:23251 158835 +B3GNT6 HGNC:24141 192134 +BANF2 HGNC:16172 140836 +BARHL1 HGNC:953 56751 +BEND2 HGNC:28509 139105 +BHLHE23 HGNC:16093 128408 +BIRC8 HGNC:14878 112401 +BMP10 HGNC:20869 27302 +BMP15 HGNC:1068 9210 +BPIFA1 HGNC:15749 51297 +BPIFA3 HGNC:16204 128861 +BPIFB3 HGNC:16178 359710 +BPIFB6 HGNC:16504 128859 +BPIFC HGNC:16503 254240 +BPY2 HGNC:13508 9083 +BRDT HGNC:1105 676 +BSND HGNC:16512 7809 +C10orf113 HGNC:31447 387638 +C10orf120 HGNC:25707 399814 +C10orf53 HGNC:27421 282966 +C11orf40 HGNC:23986 143501 +C12orf40 HGNC:26846 283461 +C14orf183 HGNC:27285 196913 +NUTM1 HGNC:29919 256646 +C16orf78 HGNC:28479 123970 +C17orf102 HGNC:34412 400591 +C17orf78 HGNC:26831 284099 +DYNAP HGNC:26808 284254 +TEX45 HGNC:24745 374877 +C1orf146 HGNC:24032 388649 +C20orf173 HGNC:16166 140873 +C20orf203 HGNC:26592 284805 +SCP2D1 HGNC:16211 140856 +TEX44 HGNC:28563 165100 +STPG4 HGNC:26850 285051 +PCARE HGNC:34383 388939 +C2orf83 HGNC:25344 56918 +C3orf30 HGNC:26553 152405 +PRR27 HGNC:33193 401137 +DCANP1 HGNC:24459 140947 +C6orf10 HGNC:13922 10665 +C7orf66 HGNC:33712 154907 +C7orf71 HGNC:22364 285941 +C8A HGNC:1352 731 +C8B HGNC:1353 732 +C8orf17 HGNC:17737 100507249 +C8orf86 HGNC:33774 389649 +C9orf53 HGNC:23831 51198 +CABP2 HGNC:1385 51475 +CABP5 HGNC:13714 56344 +CABS1 HGNC:30710 85438 +CACNG2 HGNC:1406 10369 +CACNG3 HGNC:1407 10368 +CACNG5 HGNC:1409 27091 +CATSPER4 HGNC:23220 378807 +CCDC155 HGNC:26520 147872 +CCDC172 HGNC:30524 374355 +CCDC83 HGNC:28535 220047 +CCKAR HGNC:1570 886 +CCL1 HGNC:10609 6346 +CCT8L2 HGNC:15553 150160 +CD200R1L HGNC:24665 344807 +CDCP2 HGNC:27297 200008 +CDX2 HGNC:1806 1045 +CDX4 HGNC:1808 1046 +CDY1 HGNC:1809 9085 +CDY1B HGNC:23920 253175 +CDY2A HGNC:1810 9426 +CDY2B HGNC:23921 203611 +CEACAM7 HGNC:1819 1087 +CELA2A HGNC:24609 63036 +CELA3A HGNC:15944 10136 +CELA3B HGNC:15945 23436 +CER1 HGNC:1862 9350 +CETN1 HGNC:1866 1068 +CFHR2 HGNC:4890 3080 +CFHR5 HGNC:24668 81494 +CHAT HGNC:1912 1103 +CHRNA6 HGNC:15963 8973 +CHRNB3 HGNC:1963 1142 +CLCA1 HGNC:2015 1179 +CLDN17 HGNC:2038 26285 +CLEC2A HGNC:24191 387836 +CLEC3A HGNC:2052 10143 +CLEC6A HGNC:14556 93978 +CLRN1 HGNC:12605 7401 +CNBD1 HGNC:26663 168975 +CNGA2 HGNC:2149 1260 +CNGB3 HGNC:2153 54714 +CNPY1 HGNC:27786 285888 +CNTNAP5 HGNC:18748 129684 +COL20A1 HGNC:14670 57642 +COX7B2 HGNC:24381 170712 +CPXCR1 HGNC:2332 53336 +CRNN HGNC:1230 49860 +CRX HGNC:2383 1406 +CRYGB HGNC:2409 1419 +CSH1 HGNC:2440 1442 +CSHL1 HGNC:2442 1444 +CSN2 HGNC:2447 1447 +CSN3 HGNC:2446 1448 +CST11 HGNC:15959 140880 +CST4 HGNC:2476 1472 +CST5 HGNC:2477 1473 +CST8 HGNC:2480 10047 +CST9 HGNC:13261 128822 +CST9L HGNC:16233 128821 +CSTL1 HGNC:15958 128817 +CT45A2 HGNC:28400 728911 +CT45A4 HGNC:33269 +CT45A5 HGNC:33270 441521 +CT47A11 HGNC:27397 255313 +CTCFL HGNC:16234 140690 +CTRB1 HGNC:2521 1504 +CXorf1 HGNC:2562 +CXorf66 HGNC:33743 347487 +CYLC2 HGNC:2583 1539 +CYP11B1 HGNC:2591 1584 +CYP11B2 HGNC:2592 1585 +CYP26C1 HGNC:20577 340665 +CYP2A13 HGNC:2608 1553 +CYP2C19 HGNC:2621 1557 +CYP4A22 HGNC:20575 284541 +CYP4F8 HGNC:2648 11283 +CYP7A1 HGNC:2651 1581 +DAZ1 HGNC:2682 1617 +DAZ2 HGNC:15964 57055 +DAZ3 HGNC:15965 57054 +DAZ4 HGNC:15966 57135 +DAZL HGNC:2685 1618 +DCAF4L2 HGNC:26657 138009 +DCAF8L1 HGNC:31810 139425 +DDI1 HGNC:18961 414301 +DDX4 HGNC:18700 54514 +DEFA5 HGNC:2764 1670 +DEFA6 HGNC:2765 1671 +DEFB103B HGNC:31702 55894 +DEFB104A HGNC:18115 140596 +DEFB106A HGNC:18088 245909 +DEFB107A HGNC:18086 245910 +DEFB118 HGNC:16196 117285 +DEFB123 HGNC:18103 245936 +DEFB126 HGNC:15900 81623 +DEFB127 HGNC:16206 140850 +DEFB129 HGNC:16218 140881 +DGAT2L6 HGNC:23250 347516 +DGKK HGNC:32395 139189 +DIRC1 HGNC:15760 116093 +DMP1 HGNC:2932 1758 +DMRT1 HGNC:2934 1761 +DMRTB1 HGNC:13913 63948 +DMRTC2 HGNC:13911 63946 +MUCL3 HGNC:21666 135656 +DPRX HGNC:32166 503834 +DRD3 HGNC:3024 1814 +DRGX HGNC:21536 644168 +DSCR4 HGNC:3045 10281 +DSG4 HGNC:21307 147409 +DSPP HGNC:3054 1834 +DTX2 HGNC:15973 113878 +DUSP21 HGNC:20476 63904 +DUX4 HGNC:50800 100288687 +DUX4L7 HGNC:37266 653543 +DUXA HGNC:32179 503835 +EFCAB3 HGNC:26379 146779 +EGR4 HGNC:3241 1961 +ENTHD1 HGNC:26352 150350 +ESX1 HGNC:14865 80712 +EVX1 HGNC:3506 2128 +F13B HGNC:3534 2165 +F9 HGNC:3551 2158 +FABP2 HGNC:3556 2169 +FAM106A HGNC:25682 80039 +FAM47A HGNC:29962 158724 +FAM47B HGNC:26659 170062 +FAM47C HGNC:25301 442444 +FAM71A HGNC:26541 149647 +FAM71B HGNC:28397 153745 +FAM71C HGNC:28594 196472 +SPATA31A7 HGNC:32007 26165 +SPATA31D1 HGNC:37283 389763 +FCRL4 HGNC:18507 83417 +FEZF1 HGNC:22788 389549 +FEZF2 HGNC:13506 55079 +FFAR1 HGNC:4498 2864 +FGF3 HGNC:3681 2248 +FGF4 HGNC:3682 2249 +FGF6 HGNC:3684 2251 +FIGLA HGNC:24669 344018 +FLG2 HGNC:33276 388698 +FMR1NB HGNC:26372 158521 +FNDC7 HGNC:26668 163479 +FNDC9 HGNC:33547 408263 +FOXB1 HGNC:3799 27023 +FOXB2 HGNC:23315 442425 +FOXD4L3 HGNC:18523 286380 +FOXD4L4 HGNC:23762 349334 +FOXE3 HGNC:3808 2301 +FOXN1 HGNC:12765 8456 +FOXR1 HGNC:29980 283150 +FRG2 HGNC:19136 448831 +FRMD7 HGNC:8079 90167 +FSCB HGNC:20494 84075 +FUT5 HGNC:4016 2527 +FUT9 HGNC:4020 10690 +G6PC HGNC:4056 2538 +GABRA1 HGNC:4075 2554 +GABRA6 HGNC:4080 2559 +GAGE1 HGNC:4098 2543 +GAGE2C HGNC:31958 2574 +GALNTL5 HGNC:21725 168391 +GALR1 HGNC:4132 2587 +GALR3 HGNC:4134 8484 +GBP7 HGNC:29606 388646 +GCG HGNC:4191 2641 +GCM2 HGNC:4198 9247 +GDF2 HGNC:4217 2658 +GFRA4 HGNC:13821 64096 +GFRAL HGNC:32789 389400 +GH2 HGNC:4262 2689 +GHRH HGNC:4265 2691 +GHSR HGNC:4267 2693 +GIF HGNC:4268 2694 +GJA9 HGNC:19155 81025 +GJA8 HGNC:4281 2703 +GK2 HGNC:4291 2712 +GKN2 HGNC:24588 200504 +GLRA1 HGNC:4326 2741 +GLRA2 HGNC:4327 2742 +GLT6D1 HGNC:23671 360203 +GML HGNC:4375 2765 +GOLGA6L2 HGNC:26695 283685 +GOT1L1 HGNC:28487 137362 +GPR101 HGNC:14963 83550 +GPR111 HGNC:18991 222611 +GPR119 HGNC:19060 139760 +ADGRG7 HGNC:19241 84873 +GPR139 HGNC:19995 124274 +GPR144 HGNC:18651 347088 +GPR148 HGNC:23623 344561 +GPR151 HGNC:23624 134391 +GPR152 HGNC:23622 390212 +GPR26 HGNC:4481 2849 +GPR31 HGNC:4486 2853 +GPR32 HGNC:4487 2854 +GPR45 HGNC:4503 11250 +GPR50 HGNC:4506 9248 +GPR52 HGNC:4508 9293 +GPR78 HGNC:4528 27201 +GPRC6A HGNC:18510 222545 +GPX5 HGNC:4557 2880 +GPX6 HGNC:4558 257202 +GRK1 HGNC:10013 6011 +GRM4 HGNC:4596 2914 +GRM5 HGNC:4597 2915 +GRM6 HGNC:4598 2916 +GSC2 HGNC:4613 2928 +GSTA5 HGNC:19662 221357 +GSX1 HGNC:20374 219409 +GSX2 HGNC:24959 170825 +GUCA2A HGNC:4682 2980 +GUCY2F HGNC:4691 2986 +H1FOO HGNC:18463 132243 +H2BFM HGNC:27867 286436 +H2BFWT HGNC:27252 158983 +HAO1 HGNC:4809 54363 +HCRTR2 HGNC:4849 3062 +HDGFL1 HGNC:21095 154150 +HHLA1 HGNC:4904 10086 +HIST1H2AA HGNC:18729 221613 +HIST1H2BA HGNC:18730 255626 +HIST1H4G HGNC:4792 8369 +HMX1 HGNC:5017 3166 +HOXB1 HGNC:5111 3211 +HOXD12 HGNC:5135 3238 +HRG HGNC:5181 3273 +HRH3 HGNC:5184 11255 +HSFY1 HGNC:18568 86614 +HSFY2 HGNC:23950 159119 +HTN3 HGNC:5284 3347 +HTR1A HGNC:5286 3350 +HTR2C HGNC:5295 3358 +HTR3C HGNC:24003 170572 +HTR3D HGNC:24004 200909 +HTR3E HGNC:24005 285242 +HTR5A HGNC:5300 3361 +HTR6 HGNC:5301 3362 +IAPP HGNC:5329 3375 +IFIT1B HGNC:23442 439996 +IFNA10 HGNC:5418 3446 +IFNA14 HGNC:5420 3448 +IFNA16 HGNC:5421 3449 +IFNA17 HGNC:5422 3451 +IFNA2 HGNC:5423 3440 +IFNA21 HGNC:5424 3452 +IFNA4 HGNC:5425 3441 +IFNA5 HGNC:5426 3442 +IFNA6 HGNC:5427 3443 +IFNA7 HGNC:5428 3444 +IFNA8 HGNC:5429 3445 +IFNB1 HGNC:5434 3456 +IFNK HGNC:21714 56832 +IFNW1 HGNC:5448 3467 +IL12B HGNC:5970 3593 +IL13 HGNC:5973 3596 +IL17A HGNC:5981 3605 +IL17F HGNC:16404 112744 +IL1F10 HGNC:15552 84639 +IL21 HGNC:6005 59067 +IL22 HGNC:14900 50616 +IL25 HGNC:13765 64806 +IL26 HGNC:17119 55801 +IFNL2 HGNC:18364 282616 +IFNL3 HGNC:18365 282617 +IFNL1 HGNC:18363 282618 +IL3 HGNC:6011 3562 +IL31 HGNC:19372 386653 +IL36A HGNC:15562 27179 +IL36B HGNC:15564 27177 +IL36RN HGNC:15561 26525 +IL9 HGNC:6029 3578 +INS HGNC:6081 3630 +INSL5 HGNC:6088 10022 +INSL6 HGNC:6089 11172 +INSM2 HGNC:17539 84684 +INSRR HGNC:6093 3645 +IQCF1 HGNC:28607 132141 +IRGC HGNC:28835 56269 +ISX HGNC:28084 91464 +ITIH6 HGNC:28907 347365 +IZUMO2 HGNC:28518 126123 +KCNA10 HGNC:6219 3744 +KCNB2 HGNC:6232 9312 +KCNG4 HGNC:19697 93107 +KCNK10 HGNC:6273 54207 +KCNK16 HGNC:14464 83795 +KCNK18 HGNC:19439 338567 +KCNV1 HGNC:18861 27012 +KHDC3L HGNC:33699 154288 +KIF2B HGNC:29443 84643 +KIR2DL1 HGNC:6329 3802 +KIR3DL3 HGNC:16312 115653 +KLK12 HGNC:6360 43849 +KLK9 HGNC:6370 284366 +KRT2 HGNC:6439 3849 +KRT25 HGNC:30839 147183 +KRT26 HGNC:30840 353288 +KRT28 HGNC:30842 162605 +KRT33A HGNC:6450 3883 +KRT35 HGNC:6453 3886 +KRT36 HGNC:6454 8689 +KRT37 HGNC:6455 8688 +KRT38 HGNC:6456 8687 +KRT40 HGNC:26707 125115 +KRT71 HGNC:28927 112802 +KRT73 HGNC:28928 319101 +KRT74 HGNC:28929 121391 +KRT75 HGNC:24431 9119 +KRT76 HGNC:24430 51350 +KRT77 HGNC:20411 374454 +KRT78 HGNC:28926 196374 +KRT82 HGNC:6459 3888 +KRT84 HGNC:6461 3890 +KRT85 HGNC:6462 3891 +KRT86 HGNC:6463 3892 +KRT9 HGNC:6447 3857 +KRTAP1-1 HGNC:16772 81851 +KRTAP10-1 HGNC:22966 386677 +KRTAP10-10 HGNC:22972 353333 +KRTAP10-11 HGNC:20528 386678 +KRTAP10-12 HGNC:20533 386685 +KRTAP10-2 HGNC:22967 386679 +KRTAP10-4 HGNC:20521 386672 +KRTAP10-5 HGNC:22969 386680 +KRTAP10-6 HGNC:20523 386674 +KRTAP10-7 HGNC:22970 386675 +KRTAP10-8 HGNC:20525 386681 +KRTAP10-9 HGNC:22971 386676 +KRTAP11-1 HGNC:18922 337880 +KRTAP13-1 HGNC:18924 140258 +KRTAP13-2 HGNC:18923 337959 +KRTAP13-3 HGNC:18925 337960 +KRTAP13-4 HGNC:18926 284827 +KRTAP15-1 HGNC:18927 254950 +KRTAP17-1 HGNC:18917 83902 +KRTAP19-3 HGNC:18938 337970 +KRTAP23-1 HGNC:18928 337963 +KRTAP26-1 HGNC:33760 388818 +KRTAP3-2 HGNC:16779 83897 +KRTAP4-11 HGNC:18911 653240 +KRTAP4-12 HGNC:16776 83755 +KRTAP4-2 HGNC:18900 85291 +KRTAP4-4 HGNC:16928 84616 +KRTAP4-7 HGNC:18898 100132476 +KRTAP5-2 HGNC:23597 440021 +KRTAP9-2 HGNC:16926 83899 +KRTAP9-3 HGNC:16927 83900 +KRTAP9-4 HGNC:18902 85280 +LALBA HGNC:6480 3906 +LBX1 HGNC:16960 10660 +LCN9 HGNC:17442 392399 +LCT HGNC:6530 3938 +LGALS13 HGNC:15449 29124 +LGALS14 HGNC:30054 56891 +LHFPL5 HGNC:21253 222662 +LHX3 HGNC:6595 8022 +LHX5 HGNC:14216 64211 +LIM2 HGNC:6610 3982 +LIN28A HGNC:15986 79727 +LIPM HGNC:23455 340654 +LOR HGNC:6663 4014 +LRIT1 HGNC:23404 26103 +LRIT2 HGNC:23443 340745 +LRRC10 HGNC:20264 376132 +LUZP4 HGNC:24971 51213 +LYZL1 HGNC:30502 84569 +LYZL2 HGNC:29613 119180 +LYZL6 HGNC:29614 57151 +MAGEA10 HGNC:6797 4109 +MAGEA11 HGNC:6798 4110 +MAGEB1 HGNC:6808 4112 +MAGEB10 HGNC:25377 139422 +MAGEB18 HGNC:28515 286514 +MAGEB3 HGNC:6810 4114 +MAGEB4 HGNC:6811 4115 +MAGEC3 HGNC:23798 139081 +MAS1 HGNC:6899 4142 +MAS1L HGNC:13961 116511 +MBD3L1 HGNC:15774 85509 +MBD3L2 HGNC:18532 125997 +MBL2 HGNC:6922 4153 +MC2R HGNC:6930 4158 +MC3R HGNC:6931 4159 +MC5R HGNC:6933 4161 +MEP1A HGNC:7015 4224 +MEP1B HGNC:7020 4225 +MEPE HGNC:13361 56955 +MFRP HGNC:18121 83552 +MMD2 HGNC:30133 221938 +MMP20 HGNC:7167 9313 +MMP21 HGNC:7170 8511 +MMP26 HGNC:14249 56547 +MMP27 HGNC:14250 64066 +MOGAT3 HGNC:23249 346606 +MORC1 HGNC:7198 27136 +MRGPRD HGNC:29626 116512 +MRGPRX1 HGNC:17962 259249 +MRGPRX2 HGNC:17983 117194 +MRGPRX4 HGNC:17617 117196 +MS4A10 HGNC:13368 341116 +MS4A13 HGNC:16674 503497 +MS4A5 HGNC:13374 64232 +MSGN1 HGNC:14907 343930 +MT1B HGNC:7394 4490 +MTNR1B HGNC:7464 4544 +MUC17 HGNC:16800 140453 +MUC7 HGNC:7518 4589 +MYBPC3 HGNC:7551 4607 +MYF5 HGNC:7565 4617 +NANOGNB HGNC:24958 360030 +NANOS2 HGNC:23292 339345 +NCR2 HGNC:6732 9436 +NDST4 HGNC:20779 64579 +NEUROD2 HGNC:7763 4761 +NEUROD4 HGNC:13802 58158 +NEUROD6 HGNC:13804 63974 +NEUROG1 HGNC:7764 4762 +NKX2-1 HGNC:11825 7080 +NKX2-2 HGNC:7835 4821 +NLRP4 HGNC:22943 147945 +NLRP5 HGNC:21269 126206 +NLRP8 HGNC:22940 126205 +NLRP9 HGNC:22941 338321 +NMS HGNC:32203 129521 +NOBOX HGNC:22448 135935 +NOTO HGNC:31839 344022 +NOX3 HGNC:7890 50508 +NPFFR1 HGNC:17425 64106 +NPHS2 HGNC:13394 7827 +NPSR1 HGNC:23631 387129 +NPVF HGNC:13782 64111 +NR2E1 HGNC:7973 7101 +NYX HGNC:8082 60506 +OC90 HGNC:8100 729330 +OLIG2 HGNC:9398 10215 +OLIG3 HGNC:18003 167826 +OPALIN HGNC:20707 93377 +OPN1LW HGNC:9936 5956 +OPN5 HGNC:19992 221391 +OR10A2 HGNC:8161 341276 +OR10A4 HGNC:15130 283297 +OR10A5 HGNC:15131 144124 +OR10H1 HGNC:8172 26539 +OR10H2 HGNC:8173 26538 +OR10H3 HGNC:8174 26532 +OR10J1 HGNC:8175 26476 +OR10R2 HGNC:14820 343406 +OR10S1 HGNC:14807 219873 +OR10X1 HGNC:14995 128367 +OR10Z1 HGNC:14996 128368 +OR11A1 HGNC:8176 26531 +OR12D2 HGNC:8178 26529 +OR12D3 HGNC:13963 81797 +OR13C3 HGNC:14704 138803 +OR13D1 HGNC:14695 286365 +OR14A16 HGNC:15022 284532 +OR1A1 HGNC:8179 8383 +OR1A2 HGNC:8180 26189 +OR1B1 HGNC:8181 347169 +OR1D2 HGNC:8183 4991 +OR1E1 HGNC:8189 8387 +OR1E2 HGNC:8190 8388 +OR1G1 HGNC:8204 8390 +OR1L6 HGNC:8218 392390 +OR1N2 HGNC:15111 138882 +OR1S1 HGNC:8227 219959 +OR1S2 HGNC:15141 219958 +OR2AK2 HGNC:19569 391191 +OR2AT4 HGNC:19620 341152 +OR2C1 HGNC:8242 4993 +OR2C3 HGNC:15005 81472 +OR2D2 HGNC:8244 120776 +OR2D3 HGNC:15146 120775 +OR2F1 HGNC:8246 26211 +OR2G2 HGNC:15007 81470 +OR2G3 HGNC:15008 81469 +OR2H1 HGNC:8252 26716 +OR2J2 HGNC:8260 26707 +OR2L3 HGNC:15009 391192 +OR2T1 HGNC:8277 26696 +OR2T10 HGNC:19573 127069 +OR2T12 HGNC:19592 127064 +OR2T2 HGNC:14725 401992 +OR2T27 HGNC:31252 403239 +OR2T33 HGNC:31255 391195 +OR2T4 HGNC:15016 127074 +OR2T5 HGNC:15017 401993 +OR2W1 HGNC:8281 26692 +OR3A1 HGNC:8282 4994 +OR3A2 HGNC:8283 4995 +OR3A3 HGNC:8284 8392 +OR4C11 HGNC:15167 219429 +OR4C3 HGNC:14697 256144 +OR4D1 HGNC:8293 26689 +OR4D10 HGNC:15173 390197 +OR4D11 HGNC:15174 219986 +OR4D9 HGNC:15178 390199 +OR4K17 HGNC:15355 390436 +OR51B6 HGNC:19600 390058 +OR51D1 HGNC:15193 390038 +OR51F2 HGNC:15197 119694 +OR51T1 HGNC:15205 401665 +OR51V1 HGNC:19597 283111 +OR52A1 HGNC:8318 23538 +OR52A5 HGNC:19580 390054 +OR52B2 HGNC:15207 255725 +OR52B6 HGNC:15211 340980 +OR52E8 HGNC:15217 390079 +OR52I2 HGNC:15221 143502 +OR52K2 HGNC:15223 119774 +OR52L1 HGNC:14785 338751 +OR52M1 HGNC:15225 119772 +OR52R1 HGNC:15235 119695 +OR52W1 HGNC:15239 120787 +OR56A1 HGNC:14781 120796 +OR56A4 HGNC:14791 120793 +OR56B1 HGNC:15245 387748 +OR5AU1 HGNC:15362 390445 +OR5C1 HGNC:8331 392391 +OR5I1 HGNC:8347 10798 +OR5M1 HGNC:8352 390168 +OR5M10 HGNC:15290 390167 +OR5P2 HGNC:14783 120065 +OR5P3 HGNC:14784 120066 +OR5R1 HGNC:14841 219479 +OR5T1 HGNC:14821 390155 +OR5T2 HGNC:15296 219464 +OR5T3 HGNC:15297 390154 +OR5V1 HGNC:13972 81696 +OR5W2 HGNC:15299 390148 +OR6A2 HGNC:15301 8590 +OR6K6 HGNC:15033 128371 +OR6S1 HGNC:15363 341799 +OR6V1 HGNC:15090 346517 +OR7A17 HGNC:8363 26333 +OR7C2 HGNC:8374 26658 +OR7D4 HGNC:8380 125958 +OR7G2 HGNC:8466 390882 +OR8A1 HGNC:8469 390275 +OR8B8 HGNC:8477 26493 +OR8G5 HGNC:19622 219865 +OR8U1 HGNC:19611 219417 +OR9Q2 HGNC:15328 219957 +OTOP1 HGNC:19656 133060 +OTOP3 HGNC:19658 347741 +OTOR HGNC:8517 56914 +OTP HGNC:8518 23440 +OTUD6A HGNC:32312 139562 +OTX2 HGNC:8522 5015 +PAGE3 HGNC:4110 139793 +PANX3 HGNC:20573 116337 +PASD1 HGNC:20686 139135 +PAX1 HGNC:8615 5075 +PAX4 HGNC:8618 5078 +PBOV1 HGNC:21079 59351 +PDCL2 HGNC:29524 132954 +PDE6H HGNC:8790 5149 +PDILT HGNC:27338 204474 +PDX1 HGNC:6107 3651 +PDYN HGNC:8820 5173 +PGK2 HGNC:8898 5232 +PGLYRP2 HGNC:30013 114770 +PGLYRP3 HGNC:30014 114771 +PIWIL1 HGNC:9007 9271 +PIWIL3 HGNC:18443 440822 +PKD1L3 HGNC:21716 342372 +PLA2G2E HGNC:13414 30814 +PLA2G2F HGNC:30040 64600 +PLA2G4E HGNC:24791 123745 +OOSP2 HGNC:26699 219990 +PNLIP HGNC:9155 5406 +PNLIPRP1 HGNC:9156 5407 +PNLIPRP2 HGNC:9157 5408 +PNPLA5 HGNC:24888 150379 +POM121L12 HGNC:25369 285877 +POTEA HGNC:33893 340441 +POTED HGNC:23822 317754 +POTEG HGNC:33896 404785 +POTEH HGNC:133 23784 +POU3F4 HGNC:9217 5456 +POU4F2 HGNC:9219 5458 +POU4F3 HGNC:9220 5459 +POU5F2 HGNC:26367 134187 +PPP3R2 HGNC:9318 5535 +PRAMEF1 HGNC:28840 65121 +PRAMEF19 HGNC:24908 645414 +PRAMEF2 HGNC:28841 65122 +PRAMEF3 HGNC:14087 +PRAMEF4 HGNC:31971 400735 +PRAMEF7 HGNC:28415 441871 +PRB1 HGNC:9337 5542 +PRB4 HGNC:9340 5545 +PRDM13 HGNC:13998 59336 +PRDM14 HGNC:14001 63978 +PRDM7 HGNC:9351 11105 +PRDM9 HGNC:13994 56979 +PRG3 HGNC:9363 10394 +PRLH HGNC:17945 51052 +PRLHR HGNC:4464 2834 +PROP1 HGNC:9455 5626 +PRSS33 HGNC:30405 260429 +PRSS37 HGNC:29211 136242 +PRSS38 HGNC:29625 339501 +PRSS41 HGNC:30715 360226 +PRSS55 HGNC:30824 203074 +PRSS58 HGNC:39125 136541 +PRY2 HGNC:21504 442862 +PSKH2 HGNC:18997 85481 +PTF1A HGNC:23734 256297 +RAX HGNC:18662 30062 +RAX2 HGNC:18286 84839 +RBM46 HGNC:28401 166863 +RBMXL2 HGNC:17886 27288 +RBMY1A1 HGNC:9912 5940 +RBMY1B HGNC:23914 378948 +RBMY1D HGNC:23915 378949 +RBMY1E HGNC:23916 378950 +RBMY1F HGNC:23974 159163 +RBMY1J HGNC:23917 378951 +RBP3 HGNC:9921 5949 +RBPJL HGNC:13761 11317 +RD3 HGNC:19689 343035 +RDH8 HGNC:14423 50700 +REG3A HGNC:8601 5068 +RESP18 HGNC:33762 389075 +RETNLB HGNC:20388 84666 +REXO1L1 HGNC:24660 254958 +RFPL3 HGNC:9980 10738 +RFPL4B HGNC:33264 442247 +RFX6 HGNC:21478 222546 +RHO HGNC:10012 6010 +RHOXF2 HGNC:30011 84528 +RNASE10 HGNC:19275 338879 +RNASE11 HGNC:19269 122651 +RNASE12 HGNC:24211 493901 +RNASE13 HGNC:25285 440163 +RNASE8 HGNC:19277 122665 +RNASE9 HGNC:20673 390443 +RND2 HGNC:18315 8153 +RNF113B HGNC:17267 140432 +RNF17 HGNC:10060 56163 +RP1 HGNC:10263 6101 +RP1L1 HGNC:15946 94137 +RPE65 HGNC:10294 6121 +RPTN HGNC:26809 126638 +RS1 HGNC:10457 6247 +RTP1 HGNC:28580 132112 +RTP2 HGNC:32486 344892 +RXFP2 HGNC:17318 122042 +RXFP3 HGNC:24883 51289 +S100A7A HGNC:21657 338324 +S100G HGNC:1436 795 +SAGE1 HGNC:30369 55511 +SAMD7 HGNC:25394 344658 +SCGB1D1 HGNC:18395 10648 +SCN10A HGNC:10582 6336 +SCRT2 HGNC:15952 85508 +SDR9C7 HGNC:29958 121214 +SEC14L3 HGNC:18655 266629 +SEMG2 HGNC:10743 6407 +SEPT14 HGNC:33280 346288 +SERPINA12 HGNC:18359 145264 +SERPINA7 HGNC:11583 6906 +SERPINA9 HGNC:15995 327657 +SERPINB12 HGNC:14220 89777 +SHCBP1L HGNC:16788 81626 +SHOX HGNC:10853 6473 +SI HGNC:10856 6476 +SIGLECL1 HGNC:26856 284369 +SIX6 HGNC:10892 4990 +SLC10A2 HGNC:10906 6555 +SLC13A1 HGNC:10916 6561 +SLC34A1 HGNC:11019 6569 +SLC17A6 HGNC:16703 57084 +SLC18A3 HGNC:10936 6572 +SLC22A12 HGNC:17989 116085 +SLC22A13 HGNC:8494 9390 +SLC22A24 HGNC:28542 283238 +SLC22A25 HGNC:32935 387601 +SLC22A6 HGNC:10970 9356 +SLC22A8 HGNC:10972 9376 +SLC22A9 HGNC:16261 114571 +SLC25A2 HGNC:22921 83884 +SLC25A31 HGNC:25319 83447 +SLC2A2 HGNC:11006 6514 +SLC2A7 HGNC:13445 155184 +SLC32A1 HGNC:11018 140679 +SLC34A1 HGNC:11019 6569 +SLC36A3 HGNC:19659 285641 +SLC39A12 HGNC:20860 221074 +SLC6A18 HGNC:26441 348932 +SLC6A5 HGNC:11051 9152 +SLC6A7 HGNC:11054 6534 +SLC7A13 HGNC:23092 157724 +SLCO1B1 HGNC:10959 10599 +SLCO6A1 HGNC:23613 133482 +SLITRK1 HGNC:20297 114798 +SOHLH1 HGNC:27845 402381 +SOX1 HGNC:11189 6656 +SOX14 HGNC:11193 8403 +SP8 HGNC:19196 221833 +SPACA1 HGNC:14967 81833 +SPACA5 HGNC:31353 389852 +SPACA7 HGNC:29575 122258 +SPATA16 HGNC:29935 83893 +SPATA21 HGNC:28026 374955 +SPEM1 HGNC:32429 374768 +SPHAR HGNC:16957 10638 +SPINK14 HGNC:33825 408187 +SPO11 HGNC:11250 23626 +SPPL2C HGNC:28902 162540 +SPRR4 HGNC:23173 163778 +SSTR4 HGNC:11333 6754 +SSX3 HGNC:11337 10214 +SSX5 HGNC:11339 6758 +SSX7 HGNC:19653 280658 +SSX8 HGNC:19654 280659 +SSX9 HGNC:19655 280660 +STATH HGNC:11369 6779 +SULT6B1 HGNC:33433 391365 +SUN5 HGNC:16252 140732 +TBXT HGNC:11515 6862 +TAAR1 HGNC:17734 134864 +TAAR2 HGNC:4514 9287 +TAAR5 HGNC:30236 9038 +TAAR6 HGNC:20978 319100 +TAAR8 HGNC:14964 83551 +TAAR9 HGNC:20977 134860 +TAS1R2 HGNC:14905 80834 +TAS2R1 HGNC:14909 50834 +TAS2R13 HGNC:14919 50838 +TAS2R16 HGNC:14921 50833 +TAS2R39 HGNC:18886 259285 +TAS2R40 HGNC:18885 259286 +TAS2R41 HGNC:18883 259287 +TAS2R42 HGNC:18888 353164 +TAS2R43 HGNC:18875 259289 +TAS2R46 HGNC:18877 259292 +TAS2R50 HGNC:18882 259296 +TAS2R60 HGNC:20639 338398 +TAS2R7 HGNC:14913 50837 +TAS2R8 HGNC:14915 50836 +TAS2R9 HGNC:14917 50835 +TBC1D21 HGNC:28536 161514 +TBC1D29 HGNC:24509 26083 +TBL1Y HGNC:18502 90665 +TBPL2 HGNC:19841 387332 +TBR1 HGNC:11590 10716 +TBX10 HGNC:11593 347853 +ELOA2 HGNC:30771 51224 +ELOA3 HGNC:24617 162699 +TCHHL1 HGNC:31796 126637 +TCP10L2 HGNC:21254 401285 +TEDDM1 HGNC:30233 127670 +TEX101 HGNC:30722 83639 +TEX13A HGNC:11735 56157 +TEX28 HGNC:2563 1527 +SPATA32 HGNC:26349 124783 +TFAP2D HGNC:15581 83741 +TFDP3 HGNC:24603 51270 +TGIF2LX HGNC:18570 90316 +TGIF2LY HGNC:18569 90655 +TGM6 HGNC:16255 343641 +TKTL2 HGNC:25313 84076 +TLX1 HGNC:5056 3195 +TMEM132D HGNC:29411 121256 +TMEM174 HGNC:28187 134288 +TMEM207 HGNC:33705 131920 +TMEM225 HGNC:32390 338661 +TMIGD1 HGNC:32431 388364 +TMPRSS11A HGNC:27954 339967 +TMPRSS11B HGNC:25398 132724 +TMPRSS11F HGNC:29994 389208 +TMPRSS12 HGNC:28779 283471 +TMPRSS15 HGNC:9490 5651 +TNR HGNC:11953 7143 +TPD52L3 HGNC:23382 89882 +TPH2 HGNC:20692 121278 +TPRX1 HGNC:32174 284355 +TPTE HGNC:12023 7179 +TREML4 HGNC:30807 285852 +TRHR HGNC:12299 7201 +TRIM40 HGNC:18736 135644 +TRIM42 HGNC:19014 287015 +TRIM43 HGNC:19015 129868 +TRIM48 HGNC:19021 79097 +TRIM49 HGNC:13431 57093 +TRIM51 HGNC:19023 84767 +TRIM60 HGNC:21162 166655 +TRIM67 HGNC:31859 440730 +TRIML1 HGNC:26698 339976 +TRPC5 HGNC:12337 7224 +TRPC7 HGNC:20754 57113 +TRPM1 HGNC:7146 4308 +TRPV5 HGNC:3145 56302 +TSGA13 HGNC:12369 114960 +TSHB HGNC:12372 7252 +TSPAN16 HGNC:30725 26526 +TSPO2 HGNC:21256 222642 +TSPY1 HGNC:12381 7258 +TSPYL6 HGNC:14521 388951 +TSSK1B HGNC:14968 83942 +TSSK2 HGNC:11401 23617 +TXNDC8 HGNC:31454 255220 +TYR HGNC:12442 7299 +UBQLN3 HGNC:12510 50613 +UMOD HGNC:12559 7369 +UROC1 HGNC:26444 131669 +USP17L2 HGNC:34434 377630 +USP26 HGNC:13485 83844 +USP29 HGNC:18563 57663 +UTS2R HGNC:4468 2837 +VAX1 HGNC:12660 11023 +VCX3A HGNC:18159 51481 +VHLL HGNC:30666 391104 +VN1R2 HGNC:19872 317701 +VN1R4 HGNC:19871 317703 +VN1R5 HGNC:19870 317705 +VPREB1 HGNC:12709 7441 +VRTN HGNC:20223 55237 +VSX2 HGNC:1975 338917 +WFDC10A HGNC:16139 140832 +WFDC11 HGNC:20478 259239 +WFDC9 HGNC:20380 259240 +XAGE2 HGNC:4112 9502 +XAGE5 HGNC:30930 170627 +XKR7 HGNC:23062 343702 +ZAN HGNC:12857 7455 +ZCCHC13 HGNC:31749 389874 +RTL4 HGNC:25214 340595 +ZG16 HGNC:30961 653808 +ZIC3 HGNC:12874 7547 +ZIM3 HGNC:16366 114026 +CBLL2 HGNC:26371 158506 +ZNF648 HGNC:18190 127665 +ZNF679 HGNC:28650 168417 +ZNF804B HGNC:21958 219578 +ZNRF4 HGNC:17726 148066 +ZP2 HGNC:13188 7783 +ZP4 HGNC:15770 57829 +ZSWIM2 HGNC:30990 151112 + diff --git a/modules/local/bagel2_bf.nf b/modules/local/bagel2_bf.nf index 5299915a..56fb66a0 100644 --- a/modules/local/bagel2_bf.nf +++ b/modules/local/bagel2_bf.nf @@ -26,7 +26,7 @@ process BAGEL2_BF { def prefix = task.ext.prefix ?: "${meta.treatment}" """ - BAGEL.py bf -i $foldchange -o ${meta.treatment} $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} + BAGEL.py bf -i $foldchange -o '${meta.treatment}.pr' $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} """ diff --git a/modules/local/bagel2_fc.nf b/modules/local/bagel2_fc.nf index bc0c4f12..bec12be1 100644 --- a/modules/local/bagel2_fc.nf +++ b/modules/local/bagel2_fc.nf @@ -23,7 +23,7 @@ process BAGEL2_FC { def prefix = task.ext.prefix ?: "${meta.id}" """ - BAGEL.py fc -i $count_table -o ${meta.treatment}_${meta.reference} -c $meta.reference $args + BAGEL.py fc -i $count_table -o ${meta.treatment}_vs_${meta.reference} -c $meta.reference $args """ diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 129c1229..8b060b9f 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -175,28 +175,37 @@ workflow CRISPRSEQ_SCREENING { .set { ch_bagel } counts = ch_bagel.combine(ch_counts) + //MAKE THIS PRETTIER if(!params.bagel_reference_essentials) { - ch_bagel_reference_essentials = Channel.fromPath("${projectDir}/assets/CEGv2.txt", checkIfExists: true) - } + ch_bagel_reference_essentials = Channel.fromPath("${projectDir}/assets/CEGv2.txt") + } else { + ch_bagel_reference_essentials = Channel.fromPath(params.bagel_reference_essentials) + } ch_bagel_reference_essentials.dump(tag: "input joined") if(!params.bagel_reference_nonessentials) { - ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt", checkIfExists: true) - } + ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt") + } else { + ch_bagel_reference_nonessentials = Channel.fromPath(params.bagel_reference_nonessentials) } BAGEL2_FC ( - counts, - ch_bagel_reference_essentials, - ch_bagel_reference_nonessentials + counts ) } + BAGEL2_FC.out.foldchange.dump(tag: "BAGEL2_FC dump") + + test = ch_bagel_reference_essentials.combine(BAGEL2_FC.out.foldchange) + test.dump(tag: "TEST") - //BAGEL2_BF ( - // BAGEL2_FC.out.foldchange - //) + + BAGEL2_BF ( + BAGEL2_FC.out.foldchange, + ch_bagel_reference_essentials, + ch_bagel_reference_nonessentials + ) if(params.mle_design_matrix) { From 0bebd941a03021b612b7ba4675ab9fd6a071effb Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Mon, 31 Jul 2023 10:07:31 +0200 Subject: [PATCH 06/39] working modules of bagel --- modules/local/bagel2_bf.nf | 4 +--- workflows/crisprseq_screening.nf | 11 +++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/modules/local/bagel2_bf.nf b/modules/local/bagel2_bf.nf index 56fb66a0..4d3deb6a 100644 --- a/modules/local/bagel2_bf.nf +++ b/modules/local/bagel2_bf.nf @@ -10,9 +10,7 @@ process BAGEL2_BF { input: - tuple val(meta), path(foldchange) - path(reference_essentials) - path(reference_nonessentials) + tuple val(meta), path(foldchange), path(reference_essentials), path(reference_nonessentials) output: tuple val(meta), path("*.pr"), emit: pr diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 8b060b9f..ff46746f 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -182,7 +182,7 @@ workflow CRISPRSEQ_SCREENING { ch_bagel_reference_essentials = Channel.fromPath(params.bagel_reference_essentials) } - ch_bagel_reference_essentials.dump(tag: "input joined") + //ch_bagel_reference_essentials.dump(tag: "input joined") if(!params.bagel_reference_nonessentials) { ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt") @@ -195,16 +195,15 @@ workflow CRISPRSEQ_SCREENING { ) } - BAGEL2_FC.out.foldchange.dump(tag: "BAGEL2_FC dump") - test = ch_bagel_reference_essentials.combine(BAGEL2_FC.out.foldchange) + test = BAGEL2_FC.out.foldchange.combine(ch_bagel_reference_essentials) + .combine(ch_bagel_reference_nonessentials) + test.dump(tag: "TEST") BAGEL2_BF ( - BAGEL2_FC.out.foldchange, - ch_bagel_reference_essentials, - ch_bagel_reference_nonessentials + test ) From a6d40903775ab4fbd7741a53ad6c00602dab729f Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 1 Aug 2023 14:40:47 +0200 Subject: [PATCH 07/39] All of the bagel modules and output graphs --- modules/local/{bagel2_bf.nf => bagel2/bf.nf} | 4 +- modules/local/{bagel2_fc.nf => bagel2/fc.nf} | 0 modules/local/bagel2/graph.nf | 77 ++++++++++++++++++++ modules/local/bagel2/pr.nf | 30 ++++++++ workflows/crisprseq_screening.nf | 27 +++++-- 5 files changed, 128 insertions(+), 10 deletions(-) rename modules/local/{bagel2_bf.nf => bagel2/bf.nf} (89%) rename modules/local/{bagel2_fc.nf => bagel2/fc.nf} (100%) create mode 100644 modules/local/bagel2/graph.nf create mode 100644 modules/local/bagel2/pr.nf diff --git a/modules/local/bagel2_bf.nf b/modules/local/bagel2/bf.nf similarity index 89% rename from modules/local/bagel2_bf.nf rename to modules/local/bagel2/bf.nf index 4d3deb6a..1353965c 100644 --- a/modules/local/bagel2_bf.nf +++ b/modules/local/bagel2/bf.nf @@ -13,7 +13,7 @@ process BAGEL2_BF { tuple val(meta), path(foldchange), path(reference_essentials), path(reference_nonessentials) output: - tuple val(meta), path("*.pr"), emit: pr + tuple val(meta), path("*.bf"), emit: bf //path "versions.yml" , emit: versions when: @@ -24,7 +24,7 @@ process BAGEL2_BF { def prefix = task.ext.prefix ?: "${meta.treatment}" """ - BAGEL.py bf -i $foldchange -o '${meta.treatment}.pr' $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} + BAGEL.py bf -i $foldchange -o '${meta.treatment}.bf' $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} """ diff --git a/modules/local/bagel2_fc.nf b/modules/local/bagel2/fc.nf similarity index 100% rename from modules/local/bagel2_fc.nf rename to modules/local/bagel2/fc.nf diff --git a/modules/local/bagel2/graph.nf b/modules/local/bagel2/graph.nf new file mode 100644 index 00000000..1bc149a4 --- /dev/null +++ b/modules/local/bagel2/graph.nf @@ -0,0 +1,77 @@ +// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) +// https://github.com/nf-core/modules/tree/master/modules/nf-core/ +// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: +// https://nf-co.re/join +// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. +// All other parameters MUST be provided using the "task.ext" directive, see here: +// https://www.nextflow.io/docs/latest/process.html#ext +// where "task.ext" is a string. +// Any parameters that need to be evaluated in the context of a particular sample +// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. +// TODO nf-core: Software that can be piped together SHOULD be added to separate module files +// unless there is a run-time, storage advantage in implementing in this way +// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: +// bwa mem | samtools view -B -T ref.fasta +// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty +// list (`[]`) instead of a file can be used to work around this issue. + +process BAGEL2_GRAPH { + tag "$meta.id" + label 'process_single' + + conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6 matplotlib=3.7.2" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-54e0353146eca1531516863e8235bf7385d76663:c9ff1a9eec871c54cbea815eae778da702623978-0': + 'biocontainers/mulled-v2-54e0353146eca1531516863e8235bf7385d76663:c9ff1a9eec871c54cbea815eae778da702623978-0' }" + + + input: + tuple val(meta), path(pr) + + output: + //path "versions.yml" , emit: versions + path("*.png") , emit: pictures + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + #!/usr/bin/env python3 + + import pandas as pd + import matplotlib.pyplot as plt + + pr_data = pd.read_table('${pr}', index_col=0) + + plt.plot(pr_data.Recall, pr_data.Precision, linewidth=2) + plt.xlim(0, 1.01) + plt.ylim(0, 1.02) + plt.xlabel('Recall') + plt.ylabel('Precision (1-FDR)') + plt.title('Precision-Recall Plot') + + # Save the plot to a PNG file + file_name = 'PR_plot_{}_vs_{}.png'.format('${meta.treatment}', '${meta.reference}') + + plt.savefig(file_name) + + # Show the plot (optional) + plt.show() + + pr_data.hist('BF', bins=50, range=(-100,100)) + plt.xlabel('Bayes Factor') + plt.ylabel('Number of Genes') + + file_name = 'barplot_{}_vs_{}.png'.format('${meta.treatment}', '${meta.reference}') + + plt.savefig(file_name) + plt.show() + + """ + + +} diff --git a/modules/local/bagel2/pr.nf b/modules/local/bagel2/pr.nf new file mode 100644 index 00000000..4a5616b4 --- /dev/null +++ b/modules/local/bagel2/pr.nf @@ -0,0 +1,30 @@ +process BAGEL2_PR { + tag "$meta.treatment" + label 'process_single' + + conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0': + 'biocontainers/mulled-v2-1ec3f69e7819b1ab3e6f57d16594eb40ed7d6792:f94a27287a1921ce0dacd411d48acff738d3ca90-0' }" + + + input: + tuple val(meta), path(bf), path(reference_essentials), path(reference_nonessentials) + + output: + tuple val(meta), path("*.pr") , emit: pr + + //path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + BAGEL.py pr -i $bf -o '${meta.treatment}.pr' -e $reference_essentials -n $reference_nonessentials + """ + +} diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index ff46746f..317838d2 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -66,8 +66,10 @@ include { MAGECK_MLE } from '../modules/nf-core/mageck/mle/main include { MAGECK_TEST } from '../modules/nf-core/mageck/test/main' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/normalize/main' -include { BAGEL2_FC } from '../modules/local/bagel2_fc' -include { BAGEL2_BF } from '../modules/local/bagel2_bf' +include { BAGEL2_FC } from '../modules/local/bagel2/fc' +include { BAGEL2_BF } from '../modules/local/bagel2/bf' +include { BAGEL2_PR } from '../modules/local/bagel2/pr' +include { BAGEL2_GRAPH } from '../modules/local/bagel2/graph' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -175,7 +177,7 @@ workflow CRISPRSEQ_SCREENING { .set { ch_bagel } counts = ch_bagel.combine(ch_counts) - //MAKE THIS PRETTIER + //TO DO MAKE THIS PRETTIER if(!params.bagel_reference_essentials) { ch_bagel_reference_essentials = Channel.fromPath("${projectDir}/assets/CEGv2.txt") } else { @@ -184,6 +186,7 @@ workflow CRISPRSEQ_SCREENING { //ch_bagel_reference_essentials.dump(tag: "input joined") + //TO DO make this prettier if(!params.bagel_reference_nonessentials) { ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt") } else { @@ -195,17 +198,25 @@ workflow CRISPRSEQ_SCREENING { ) } - - test = BAGEL2_FC.out.foldchange.combine(ch_bagel_reference_essentials) + ch_bagel_bf = BAGEL2_FC.out.foldchange.combine(ch_bagel_reference_essentials) .combine(ch_bagel_reference_nonessentials) - test.dump(tag: "TEST") - BAGEL2_BF ( - test + ch_bagel_bf ) + BAGEL2_BF.out.bf.dump(tag:"BAGEL2_BF dump") + ch_bagel_pr = BAGEL2_BF.out.bf.combine(ch_bagel_reference_essentials) + .combine(ch_bagel_reference_nonessentials) + + BAGEL2_PR ( + ch_bagel_pr + ) + BAGEL2_PR.out.pr.dump(tag:"TEST PR DUMP") + BAGEL2_GRAPH ( + BAGEL2_PR.out.pr + ) if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) From 6ef05ac032b45ea40b451728d59738f582c89ee2 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 8 Aug 2023 09:07:13 +0200 Subject: [PATCH 08/39] Bagel2 --- conf/modules.config | 32 ++++++++++++++++++++++++++++++ modules/local/bagel2/bf.nf | 2 +- modules/local/bagel2/pr.nf | 2 +- modules/nf-core/mageck/mle/main.nf | 2 +- workflows/crisprseq_screening.nf | 21 ++++++-------------- 5 files changed, 41 insertions(+), 18 deletions(-) diff --git a/conf/modules.config b/conf/modules.config index 75765bcd..aee0939a 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -43,6 +43,38 @@ process { ] } + withName: BAGEL2_BF { + publishDir = [ + path: { "${params.outdir}/bagel2/bayes_factor/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: BAGEL2_PR { + publishDir = [ + path: { "${params.outdir}/bagel2/precision_recall/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: BAGEL2_FC { + publishDir = [ + path: { "${params.outdir}/bagel2/fold_change/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + + withName: BAGEL2_GRAPH { + publishDir = [ + path: { "${params.outdir}/bagel2/graphs/" }, + mode: params.publish_dir_mode, + saveAs: { filename -> filename.equals('versions.yml') ? null : filename } + ] + } + withName: FASTQC { ext.args = '--quiet' publishDir = [ diff --git a/modules/local/bagel2/bf.nf b/modules/local/bagel2/bf.nf index 1353965c..f3a3060d 100644 --- a/modules/local/bagel2/bf.nf +++ b/modules/local/bagel2/bf.nf @@ -24,7 +24,7 @@ process BAGEL2_BF { def prefix = task.ext.prefix ?: "${meta.treatment}" """ - BAGEL.py bf -i $foldchange -o '${meta.treatment}.bf' $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} + BAGEL.py bf -i $foldchange -o '${meta.treatment}_vs_${meta.reference}.bf' $args -e $reference_essentials -n $reference_nonessentials -c ${meta.treatment} """ diff --git a/modules/local/bagel2/pr.nf b/modules/local/bagel2/pr.nf index 4a5616b4..b5cd1793 100644 --- a/modules/local/bagel2/pr.nf +++ b/modules/local/bagel2/pr.nf @@ -24,7 +24,7 @@ process BAGEL2_PR { def prefix = task.ext.prefix ?: "${meta.id}" """ - BAGEL.py pr -i $bf -o '${meta.treatment}.pr' -e $reference_essentials -n $reference_nonessentials + BAGEL.py pr -i $bf -o '${meta.treatment}_vs_${meta.reference}.pr' -e $reference_essentials -n $reference_nonessentials """ } diff --git a/modules/nf-core/mageck/mle/main.nf b/modules/nf-core/mageck/mle/main.nf index 626c410d..9c744afe 100644 --- a/modules/nf-core/mageck/mle/main.nf +++ b/modules/nf-core/mageck/mle/main.nf @@ -1,6 +1,6 @@ process MAGECK_MLE { tag "$meta.id" - label 'process_medium' + label 'process_high' conda "bioconda::mageck=0.5.9" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 317838d2..3682e4fe 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -101,6 +101,9 @@ workflow CRISPRSEQ_SCREENING { } } .set { ch_input } + + ch_value = Channel.value(single_end) + ch_value.dump(tag: "ch_value") // // MODULE: Run FastQC // @@ -125,7 +128,6 @@ workflow CRISPRSEQ_SCREENING { joined.dump(tag: "input joined") } - // // MODULE: Run mageck count // @@ -177,20 +179,9 @@ workflow CRISPRSEQ_SCREENING { .set { ch_bagel } counts = ch_bagel.combine(ch_counts) - //TO DO MAKE THIS PRETTIER - if(!params.bagel_reference_essentials) { - ch_bagel_reference_essentials = Channel.fromPath("${projectDir}/assets/CEGv2.txt") - } else { - ch_bagel_reference_essentials = Channel.fromPath(params.bagel_reference_essentials) - } - - //ch_bagel_reference_essentials.dump(tag: "input joined") - - //TO DO make this prettier - if(!params.bagel_reference_nonessentials) { - ch_bagel_reference_nonessentials = Channel.fromPath("${projectDir}/assets/NEGv1.txt") - } else { - ch_bagel_reference_nonessentials = Channel.fromPath(params.bagel_reference_nonessentials) } + //Define non essential and essential genes channels for bagel2 + ch_bagel_reference_essentials= params.bagel_reference_essentials ? Channel.fromPath(params.bagel_reference_essentials) : Channel.fromPath("${projectDir}/assets/CEGv2.txt") + ch_bagel_reference_nonessentials= params.bagel_reference_nonessentials ? Channel.fromPath(params.bagel_reference_nonessentials) : Channel.fromPath("${projectDir}/assets/NEGv1.txt") BAGEL2_FC ( From 7030145e69622588b6cc06bd132182abbe925211 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 8 Aug 2023 09:11:05 +0200 Subject: [PATCH 09/39] Add new features in changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5d26623..6284d434 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,9 +9,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Template update v2.9 ([#52](https://github.com/nf-core/crisprseq/pull/52)) - Use `Channel.fromSamplesheet()` from `nf-validation` to validate input sample sheets and create an input channel ([#58](https://github.com/nf-core/crisprseq/pull/58)) +- BAGEL2 as a module which detects gene essentiality ### Fixed +- Change to `process_high` for the mageck mle module ### Deprecated ## [v2.0.0 - Paprika Lovelace](https://github.com/nf-core/crisprseq/releases/tag/2.0.0) - [05.07.2023] From 5be5815247eec5f0f29d8e965e5f96f0d03b70eb Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 8 Aug 2023 14:44:24 +0200 Subject: [PATCH 10/39] Fixed paired-end --- modules/nf-core/mageck/count/main.nf | 14 +++++++---- workflows/crisprseq_screening.nf | 36 +++++++++++++--------------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/modules/nf-core/mageck/count/main.nf b/modules/nf-core/mageck/count/main.nf index 01691029..ced51e85 100644 --- a/modules/nf-core/mageck/count/main.nf +++ b/modules/nf-core/mageck/count/main.nf @@ -1,6 +1,6 @@ process MAGECK_COUNT { tag "$meta.id" - label 'process_medium' + label 'process_high' conda "bioconda::mageck=0.5.9" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -26,9 +26,15 @@ process MAGECK_COUNT { script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" + // def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" def sample_label = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--sample-label ${meta.id}" : '' - + + if (meta.single_end && ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz"))) { + input = "--fastq ${inputfile}" + } else { + input = "--fastq ${inputfile[0]} --fastq-2 ${inputfile[1]}" + } + """ mageck \\ count \\ @@ -36,7 +42,7 @@ process MAGECK_COUNT { -l $library \\ -n $prefix \\ $sample_label \\ - $input_file \\ + $input cat <<-END_VERSIONS > versions.yml diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 3682e4fe..52b24c9a 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -88,45 +88,43 @@ workflow CRISPRSEQ_SCREENING { // // Create input channel from input file provided through params.input // - single_end = true Channel.fromSamplesheet("input") .map{ meta, fastq_1, fastq_2, x, y, z -> // x (reference), y (protospacer), and z (template) are part of the targeted workflows and we don't need them - if (!fastq_2) { - single_end = true - return [ meta, [ fastq_1 ] ] - } else { - single_end = false - return [ meta, [ fastq_1, fastq_2 ] ] - } + return [ meta + [ single_end:fastq_2?false:true ], fastq_2?[ fastq_1, fastq_2 ]:[ fastq_1 ] ] } .set { ch_input } - ch_value = Channel.value(single_end) - ch_value.dump(tag: "ch_value") + + ch_input.dump(tag: "ch_input") // // MODULE: Run FastQC // FASTQC ( ch_input ) + + ch_versions = ch_versions.mix(FASTQC.out.versions.first()) - if(single_end==true) { + ch_input - .map { meta, fastq -> - [meta.condition, fastq] + .map { meta, fastq -> + [meta.condition, fastq, meta.single_end] } .reduce { a, b -> - ["${a[0]},${b[0]}", a[1] + b[1]] + if(a[2] != b[2] ) { + error "Your samplesheet contains a mix of single-end and paired-end data. This is not supported." + } + return ["${a[0]},${b[0]}", a[1] + b[1], b[2]] } - .map { condition, fastqs -> - [[id: condition], fastqs] + .map { condition, fastqs, single_end -> + [[id: condition, single_end: single_end], fastqs] } .set { joined } joined.dump(tag: "input joined") - } + // // MODULE: Run mageck count @@ -187,7 +185,7 @@ workflow CRISPRSEQ_SCREENING { BAGEL2_FC ( counts ) - } + ch_bagel_bf = BAGEL2_FC.out.foldchange.combine(ch_bagel_reference_essentials) .combine(ch_bagel_reference_nonessentials) @@ -208,7 +206,7 @@ workflow CRISPRSEQ_SCREENING { BAGEL2_GRAPH ( BAGEL2_PR.out.pr ) - + } if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) ch_mle.map { From 2519663efcfc77d5ebc74d5b6b27bfd7dd861a4c Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 09:22:16 +0200 Subject: [PATCH 11/39] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f086f1c3..f9f6159b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Template update v2.9 ([#52](https://github.com/nf-core/crisprseq/pull/52)) - Use `Channel.fromSamplesheet()` from `nf-validation` to validate input sample sheets and create an input channel ([#58](https://github.com/nf-core/crisprseq/pull/58)) -- BAGEL2 as a module which detects gene essentiality +- BAGEL2 as a module which detects gene essentiality ([#60](https://github.com/nf-core/crisprseq/pull/60)) ### Fixed From 65c0f6f010619b4472d2df4e2d723d46743fb6ba Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 09:22:35 +0200 Subject: [PATCH 12/39] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9f6159b..a3e18bae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Change to `process_high` for the mageck mle module +- Change to `process_high` for the mageck mle module ([#60](https://github.com/nf-core/crisprseq/pull/60) - Summary processes don't modify the input file anymore, allowing resuming these processes ([#66](https://github.com/nf-core/crisprseq/pull/66)) - Do not stash unexistent files, use empty lists instead. Fixes AWS tests ([#67](https://github.com/nf-core/crisprseq/pull/67)) - Rename process `merging_summary` to `preprocessing_summary` to improve clarity ([#69](https://github.com/nf-core/crisprseq/pull/69)) From 2be7f3b4c9bf0d5a4079b707eb20e23bbec6b32d Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 11:40:30 +0200 Subject: [PATCH 13/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 52b24c9a..730478fe 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -69,7 +69,7 @@ include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/no include { BAGEL2_FC } from '../modules/local/bagel2/fc' include { BAGEL2_BF } from '../modules/local/bagel2/bf' include { BAGEL2_PR } from '../modules/local/bagel2/pr' -include { BAGEL2_GRAPH } from '../modules/local/bagel2/graph' +include { BAGEL2_GRAPH } from '../modules/local/bagel2/graph' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From ea07b75991267a372690d45927263891a91e8fa2 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 11:41:04 +0200 Subject: [PATCH 14/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 730478fe..dee43eeb 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -91,7 +91,7 @@ workflow CRISPRSEQ_SCREENING { Channel.fromSamplesheet("input") .map{ meta, fastq_1, fastq_2, x, y, z -> // x (reference), y (protospacer), and z (template) are part of the targeted workflows and we don't need them - return [ meta + [ single_end:fastq_2?false:true ], fastq_2?[ fastq_1, fastq_2 ]:[ fastq_1 ] ] + return [ meta + [ single_end:fastq_2?false:true ], fastq_2?[ fastq_1, fastq_2 ]:[ fastq_1 ] ] } .set { ch_input } From 9278293a2bfae6be856a45c11033c0fe068fb5db Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 12:40:04 +0200 Subject: [PATCH 15/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index dee43eeb..94fbd7ee 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -95,8 +95,6 @@ workflow CRISPRSEQ_SCREENING { } .set { ch_input } - - ch_input.dump(tag: "ch_input") // // MODULE: Run FastQC // From 4cc4bba46cf578e75caa5de0588c80c515bed62c Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 12:41:25 +0200 Subject: [PATCH 16/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 2 -- 1 file changed, 2 deletions(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 94fbd7ee..a9c3348a 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -121,8 +121,6 @@ workflow CRISPRSEQ_SCREENING { } .set { joined } - joined.dump(tag: "input joined") - // // MODULE: Run mageck count From d0b21d9d761812f4ef2dd218ff0840a3cd886b35 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 12:43:09 +0200 Subject: [PATCH 17/39] formatting --- modules/local/bagel2/bf.nf | 4 +++- nextflow.config | 2 +- nextflow_schema.json | 4 ++-- workflows/crisprseq_screening.nf | 16 ++++++---------- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/modules/local/bagel2/bf.nf b/modules/local/bagel2/bf.nf index f3a3060d..9f5fe090 100644 --- a/modules/local/bagel2/bf.nf +++ b/modules/local/bagel2/bf.nf @@ -10,7 +10,9 @@ process BAGEL2_BF { input: - tuple val(meta), path(foldchange), path(reference_essentials), path(reference_nonessentials) + tuple val(meta), path(foldchange) + path(reference_essentials) + path(reference_nonessentials) output: tuple val(meta), path("*.bf"), emit: bf diff --git a/nextflow.config b/nextflow.config index bf675e5f..eeeca587 100644 --- a/nextflow.config +++ b/nextflow.config @@ -21,7 +21,7 @@ params { count_table = null min_reads = 30 min_targeted_genes = 3 - bagel_reference_essentials = 'https://raw.githubusercontent.com/hart-lab/bagel/master/CEGv2.txt' + bagel_reference_essentials = 'https://raw.githubusercontent.com/hart-lab/bagel/master/CEGv2.txt' bagel_reference_nonessentials = 'https://raw.githubusercontent.com/hart-lab/bagel/master/NEGv1.txt' // Pipeline steps diff --git a/nextflow_schema.json b/nextflow_schema.json index c5774253..211f5f1a 100644 --- a/nextflow_schema.json +++ b/nextflow_schema.json @@ -196,12 +196,12 @@ "bagel_reference_essentials": { "type": "string", "description": "Core essential gene set for BAGEL2", - "default": "https://github.com/hart-lab/bagel/blob/master/CEGv2.txt" + "default": "https://raw.githubusercontent.com/hart-lab/bagel/master/CEGv2.txt" }, "bagel_reference_nonessentials": { "type": "string", "description": "Non essential gene set for BAGEL2", - "default": "https://github.com/hart-lab/bagel/blob/master/NEGv1.txt" + "default": "https://raw.githubusercontent.com/hart-lab/bagel/master/NEGv1.txt" } } }, diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 52b24c9a..586b8dc8 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -69,7 +69,7 @@ include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/no include { BAGEL2_FC } from '../modules/local/bagel2/fc' include { BAGEL2_BF } from '../modules/local/bagel2/bf' include { BAGEL2_PR } from '../modules/local/bagel2/pr' -include { BAGEL2_GRAPH } from '../modules/local/bagel2/graph' +include { BAGEL2_GRAPH } from '../modules/local/bagel2/graph' /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -178,24 +178,20 @@ workflow CRISPRSEQ_SCREENING { counts = ch_bagel.combine(ch_counts) //Define non essential and essential genes channels for bagel2 - ch_bagel_reference_essentials= params.bagel_reference_essentials ? Channel.fromPath(params.bagel_reference_essentials) : Channel.fromPath("${projectDir}/assets/CEGv2.txt") - ch_bagel_reference_nonessentials= params.bagel_reference_nonessentials ? Channel.fromPath(params.bagel_reference_nonessentials) : Channel.fromPath("${projectDir}/assets/NEGv1.txt") + ch_bagel_reference_essentials= params.bagel_reference_essentials ? Channel.value(params.bagel_reference_essentials) : Channel.value("${projectDir}/assets/CEGv2.txt") + ch_bagel_reference_nonessentials= params.bagel_reference_nonessentials ? Channel.value(params.bagel_reference_nonessentials) : Channel.value("${projectDir}/assets/NEGv1.txt") BAGEL2_FC ( counts ) - - ch_bagel_bf = BAGEL2_FC.out.foldchange.combine(ch_bagel_reference_essentials) - .combine(ch_bagel_reference_nonessentials) - - BAGEL2_BF ( - ch_bagel_bf + BAGEL2_FC.out.foldchange, + ch_bagel_reference_essentials, + ch_bagel_reference_nonessentials ) - BAGEL2_BF.out.bf.dump(tag:"BAGEL2_BF dump") ch_bagel_pr = BAGEL2_BF.out.bf.combine(ch_bagel_reference_essentials) .combine(ch_bagel_reference_nonessentials) From 6c8993bda1e6f7f3c1b71eeb996901e192ebaff1 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 12:55:45 +0200 Subject: [PATCH 18/39] test --- modules/local/bagel2/graph.nf | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/modules/local/bagel2/graph.nf b/modules/local/bagel2/graph.nf index 1bc149a4..4a48b7a3 100644 --- a/modules/local/bagel2/graph.nf +++ b/modules/local/bagel2/graph.nf @@ -1,20 +1,3 @@ -// TODO nf-core: If in doubt look at other nf-core/modules to see how we are doing things! :) -// https://github.com/nf-core/modules/tree/master/modules/nf-core/ -// You can also ask for help via your pull request or on the #modules channel on the nf-core Slack workspace: -// https://nf-co.re/join -// TODO nf-core: A module file SHOULD only define input and output files as command-line parameters. -// All other parameters MUST be provided using the "task.ext" directive, see here: -// https://www.nextflow.io/docs/latest/process.html#ext -// where "task.ext" is a string. -// Any parameters that need to be evaluated in the context of a particular sample -// e.g. single-end/paired-end data MUST also be defined and evaluated appropriately. -// TODO nf-core: Software that can be piped together SHOULD be added to separate module files -// unless there is a run-time, storage advantage in implementing in this way -// e.g. it's ok to have a single module for bwa to output BAM instead of SAM: -// bwa mem | samtools view -B -T ref.fasta -// TODO nf-core: Optional inputs are not currently supported by Nextflow. However, using an empty -// list (`[]`) instead of a file can be used to work around this issue. - process BAGEL2_GRAPH { tag "$meta.id" label 'process_single' @@ -29,9 +12,9 @@ process BAGEL2_GRAPH { tuple val(meta), path(pr) output: - //path "versions.yml" , emit: versions path("*.png") , emit: pictures + when: task.ext.when == null || task.ext.when From 29dc2bd6223e0daa1187b9ea419fa525d5349de4 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 9 Aug 2023 14:35:08 +0200 Subject: [PATCH 19/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 9e020e1a..ff495e3a 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -194,7 +194,6 @@ workflow CRISPRSEQ_SCREENING { BAGEL2_PR ( ch_bagel_pr ) - BAGEL2_PR.out.pr.dump(tag:"TEST PR DUMP") BAGEL2_GRAPH ( BAGEL2_PR.out.pr ) From f8210a462f328ff41176873780d769b5550f87aa Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 16 Aug 2023 14:41:02 +0200 Subject: [PATCH 20/39] Add doc --- CITATIONS.md | 4 ++++ docs/output/screening.md | 20 ++++++++++++++++++++ workflows/crisprseq_screening.nf | 11 +++-------- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CITATIONS.md b/CITATIONS.md index e279aae8..2f5384ed 100644 --- a/CITATIONS.md +++ b/CITATIONS.md @@ -63,6 +63,10 @@ > Li, W. et al. Quality control, modeling, and visualization of CRISPR screens with MAGeCK-VISPR. Genome Biology 16, 281, doi:10.1186/s13059-015-0843-6 (2015). +- [BAGEL2](https://pubmed.ncbi.nlm.nih.gov/33407829/) + + > Kim E, Hart T. Improved analysis of CRISPR fitness screens and reduced off-target effects with the BAGEL2 gene essentiality classifier. Genome Med. 2021 Jan 6;13(1):2. doi: 10.1186/s13073-020-00809-3. PMID: 33407829; PMCID: PMC7789424. + - [BioContainers](https://pubmed.ncbi.nlm.nih.gov/28379341/) > da Veiga Leprevost F, Grüning B, Aflitos SA, Röst HL, Uszkoreit J, Barsnes H, Vaudel M, Moreno P, Gatto L, Weber J, Bai M, Jimenez RC, Sachsenberg T, Pfeuffer J, Alvarez RV, Griss J, Nesvizhskii AI, Perez-Riverol Y. BioContainers: an open-source and community-driven framework for software standardization. Bioinformatics. 2017 Aug 15;33(16):2580-2582. doi: 10.1093/bioinformatics/btx192. PubMed PMID: 28379341; PubMed Central PMCID: PMC5870671. diff --git a/docs/output/screening.md b/docs/output/screening.md index bb45fdcc..e51bb43a 100644 --- a/docs/output/screening.md +++ b/docs/output/screening.md @@ -97,6 +97,26 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [MAGeCK](https://sourceforge.net/p/mageck/wiki/Home/) is a computational tool to identify important genes from CRISPR-Cas9 screens. +### BAGEL2 + +
+Output files + +- `bagel2/fold_change` + - `*.foldchange`: foldchange between the reference and treatment contrast provided +- `bagel2/bayes_factor` + - `*.bf`: bayes factor per gene +- `bagel2/precision_recall` + - `*.pr`: precision recall per gene +- `bagel2/graphs` + - `barplot*.png`: barplot of the bayes factor distribution + - `PR*.png`: precision recall plot (Recall vs FDR) + +
+ +[bagel2](https://github.com/hart-lab/bagel) is a computational tool to identify important essential genes for CRISPR-Cas9 screening experiments. + + ## MultiQC
diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index ff495e3a..54a2d3b0 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -15,10 +15,6 @@ log.info logo + paramsSummaryLog(workflow) + citation WorkflowCrisprseq.initialise(params, log) -// Check input path parameters to see if they exist -def checkPathParamList = [ params.multiqc_config, params.reference_fasta, params.library] -for (param in checkPathParamList) { if (param) { file(param, checkIfExists: true) } } - // Check mandatory parameters //if (!params.count_table) { ch_input = file(params.input) } else { error('Input samplesheet not specified!') } if (params.library) { ch_library = file(params.library) } @@ -91,7 +87,7 @@ workflow CRISPRSEQ_SCREENING { Channel.fromSamplesheet("input") .map{ meta, fastq_1, fastq_2, x, y, z -> // x (reference), y (protospacer), and z (template) are part of the targeted workflows and we don't need them - return [ meta + [ single_end:fastq_2?false:true ], fastq_2?[ fastq_1, fastq_2 ]:[ fastq_1 ] ] + return [ meta + [ single_end:fastq_2?false:true ], fastq_2?[ fastq_1, fastq_2 ]:[ fastq_1 ] ] } .set { ch_input } @@ -174,9 +170,8 @@ workflow CRISPRSEQ_SCREENING { counts = ch_bagel.combine(ch_counts) //Define non essential and essential genes channels for bagel2 - ch_bagel_reference_essentials= params.bagel_reference_essentials ? Channel.value(params.bagel_reference_essentials) : Channel.value("${projectDir}/assets/CEGv2.txt") - ch_bagel_reference_nonessentials= params.bagel_reference_nonessentials ? Channel.value(params.bagel_reference_nonessentials) : Channel.value("${projectDir}/assets/NEGv1.txt") - + ch_bagel_reference_essentials= Channel.value(params.bagel_reference_essentials) + ch_bagel_reference_nonessentials= Channel.value(params.bagel_reference_nonessentials) BAGEL2_FC ( counts From e21fc25b08ee19f81f2fb304311859410f5b3519 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 16 Aug 2023 14:58:28 +0200 Subject: [PATCH 21/39] fix meta id --- modules/local/bagel2/graph.nf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/local/bagel2/graph.nf b/modules/local/bagel2/graph.nf index 4a48b7a3..8ca0d84c 100644 --- a/modules/local/bagel2/graph.nf +++ b/modules/local/bagel2/graph.nf @@ -1,5 +1,5 @@ process BAGEL2_GRAPH { - tag "$meta.id" + tag "${meta.treatment}_${meta.reference}" label 'process_single' conda "python=3.11.4 pandas=2.0.3 numpy=1.25.1 scikit-learn=1.3.0 click=8.1.6 matplotlib=3.7.2" From 63f328a42ffb85910bc30a5f6fa8afd7696ab5ff Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 16 Aug 2023 15:16:54 +0200 Subject: [PATCH 22/39] Ran nf-core modules patch --- .../nf-core/mageck/count/mageck-count.diff | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/modules/nf-core/mageck/count/mageck-count.diff b/modules/nf-core/mageck/count/mageck-count.diff index 87f8e83c..53659a20 100644 --- a/modules/nf-core/mageck/count/mageck-count.diff +++ b/modules/nf-core/mageck/count/mageck-count.diff @@ -1,6 +1,14 @@ Changes in module 'nf-core/mageck/count' --- modules/nf-core/mageck/count/main.nf +++ modules/nf-core/mageck/count/main.nf +@@ -1,6 +1,6 @@ + process MAGECK_COUNT { + tag "$meta.id" +- label 'process_medium' ++ label 'process_high' + + conda "bioconda::mageck=0.5.9" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -12,8 +12,12 @@ path(library) @@ -15,14 +23,32 @@ Changes in module 'nf-core/mageck/count' path "versions.yml" , emit: versions when: -@@ -22,7 +26,7 @@ +@@ -22,9 +26,15 @@ script: def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - def input_file = ("$inputfile".endsWith(".fastq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" -+ def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" ++ // def input_file = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--fastq ${inputfile}" : "-k ${inputfile}" def sample_label = ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz")) ? "--sample-label ${meta.id}" : '' - +- ++ ++ if (meta.single_end && ("$inputfile".endsWith(".fastq.gz") || "$inputfile".endsWith(".fq.gz"))) { ++ input = "--fastq ${inputfile}" ++ } else { ++ input = "--fastq ${inputfile[0]} --fastq-2 ${inputfile[1]}" ++ } ++ """ + mageck \\ + count \\ +@@ -32,7 +42,7 @@ + -l $library \\ + -n $prefix \\ + $sample_label \\ +- $input_file \\ ++ $input + + + cat <<-END_VERSIONS > versions.yml ************************************************************ From 90eb2879b60f5b5752e86e4e79d040950558f8d3 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 16 Aug 2023 15:42:49 +0200 Subject: [PATCH 23/39] Add license --- assets/CEGv2.txt | 685 ---------------------------------- assets/NEGv1.txt | 929 ----------------------------------------------- bin/BAGEL.py | 52 ++- 3 files changed, 40 insertions(+), 1626 deletions(-) delete mode 100644 assets/CEGv2.txt delete mode 100644 assets/NEGv1.txt diff --git a/assets/CEGv2.txt b/assets/CEGv2.txt deleted file mode 100644 index fa3ce335..00000000 --- a/assets/CEGv2.txt +++ /dev/null @@ -1,685 +0,0 @@ -GENE HGNC_ID ENTREZ_ID -AARS HGNC:20 16 -ABCE1 HGNC:69 6059 -ABCF1 HGNC:70 23 -ACTB HGNC:132 60 -ACTL6A HGNC:24124 86 -ACTR10 HGNC:17372 55860 -ACTR2 HGNC:169 10097 -ADSL HGNC:291 158 -ADSS HGNC:292 159 -AHCY HGNC:343 191 -ALG1 HGNC:18294 56052 -ALG14 HGNC:28287 199857 -ALG2 HGNC:23159 85365 -ANAPC2 HGNC:19989 29882 -ANAPC4 HGNC:19990 29945 -ANAPC5 HGNC:15713 51433 -AQR HGNC:29513 9716 -ARCN1 HGNC:649 372 -ARIH1 HGNC:689 25820 -ARL2 HGNC:693 402 -ATP2A2 HGNC:812 488 -ATP5F1A HGNC:823 498 -ATP5F1B HGNC:830 506 -ATP5F1C HGNC:833 509 -ATP5F1D HGNC:837 513 -ATP5J2-PTCD1 NA -ATP5MG HGNC:14247 10632 -ATP5PO HGNC:850 539 -ATP6V0B HGNC:861 533 -ATP6V0C HGNC:855 527 -ATP6V1A HGNC:851 523 -ATP6V1D HGNC:13527 51382 -ATP6V1E1 HGNC:857 529 -ATR HGNC:882 545 -AURKB HGNC:11390 9212 -BANF1 HGNC:17397 8815 -BIRC5 HGNC:593 332 -BUB1B HGNC:1149 701 -BUB3 HGNC:1151 9184 -BUD31 HGNC:29629 8896 -BYSL HGNC:1157 705 -TWNK HGNC:1160 56652 -C1orf109 HGNC:26039 54955 -CFAP298 HGNC:1301 56683 -NEPRO HGNC:24496 25871 -SPOUT1 HGNC:26933 51490 -CCDC84 HGNC:30460 338657 -YJU2 HGNC:25518 55702 -CCNA2 HGNC:1578 890 -CCNH HGNC:1594 902 -CCNK HGNC:1596 8812 -CCT2 HGNC:1615 10576 -CCT3 HGNC:1616 7203 -CCT4 HGNC:1617 10575 -CCT5 HGNC:1618 22948 -CCT6A HGNC:1620 908 -CCT7 HGNC:1622 10574 -CCT8 HGNC:1623 10694 -CDC123 HGNC:16827 8872 -CDC16 HGNC:1720 8881 -CDC20 HGNC:1723 991 -CDC27 HGNC:1728 996 -CDC37 HGNC:1735 11140 -CDC5L HGNC:1743 988 -CDC73 HGNC:16783 79577 -CDK1 HGNC:1722 983 -CDK7 HGNC:1778 1022 -CDK9 HGNC:1780 1025 -CDT1 HGNC:24576 81620 -CEBPZ HGNC:24218 10153 -CENPA HGNC:1851 1058 -CENPC NA -CFL1 HGNC:1874 1072 -CHAF1A HGNC:1910 10036 -CHAF1B HGNC:1911 8208 -CHEK1 HGNC:1925 1111 -CHERP HGNC:16930 10523 -CHMP2A HGNC:30216 27243 -CHMP6 HGNC:25675 79643 -CIAO1 HGNC:14280 9391 -CINP HGNC:23789 51550 -UTP4 HGNC:1983 84916 -CKAP5 HGNC:28959 9793 -CLNS1A HGNC:2080 1207 -CLP1 HGNC:16999 10978 -CLTC HGNC:2092 1213 -CMPK1 HGNC:18170 51727 -CMTR1 NA -CNOT3 HGNC:7879 4849 -COA5 HGNC:33848 493753 -COPA HGNC:2230 1314 -COPB1 HGNC:2231 1315 -COPB2 HGNC:2232 9276 -COPS3 HGNC:2239 8533 -COPS6 HGNC:21749 10980 -COPZ1 HGNC:2243 22818 -COQ4 HGNC:19693 51117 -COX10 HGNC:2260 1352 -COX11 HGNC:2261 1353 -COX15 HGNC:2263 1355 -COX4I1 HGNC:2265 1327 -COX5B HGNC:2269 1329 -COX6B1 HGNC:2280 1340 -CPSF1 HGNC:2324 29894 -CPSF2 HGNC:2325 53981 -CPSF3 HGNC:2326 51692 -CPSF4 HGNC:2327 10898 -CRNKL1 HGNC:15762 51340 -CSE1L HGNC:2431 1434 -CTDP1 HGNC:2498 9150 -CTPS1 HGNC:2519 1503 -CTR9 HGNC:16850 9646 -CYCS HGNC:19986 54205 -DAD1 HGNC:2664 1603 -DBR1 HGNC:15594 51163 -DCTN5 HGNC:24594 84516 -DDB1 HGNC:2717 1642 -DDOST HGNC:2728 1650 -DDX10 HGNC:2735 1662 -DDX18 HGNC:2741 8886 -DDX20 HGNC:2743 11218 -DDX21 HGNC:2744 9188 -DDX27 HGNC:15837 55661 -DDX41 HGNC:18674 51428 -DDX47 HGNC:18682 51202 -DDX49 HGNC:18684 54555 -DDX55 HGNC:20085 57696 -DDX56 HGNC:18193 54606 -DGCR8 HGNC:2847 54487 -DHODH HGNC:2867 1723 -DHPS HGNC:2869 1725 -DHX15 HGNC:2738 1665 -DHX33 HGNC:16718 56919 -DHX37 HGNC:17210 57647 -DHX8 HGNC:2749 1659 -DHX9 HGNC:2750 1660 -UTP25 HGNC:28440 27042 -DIMT1 HGNC:30217 27292 -DIS3 HGNC:20604 22894 -DKC1 HGNC:2890 1736 -DLST HGNC:2911 1743 -DMAP1 HGNC:18291 55929 -DNAJA3 HGNC:11808 9093 -DNAJC9 HGNC:19123 23234 -DNM2 HGNC:2974 1785 -DNMT1 HGNC:2976 1786 -DOLK HGNC:23406 22845 -DONSON HGNC:2993 29980 -DPAGT1 HGNC:2995 1798 -DTL HGNC:30288 51514 -DTYMK HGNC:3061 1841 -DYNC1I2 HGNC:2964 1781 -ECD HGNC:17029 11319 -EEF2 HGNC:3214 1938 -EFTUD2 HGNC:30858 9343 -EIF2B1 HGNC:3257 1967 -EIF2B3 HGNC:3259 8891 -EIF2B5 HGNC:3261 8893 -EIF2S1 HGNC:3265 1965 -EIF2S2 HGNC:3266 8894 -EIF2S3 HGNC:3267 1968 -EIF3A HGNC:3271 8661 -EIF3B HGNC:3280 8662 -EIF3C HGNC:3279 8663 -EIF3D HGNC:3278 8664 -EIF3G HGNC:3274 8666 -EIF3I HGNC:3272 8668 -EIF4A3 HGNC:18683 9775 -EIF5A HGNC:3300 1984 -EIF5B HGNC:30793 9669 -EIF6 HGNC:6159 3692 -ELAC2 HGNC:14198 60528 -ELL HGNC:23114 8178 -EPRS HGNC:3418 2058 -ERCC2 HGNC:3434 2068 -ERCC3 HGNC:3435 2071 -ERH HGNC:3447 2079 -EXOSC2 HGNC:17097 23404 -EXOSC3 HGNC:17944 51010 -EXOSC4 HGNC:18189 54512 -EXOSC6 HGNC:19055 118460 -EXOSC7 HGNC:28112 23016 -EXOSC8 HGNC:17035 11340 -CIAO2B HGNC:24261 51647 -FARS2 HGNC:21062 10667 -FARSA HGNC:3592 2193 -FARSB HGNC:17800 10056 -FAU HGNC:3597 2197 -FNTA HGNC:3782 2339 -FNTB HGNC:3785 2342 -FTSJ3 HGNC:17136 117246 -GABPA HGNC:4071 2551 -GAPDH HGNC:4141 2597 -GART HGNC:4163 2618 -GEMIN5 HGNC:20043 25929 -GEMIN8 HGNC:26044 54960 -GFM1 HGNC:13780 85476 -GGPS1 HGNC:4249 9453 -GINS2 HGNC:24575 51659 -GINS3 HGNC:25851 64785 -GINS4 HGNC:28226 84296 -GMPPB HGNC:22932 29925 -GMPS HGNC:4378 8833 -RACK1 HGNC:4399 10399 -GNL3 HGNC:29931 26354 -GPN3 HGNC:30186 51184 -GPS1 HGNC:4549 2873 -GRPEL1 HGNC:19696 80273 -GRWD1 HGNC:21270 83743 -GSPT1 HGNC:4621 2935 -GTF2B HGNC:4648 2959 -GTF2H1 HGNC:4655 2965 -GTF2H2C HGNC:31394 728340 -GTF2H4 HGNC:4658 2968 -GTF3A HGNC:4662 2971 -GTF3C1 HGNC:4664 2975 -GTF3C2 HGNC:4665 2976 -GTF3C5 HGNC:4668 9328 -GTPBP4 HGNC:21535 23560 -GUK1 HGNC:4693 2987 -HARS HGNC:4816 3035 -HAUS1 HGNC:25174 115106 -HAUS5 HGNC:29130 23354 -HCFC1 HGNC:4839 3054 -HDAC3 HGNC:4854 8841 -HEATR1 HGNC:25517 55127 -HINFP HGNC:17850 25988 -HIST1H2AJ HGNC:4727 8331 -HIST2H2AA3 HGNC:4736 8337 -HJURP HGNC:25444 55355 -HNRNPC HGNC:5035 3183 -HNRNPK HGNC:5044 3190 -HNRNPL HGNC:5045 3191 -HNRNPU HGNC:5048 3192 -HSD17B10 HGNC:4800 3028 -HSPA9 HGNC:5244 3313 -HSPD1 HGNC:5261 3329 -HUWE1 HGNC:30892 10075 -HYPK HGNC:18418 25764 -IARS HGNC:5330 3376 -IGBP1 HGNC:5461 3476 -ILF3 HGNC:6038 3609 -IMP3 HGNC:14497 55272 -IMP4 HGNC:30856 92856 -INTS1 HGNC:24555 26173 -INTS3 HGNC:26153 65123 -INTS8 HGNC:26048 55656 -INTS9 HGNC:25592 55756 -IPO13 HGNC:16853 9670 -ISCU HGNC:29882 23479 -ISG20L2 HGNC:25745 81875 -KANSL3 HGNC:25473 55683 -KARS HGNC:6215 3735 -KAT8 HGNC:17933 84148 -KIF11 HGNC:6388 3832 -KIF23 HGNC:6392 9493 -KPNB1 HGNC:6400 3837 -KRI1 HGNC:25769 65095 -KRR1 HGNC:5176 11103 -LARS HGNC:6512 51520 -LAS1L HGNC:25726 81887 -LONP1 HGNC:9479 9361 -LRR1 HGNC:19742 122769 -LSG1 HGNC:25652 55341 -LSM11 HGNC:30860 134353 -LSM12 HGNC:26407 124801 -LSM2 HGNC:13940 57819 -LSM7 HGNC:20470 51690 -LUC7L3 HGNC:24309 51747 -MAD2L1 HGNC:6763 4085 -MAGOH HGNC:6815 4116 -MAK16 HGNC:13703 84549 -MARS HGNC:6898 4141 -MARS2 HGNC:25133 92935 -MASTL HGNC:19042 84930 -MCM3 HGNC:6945 4172 -MCM3AP HGNC:6946 8888 -MCM4 HGNC:6947 4173 -MCM5 HGNC:6948 4174 -MCM7 HGNC:6950 4176 -MDN1 HGNC:18302 23195 -MED11 HGNC:32687 400569 -MED12 HGNC:11957 9968 -MED18 HGNC:25944 54797 -MED27 HGNC:2377 9442 -MED30 HGNC:23032 90390 -MEPCE HGNC:20247 56257 -METTL16 HGNC:28484 79066 -MMS22L HGNC:21475 253714 -MPHOSPH10 HGNC:7213 10199 -MRPL57 HGNC:14514 78988 -MRPL18 HGNC:14477 29074 -MRPL28 HGNC:14484 10573 -MRPL38 HGNC:14033 64978 -MRPL4 HGNC:14276 51073 -MRPL43 HGNC:14517 84545 -MRPL45 HGNC:16651 84311 -MRPL46 HGNC:1192 26589 -MRPL53 HGNC:16684 116540 -MRPS14 HGNC:14049 63931 -MRPS24 HGNC:14510 64951 -MRPS34 HGNC:16618 65993 -MSTO1 HGNC:29678 55154 -MTG2 HGNC:16239 26164 -MVK HGNC:7530 4598 -MYBBP1A HGNC:7546 10514 -MYC HGNC:7553 4609 -NAA10 HGNC:18704 8260 -LSM8 HGNC:20471 51691 -NAA50 HGNC:29533 80218 -NAMPT HGNC:30092 10135 -NAPA HGNC:7641 8775 -CIAO3 HGNC:14179 64428 -NARS HGNC:7643 4677 -NAT10 HGNC:29830 55226 -NCBP1 HGNC:7658 4686 -NCBP2 HGNC:7659 22916 -NDC80 HGNC:16909 10403 -NDUFA13 HGNC:17194 51079 -NEDD8 HGNC:7732 4738 -NELFB HGNC:24324 25920 -NHP2 HGNC:14377 55651 -SNU13 HGNC:7819 4809 -NIP7 HGNC:24328 51388 -NKAP HGNC:29873 79576 -NLE1 HGNC:19889 54475 -NMD3 HGNC:24250 51068 -NMT1 HGNC:7857 4836 -NOC4L HGNC:28461 79050 -NOL10 HGNC:25862 79954 -NOL11 HGNC:24557 25926 -NOL6 HGNC:19910 65083 -NOL9 HGNC:26265 79707 -NOP16 HGNC:26934 51491 -NOP2 HGNC:7867 4839 -NOP56 HGNC:15911 10528 -NOP9 HGNC:19826 161424 -NPLOC4 HGNC:18261 55666 -NSA2 HGNC:30728 10412 -NSF HGNC:8016 4905 -NUDC HGNC:8045 10726 -NUDCD3 HGNC:22208 23386 -NUDT21 HGNC:13870 11051 -NUDT4 HGNC:8051 11163 -NUF2 HGNC:14621 83540 -NUP133 HGNC:18016 55746 -NUP155 HGNC:8063 9631 -NUP160 HGNC:18017 23279 -NUP214 HGNC:8064 8021 -NUP85 HGNC:8734 79902 -NUP88 HGNC:8067 4927 -NUP93 HGNC:28958 9688 -NUS1 HGNC:21042 116150 -NUTF2 HGNC:13722 10204 -NVL HGNC:8070 4931 -NXF1 HGNC:8071 10482 -OGDH HGNC:8124 4967 -OGT HGNC:8127 8473 -LTO1 HGNC:17589 220064 -ORC6 HGNC:17151 23594 -OSGEP HGNC:18028 55644 -PABPC1 HGNC:8554 26986 -PAFAH1B1 HGNC:8574 5048 -PAICS HGNC:8587 10606 -PAK1IP1 HGNC:20882 55003 -PCID2 HGNC:25653 55795 -PCNA HGNC:8729 5111 -PFDN2 HGNC:8867 5202 -PFN1 HGNC:8881 5216 -PGAM1 HGNC:8888 5223 -PGGT1B HGNC:8895 5229 -PGK1 HGNC:8896 5230 -PHB HGNC:8912 5245 -PHB2 HGNC:30306 11331 -PHF5A HGNC:18000 84844 -PKMYT1 HGNC:29650 9088 -PLK1 HGNC:9077 5347 -PLRG1 HGNC:9089 5356 -PMPCA HGNC:18667 23203 -PMPCB HGNC:9119 9512 -PNKP HGNC:9154 11284 -POLA2 HGNC:30073 23649 -POLR1A HGNC:17264 25885 -POLR1B HGNC:20454 84172 -POLR1C HGNC:20194 9533 -POLR2A HGNC:9187 5430 -POLR2B HGNC:9188 5431 -POLR2C HGNC:9189 5432 -POLR2D HGNC:9191 5433 -POLR2E HGNC:9192 5434 -POLR2G HGNC:9194 5436 -POLR2H HGNC:9195 5437 -POLR2I HGNC:9196 5438 -POLR2L HGNC:9199 5441 -POLR3A HGNC:30074 11128 -POLR3C HGNC:30076 10623 -POLR3H HGNC:30349 171568 -POLR3K HGNC:14121 51728 -POLRMT HGNC:9200 5442 -POP1 HGNC:30129 10940 -POP5 HGNC:17689 51367 -PPA1 HGNC:9226 5464 -PPAN HGNC:9227 56342 -PPAT HGNC:9238 5471 -PPIL2 HGNC:9261 23759 -PPP2CA HGNC:9299 5515 -PTPA HGNC:9308 5524 -PPP4C HGNC:9319 5531 -PPWD1 HGNC:28954 23398 -PREB HGNC:9356 10113 -PRELID1 HGNC:30255 27166 -PRIM1 HGNC:9369 5557 -PRMT1 HGNC:5187 3276 -PRMT5 HGNC:10894 10419 -PRPF19 HGNC:17896 27339 -PRPF31 HGNC:15446 26121 -PRPF38A HGNC:25930 84950 -PRPF38B HGNC:25512 55119 -PRPF4 HGNC:17349 9128 -PRPF8 HGNC:17340 10594 -PSMA1 HGNC:9530 5682 -PSMA2 HGNC:9531 5683 -PSMA3 HGNC:9532 5684 -PSMA4 HGNC:9533 5685 -PSMA5 HGNC:9534 5686 -PSMA6 HGNC:9535 5687 -PSMA7 HGNC:9536 5688 -PSMB1 HGNC:9537 5689 -PSMB2 HGNC:9539 5690 -PSMB3 HGNC:9540 5691 -PSMB4 HGNC:9541 5692 -PSMB7 HGNC:9544 5695 -PSMC2 HGNC:9548 5701 -PSMC3 HGNC:9549 5702 -PSMC5 HGNC:9552 5705 -PSMC6 HGNC:9553 5706 -PSMD1 HGNC:9554 5707 -PSMD11 HGNC:9556 5717 -PSMD12 HGNC:9557 5718 -PSMD13 HGNC:9558 5719 -PSMD14 HGNC:16889 10213 -PSMD3 HGNC:9560 5709 -PSMD4 HGNC:9561 5710 -PSMG3 HGNC:22420 84262 -PTPN23 HGNC:14406 25930 -PUF60 HGNC:17042 22827 -PWP2 HGNC:9711 5822 -QARS HGNC:9751 5859 -RABGGTB HGNC:9796 5876 -RACGAP1 HGNC:9804 29127 -RAD21 HGNC:9811 5885 -RAD51C HGNC:9820 5889 -RAD51D HGNC:9823 5892 -RAE1 HGNC:9828 8480 -RAN HGNC:9846 5901 -RANGAP1 HGNC:9854 5905 -RARS2 HGNC:21406 57038 -RBBP6 HGNC:9889 5930 -RBM14 HGNC:14219 10432 -RBM17 HGNC:16944 84991 -RBM8A HGNC:9905 9939 -RBMX HGNC:9910 27316 -RBX1 HGNC:9928 9978 -RCC1 HGNC:1913 1104 -RCL1 HGNC:17687 10171 -RFC2 HGNC:9970 5982 -RFC4 HGNC:9972 5984 -RFC5 HGNC:9973 5985 -RFK HGNC:30324 55312 -RHEB HGNC:10011 6009 -RIOK2 HGNC:18999 55781 -RNF20 HGNC:10062 56254 -RNGTT HGNC:10073 8732 -ROMO1 HGNC:16185 140823 -RPA1 HGNC:10289 6117 -RPA2 HGNC:10290 6118 -RPF2 HGNC:20870 84154 -RPL10A HGNC:10299 4736 -RPL11 HGNC:10301 6135 -RPL12 HGNC:10302 6136 -RPL13 HGNC:10303 6137 -RPL14 HGNC:10305 9045 -RPL18 HGNC:10310 6141 -RPL18A HGNC:10311 6142 -RPL19 HGNC:10312 6143 -RPL23 HGNC:10316 9349 -RPL24 HGNC:10325 6152 -RPL27 HGNC:10328 6155 -RPL27A HGNC:10329 6157 -RPL3 HGNC:10332 6122 -RPL30 HGNC:10333 6156 -RPL35 HGNC:10344 11224 -RPL35A HGNC:10345 6165 -RPL36 HGNC:13631 25873 -RPL37A HGNC:10348 6168 -RPL4 HGNC:10353 6124 -RPL6 HGNC:10362 6128 -RPL8 HGNC:10368 6132 -RPLP0 HGNC:10371 6175 -RPLP1 HGNC:10372 6176 -RPLP2 HGNC:10377 6181 -RPP21 HGNC:21300 79897 -RPP38 HGNC:30329 10557 -RPS11 HGNC:10384 6205 -RPS12 HGNC:10385 6206 -RPS13 HGNC:10386 6207 -RPS15A HGNC:10389 6210 -RPS16 HGNC:10396 6217 -RPS18 HGNC:10401 6222 -RPS19 HGNC:10402 6223 -RPS2 HGNC:10404 6187 -RPS20 HGNC:10405 6224 -RPS21 HGNC:10409 6227 -RPS23 HGNC:10410 6228 -RPS3 HGNC:10420 6188 -RPS4X HGNC:10424 6191 -RPS5 HGNC:10426 6193 -RPS6 HGNC:10429 6194 -RPS7 HGNC:10440 6201 -RPS8 HGNC:10441 6202 -RRM1 HGNC:10451 6240 -RRP1 HGNC:18785 8568 -RRP12 HGNC:29100 23223 -RRS1 HGNC:17083 23212 -RTCB HGNC:26935 51493 -RUVBL2 HGNC:10475 10856 -SACM1L HGNC:17059 22908 -SAE1 HGNC:30660 10055 -SAMM50 HGNC:24276 25813 -SAP18 HGNC:10530 10284 -SARS HGNC:10537 6301 -SARS2 HGNC:17697 54938 -SART3 HGNC:16860 9733 -SBNO1 HGNC:22973 55206 -SDAD1 HGNC:25537 55153 -SDHC HGNC:10682 6391 -SEC13 HGNC:10697 6396 -SEH1L HGNC:30379 81929 -SF1 HGNC:12950 7536 -SF3A2 HGNC:10766 8175 -SF3A3 HGNC:10767 10946 -SF3B1 HGNC:10768 23451 -SF3B2 HGNC:10769 10992 -SF3B3 HGNC:10770 23450 -SF3B5 HGNC:21083 83443 -SKP1 HGNC:10899 6500 -SLC35B1 HGNC:20798 10237 -PRELID3B HGNC:15892 51012 -SLU7 HGNC:16939 10569 -SMC1A HGNC:11111 8243 -SMC2 HGNC:14011 10592 -SMC4 HGNC:14013 10051 -SMU1 HGNC:18247 55234 -SNAPC1 HGNC:11134 6617 -SNAPC2 HGNC:11135 6618 -SNAPC4 HGNC:11137 6621 -SNRNP200 HGNC:30859 23020 -SNRNP25 HGNC:14161 79622 -SNRNP27 HGNC:30240 11017 -SNRNP35 HGNC:30852 11066 -SNRNP70 HGNC:11150 6625 -SNRPA1 HGNC:11152 6627 -SNRPD1 HGNC:11158 6632 -SNRPD2 HGNC:11159 6633 -SNRPD3 HGNC:11160 6634 -SNRPF HGNC:11162 6636 -SNW1 HGNC:16696 22938 -SPATA5L1 HGNC:28762 79029 -SPC24 HGNC:26913 147841 -SPC25 HGNC:24031 57405 -SRBD1 HGNC:25521 55133 -SRP19 HGNC:11300 6728 -SRRM1 HGNC:16638 10250 -SRRT HGNC:24101 51593 -SRSF1 HGNC:10780 6426 -SRSF2 HGNC:10783 6427 -SRSF3 HGNC:10785 6428 -SRSF7 HGNC:10789 6432 -SS18L2 HGNC:15593 51188 -SSU72 HGNC:25016 29101 -SUPT5H HGNC:11469 6829 -SUPT6H HGNC:11470 6830 -SUPV3L1 HGNC:11471 6832 -SYMPK HGNC:22935 8189 -SYS1 HGNC:16162 90196 -TAF1B HGNC:11533 9014 -TAF6 HGNC:11540 6878 -TANGO6 HGNC:25749 79613 -TARS HGNC:11572 6897 -TBCD HGNC:11581 6904 -TBL3 HGNC:11587 10607 -TCP1 HGNC:11655 6950 -TELO2 HGNC:29099 9894 -TFAM HGNC:11741 7019 -TFRC HGNC:11763 7037 -THOC2 HGNC:19073 57187 -THOC3 HGNC:19072 84321 -THOC5 HGNC:19074 8563 -TICRR HGNC:28704 90381 -TIMM10 HGNC:11814 26519 -TIMM13 HGNC:11816 26517 -TIMM23 HGNC:17312 100287932 -TIMM44 HGNC:17316 10469 -TMEM258 HGNC:1164 746 -TNPO3 HGNC:17103 23534 -TOMM22 HGNC:18002 56993 -TOMM40 HGNC:18001 10452 -TONSL HGNC:7801 4796 -TOP1 HGNC:11986 7150 -TOP2A HGNC:11989 7153 -TPT1 HGNC:12022 7178 -TPX2 HGNC:1249 22974 -TRAPPC1 HGNC:19894 58485 -TRAPPC3 HGNC:19942 27095 -TRIAP1 HGNC:26937 51499 -TRMT112 HGNC:26940 51504 -TRMT5 HGNC:23141 57570 -TRNAU1AP HGNC:30813 54952 -TRRAP HGNC:12347 8295 -TSR1 HGNC:25542 55720 -TTC1 HGNC:12391 7265 -TTC27 HGNC:25986 55622 -TTI1 HGNC:29029 9675 -TTI2 HGNC:26262 80185 -TUBB HGNC:20778 203068 -TUBG1 HGNC:12417 7283 -TUBGCP2 HGNC:18599 10844 -TUBGCP3 HGNC:18598 10426 -TUBGCP6 HGNC:18127 85378 -TUFM HGNC:12420 7284 -TUT1 HGNC:26184 64852 -TXN HGNC:12435 7295 -TXNL4A HGNC:30551 10907 -U2AF1 HGNC:12453 7307 -U2AF2 HGNC:23156 11338 -UBA1 HGNC:12469 7317 -UBA52 HGNC:12458 7311 -UBE2L3 HGNC:12488 7332 -UBE2M HGNC:12491 9040 -UBE2N HGNC:12492 7334 -UBL5 HGNC:13736 59286 -UBTF HGNC:12511 7343 -UPF1 HGNC:9962 5976 -UPF2 HGNC:17854 26019 -UQCRC1 HGNC:12585 7384 -UQCRFS1 HGNC:12587 7386 -UROD HGNC:12591 7389 -USP39 HGNC:20071 10713 -USP5 HGNC:12628 8078 -USPL1 HGNC:20294 10208 -UTP15 HGNC:25758 84135 -UTP20 HGNC:17897 27340 -UTP23 HGNC:28224 84294 -UXT HGNC:12641 8409 -VARS HGNC:12651 7407 -VARS2 HGNC:21642 57176 -VCP HGNC:12666 7415 -VPS25 HGNC:28122 84313 -VPS28 HGNC:18178 51160 -WARS HGNC:12729 7453 -BUD23 HGNC:16405 114049 -WDR12 HGNC:14098 55759 -WDR25 HGNC:21064 79446 -WDR3 HGNC:12755 10885 -WDR33 HGNC:25651 55339 -WDR43 HGNC:28945 23160 -WDR61 HGNC:30300 80349 -WDR70 HGNC:25495 55100 -WDR74 HGNC:25529 54663 -WDR75 HGNC:25725 84128 -WDR77 HGNC:29652 79084 -WDR92 HGNC:25176 116143 -WEE1 HGNC:12761 7465 -XAB2 HGNC:14089 56949 -XPO1 HGNC:12825 7514 -XRCC6 HGNC:4055 2547 -YARS HGNC:12840 8565 -YARS2 HGNC:24249 51067 -YRDC HGNC:28905 79693 -ZBTB8OS HGNC:24094 339487 -ZMAT5 HGNC:28046 55954 -ZNF131 HGNC:12915 7690 -ZPR1 HGNC:13051 8882 -ZNF574 HGNC:26166 64763 diff --git a/assets/NEGv1.txt b/assets/NEGv1.txt deleted file mode 100644 index 96401816..00000000 --- a/assets/NEGv1.txt +++ /dev/null @@ -1,929 +0,0 @@ -GENE HGNC_ID ENTREZ_ID -ABCG8 HGNC:13887 64241 -ACCSL HGNC:34391 390110 -ACTL7A HGNC:161 10881 -ACTL7B HGNC:162 10880 -ACTL9 HGNC:28494 284382 -ACTRT1 HGNC:24027 139741 -ADAD1 HGNC:30713 132612 -ADAM18 HGNC:196 8749 -ADAM2 HGNC:198 2515 -ADAM20 HGNC:199 8748 -ADAM30 HGNC:208 11085 -ADH7 HGNC:256 131 -AFM HGNC:316 173 -AICDA HGNC:13203 57379 -AIPL1 HGNC:359 23746 -ALPI HGNC:437 248 -ALPG HGNC:441 251 -ALX3 HGNC:449 257 -AMELX HGNC:461 265 -ANKRD30A HGNC:17234 91074 -ANKRD60 HGNC:16217 140731 -ANTXRL HGNC:27277 195977 -APOA4 HGNC:602 337 -APOBEC1 HGNC:604 339 -APOF HGNC:615 319 -AQP12A HGNC:19941 375318 -AQP8 HGNC:642 343 -ARGFX HGNC:30146 503582 -ART1 HGNC:723 417 -ASB17 HGNC:19769 127247 -ASIC5 HGNC:17537 51802 -ASZ1 HGNC:1350 136991 -ATOH1 HGNC:797 474 -ATP4B HGNC:820 496 -ATP6V1G3 HGNC:18265 127124 -AWAT1 HGNC:23252 158833 -AWAT2 HGNC:23251 158835 -B3GNT6 HGNC:24141 192134 -BANF2 HGNC:16172 140836 -BARHL1 HGNC:953 56751 -BEND2 HGNC:28509 139105 -BHLHE23 HGNC:16093 128408 -BIRC8 HGNC:14878 112401 -BMP10 HGNC:20869 27302 -BMP15 HGNC:1068 9210 -BPIFA1 HGNC:15749 51297 -BPIFA3 HGNC:16204 128861 -BPIFB3 HGNC:16178 359710 -BPIFB6 HGNC:16504 128859 -BPIFC HGNC:16503 254240 -BPY2 HGNC:13508 9083 -BRDT HGNC:1105 676 -BSND HGNC:16512 7809 -C10orf113 HGNC:31447 387638 -C10orf120 HGNC:25707 399814 -C10orf53 HGNC:27421 282966 -C11orf40 HGNC:23986 143501 -C12orf40 HGNC:26846 283461 -C14orf183 HGNC:27285 196913 -NUTM1 HGNC:29919 256646 -C16orf78 HGNC:28479 123970 -C17orf102 HGNC:34412 400591 -C17orf78 HGNC:26831 284099 -DYNAP HGNC:26808 284254 -TEX45 HGNC:24745 374877 -C1orf146 HGNC:24032 388649 -C20orf173 HGNC:16166 140873 -C20orf203 HGNC:26592 284805 -SCP2D1 HGNC:16211 140856 -TEX44 HGNC:28563 165100 -STPG4 HGNC:26850 285051 -PCARE HGNC:34383 388939 -C2orf83 HGNC:25344 56918 -C3orf30 HGNC:26553 152405 -PRR27 HGNC:33193 401137 -DCANP1 HGNC:24459 140947 -C6orf10 HGNC:13922 10665 -C7orf66 HGNC:33712 154907 -C7orf71 HGNC:22364 285941 -C8A HGNC:1352 731 -C8B HGNC:1353 732 -C8orf17 HGNC:17737 100507249 -C8orf86 HGNC:33774 389649 -C9orf53 HGNC:23831 51198 -CABP2 HGNC:1385 51475 -CABP5 HGNC:13714 56344 -CABS1 HGNC:30710 85438 -CACNG2 HGNC:1406 10369 -CACNG3 HGNC:1407 10368 -CACNG5 HGNC:1409 27091 -CATSPER4 HGNC:23220 378807 -CCDC155 HGNC:26520 147872 -CCDC172 HGNC:30524 374355 -CCDC83 HGNC:28535 220047 -CCKAR HGNC:1570 886 -CCL1 HGNC:10609 6346 -CCT8L2 HGNC:15553 150160 -CD200R1L HGNC:24665 344807 -CDCP2 HGNC:27297 200008 -CDX2 HGNC:1806 1045 -CDX4 HGNC:1808 1046 -CDY1 HGNC:1809 9085 -CDY1B HGNC:23920 253175 -CDY2A HGNC:1810 9426 -CDY2B HGNC:23921 203611 -CEACAM7 HGNC:1819 1087 -CELA2A HGNC:24609 63036 -CELA3A HGNC:15944 10136 -CELA3B HGNC:15945 23436 -CER1 HGNC:1862 9350 -CETN1 HGNC:1866 1068 -CFHR2 HGNC:4890 3080 -CFHR5 HGNC:24668 81494 -CHAT HGNC:1912 1103 -CHRNA6 HGNC:15963 8973 -CHRNB3 HGNC:1963 1142 -CLCA1 HGNC:2015 1179 -CLDN17 HGNC:2038 26285 -CLEC2A HGNC:24191 387836 -CLEC3A HGNC:2052 10143 -CLEC6A HGNC:14556 93978 -CLRN1 HGNC:12605 7401 -CNBD1 HGNC:26663 168975 -CNGA2 HGNC:2149 1260 -CNGB3 HGNC:2153 54714 -CNPY1 HGNC:27786 285888 -CNTNAP5 HGNC:18748 129684 -COL20A1 HGNC:14670 57642 -COX7B2 HGNC:24381 170712 -CPXCR1 HGNC:2332 53336 -CRNN HGNC:1230 49860 -CRX HGNC:2383 1406 -CRYGB HGNC:2409 1419 -CSH1 HGNC:2440 1442 -CSHL1 HGNC:2442 1444 -CSN2 HGNC:2447 1447 -CSN3 HGNC:2446 1448 -CST11 HGNC:15959 140880 -CST4 HGNC:2476 1472 -CST5 HGNC:2477 1473 -CST8 HGNC:2480 10047 -CST9 HGNC:13261 128822 -CST9L HGNC:16233 128821 -CSTL1 HGNC:15958 128817 -CT45A2 HGNC:28400 728911 -CT45A4 HGNC:33269 -CT45A5 HGNC:33270 441521 -CT47A11 HGNC:27397 255313 -CTCFL HGNC:16234 140690 -CTRB1 HGNC:2521 1504 -CXorf1 HGNC:2562 -CXorf66 HGNC:33743 347487 -CYLC2 HGNC:2583 1539 -CYP11B1 HGNC:2591 1584 -CYP11B2 HGNC:2592 1585 -CYP26C1 HGNC:20577 340665 -CYP2A13 HGNC:2608 1553 -CYP2C19 HGNC:2621 1557 -CYP4A22 HGNC:20575 284541 -CYP4F8 HGNC:2648 11283 -CYP7A1 HGNC:2651 1581 -DAZ1 HGNC:2682 1617 -DAZ2 HGNC:15964 57055 -DAZ3 HGNC:15965 57054 -DAZ4 HGNC:15966 57135 -DAZL HGNC:2685 1618 -DCAF4L2 HGNC:26657 138009 -DCAF8L1 HGNC:31810 139425 -DDI1 HGNC:18961 414301 -DDX4 HGNC:18700 54514 -DEFA5 HGNC:2764 1670 -DEFA6 HGNC:2765 1671 -DEFB103B HGNC:31702 55894 -DEFB104A HGNC:18115 140596 -DEFB106A HGNC:18088 245909 -DEFB107A HGNC:18086 245910 -DEFB118 HGNC:16196 117285 -DEFB123 HGNC:18103 245936 -DEFB126 HGNC:15900 81623 -DEFB127 HGNC:16206 140850 -DEFB129 HGNC:16218 140881 -DGAT2L6 HGNC:23250 347516 -DGKK HGNC:32395 139189 -DIRC1 HGNC:15760 116093 -DMP1 HGNC:2932 1758 -DMRT1 HGNC:2934 1761 -DMRTB1 HGNC:13913 63948 -DMRTC2 HGNC:13911 63946 -MUCL3 HGNC:21666 135656 -DPRX HGNC:32166 503834 -DRD3 HGNC:3024 1814 -DRGX HGNC:21536 644168 -DSCR4 HGNC:3045 10281 -DSG4 HGNC:21307 147409 -DSPP HGNC:3054 1834 -DTX2 HGNC:15973 113878 -DUSP21 HGNC:20476 63904 -DUX4 HGNC:50800 100288687 -DUX4L7 HGNC:37266 653543 -DUXA HGNC:32179 503835 -EFCAB3 HGNC:26379 146779 -EGR4 HGNC:3241 1961 -ENTHD1 HGNC:26352 150350 -ESX1 HGNC:14865 80712 -EVX1 HGNC:3506 2128 -F13B HGNC:3534 2165 -F9 HGNC:3551 2158 -FABP2 HGNC:3556 2169 -FAM106A HGNC:25682 80039 -FAM47A HGNC:29962 158724 -FAM47B HGNC:26659 170062 -FAM47C HGNC:25301 442444 -FAM71A HGNC:26541 149647 -FAM71B HGNC:28397 153745 -FAM71C HGNC:28594 196472 -SPATA31A7 HGNC:32007 26165 -SPATA31D1 HGNC:37283 389763 -FCRL4 HGNC:18507 83417 -FEZF1 HGNC:22788 389549 -FEZF2 HGNC:13506 55079 -FFAR1 HGNC:4498 2864 -FGF3 HGNC:3681 2248 -FGF4 HGNC:3682 2249 -FGF6 HGNC:3684 2251 -FIGLA HGNC:24669 344018 -FLG2 HGNC:33276 388698 -FMR1NB HGNC:26372 158521 -FNDC7 HGNC:26668 163479 -FNDC9 HGNC:33547 408263 -FOXB1 HGNC:3799 27023 -FOXB2 HGNC:23315 442425 -FOXD4L3 HGNC:18523 286380 -FOXD4L4 HGNC:23762 349334 -FOXE3 HGNC:3808 2301 -FOXN1 HGNC:12765 8456 -FOXR1 HGNC:29980 283150 -FRG2 HGNC:19136 448831 -FRMD7 HGNC:8079 90167 -FSCB HGNC:20494 84075 -FUT5 HGNC:4016 2527 -FUT9 HGNC:4020 10690 -G6PC HGNC:4056 2538 -GABRA1 HGNC:4075 2554 -GABRA6 HGNC:4080 2559 -GAGE1 HGNC:4098 2543 -GAGE2C HGNC:31958 2574 -GALNTL5 HGNC:21725 168391 -GALR1 HGNC:4132 2587 -GALR3 HGNC:4134 8484 -GBP7 HGNC:29606 388646 -GCG HGNC:4191 2641 -GCM2 HGNC:4198 9247 -GDF2 HGNC:4217 2658 -GFRA4 HGNC:13821 64096 -GFRAL HGNC:32789 389400 -GH2 HGNC:4262 2689 -GHRH HGNC:4265 2691 -GHSR HGNC:4267 2693 -GIF HGNC:4268 2694 -GJA9 HGNC:19155 81025 -GJA8 HGNC:4281 2703 -GK2 HGNC:4291 2712 -GKN2 HGNC:24588 200504 -GLRA1 HGNC:4326 2741 -GLRA2 HGNC:4327 2742 -GLT6D1 HGNC:23671 360203 -GML HGNC:4375 2765 -GOLGA6L2 HGNC:26695 283685 -GOT1L1 HGNC:28487 137362 -GPR101 HGNC:14963 83550 -GPR111 HGNC:18991 222611 -GPR119 HGNC:19060 139760 -ADGRG7 HGNC:19241 84873 -GPR139 HGNC:19995 124274 -GPR144 HGNC:18651 347088 -GPR148 HGNC:23623 344561 -GPR151 HGNC:23624 134391 -GPR152 HGNC:23622 390212 -GPR26 HGNC:4481 2849 -GPR31 HGNC:4486 2853 -GPR32 HGNC:4487 2854 -GPR45 HGNC:4503 11250 -GPR50 HGNC:4506 9248 -GPR52 HGNC:4508 9293 -GPR78 HGNC:4528 27201 -GPRC6A HGNC:18510 222545 -GPX5 HGNC:4557 2880 -GPX6 HGNC:4558 257202 -GRK1 HGNC:10013 6011 -GRM4 HGNC:4596 2914 -GRM5 HGNC:4597 2915 -GRM6 HGNC:4598 2916 -GSC2 HGNC:4613 2928 -GSTA5 HGNC:19662 221357 -GSX1 HGNC:20374 219409 -GSX2 HGNC:24959 170825 -GUCA2A HGNC:4682 2980 -GUCY2F HGNC:4691 2986 -H1FOO HGNC:18463 132243 -H2BFM HGNC:27867 286436 -H2BFWT HGNC:27252 158983 -HAO1 HGNC:4809 54363 -HCRTR2 HGNC:4849 3062 -HDGFL1 HGNC:21095 154150 -HHLA1 HGNC:4904 10086 -HIST1H2AA HGNC:18729 221613 -HIST1H2BA HGNC:18730 255626 -HIST1H4G HGNC:4792 8369 -HMX1 HGNC:5017 3166 -HOXB1 HGNC:5111 3211 -HOXD12 HGNC:5135 3238 -HRG HGNC:5181 3273 -HRH3 HGNC:5184 11255 -HSFY1 HGNC:18568 86614 -HSFY2 HGNC:23950 159119 -HTN3 HGNC:5284 3347 -HTR1A HGNC:5286 3350 -HTR2C HGNC:5295 3358 -HTR3C HGNC:24003 170572 -HTR3D HGNC:24004 200909 -HTR3E HGNC:24005 285242 -HTR5A HGNC:5300 3361 -HTR6 HGNC:5301 3362 -IAPP HGNC:5329 3375 -IFIT1B HGNC:23442 439996 -IFNA10 HGNC:5418 3446 -IFNA14 HGNC:5420 3448 -IFNA16 HGNC:5421 3449 -IFNA17 HGNC:5422 3451 -IFNA2 HGNC:5423 3440 -IFNA21 HGNC:5424 3452 -IFNA4 HGNC:5425 3441 -IFNA5 HGNC:5426 3442 -IFNA6 HGNC:5427 3443 -IFNA7 HGNC:5428 3444 -IFNA8 HGNC:5429 3445 -IFNB1 HGNC:5434 3456 -IFNK HGNC:21714 56832 -IFNW1 HGNC:5448 3467 -IL12B HGNC:5970 3593 -IL13 HGNC:5973 3596 -IL17A HGNC:5981 3605 -IL17F HGNC:16404 112744 -IL1F10 HGNC:15552 84639 -IL21 HGNC:6005 59067 -IL22 HGNC:14900 50616 -IL25 HGNC:13765 64806 -IL26 HGNC:17119 55801 -IFNL2 HGNC:18364 282616 -IFNL3 HGNC:18365 282617 -IFNL1 HGNC:18363 282618 -IL3 HGNC:6011 3562 -IL31 HGNC:19372 386653 -IL36A HGNC:15562 27179 -IL36B HGNC:15564 27177 -IL36RN HGNC:15561 26525 -IL9 HGNC:6029 3578 -INS HGNC:6081 3630 -INSL5 HGNC:6088 10022 -INSL6 HGNC:6089 11172 -INSM2 HGNC:17539 84684 -INSRR HGNC:6093 3645 -IQCF1 HGNC:28607 132141 -IRGC HGNC:28835 56269 -ISX HGNC:28084 91464 -ITIH6 HGNC:28907 347365 -IZUMO2 HGNC:28518 126123 -KCNA10 HGNC:6219 3744 -KCNB2 HGNC:6232 9312 -KCNG4 HGNC:19697 93107 -KCNK10 HGNC:6273 54207 -KCNK16 HGNC:14464 83795 -KCNK18 HGNC:19439 338567 -KCNV1 HGNC:18861 27012 -KHDC3L HGNC:33699 154288 -KIF2B HGNC:29443 84643 -KIR2DL1 HGNC:6329 3802 -KIR3DL3 HGNC:16312 115653 -KLK12 HGNC:6360 43849 -KLK9 HGNC:6370 284366 -KRT2 HGNC:6439 3849 -KRT25 HGNC:30839 147183 -KRT26 HGNC:30840 353288 -KRT28 HGNC:30842 162605 -KRT33A HGNC:6450 3883 -KRT35 HGNC:6453 3886 -KRT36 HGNC:6454 8689 -KRT37 HGNC:6455 8688 -KRT38 HGNC:6456 8687 -KRT40 HGNC:26707 125115 -KRT71 HGNC:28927 112802 -KRT73 HGNC:28928 319101 -KRT74 HGNC:28929 121391 -KRT75 HGNC:24431 9119 -KRT76 HGNC:24430 51350 -KRT77 HGNC:20411 374454 -KRT78 HGNC:28926 196374 -KRT82 HGNC:6459 3888 -KRT84 HGNC:6461 3890 -KRT85 HGNC:6462 3891 -KRT86 HGNC:6463 3892 -KRT9 HGNC:6447 3857 -KRTAP1-1 HGNC:16772 81851 -KRTAP10-1 HGNC:22966 386677 -KRTAP10-10 HGNC:22972 353333 -KRTAP10-11 HGNC:20528 386678 -KRTAP10-12 HGNC:20533 386685 -KRTAP10-2 HGNC:22967 386679 -KRTAP10-4 HGNC:20521 386672 -KRTAP10-5 HGNC:22969 386680 -KRTAP10-6 HGNC:20523 386674 -KRTAP10-7 HGNC:22970 386675 -KRTAP10-8 HGNC:20525 386681 -KRTAP10-9 HGNC:22971 386676 -KRTAP11-1 HGNC:18922 337880 -KRTAP13-1 HGNC:18924 140258 -KRTAP13-2 HGNC:18923 337959 -KRTAP13-3 HGNC:18925 337960 -KRTAP13-4 HGNC:18926 284827 -KRTAP15-1 HGNC:18927 254950 -KRTAP17-1 HGNC:18917 83902 -KRTAP19-3 HGNC:18938 337970 -KRTAP23-1 HGNC:18928 337963 -KRTAP26-1 HGNC:33760 388818 -KRTAP3-2 HGNC:16779 83897 -KRTAP4-11 HGNC:18911 653240 -KRTAP4-12 HGNC:16776 83755 -KRTAP4-2 HGNC:18900 85291 -KRTAP4-4 HGNC:16928 84616 -KRTAP4-7 HGNC:18898 100132476 -KRTAP5-2 HGNC:23597 440021 -KRTAP9-2 HGNC:16926 83899 -KRTAP9-3 HGNC:16927 83900 -KRTAP9-4 HGNC:18902 85280 -LALBA HGNC:6480 3906 -LBX1 HGNC:16960 10660 -LCN9 HGNC:17442 392399 -LCT HGNC:6530 3938 -LGALS13 HGNC:15449 29124 -LGALS14 HGNC:30054 56891 -LHFPL5 HGNC:21253 222662 -LHX3 HGNC:6595 8022 -LHX5 HGNC:14216 64211 -LIM2 HGNC:6610 3982 -LIN28A HGNC:15986 79727 -LIPM HGNC:23455 340654 -LOR HGNC:6663 4014 -LRIT1 HGNC:23404 26103 -LRIT2 HGNC:23443 340745 -LRRC10 HGNC:20264 376132 -LUZP4 HGNC:24971 51213 -LYZL1 HGNC:30502 84569 -LYZL2 HGNC:29613 119180 -LYZL6 HGNC:29614 57151 -MAGEA10 HGNC:6797 4109 -MAGEA11 HGNC:6798 4110 -MAGEB1 HGNC:6808 4112 -MAGEB10 HGNC:25377 139422 -MAGEB18 HGNC:28515 286514 -MAGEB3 HGNC:6810 4114 -MAGEB4 HGNC:6811 4115 -MAGEC3 HGNC:23798 139081 -MAS1 HGNC:6899 4142 -MAS1L HGNC:13961 116511 -MBD3L1 HGNC:15774 85509 -MBD3L2 HGNC:18532 125997 -MBL2 HGNC:6922 4153 -MC2R HGNC:6930 4158 -MC3R HGNC:6931 4159 -MC5R HGNC:6933 4161 -MEP1A HGNC:7015 4224 -MEP1B HGNC:7020 4225 -MEPE HGNC:13361 56955 -MFRP HGNC:18121 83552 -MMD2 HGNC:30133 221938 -MMP20 HGNC:7167 9313 -MMP21 HGNC:7170 8511 -MMP26 HGNC:14249 56547 -MMP27 HGNC:14250 64066 -MOGAT3 HGNC:23249 346606 -MORC1 HGNC:7198 27136 -MRGPRD HGNC:29626 116512 -MRGPRX1 HGNC:17962 259249 -MRGPRX2 HGNC:17983 117194 -MRGPRX4 HGNC:17617 117196 -MS4A10 HGNC:13368 341116 -MS4A13 HGNC:16674 503497 -MS4A5 HGNC:13374 64232 -MSGN1 HGNC:14907 343930 -MT1B HGNC:7394 4490 -MTNR1B HGNC:7464 4544 -MUC17 HGNC:16800 140453 -MUC7 HGNC:7518 4589 -MYBPC3 HGNC:7551 4607 -MYF5 HGNC:7565 4617 -NANOGNB HGNC:24958 360030 -NANOS2 HGNC:23292 339345 -NCR2 HGNC:6732 9436 -NDST4 HGNC:20779 64579 -NEUROD2 HGNC:7763 4761 -NEUROD4 HGNC:13802 58158 -NEUROD6 HGNC:13804 63974 -NEUROG1 HGNC:7764 4762 -NKX2-1 HGNC:11825 7080 -NKX2-2 HGNC:7835 4821 -NLRP4 HGNC:22943 147945 -NLRP5 HGNC:21269 126206 -NLRP8 HGNC:22940 126205 -NLRP9 HGNC:22941 338321 -NMS HGNC:32203 129521 -NOBOX HGNC:22448 135935 -NOTO HGNC:31839 344022 -NOX3 HGNC:7890 50508 -NPFFR1 HGNC:17425 64106 -NPHS2 HGNC:13394 7827 -NPSR1 HGNC:23631 387129 -NPVF HGNC:13782 64111 -NR2E1 HGNC:7973 7101 -NYX HGNC:8082 60506 -OC90 HGNC:8100 729330 -OLIG2 HGNC:9398 10215 -OLIG3 HGNC:18003 167826 -OPALIN HGNC:20707 93377 -OPN1LW HGNC:9936 5956 -OPN5 HGNC:19992 221391 -OR10A2 HGNC:8161 341276 -OR10A4 HGNC:15130 283297 -OR10A5 HGNC:15131 144124 -OR10H1 HGNC:8172 26539 -OR10H2 HGNC:8173 26538 -OR10H3 HGNC:8174 26532 -OR10J1 HGNC:8175 26476 -OR10R2 HGNC:14820 343406 -OR10S1 HGNC:14807 219873 -OR10X1 HGNC:14995 128367 -OR10Z1 HGNC:14996 128368 -OR11A1 HGNC:8176 26531 -OR12D2 HGNC:8178 26529 -OR12D3 HGNC:13963 81797 -OR13C3 HGNC:14704 138803 -OR13D1 HGNC:14695 286365 -OR14A16 HGNC:15022 284532 -OR1A1 HGNC:8179 8383 -OR1A2 HGNC:8180 26189 -OR1B1 HGNC:8181 347169 -OR1D2 HGNC:8183 4991 -OR1E1 HGNC:8189 8387 -OR1E2 HGNC:8190 8388 -OR1G1 HGNC:8204 8390 -OR1L6 HGNC:8218 392390 -OR1N2 HGNC:15111 138882 -OR1S1 HGNC:8227 219959 -OR1S2 HGNC:15141 219958 -OR2AK2 HGNC:19569 391191 -OR2AT4 HGNC:19620 341152 -OR2C1 HGNC:8242 4993 -OR2C3 HGNC:15005 81472 -OR2D2 HGNC:8244 120776 -OR2D3 HGNC:15146 120775 -OR2F1 HGNC:8246 26211 -OR2G2 HGNC:15007 81470 -OR2G3 HGNC:15008 81469 -OR2H1 HGNC:8252 26716 -OR2J2 HGNC:8260 26707 -OR2L3 HGNC:15009 391192 -OR2T1 HGNC:8277 26696 -OR2T10 HGNC:19573 127069 -OR2T12 HGNC:19592 127064 -OR2T2 HGNC:14725 401992 -OR2T27 HGNC:31252 403239 -OR2T33 HGNC:31255 391195 -OR2T4 HGNC:15016 127074 -OR2T5 HGNC:15017 401993 -OR2W1 HGNC:8281 26692 -OR3A1 HGNC:8282 4994 -OR3A2 HGNC:8283 4995 -OR3A3 HGNC:8284 8392 -OR4C11 HGNC:15167 219429 -OR4C3 HGNC:14697 256144 -OR4D1 HGNC:8293 26689 -OR4D10 HGNC:15173 390197 -OR4D11 HGNC:15174 219986 -OR4D9 HGNC:15178 390199 -OR4K17 HGNC:15355 390436 -OR51B6 HGNC:19600 390058 -OR51D1 HGNC:15193 390038 -OR51F2 HGNC:15197 119694 -OR51T1 HGNC:15205 401665 -OR51V1 HGNC:19597 283111 -OR52A1 HGNC:8318 23538 -OR52A5 HGNC:19580 390054 -OR52B2 HGNC:15207 255725 -OR52B6 HGNC:15211 340980 -OR52E8 HGNC:15217 390079 -OR52I2 HGNC:15221 143502 -OR52K2 HGNC:15223 119774 -OR52L1 HGNC:14785 338751 -OR52M1 HGNC:15225 119772 -OR52R1 HGNC:15235 119695 -OR52W1 HGNC:15239 120787 -OR56A1 HGNC:14781 120796 -OR56A4 HGNC:14791 120793 -OR56B1 HGNC:15245 387748 -OR5AU1 HGNC:15362 390445 -OR5C1 HGNC:8331 392391 -OR5I1 HGNC:8347 10798 -OR5M1 HGNC:8352 390168 -OR5M10 HGNC:15290 390167 -OR5P2 HGNC:14783 120065 -OR5P3 HGNC:14784 120066 -OR5R1 HGNC:14841 219479 -OR5T1 HGNC:14821 390155 -OR5T2 HGNC:15296 219464 -OR5T3 HGNC:15297 390154 -OR5V1 HGNC:13972 81696 -OR5W2 HGNC:15299 390148 -OR6A2 HGNC:15301 8590 -OR6K6 HGNC:15033 128371 -OR6S1 HGNC:15363 341799 -OR6V1 HGNC:15090 346517 -OR7A17 HGNC:8363 26333 -OR7C2 HGNC:8374 26658 -OR7D4 HGNC:8380 125958 -OR7G2 HGNC:8466 390882 -OR8A1 HGNC:8469 390275 -OR8B8 HGNC:8477 26493 -OR8G5 HGNC:19622 219865 -OR8U1 HGNC:19611 219417 -OR9Q2 HGNC:15328 219957 -OTOP1 HGNC:19656 133060 -OTOP3 HGNC:19658 347741 -OTOR HGNC:8517 56914 -OTP HGNC:8518 23440 -OTUD6A HGNC:32312 139562 -OTX2 HGNC:8522 5015 -PAGE3 HGNC:4110 139793 -PANX3 HGNC:20573 116337 -PASD1 HGNC:20686 139135 -PAX1 HGNC:8615 5075 -PAX4 HGNC:8618 5078 -PBOV1 HGNC:21079 59351 -PDCL2 HGNC:29524 132954 -PDE6H HGNC:8790 5149 -PDILT HGNC:27338 204474 -PDX1 HGNC:6107 3651 -PDYN HGNC:8820 5173 -PGK2 HGNC:8898 5232 -PGLYRP2 HGNC:30013 114770 -PGLYRP3 HGNC:30014 114771 -PIWIL1 HGNC:9007 9271 -PIWIL3 HGNC:18443 440822 -PKD1L3 HGNC:21716 342372 -PLA2G2E HGNC:13414 30814 -PLA2G2F HGNC:30040 64600 -PLA2G4E HGNC:24791 123745 -OOSP2 HGNC:26699 219990 -PNLIP HGNC:9155 5406 -PNLIPRP1 HGNC:9156 5407 -PNLIPRP2 HGNC:9157 5408 -PNPLA5 HGNC:24888 150379 -POM121L12 HGNC:25369 285877 -POTEA HGNC:33893 340441 -POTED HGNC:23822 317754 -POTEG HGNC:33896 404785 -POTEH HGNC:133 23784 -POU3F4 HGNC:9217 5456 -POU4F2 HGNC:9219 5458 -POU4F3 HGNC:9220 5459 -POU5F2 HGNC:26367 134187 -PPP3R2 HGNC:9318 5535 -PRAMEF1 HGNC:28840 65121 -PRAMEF19 HGNC:24908 645414 -PRAMEF2 HGNC:28841 65122 -PRAMEF3 HGNC:14087 -PRAMEF4 HGNC:31971 400735 -PRAMEF7 HGNC:28415 441871 -PRB1 HGNC:9337 5542 -PRB4 HGNC:9340 5545 -PRDM13 HGNC:13998 59336 -PRDM14 HGNC:14001 63978 -PRDM7 HGNC:9351 11105 -PRDM9 HGNC:13994 56979 -PRG3 HGNC:9363 10394 -PRLH HGNC:17945 51052 -PRLHR HGNC:4464 2834 -PROP1 HGNC:9455 5626 -PRSS33 HGNC:30405 260429 -PRSS37 HGNC:29211 136242 -PRSS38 HGNC:29625 339501 -PRSS41 HGNC:30715 360226 -PRSS55 HGNC:30824 203074 -PRSS58 HGNC:39125 136541 -PRY2 HGNC:21504 442862 -PSKH2 HGNC:18997 85481 -PTF1A HGNC:23734 256297 -RAX HGNC:18662 30062 -RAX2 HGNC:18286 84839 -RBM46 HGNC:28401 166863 -RBMXL2 HGNC:17886 27288 -RBMY1A1 HGNC:9912 5940 -RBMY1B HGNC:23914 378948 -RBMY1D HGNC:23915 378949 -RBMY1E HGNC:23916 378950 -RBMY1F HGNC:23974 159163 -RBMY1J HGNC:23917 378951 -RBP3 HGNC:9921 5949 -RBPJL HGNC:13761 11317 -RD3 HGNC:19689 343035 -RDH8 HGNC:14423 50700 -REG3A HGNC:8601 5068 -RESP18 HGNC:33762 389075 -RETNLB HGNC:20388 84666 -REXO1L1 HGNC:24660 254958 -RFPL3 HGNC:9980 10738 -RFPL4B HGNC:33264 442247 -RFX6 HGNC:21478 222546 -RHO HGNC:10012 6010 -RHOXF2 HGNC:30011 84528 -RNASE10 HGNC:19275 338879 -RNASE11 HGNC:19269 122651 -RNASE12 HGNC:24211 493901 -RNASE13 HGNC:25285 440163 -RNASE8 HGNC:19277 122665 -RNASE9 HGNC:20673 390443 -RND2 HGNC:18315 8153 -RNF113B HGNC:17267 140432 -RNF17 HGNC:10060 56163 -RP1 HGNC:10263 6101 -RP1L1 HGNC:15946 94137 -RPE65 HGNC:10294 6121 -RPTN HGNC:26809 126638 -RS1 HGNC:10457 6247 -RTP1 HGNC:28580 132112 -RTP2 HGNC:32486 344892 -RXFP2 HGNC:17318 122042 -RXFP3 HGNC:24883 51289 -S100A7A HGNC:21657 338324 -S100G HGNC:1436 795 -SAGE1 HGNC:30369 55511 -SAMD7 HGNC:25394 344658 -SCGB1D1 HGNC:18395 10648 -SCN10A HGNC:10582 6336 -SCRT2 HGNC:15952 85508 -SDR9C7 HGNC:29958 121214 -SEC14L3 HGNC:18655 266629 -SEMG2 HGNC:10743 6407 -SEPT14 HGNC:33280 346288 -SERPINA12 HGNC:18359 145264 -SERPINA7 HGNC:11583 6906 -SERPINA9 HGNC:15995 327657 -SERPINB12 HGNC:14220 89777 -SHCBP1L HGNC:16788 81626 -SHOX HGNC:10853 6473 -SI HGNC:10856 6476 -SIGLECL1 HGNC:26856 284369 -SIX6 HGNC:10892 4990 -SLC10A2 HGNC:10906 6555 -SLC13A1 HGNC:10916 6561 -SLC34A1 HGNC:11019 6569 -SLC17A6 HGNC:16703 57084 -SLC18A3 HGNC:10936 6572 -SLC22A12 HGNC:17989 116085 -SLC22A13 HGNC:8494 9390 -SLC22A24 HGNC:28542 283238 -SLC22A25 HGNC:32935 387601 -SLC22A6 HGNC:10970 9356 -SLC22A8 HGNC:10972 9376 -SLC22A9 HGNC:16261 114571 -SLC25A2 HGNC:22921 83884 -SLC25A31 HGNC:25319 83447 -SLC2A2 HGNC:11006 6514 -SLC2A7 HGNC:13445 155184 -SLC32A1 HGNC:11018 140679 -SLC34A1 HGNC:11019 6569 -SLC36A3 HGNC:19659 285641 -SLC39A12 HGNC:20860 221074 -SLC6A18 HGNC:26441 348932 -SLC6A5 HGNC:11051 9152 -SLC6A7 HGNC:11054 6534 -SLC7A13 HGNC:23092 157724 -SLCO1B1 HGNC:10959 10599 -SLCO6A1 HGNC:23613 133482 -SLITRK1 HGNC:20297 114798 -SOHLH1 HGNC:27845 402381 -SOX1 HGNC:11189 6656 -SOX14 HGNC:11193 8403 -SP8 HGNC:19196 221833 -SPACA1 HGNC:14967 81833 -SPACA5 HGNC:31353 389852 -SPACA7 HGNC:29575 122258 -SPATA16 HGNC:29935 83893 -SPATA21 HGNC:28026 374955 -SPEM1 HGNC:32429 374768 -SPHAR HGNC:16957 10638 -SPINK14 HGNC:33825 408187 -SPO11 HGNC:11250 23626 -SPPL2C HGNC:28902 162540 -SPRR4 HGNC:23173 163778 -SSTR4 HGNC:11333 6754 -SSX3 HGNC:11337 10214 -SSX5 HGNC:11339 6758 -SSX7 HGNC:19653 280658 -SSX8 HGNC:19654 280659 -SSX9 HGNC:19655 280660 -STATH HGNC:11369 6779 -SULT6B1 HGNC:33433 391365 -SUN5 HGNC:16252 140732 -TBXT HGNC:11515 6862 -TAAR1 HGNC:17734 134864 -TAAR2 HGNC:4514 9287 -TAAR5 HGNC:30236 9038 -TAAR6 HGNC:20978 319100 -TAAR8 HGNC:14964 83551 -TAAR9 HGNC:20977 134860 -TAS1R2 HGNC:14905 80834 -TAS2R1 HGNC:14909 50834 -TAS2R13 HGNC:14919 50838 -TAS2R16 HGNC:14921 50833 -TAS2R39 HGNC:18886 259285 -TAS2R40 HGNC:18885 259286 -TAS2R41 HGNC:18883 259287 -TAS2R42 HGNC:18888 353164 -TAS2R43 HGNC:18875 259289 -TAS2R46 HGNC:18877 259292 -TAS2R50 HGNC:18882 259296 -TAS2R60 HGNC:20639 338398 -TAS2R7 HGNC:14913 50837 -TAS2R8 HGNC:14915 50836 -TAS2R9 HGNC:14917 50835 -TBC1D21 HGNC:28536 161514 -TBC1D29 HGNC:24509 26083 -TBL1Y HGNC:18502 90665 -TBPL2 HGNC:19841 387332 -TBR1 HGNC:11590 10716 -TBX10 HGNC:11593 347853 -ELOA2 HGNC:30771 51224 -ELOA3 HGNC:24617 162699 -TCHHL1 HGNC:31796 126637 -TCP10L2 HGNC:21254 401285 -TEDDM1 HGNC:30233 127670 -TEX101 HGNC:30722 83639 -TEX13A HGNC:11735 56157 -TEX28 HGNC:2563 1527 -SPATA32 HGNC:26349 124783 -TFAP2D HGNC:15581 83741 -TFDP3 HGNC:24603 51270 -TGIF2LX HGNC:18570 90316 -TGIF2LY HGNC:18569 90655 -TGM6 HGNC:16255 343641 -TKTL2 HGNC:25313 84076 -TLX1 HGNC:5056 3195 -TMEM132D HGNC:29411 121256 -TMEM174 HGNC:28187 134288 -TMEM207 HGNC:33705 131920 -TMEM225 HGNC:32390 338661 -TMIGD1 HGNC:32431 388364 -TMPRSS11A HGNC:27954 339967 -TMPRSS11B HGNC:25398 132724 -TMPRSS11F HGNC:29994 389208 -TMPRSS12 HGNC:28779 283471 -TMPRSS15 HGNC:9490 5651 -TNR HGNC:11953 7143 -TPD52L3 HGNC:23382 89882 -TPH2 HGNC:20692 121278 -TPRX1 HGNC:32174 284355 -TPTE HGNC:12023 7179 -TREML4 HGNC:30807 285852 -TRHR HGNC:12299 7201 -TRIM40 HGNC:18736 135644 -TRIM42 HGNC:19014 287015 -TRIM43 HGNC:19015 129868 -TRIM48 HGNC:19021 79097 -TRIM49 HGNC:13431 57093 -TRIM51 HGNC:19023 84767 -TRIM60 HGNC:21162 166655 -TRIM67 HGNC:31859 440730 -TRIML1 HGNC:26698 339976 -TRPC5 HGNC:12337 7224 -TRPC7 HGNC:20754 57113 -TRPM1 HGNC:7146 4308 -TRPV5 HGNC:3145 56302 -TSGA13 HGNC:12369 114960 -TSHB HGNC:12372 7252 -TSPAN16 HGNC:30725 26526 -TSPO2 HGNC:21256 222642 -TSPY1 HGNC:12381 7258 -TSPYL6 HGNC:14521 388951 -TSSK1B HGNC:14968 83942 -TSSK2 HGNC:11401 23617 -TXNDC8 HGNC:31454 255220 -TYR HGNC:12442 7299 -UBQLN3 HGNC:12510 50613 -UMOD HGNC:12559 7369 -UROC1 HGNC:26444 131669 -USP17L2 HGNC:34434 377630 -USP26 HGNC:13485 83844 -USP29 HGNC:18563 57663 -UTS2R HGNC:4468 2837 -VAX1 HGNC:12660 11023 -VCX3A HGNC:18159 51481 -VHLL HGNC:30666 391104 -VN1R2 HGNC:19872 317701 -VN1R4 HGNC:19871 317703 -VN1R5 HGNC:19870 317705 -VPREB1 HGNC:12709 7441 -VRTN HGNC:20223 55237 -VSX2 HGNC:1975 338917 -WFDC10A HGNC:16139 140832 -WFDC11 HGNC:20478 259239 -WFDC9 HGNC:20380 259240 -XAGE2 HGNC:4112 9502 -XAGE5 HGNC:30930 170627 -XKR7 HGNC:23062 343702 -ZAN HGNC:12857 7455 -ZCCHC13 HGNC:31749 389874 -RTL4 HGNC:25214 340595 -ZG16 HGNC:30961 653808 -ZIC3 HGNC:12874 7547 -ZIM3 HGNC:16366 114026 -CBLL2 HGNC:26371 158506 -ZNF648 HGNC:18190 127665 -ZNF679 HGNC:28650 168417 -ZNF804B HGNC:21958 219578 -ZNRF4 HGNC:17726 148066 -ZP2 HGNC:13188 7783 -ZP4 HGNC:15770 57829 -ZSWIM2 HGNC:30990 151112 - diff --git a/bin/BAGEL.py b/bin/BAGEL.py index 6077e5dc..94bd734b 100755 --- a/bin/BAGEL.py +++ b/bin/BAGEL.py @@ -1,5 +1,43 @@ #!/usr/bin/env python +# --------------------------------- +# BAGEL: Bayesian Analysis of Gene EssentaLity +# (c) Traver Hart , Eiru Kim 2017. + +# Acknowledgements: John McGonigle +# modified 10/2019 +# Free to modify and redistribute with attribution +# --------------------------------- + +# ------------------------------------ +# constants + +""" +MIT License + +Copyright (c) 2020 Hart Lab + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + + + import click import numpy as np import pandas as pd @@ -54,17 +92,7 @@ def full_process_value(self, ctx, value): return value -# --------------------------------- -# BAGEL: Bayesian Analysis of Gene EssentaLity -# (c) Traver Hart , Eiru Kim 2017. -# Acknowledgements: John McGonigle -# modified 10/2019 -# Free to modify and redistribute with attribution -# --------------------------------- - -# ------------------------------------ -# constants @@ -822,7 +850,7 @@ def calculate_bayes_factors( multiple_factor = equalise_sgrna_no / float(len(gene2rna[g])) bf_norm[g] = targetbf[g] * multiple_factor - ''' + ''' if bf_std[rnatag] == 0.0: bf_norm[rnatag] = float('inf') else: @@ -934,7 +962,7 @@ def calculate_bayes_factors( fp.close() - + # # print out results From 0d7aeb44288db053a787cd0fd9e7f33023372be3 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 23 Aug 2023 09:02:34 +0200 Subject: [PATCH 24/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 54a2d3b0..a037ad13 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -15,8 +15,7 @@ log.info logo + paramsSummaryLog(workflow) + citation WorkflowCrisprseq.initialise(params, log) -// Check mandatory parameters -//if (!params.count_table) { ch_input = file(params.input) } else { error('Input samplesheet not specified!') } +// Set screening parameters and channels if (params.library) { ch_library = file(params.library) } if (params.crisprcleanr) { ch_crisprcleanr = Channel.value(params.crisprcleanr) } From 6b75dd93eda477e3bee01a6d72e3439bce64acdf Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Thu, 24 Aug 2023 13:43:37 +0200 Subject: [PATCH 25/39] Add license --- modules/local/bagel2/graph.nf | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/modules/local/bagel2/graph.nf b/modules/local/bagel2/graph.nf index 8ca0d84c..26b404ab 100644 --- a/modules/local/bagel2/graph.nf +++ b/modules/local/bagel2/graph.nf @@ -22,9 +22,47 @@ process BAGEL2_GRAPH { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" + /* + # --------------------------------- + # BAGEL: Bayesian Analysis of Gene EssentaLity + # (c) Traver Hart , Eiru Kim 2017. + + # Acknowledgements: John McGonigle + # modified 10/2019 + # Free to modify and redistribute with attribution + # --------------------------------- + + # ------------------------------------ + # constants + +""" + MIT License + + Copyright (c) 2020 Hart Lab + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + + */ """ #!/usr/bin/env python3 + import pandas as pd import matplotlib.pyplot as plt From f2576c486d188ef107ef4691eb3dde1833bc94e4 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Mon, 2 Oct 2023 14:22:19 +0200 Subject: [PATCH 26/39] Remove symlink issue --- conf/modules.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/conf/modules.config b/conf/modules.config index 5cbb8a73..3fa447d9 100644 --- a/conf/modules.config +++ b/conf/modules.config @@ -95,6 +95,7 @@ process { withName: MAGECK_COUNT { publishDir = [ path: { "${params.outdir}/mageck/count/" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.prefix = 'count_table' @@ -104,6 +105,7 @@ process { withName: MAGECK_MLE { publishDir = [ path: { "${params.outdir}/mageck/mle/${meta.id}/" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] ext.args = @@ -115,6 +117,7 @@ process { ext.args2 = "-t" publishDir = [ path: { "${params.outdir}/mageck/rra/" }, + mode: params.publish_dir_mode, saveAs: { filename -> filename.equals('versions.yml') ? null : filename } ] } From 31a11032379d10725484b7998593ddf93a62d716 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 24 Oct 2023 15:18:30 +0200 Subject: [PATCH 27/39] Add graphs for mageck rra --- conf/test_screening.config | 1 + docs/output/screening.md | 2 ++ docs/usage/screening.md | 21 +++++++++++-- modules/local/mageck/graphrra.nf | 54 ++++++++++++++++++++++++++++++++ workflows/crisprseq_screening.nf | 8 +++++ 5 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 modules/local/mageck/graphrra.nf diff --git a/conf/test_screening.config b/conf/test_screening.config index 83c42d85..8ec59e49 100644 --- a/conf/test_screening.config +++ b/conf/test_screening.config @@ -25,4 +25,5 @@ params { crisprcleanr = "Brunello_Library" mle_design_matrix = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/design_matrix.txt" library = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/brunello_target_sequence.txt" + //rra_contrasts = "" } diff --git a/docs/output/screening.md b/docs/output/screening.md index e51bb43a..cd530622 100644 --- a/docs/output/screening.md +++ b/docs/output/screening.md @@ -92,6 +92,8 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - `*_count_sgrna_summary.txt`: sgRNA ranking results, tab separated file containing means, p-values - `*.report.Rmd`: markdown report recapping essential genes - `*_count_table.log`: log of the run + - `*_scatterview.png`: scatter view of the targeted genes and their logFC + - `*_rank.png`: rank view of the targeted genes
diff --git a/docs/usage/screening.md b/docs/usage/screening.md index 1901fd0b..ba061d79 100644 --- a/docs/usage/screening.md +++ b/docs/usage/screening.md @@ -41,11 +41,23 @@ SRR8983580,SRR8983580.small.fastq.gz,,treatment An [example samplesheet](https://github.com/nf-core/test-datasets/blob/crisprseq/testdata/samplesheet_test.csv) has been provided with the pipeline. -The pipeline currently supports 2 algorithms to detect gene essentiality, MAGeCK rra and MAGeCK mle. MAGeCK MLE (Maximum Likelihood Estimation) and MAGeCK RRA (Robust Ranking Aggregation) are two different methods provided by the MAGeCK software package to analyze CRISPR-Cas9 screens. +### library + +If you are running the pipeline with fastq files and wish to obtain a count table, the library parameter is needed. The library table has two mandatory columns : id, target transcript (or gRNA sequence) and gene symbol. +An [example](https://github.com/nf-core/test-datasets/blob/crisprseq/testdata/brunello_target_sequence.txt) has been provided with the pipeline. Many libraries can be found on [addgene](https://www.addgene.org/). + +After the alignment step, the pipeline currently supports 3 algorithms to detect gene essentiality, MAGeCK rra, MAGeCK mle and BAGEL2. MAGeCK MLE (Maximum Likelihood Estimation) and MAGeCK RRA (Robust Ranking Aggregation) are two different methods provided by the MAGeCK software package to analyze CRISPR-Cas9 screens. BAGEL2 identifies gene essentiality through Bayesian Analysis. + + ### MAGeCK rra -MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` should be used with a `csv` separated file stating the two conditions to be compared. +MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` should be used with a dot comma (;) `csv` separated file stating the two conditions to be compared. You can also integrate several samples/conditions by comma separating them. Please find an example here below : + +| treatment1,treatment2 | control1,control2 | +|-----------------------|-------------------| +| treatment1 | control1 | + ### MAGeCK mle @@ -57,7 +69,10 @@ If there are several designs to be run, you can input a folder containing all th CRISPRcleanR is used for gene count normalization and the removal of biases for genomic segments for which copy numbers are amplified. Currently, the pipeline only supports annotation libraries already present in the R package and which can be found [here](https://github.com/francescojm/CRISPRcleanR/blob/master/Reference_Manual.pdf). To use CRISPRcleanR normalization, use `--crisprcleanr library`, `library` being the exact name as the library in the CRISPRcleanR documentation (e.g: "AVANA_Library"). -This will launch the pipeline with the `docker` configuration profile. See below for more information about profiles. +### BAGEL2 + +BAGEL2 (Bayesian Analysis of Gene Essentiality with Location) is a computational tool developed by the Hart Lab at Harvard University. It is designed for analyzing large-scale genetic screens, particularly CRISPR-Cas9 screens, to identify genes that are essential for the survival or growth of cells under different conditions. BAGEL2 integrates information about the location of guide RNAs within a gene and leverages this information to improve the accuracy of gene essentiality predictions. +BAGEL2 uses the same contrasts from `--rra_contrasts`. Note that the pipeline will create the following files in your working directory: diff --git a/modules/local/mageck/graphrra.nf b/modules/local/mageck/graphrra.nf new file mode 100644 index 00000000..80d0e7fb --- /dev/null +++ b/modules/local/mageck/graphrra.nf @@ -0,0 +1,54 @@ +process MAGECK_GRAPHRRA { + tag "$meta.treatment" + label 'process_single' + + conda "bioconda::bioconductor-mageckflute=2.2.0" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'https://depot.galaxyproject.org/singularity/mageckflute:2.2.0--r42hdfd78af_0': + 'biocontainers/bioconductor-mageckflute:2.2.0--r42hdfd78af_0' }" + + input: + tuple val(meta), path(gene_summary) + + output: + tuple val(meta), path("*.png"), emit: graphs + + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + + """ + #!/usr/bin/env Rscript + library(MAGeCKFlute) + library(ggplot2) + options(ggrepel.max.overlaps = Inf) + + gdata = ReadRRA("$gene_summary") + gdata <- transform(gdata, LogFDR = -log10(FDR)) + print(colnames(gdata)) + + png(filename = paste0("$meta.treatment","_vs_","$meta.reference","_scatterview.png"), width = 6, height = 4, units = "in", res = 300) + p1 = ScatterView(gdata, x = "Score", y = "LogFDR", label = "id", + model = "volcano", top = 5) + print(p1) + dev.off() + + gdata <- transform(gdata, Rank = rank(Score)) + png(filename = paste0("$meta.treatment","_vs_","$meta.reference","_rank.png"), width = 6, height = 4, units = "in", res = 300) + p1 = ScatterView(gdata, x = "Rank", y = "Score", label = "id", + top = 5, auto_cut_y = TRUE, ylab = "Log2FC", + groups = c("top", "bottom")) + print(p1) + dev.off() + + #write.table(gdata, file = "test.tsv", sep = "\t", quote = FALSE, col.names = NA, row.names = TRUE) + + #dev.off() + """ + + +} diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index a037ad13..bca7d700 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -59,6 +59,7 @@ include { MULTIQC } from '../modules/nf-core/multiqc/main' include { MAGECK_COUNT } from '../modules/nf-core/mageck/count/main' include { MAGECK_MLE } from '../modules/nf-core/mageck/mle/main' include { MAGECK_TEST } from '../modules/nf-core/mageck/test/main' +include { MAGECK_GRAPHRRA } from '../modules/local/mageck/graphrra' include { CUSTOM_DUMPSOFTWAREVERSIONS } from '../modules/nf-core/custom/dumpsoftwareversions/main' include { CRISPRCLEANR_NORMALIZE } from '../modules/nf-core/crisprcleanr/normalize/main' include { BAGEL2_FC } from '../modules/local/bagel2/fc' @@ -160,6 +161,11 @@ workflow CRISPRSEQ_SCREENING { MAGECK_TEST ( counts ) + + //MAGECK_TEST.out.gene_summary.dump(tag:"test") + MAGECK_GRAPHRRA ( + MAGECK_TEST.out.gene_summary + ) } if(params.rra_contrasts) { @@ -191,6 +197,8 @@ workflow CRISPRSEQ_SCREENING { BAGEL2_GRAPH ( BAGEL2_PR.out.pr ) + + } if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) From fef0481fe07adbfd50b0c7071db185683b02ac3b Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 25 Oct 2023 09:10:52 +0200 Subject: [PATCH 28/39] Update docs/usage/screening.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- docs/usage/screening.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/usage/screening.md b/docs/usage/screening.md index ba061d79..62d967e0 100644 --- a/docs/usage/screening.md +++ b/docs/usage/screening.md @@ -43,7 +43,7 @@ An [example samplesheet](https://github.com/nf-core/test-datasets/blob/crisprseq ### library -If you are running the pipeline with fastq files and wish to obtain a count table, the library parameter is needed. The library table has two mandatory columns : id, target transcript (or gRNA sequence) and gene symbol. +If you are running the pipeline with fastq files and wish to obtain a count table, the library parameter is needed. The library table has three mandatory columns : id, target transcript (or gRNA sequence) and gene symbol. An [example](https://github.com/nf-core/test-datasets/blob/crisprseq/testdata/brunello_target_sequence.txt) has been provided with the pipeline. Many libraries can be found on [addgene](https://www.addgene.org/). After the alignment step, the pipeline currently supports 3 algorithms to detect gene essentiality, MAGeCK rra, MAGeCK mle and BAGEL2. MAGeCK MLE (Maximum Likelihood Estimation) and MAGeCK RRA (Robust Ranking Aggregation) are two different methods provided by the MAGeCK software package to analyze CRISPR-Cas9 screens. BAGEL2 identifies gene essentiality through Bayesian Analysis. From 77f250936da06e32b78243c0190a528e787ed5e4 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 25 Oct 2023 09:12:05 +0200 Subject: [PATCH 29/39] Update workflows/crisprseq_screening.nf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Júlia Mir Pedrol --- workflows/crisprseq_screening.nf | 1 - 1 file changed, 1 deletion(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index bca7d700..0fa37cdf 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -162,7 +162,6 @@ workflow CRISPRSEQ_SCREENING { counts ) - //MAGECK_TEST.out.gene_summary.dump(tag:"test") MAGECK_GRAPHRRA ( MAGECK_TEST.out.gene_summary ) From acd150d4b4cc489c54ae2f9aa2b59426eb731e05 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 25 Oct 2023 10:25:51 +0200 Subject: [PATCH 30/39] Modifications suggested by Julia --- docs/output/screening.md | 1 + docs/usage/screening.md | 8 +++++++- workflows/crisprseq_screening.nf | 3 +-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/output/screening.md b/docs/output/screening.md index cd530622..e043a47c 100644 --- a/docs/output/screening.md +++ b/docs/output/screening.md @@ -23,6 +23,7 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d - [Gene essentiality](#gene-essentiality-computation) - [MAGeCK rra](#mageck-rra) - modified robust ranking aggregation (RRA) algorithm - [MAGeCK mle](#mageck-mle) - maximum-likelihood estimation (MLE) for robust identification of CRISPR-screen hits + - [BAGEL2](#BAGEL2) - Bayes Factor to identify essential genes - [MultiQC](#multiqc) - Aggregate report describing results and QC from the whole pipeline - [Pipeline information](#pipeline-information) - Report metrics generated during the workflow execution diff --git a/docs/usage/screening.md b/docs/usage/screening.md index ba061d79..f4777544 100644 --- a/docs/usage/screening.md +++ b/docs/usage/screening.md @@ -52,12 +52,18 @@ After the alignment step, the pipeline currently supports 3 algorithms to detect ### MAGeCK rra -MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` should be used with a dot comma (;) `csv` separated file stating the two conditions to be compared. You can also integrate several samples/conditions by comma separating them. Please find an example here below : +MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` contains two columns : treatment and reference. These two columns should be separated with a dot comma (;) and contain the `csv` extension. You can also integrate several samples/conditions by comma separating them. Please find an example here below : +| treatment | reference | +|-----------------------|-------------------| +| treatment1 | control1 | | treatment1,treatment2 | control1,control2 | |-----------------------|-------------------| | treatment1 | control1 | +A full example can be found here : +#TODO: add link to rawcontent of nf-core test + ### MAGeCK mle diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index bca7d700..6616b411 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -197,9 +197,8 @@ workflow CRISPRSEQ_SCREENING { BAGEL2_GRAPH ( BAGEL2_PR.out.pr ) - - } + if(params.mle_design_matrix) { ch_mle = ch_counts.combine(ch_design) ch_mle.map { From 718ceaae10f19d76780e04f14e337ae1ef3c983b Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Wed, 25 Oct 2023 13:07:16 +0200 Subject: [PATCH 31/39] Take comments into account add license --- modules/local/bagel2/graph.nf | 42 ++++---------------------------- modules/local/mageck/graphrra.nf | 10 ++++---- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/modules/local/bagel2/graph.nf b/modules/local/bagel2/graph.nf index 26b404ab..c14e7810 100644 --- a/modules/local/bagel2/graph.nf +++ b/modules/local/bagel2/graph.nf @@ -22,46 +22,14 @@ process BAGEL2_GRAPH { def args = task.ext.args ?: '' def prefix = task.ext.prefix ?: "${meta.id}" - /* - # --------------------------------- - # BAGEL: Bayesian Analysis of Gene EssentaLity - # (c) Traver Hart , Eiru Kim 2017. - - # Acknowledgements: John McGonigle - # modified 10/2019 - # Free to modify and redistribute with attribution - # --------------------------------- - - # ------------------------------------ - # constants - -""" - MIT License - - Copyright (c) 2020 Hart Lab - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. - - */ """ #!/usr/bin/env python3 + #### author: Laurence Kuhlburger + #### Released under the MIT license. See git repository (https://github.com/nf-core/crisprseq) for full license text. + #### + #### Orient a reference sequence according to reads orientation. + import pandas as pd import matplotlib.pyplot as plt diff --git a/modules/local/mageck/graphrra.nf b/modules/local/mageck/graphrra.nf index 80d0e7fb..b68ffb6a 100644 --- a/modules/local/mageck/graphrra.nf +++ b/modules/local/mageck/graphrra.nf @@ -22,6 +22,11 @@ process MAGECK_GRAPHRRA { def prefix = task.ext.prefix ?: "${meta.id}" """ + #### author: Laurence Kuhlburger + #### Released under the MIT license. See git repository (https://github.com/nf-core/crisprseq) for full license text. + #### + #### Orient a reference sequence according to reads orientation. + #!/usr/bin/env Rscript library(MAGeCKFlute) library(ggplot2) @@ -29,8 +34,6 @@ process MAGECK_GRAPHRRA { gdata = ReadRRA("$gene_summary") gdata <- transform(gdata, LogFDR = -log10(FDR)) - print(colnames(gdata)) - png(filename = paste0("$meta.treatment","_vs_","$meta.reference","_scatterview.png"), width = 6, height = 4, units = "in", res = 300) p1 = ScatterView(gdata, x = "Score", y = "LogFDR", label = "id", model = "volcano", top = 5) @@ -45,9 +48,6 @@ process MAGECK_GRAPHRRA { print(p1) dev.off() - #write.table(gdata, file = "test.tsv", sep = "\t", quote = FALSE, col.names = NA, row.names = TRUE) - - #dev.off() """ From 2a756b83212e760dfb37d2a8e5fe45e3eded8806 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 3 Nov 2023 11:44:22 +0100 Subject: [PATCH 32/39] Add contrast file in the test --- conf/test_screening.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/test_screening.config b/conf/test_screening.config index 8ec59e49..3a8b6238 100644 --- a/conf/test_screening.config +++ b/conf/test_screening.config @@ -25,5 +25,5 @@ params { crisprcleanr = "Brunello_Library" mle_design_matrix = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/design_matrix.txt" library = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/brunello_target_sequence.txt" - //rra_contrasts = "" + contrasts = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/rra_contrasts.txt" } From 4a9573649d48816874bdcc32501f2ee56581d51b Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Fri, 3 Nov 2023 14:21:16 +0100 Subject: [PATCH 33/39] remove condition --- workflows/crisprseq_screening.nf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index d71bfe84..0d834ee8 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -104,7 +104,7 @@ workflow CRISPRSEQ_SCREENING { ch_input .map { meta, fastq -> - [meta.condition, fastq, meta.single_end] + [meta.sample, fastq, meta.single_end] } .reduce { a, b -> if(a[2] != b[2] ) { @@ -112,8 +112,8 @@ workflow CRISPRSEQ_SCREENING { } return ["${a[0]},${b[0]}", a[1] + b[1], b[2]] } - .map { condition, fastqs, single_end -> - [[id: condition, single_end: single_end], fastqs] + .map { sample, fastqs, single_end -> + [[id: sample, single_end: single_end], fastqs] } .set { joined } From 9d67bd09eedad346b4136ed7e9bbce7022909ab7 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 7 Nov 2023 11:17:06 +0100 Subject: [PATCH 34/39] rollback on the condition in the samplesheet --- conf/test_screening.config | 2 +- modules/local/mageck/graphrra.nf | 2 +- workflows/crisprseq_screening.nf | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/conf/test_screening.config b/conf/test_screening.config index 3a8b6238..0ac8ed89 100644 --- a/conf/test_screening.config +++ b/conf/test_screening.config @@ -25,5 +25,5 @@ params { crisprcleanr = "Brunello_Library" mle_design_matrix = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/design_matrix.txt" library = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/brunello_target_sequence.txt" - contrasts = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/rra_contrasts.txt" + rra_contrasts = "https://raw.githubusercontent.com/nf-core/test-datasets/crisprseq/testdata/rra_contrasts.txt" } diff --git a/modules/local/mageck/graphrra.nf b/modules/local/mageck/graphrra.nf index b68ffb6a..c4f77c6d 100644 --- a/modules/local/mageck/graphrra.nf +++ b/modules/local/mageck/graphrra.nf @@ -22,12 +22,12 @@ process MAGECK_GRAPHRRA { def prefix = task.ext.prefix ?: "${meta.id}" """ + #!/usr/bin/env Rscript #### author: Laurence Kuhlburger #### Released under the MIT license. See git repository (https://github.com/nf-core/crisprseq) for full license text. #### #### Orient a reference sequence according to reads orientation. - #!/usr/bin/env Rscript library(MAGeCKFlute) library(ggplot2) options(ggrepel.max.overlaps = Inf) diff --git a/workflows/crisprseq_screening.nf b/workflows/crisprseq_screening.nf index 0d834ee8..ff2a61b5 100644 --- a/workflows/crisprseq_screening.nf +++ b/workflows/crisprseq_screening.nf @@ -104,7 +104,7 @@ workflow CRISPRSEQ_SCREENING { ch_input .map { meta, fastq -> - [meta.sample, fastq, meta.single_end] + [meta.condition, fastq, meta.single_end] } .reduce { a, b -> if(a[2] != b[2] ) { @@ -112,11 +112,11 @@ workflow CRISPRSEQ_SCREENING { } return ["${a[0]},${b[0]}", a[1] + b[1], b[2]] } - .map { sample, fastqs, single_end -> - [[id: sample, single_end: single_end], fastqs] + .map { condition, fastqs, single_end -> + [[id: condition, single_end: single_end], fastqs] } .set { joined } - + joined.dump(tag:"metadata") // // MODULE: Run mageck count From 00d0d16c2fa85814ff9d360a686463c683386330 Mon Sep 17 00:00:00 2001 From: nf-core-bot Date: Tue, 7 Nov 2023 11:31:47 +0000 Subject: [PATCH 35/39] [automated] Fix linting with Prettier --- CHANGELOG.md | 1 - assets/schema_input.json | 2 +- docs/output/screening.md | 1 - docs/usage/screening.md | 15 ++++++--------- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4f0dcd1..7b85a3b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - BAGEL2 as a module which detects gene essentiality ([#60](https://github.com/nf-core/crisprseq/pull/60)) - Add custom plots to MultiQC report (cutadapt module, read processing, edition, edition QC) ([#64](https://github.com/nf-core/crisprseq/pull/64)) - ### Fixed - Change to `process_high` for the mageck mle module ([#60](https://github.com/nf-core/crisprseq/pull/60) diff --git a/assets/schema_input.json b/assets/schema_input.json index dfc3dc1c..8b780504 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/nf-core/crisprseq/master/assets/schema_input.json", "title": "nf-core/crisprseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/docs/output/screening.md b/docs/output/screening.md index e043a47c..869a7d33 100644 --- a/docs/output/screening.md +++ b/docs/output/screening.md @@ -119,7 +119,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [bagel2](https://github.com/hart-lab/bagel) is a computational tool to identify important essential genes for CRISPR-Cas9 screening experiments. - ## MultiQC
diff --git a/docs/usage/screening.md b/docs/usage/screening.md index dcfef31f..bdbdd4c9 100644 --- a/docs/usage/screening.md +++ b/docs/usage/screening.md @@ -48,23 +48,20 @@ An [example](https://github.com/nf-core/test-datasets/blob/crisprseq/testdata/br After the alignment step, the pipeline currently supports 3 algorithms to detect gene essentiality, MAGeCK rra, MAGeCK mle and BAGEL2. MAGeCK MLE (Maximum Likelihood Estimation) and MAGeCK RRA (Robust Ranking Aggregation) are two different methods provided by the MAGeCK software package to analyze CRISPR-Cas9 screens. BAGEL2 identifies gene essentiality through Bayesian Analysis. - - ### MAGeCK rra MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` contains two columns : treatment and reference. These two columns should be separated with a dot comma (;) and contain the `csv` extension. You can also integrate several samples/conditions by comma separating them. Please find an example here below : -| treatment | reference | -|-----------------------|-------------------| -| treatment1 | control1 | -| treatment1,treatment2 | control1,control2 | -|-----------------------|-------------------| -| treatment1 | control1 | +| treatment | reference | +| ----------------------- | ------------------- | +| treatment1 | control1 | +| treatment1,treatment2 | control1,control2 | +| ----------------------- | ------------------- | +| treatment1 | control1 | A full example can be found here : #TODO: add link to rawcontent of nf-core test - ### MAGeCK mle MAGeCK MLE uses a maximum likelihood estimation approach to estimate the effects of gene knockout on cell fitness. It models the read count data of guide RNAs targeting each gene and estimates the dropout probability for each gene. MAGeCK mle requires a design matrix. The design matrix is a `txt` file indicating the effects of different conditions on different samples. From 0049dde711b6e7926fc56632b766b06eee0b9f90 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 7 Nov 2023 12:34:43 +0100 Subject: [PATCH 36/39] ran prettier --- CHANGELOG.md | 1 - assets/schema_input.json | 2 +- docs/output/screening.md | 1 - docs/usage/screening.md | 15 ++++++--------- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f4f0dcd1..7b85a3b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - BAGEL2 as a module which detects gene essentiality ([#60](https://github.com/nf-core/crisprseq/pull/60)) - Add custom plots to MultiQC report (cutadapt module, read processing, edition, edition QC) ([#64](https://github.com/nf-core/crisprseq/pull/64)) - ### Fixed - Change to `process_high` for the mageck mle module ([#60](https://github.com/nf-core/crisprseq/pull/60) diff --git a/assets/schema_input.json b/assets/schema_input.json index dfc3dc1c..8b780504 100644 --- a/assets/schema_input.json +++ b/assets/schema_input.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema", + "$schema": "http://json-schema.org/draft-07/schema", "$id": "https://raw.githubusercontent.com/nf-core/crisprseq/master/assets/schema_input.json", "title": "nf-core/crisprseq pipeline - params.input schema", "description": "Schema for the file provided with params.input", diff --git a/docs/output/screening.md b/docs/output/screening.md index e043a47c..869a7d33 100644 --- a/docs/output/screening.md +++ b/docs/output/screening.md @@ -119,7 +119,6 @@ The pipeline is built using [Nextflow](https://www.nextflow.io/) and processes d [bagel2](https://github.com/hart-lab/bagel) is a computational tool to identify important essential genes for CRISPR-Cas9 screening experiments. - ## MultiQC
diff --git a/docs/usage/screening.md b/docs/usage/screening.md index dcfef31f..bdbdd4c9 100644 --- a/docs/usage/screening.md +++ b/docs/usage/screening.md @@ -48,23 +48,20 @@ An [example](https://github.com/nf-core/test-datasets/blob/crisprseq/testdata/br After the alignment step, the pipeline currently supports 3 algorithms to detect gene essentiality, MAGeCK rra, MAGeCK mle and BAGEL2. MAGeCK MLE (Maximum Likelihood Estimation) and MAGeCK RRA (Robust Ranking Aggregation) are two different methods provided by the MAGeCK software package to analyze CRISPR-Cas9 screens. BAGEL2 identifies gene essentiality through Bayesian Analysis. - - ### MAGeCK rra MAGeCK RRA performs robust ranking aggregation to identify genes that are consistently ranked highly across multiple replicate screens. To run MAGeCK rra, `--rra_contrasts` contains two columns : treatment and reference. These two columns should be separated with a dot comma (;) and contain the `csv` extension. You can also integrate several samples/conditions by comma separating them. Please find an example here below : -| treatment | reference | -|-----------------------|-------------------| -| treatment1 | control1 | -| treatment1,treatment2 | control1,control2 | -|-----------------------|-------------------| -| treatment1 | control1 | +| treatment | reference | +| ----------------------- | ------------------- | +| treatment1 | control1 | +| treatment1,treatment2 | control1,control2 | +| ----------------------- | ------------------- | +| treatment1 | control1 | A full example can be found here : #TODO: add link to rawcontent of nf-core test - ### MAGeCK mle MAGeCK MLE uses a maximum likelihood estimation approach to estimate the effects of gene knockout on cell fitness. It models the read count data of guide RNAs targeting each gene and estimates the dropout probability for each gene. MAGeCK mle requires a design matrix. The design matrix is a `txt` file indicating the effects of different conditions on different samples. From e073518b642671f4fce5dce835ab3a15bacd2836 Mon Sep 17 00:00:00 2001 From: LaurenceKuhl Date: Tue, 7 Nov 2023 12:52:22 +0100 Subject: [PATCH 37/39] nf-core modules patch on mageck mle --- modules/nf-core/mageck/mle/mageck-mle.diff | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/nf-core/mageck/mle/mageck-mle.diff b/modules/nf-core/mageck/mle/mageck-mle.diff index b635b553..cba65759 100644 --- a/modules/nf-core/mageck/mle/mageck-mle.diff +++ b/modules/nf-core/mageck/mle/mageck-mle.diff @@ -1,6 +1,14 @@ Changes in module 'nf-core/mageck/mle' --- modules/nf-core/mageck/mle/main.nf +++ modules/nf-core/mageck/mle/main.nf +@@ -1,6 +1,6 @@ + process MAGECK_MLE { + tag "$meta.id" +- label 'process_medium' ++ label 'process_high' + + conda "bioconda::mageck=0.5.9" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? @@ -8,8 +8,7 @@ 'biocontainers/mageck:0.5.9--py37h6bb024c_0' }" From d5c59ab89489c42ffe3727af3e5cb0497a677cde Mon Sep 17 00:00:00 2001 From: mirpedrol Date: Tue, 7 Nov 2023 13:06:50 +0100 Subject: [PATCH 38/39] run black --- bin/BAGEL.py | 350 +++++++++++++++++++++++++++------------------------ 1 file changed, 189 insertions(+), 161 deletions(-) diff --git a/bin/BAGEL.py b/bin/BAGEL.py index 94bd734b..205fbb44 100755 --- a/bin/BAGEL.py +++ b/bin/BAGEL.py @@ -37,22 +37,21 @@ """ +import sys +import time import click import numpy as np import pandas as pd import scipy.stats as stats from sklearn.linear_model import LinearRegression -import sys -import time VERSION = 2.0 BUILD = 115 - -''' +""" Update history Build 115 @@ -77,26 +76,23 @@ 2. Now user can input column names 3. Fix Threshold function -''' +""" class OptionRequiredIf(click.Option): - def full_process_value(self, ctx, value): value = super(OptionRequiredIf, self).full_process_value(ctx, value) - if value is None and ctx.params['filter_multi_target'] is True: - msg = 'Error! Multi-target-filtering selected and not align-info provided.\n' \ - 'Please indicate align-info file.' + if value is None and ctx.params["filter_multi_target"] is True: + msg = ( + "Error! Multi-target-filtering selected and not align-info provided.\n" + "Please indicate align-info file." + ) raise click.MissingParameter(ctx=ctx, param=self, message=msg) return value - - - - -CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help']) +CONTEXT_SETTINGS = dict(help_option_names=["-h", "--help"]) def round_to_hundredth(x): @@ -109,7 +105,6 @@ def func_linear(x, a, b): class Training: def __init__(self, X, n=None, cvnum=10): - if n == None: self._n = len(X) self._cvnum = cvnum @@ -118,7 +113,6 @@ def __init__(self, X, n=None, cvnum=10): self._X = X self._step = 0 - def cross_validation(self): if self._bid < 1: # bid check print("The number of genes is too small! n<" + str(self._cvnum)) @@ -157,7 +151,7 @@ def get_data(self, method=0): elif method == 1: train, test = self.cross_validation() else: - print('Method passed as a value that was neither 0 nor 1.') + print("Method passed as a value that was neither 0 nor 1.") sys.exit(1) return train, test @@ -208,24 +202,24 @@ def bagel(): """ -@click.command(name='version') +@click.command(name="version") def report_bagel_version(): """ Report the current build and version no. """ print( - 'Bayesian Analysis of Gene EssentiaLity (BAGEL) suite:\n' - 'Version: {VERSION}\n' - 'Build: {BUILD}'.format(VERSION=VERSION, BUILD=BUILD) + "Bayesian Analysis of Gene EssentiaLity (BAGEL) suite:\n" + "Version: {VERSION}\n" + "Build: {BUILD}".format(VERSION=VERSION, BUILD=BUILD) ) -@click.command(name='fc') -@click.option('-i', '--read-count-file', required=True, type=click.Path(exists=True)) -@click.option('-o', '--output-label', required=True) -@click.option('-c', '--control-columns', required=True) -@click.option('-m', '--min-reads', type=int, default=0) -@click.option('-Np', '--pseudo-count', type=int, default=5) +@click.command(name="fc") +@click.option("-i", "--read-count-file", required=True, type=click.Path(exists=True)) +@click.option("-o", "--output-label", required=True) +@click.option("-c", "--control-columns", required=True) +@click.option("-m", "--min-reads", type=int, default=0) +@click.option("-Np", "--pseudo-count", type=int, default=5) def calculate_fold_change(read_count_file, output_label, control_columns, min_reads, pseudo_count): """ \b @@ -259,9 +253,9 @@ def calculate_fold_change(read_count_file, output_label, control_columns, min_re # Import raw read data, normalize, filter for T0 min read counts # # Output: [output label].foldchange # # ---------------------------------------------------------------- # - reads = pd.read_csv(read_count_file, sep='\t', index_col=0) + reads = pd.read_csv(read_count_file, sep="\t", index_col=0) - reads[reads.columns.values[0]].fillna('NO_GENE_NAME', inplace=True) + reads[reads.columns.values[0]].fillna("NO_GENE_NAME", inplace=True) reads.fillna(0, inplace=True) control_columns = control_columns.split(",") # @@ -277,7 +271,7 @@ def calculate_fold_change(read_count_file, output_label, control_columns, min_re ctrl_sum = reads[ctrl_labels].sum(axis=1) reads.drop(ctrl_labels, axis=1, inplace=True) - ctrl_label_new = ';'.join(ctrl_labels) + ctrl_label_new = ";".join(ctrl_labels) reads[ctrl_label_new] = ctrl_sum except: print(reads[ctrl_labels].sum(axis=1)) @@ -298,9 +292,10 @@ def calculate_fold_change(read_count_file, output_label, control_columns, min_re # sumReads = reads.iloc[:, list(range(1, numColumns))].sum(0) normed = pd.DataFrame(index=reads.index.values) - normed['GENE'] = reads.iloc[:, 0] # first column is gene name - normed = reads.iloc[:, list(range(1, numColumns))] / np.tile(sumReads, - [numClones, 1]) * 10000000 # normalize to 10M reads + normed["GENE"] = reads.iloc[:, 0] # first column is gene name + normed = ( + reads.iloc[:, list(range(1, numColumns))] / np.tile(sumReads, [numClones, 1]) * 10000000 + ) # normalize to 10M reads # # filter for minimum readcount @@ -312,8 +307,8 @@ def calculate_fold_change(read_count_file, output_label, control_columns, min_re # calculate fold change # foldchange = pd.DataFrame(index=normed.index.values) - foldchange.index.name = 'REAGENT_ID' - foldchange['GENE'] = reads.iloc[f, 0] # dataframe 'normed' has no GENE column + foldchange.index.name = "REAGENT_ID" + foldchange["GENE"] = reads.iloc[f, 0] # dataframe 'normed' has no GENE column for i in range(numColumns - 1): foldchange[normed.columns.values[i]] = np.log2( (normed.loc[:, normed.columns.values[i]]) / normed[ctrl_label_new] @@ -328,39 +323,57 @@ def calculate_fold_change(read_count_file, output_label, control_columns, min_re # write foldchange file # - foldchange_filename = output_label + '.foldchange' - foldchange.to_csv(foldchange_filename, sep='\t', float_format='%4.3f') - - normedreads_filename = output_label + '.normed_readcount' - normed.to_csv(normedreads_filename, sep='\t', float_format='%3.2f') - - -@click.command(name='bf') -@click.option('-i', '--fold-change', required=True, type=click.Path(exists=True)) -@click.option('-o', '--output-file', required=True) -@click.option('-e', '--essential-genes', required=True, type=click.Path(exists=True)) -@click.option('-n', '--non-essential-genes', required=True, type=click.Path(exists=True)) -@click.option('-c', '--columns-to-test', required=True) -@click.option('-w', '--network-file', metavar='[network File]', default=None, type=click.Path(exists=True)) -@click.option('-m', '--filter-multi-target', is_flag=True) -@click.option('-m0', '--loci-without-mismatch', type=int, default=10) -@click.option('-m1', '--loci-with-mismatch', type=int, default=10) -@click.option('--align-info', metavar='--align-info [File]', default=None, - type=click.Path(exists=True), cls=OptionRequiredIf) -@click.option('-b', '--use-bootstrapping', is_flag=True) -@click.option('-NS', '--no-resampling', is_flag=True) -@click.option('-s', '--use-small-sample', is_flag=True) -@click.option('-N', '--no-of-cross-validations', type=int, default=10) -@click.option('-NB', '--bootstrap-iterations', type=int, default=1000) -@click.option('-r', '--sgrna-bayes-factors', is_flag=True) -@click.option('-f', '--equalise-sgrna-no', type=int) -@click.option('-s', '--seed', default=int(time.time() * 100000 % 100000), type=int) -@click.option('-t', '--run-test-mode', is_flag=True) -@click.option('-p', '--equalise-rep-no', type=int) + foldchange_filename = output_label + ".foldchange" + foldchange.to_csv(foldchange_filename, sep="\t", float_format="%4.3f") + + normedreads_filename = output_label + ".normed_readcount" + normed.to_csv(normedreads_filename, sep="\t", float_format="%3.2f") + + +@click.command(name="bf") +@click.option("-i", "--fold-change", required=True, type=click.Path(exists=True)) +@click.option("-o", "--output-file", required=True) +@click.option("-e", "--essential-genes", required=True, type=click.Path(exists=True)) +@click.option("-n", "--non-essential-genes", required=True, type=click.Path(exists=True)) +@click.option("-c", "--columns-to-test", required=True) +@click.option("-w", "--network-file", metavar="[network File]", default=None, type=click.Path(exists=True)) +@click.option("-m", "--filter-multi-target", is_flag=True) +@click.option("-m0", "--loci-without-mismatch", type=int, default=10) +@click.option("-m1", "--loci-with-mismatch", type=int, default=10) +@click.option( + "--align-info", metavar="--align-info [File]", default=None, type=click.Path(exists=True), cls=OptionRequiredIf +) +@click.option("-b", "--use-bootstrapping", is_flag=True) +@click.option("-NS", "--no-resampling", is_flag=True) +@click.option("-s", "--use-small-sample", is_flag=True) +@click.option("-N", "--no-of-cross-validations", type=int, default=10) +@click.option("-NB", "--bootstrap-iterations", type=int, default=1000) +@click.option("-r", "--sgrna-bayes-factors", is_flag=True) +@click.option("-f", "--equalise-sgrna-no", type=int) +@click.option("-s", "--seed", default=int(time.time() * 100000 % 100000), type=int) +@click.option("-t", "--run-test-mode", is_flag=True) +@click.option("-p", "--equalise-rep-no", type=int) def calculate_bayes_factors( - fold_change, output_file, essential_genes, non_essential_genes, columns_to_test, network_file, align_info, - use_bootstrapping, no_resampling, use_small_sample, filter_multi_target, loci_without_mismatch, loci_with_mismatch, - bootstrap_iterations, no_of_cross_validations, sgrna_bayes_factors, equalise_sgrna_no, seed, run_test_mode, equalise_rep_no + fold_change, + output_file, + essential_genes, + non_essential_genes, + columns_to_test, + network_file, + align_info, + use_bootstrapping, + no_resampling, + use_small_sample, + filter_multi_target, + loci_without_mismatch, + loci_with_mismatch, + bootstrap_iterations, + no_of_cross_validations, + sgrna_bayes_factors, + equalise_sgrna_no, + seed, + run_test_mode, + equalise_rep_no, ): """ \b @@ -460,7 +473,6 @@ def calculate_bayes_factors( multi_targeting_sgrnas_info = dict() if filter_multi_target: - try: aligninfo = pd.read_csv(align_info, header=None, index_col=0, sep="\t").fillna("") for seqid in aligninfo.index: @@ -480,7 +492,10 @@ def calculate_bayes_factors( multi_targeting_sgrnas[seqid] = True elif perfectmatch > 1 or mismatch_1bp > 0: multi_targeting_sgrnas_info[seqid] = ( - perfectmatch, mismatch_1bp, perfectmatch_gene, mismatch_1bp_gene + perfectmatch, + mismatch_1bp, + perfectmatch_gene, + mismatch_1bp_gene, ) except: @@ -494,19 +509,20 @@ def calculate_bayes_factors( # rnatagset = set() with open(fold_change) as fin: - fieldname = fin.readline().rstrip().split('\t') + fieldname = fin.readline().rstrip().split("\t") # # DEFINE CONTROLS # - columns = columns_to_test.split(',') + columns = columns_to_test.split(",") try: try: column_list = list(map(int, columns)) column_labels = [fieldname[x + 1] for x in column_list] except ValueError: column_labels = columns - column_list = [x for x in range(len(fieldname) - 1) if - fieldname[x + 1] in column_labels] # +1 because of First column start 2 + column_list = [ + x for x in range(len(fieldname) - 1) if fieldname[x + 1] in column_labels + ] # +1 because of First column start 2 print("Using column: " + ", ".join(column_labels)) # print "Using column: " + ", ".join(map(str,column_list)) @@ -515,7 +531,7 @@ def calculate_bayes_factors( sys.exit(1) for line in fin: - fields = line.rstrip().split('\t') + fields = line.rstrip().split("\t") rnatag = fields[0] if filter_multi_target is True: # multitargeting sgrna filtering if rnatag in multi_targeting_sgrnas: @@ -547,7 +563,7 @@ def calculate_bayes_factors( with open(essential_genes) as fin: skip_header = fin.readline() for line in fin: - coreEss.append(line.rstrip().split('\t')[0]) + coreEss.append(line.rstrip().split("\t")[0]) coreEss = np.array(coreEss) print("Number of reference essentials: " + str(len(coreEss))) @@ -555,7 +571,7 @@ def calculate_bayes_factors( with open(non_essential_genes) as fin: skip_header = fin.readline() for line in fin: - nonEss.append(line.rstrip().split('\t')[0]) + nonEss.append(line.rstrip().split("\t")[0]) nonEss = np.array(nonEss) print("Number of reference nonessentials: " + str(len(nonEss))) @@ -569,7 +585,7 @@ def calculate_bayes_factors( edgecount = 0 with open(network_file) as fin: for line in fin: - linearray = line.rstrip().split('\t') # GeneA \t GeneB format + linearray = line.rstrip().split("\t") # GeneA \t GeneB format if linearray[0] in genes_array and linearray[1] in genes_array: for i in [0, 1]: if linearray[i] not in network: @@ -586,8 +602,7 @@ def calculate_bayes_factors( # Define foldchange dynamic threshold. logarithm decay. # Parameters are defined by regression (achilles data) 2**-7 was used in previous version. - FC_THRESH = 2 ** (-1.1535 * np.log(len(np.intersect1d(genes_array, - nonEss)) + 13.324) + 0.7728) + FC_THRESH = 2 ** (-1.1535 * np.log(len(np.intersect1d(genes_array, nonEss)) + 13.324) + 0.7728) bf = {} boostedbf = {} for g in genes_array: @@ -603,8 +618,9 @@ def calculate_bayes_factors( # declare training class # training_data = Training(setdiff1d(gene_idx,np.where(in1d(genes_array,coreEss))),cvnum=NUMCV) # declare training class (only for Gold-standard gene set) - training_data = Training(np.where(np.in1d(genes_array, np.union1d(coreEss, nonEss)))[0], - cvnum=no_of_cross_validations) + training_data = Training( + np.where(np.in1d(genes_array, np.union1d(coreEss, nonEss)))[0], cvnum=no_of_cross_validations + ) # all non-goldstandards all_non_gs = np.where(np.logical_not(np.in1d(genes_array, np.union1d(coreEss, nonEss))))[0] else: @@ -649,7 +665,8 @@ def calculate_bayes_factors( if run_test_mode: fp.write( - "%d\n%s\n%s\n" % (loop, ",".join(genes_array[gene_train_idx]), ",".join(genes_array[gene_test_idx]))) + "%d\n%s\n%s\n" % (loop, ",".join(genes_array[gene_train_idx]), ",".join(genes_array[gene_test_idx])) + ) train_ess = np.where(np.in1d(genes_array[gene_train_idx], coreEss))[0] train_non = np.where(np.in1d(genes_array[gene_train_idx], nonEss))[0] @@ -661,14 +678,16 @@ def calculate_bayes_factors( # # define ess_train: vector of observed fold changes of essential genes in training set # - ess_train_fc_list_of_lists = [fc[rnatag] for g in genes_array[gene_train_idx[train_ess]] for rnatag in - gene2rna[g]] + ess_train_fc_list_of_lists = [ + fc[rnatag] for g in genes_array[gene_train_idx[train_ess]] for rnatag in gene2rna[g] + ] ess_train_fc_flat_list = [obs for sublist in ess_train_fc_list_of_lists for obs in list(sublist.values())] # # define non_train vector of observed fold changes of nonessential genes in training set # - non_train_fc_list_of_lists = [fc[rnatag] for g in genes_array[gene_train_idx[train_non]] for rnatag in - gene2rna[g]] + non_train_fc_list_of_lists = [ + fc[rnatag] for g in genes_array[gene_train_idx[train_non]] for rnatag in gene2rna[g] + ] non_train_fc_flat_list = [obs for sublist in non_train_fc_list_of_lists for obs in list(sublist.values())] # # calculate empirical fold change distributions for both @@ -781,21 +800,24 @@ def calculate_bayes_factors( if len(onlytarget) > 0: # comparsion between sgRNAs targeting one locus and multiple loci if len(multitarget) > 0: - bf_only = np.mean([sum(list(bf_mean_rna_rep[seqid].values())) for seqid in onlytarget]) for seqid in onlytarget: trainset[seqid] = [1, 0, 0] for seqid in multitarget: - if multi_targeting_sgrnas_info[seqid][2] > 1 or multi_targeting_sgrnas_info[seqid][ - 3] > 0: # train model using multi-targeting only targeting one protein coding gene + if ( + multi_targeting_sgrnas_info[seqid][2] > 1 or multi_targeting_sgrnas_info[seqid][3] > 0 + ): # train model using multi-targeting only targeting one protein coding gene continue count += 1 increment = sum(list(bf_mean_rna_rep[seqid].values())) - bf_only - trainset[seqid] = [multi_targeting_sgrnas_info[seqid][0], multi_targeting_sgrnas_info[seqid][1], - increment] + trainset[seqid] = [ + multi_targeting_sgrnas_info[seqid][0], + multi_targeting_sgrnas_info[seqid][1], + increment, + ] if count < 10: print("Not enough train set for calculating multi-targeting effect.\n") @@ -804,35 +826,40 @@ def calculate_bayes_factors( filter_multi_target = False else: - trainset = pd.DataFrame().from_dict(trainset).T X = trainset[[0, 1]] y = trainset[2] regressor = LinearRegression() regressor.fit(X, y) - coeff_df = pd.DataFrame(regressor.coef_, X.columns, columns=['Coefficient']) + coeff_df = pd.DataFrame(regressor.coef_, X.columns, columns=["Coefficient"]) for i in [0, 1]: - if coeff_df['Coefficient'][i] < 0: + if coeff_df["Coefficient"][i] < 0: print("Regression coefficient is below than zero. Substituted to zero\n") - coeff_df['Coefficient'][i] = 0.0 - print("Multiple effects from perfect matched loci = %.3f and 1bp mis-matched loci = %.3f" % ( - coeff_df['Coefficient'][0], coeff_df['Coefficient'][1])) + coeff_df["Coefficient"][i] = 0.0 + print( + "Multiple effects from perfect matched loci = %.3f and 1bp mis-matched loci = %.3f" + % (coeff_df["Coefficient"][0], coeff_df["Coefficient"][1]) + ) if rna_level == False: for g in gene2rna: penalty = 0.0 for seqid in gene2rna[g]: if seqid in multi_targeting_sgrnas_info: - penalty += float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df['Coefficient'][ - 0] + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df['Coefficient'][1] + penalty += ( + float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df["Coefficient"][0] + + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df["Coefficient"][1] + ) bf_multi_corrected_gene[g] = bf_mean[g] - penalty else: for g in gene2rna: for seqid in gene2rna[g]: if seqid in multi_targeting_sgrnas_info: - penalty = float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df['Coefficient'][ - 0] + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df['Coefficient'][1] + penalty = ( + float(multi_targeting_sgrnas_info[seqid][0] - 1) * coeff_df["Coefficient"][0] + + float(multi_targeting_sgrnas_info[seqid][1]) * coeff_df["Coefficient"][1] + ) else: penalty = 0.0 bf_multi_corrected_rna[seqid] = sum(list(bf_mean_rna_rep[seqid].values())) - penalty @@ -850,12 +877,12 @@ def calculate_bayes_factors( multiple_factor = equalise_sgrna_no / float(len(gene2rna[g])) bf_norm[g] = targetbf[g] * multiple_factor - ''' + """ if bf_std[rnatag] == 0.0: bf_norm[rnatag] = float('inf') else: bf_norm[g] = ( bf[rnatag] - bf_mean[rnatag] ) / bf_std[rnatag] - ''' + """ training_data = Training(gene_idx) # set training class reset # @@ -961,102 +988,100 @@ def calculate_bayes_factors( if run_test_mode == True: fp.close() - - - # # print out results # # Equalizing factor (Replicates) - if flat_rep==True: - eqf = equalise_rep_no/float(len(column_labels)) + if flat_rep == True: + eqf = equalise_rep_no / float(len(column_labels)) else: eqf = 1 # print out - with open(output_file, 'w') as fout: - + with open(output_file, "w") as fout: if rna_level == True: - fout.write('RNA\tGENE') + fout.write("RNA\tGENE") for i in range(len(column_list)): - fout.write('\t{0:s}'.format(column_labels[i])) + fout.write("\t{0:s}".format(column_labels[i])) if train_method == 0: - fout.write('\t{0:s}'.format(column_labels[i] + "_STD")) - fout.write('\tBF') + fout.write("\t{0:s}".format(column_labels[i] + "_STD")) + fout.write("\tBF") if train_method == 0: - fout.write('\tNumObs') - fout.write('\n') + fout.write("\tNumObs") + fout.write("\n") for rnatag in sorted(bf.keys()): # RNA tag - fout.write('{0:s}\t'.format(rnatag)) + fout.write("{0:s}\t".format(rnatag)) # Gene gene = rna2gene[rnatag] - fout.write('{0:s}\t'.format(gene)) + fout.write("{0:s}\t".format(gene)) # BF of replicates for rep in column_list: - fout.write('{0:4.3f}\t'.format(bf_mean_rna_rep[rnatag][rep])) + fout.write("{0:4.3f}\t".format(bf_mean_rna_rep[rnatag][rep])) if train_method == 0: - fout.write('{0:4.3f}\t'.format(bf_std_rna_rep[rnatag][rep])) + fout.write("{0:4.3f}\t".format(bf_std_rna_rep[rnatag][rep])) # Sum BF of replicates if filter_multi_target == True: - fout.write('{0:4.3f}'.format(float(bf_multi_corrected_rna[rnatag]) * eqf)) # eqf = equalizing factor for the number of replicates + fout.write( + "{0:4.3f}".format(float(bf_multi_corrected_rna[rnatag]) * eqf) + ) # eqf = equalizing factor for the number of replicates else: - fout.write('{0:4.3f}'.format(float(sum(list(bf_mean_rna_rep[rnatag].values()))) * eqf)) + fout.write("{0:4.3f}".format(float(sum(list(bf_mean_rna_rep[rnatag].values()))) * eqf)) # Num obs if train_method == 0: - fout.write('\t{0:d}'.format(num_obs[gene])) - fout.write('\n') + fout.write("\t{0:d}".format(num_obs[gene])) + fout.write("\n") else: - fout.write('GENE') + fout.write("GENE") if network_boost == True: - fout.write('\tBoostedBF') + fout.write("\tBoostedBF") if train_method == 0: - fout.write('\tSTD_BoostedBF') - fout.write('\tBF') + fout.write("\tSTD_BoostedBF") + fout.write("\tBF") if train_method == 0: - fout.write('\tSTD\tNumObs') + fout.write("\tSTD\tNumObs") if flat_sgrna == True: - fout.write('\tNormBF') - fout.write('\n') + fout.write("\tNormBF") + fout.write("\n") for g in sorted(genes.keys()): # Gene - fout.write('{0:s}'.format(g)) + fout.write("{0:s}".format(g)) if network_boost == True: boostedbf_mean = np.mean(boostedbf[g]) boostedbf_std = np.std(boostedbf[g]) - fout.write('\t{0:4.3f}'.format(float(boostedbf_mean) * eqf)) + fout.write("\t{0:4.3f}".format(float(boostedbf_mean) * eqf)) if train_method == 0: - fout.write('\t{0:4.3f}'.format(float(boostedbf_std) * eqf)) + fout.write("\t{0:4.3f}".format(float(boostedbf_std) * eqf)) # BF if filter_multi_target == True: - fout.write('\t{0:4.3f}'.format(float(bf_multi_corrected_gene[g]) * eqf)) # eqf = equalizing factor for the number of replicates + fout.write( + "\t{0:4.3f}".format(float(bf_multi_corrected_gene[g]) * eqf) + ) # eqf = equalizing factor for the number of replicates else: - fout.write('\t{0:4.3f}'.format(float(bf_mean[g]) * eqf )) + fout.write("\t{0:4.3f}".format(float(bf_mean[g]) * eqf)) # STD, Count if train_method == 0: - fout.write('\t{0:4.3f}\t{1:d}'.format(float(bf_std[g]), num_obs[g])) + fout.write("\t{0:4.3f}\t{1:d}".format(float(bf_std[g]), num_obs[g])) # Normalized BF if flat_sgrna == True: - fout.write('\t{0:4.3f}'.format(float(bf_norm[g]))) + fout.write("\t{0:4.3f}".format(float(bf_norm[g]))) - fout.write('\n') + fout.write("\n") -@click.command(name='pr') -@click.option('-i', '--bayes-factors', required=True, - type=click.Path(exists=True)) -@click.option('-o', '--output-file', required=True) -@click.option('-e', '--essential-genes', required=True, - type=click.Path(exists=True)) -@click.option('-n', '--non-essential-genes', required=True, type=click.Path(exists=True)) -@click.option('-k', '--use-column', default=None) +@click.command(name="pr") +@click.option("-i", "--bayes-factors", required=True, type=click.Path(exists=True)) +@click.option("-o", "--output-file", required=True) +@click.option("-e", "--essential-genes", required=True, type=click.Path(exists=True)) +@click.option("-n", "--non-essential-genes", required=True, type=click.Path(exists=True)) +@click.option("-k", "--use-column", default=None) def calculate_precision_recall(bayes_factors, output_file, essential_genes, non_essential_genes, use_column): """ Calculate precision-recall from an input Bayes Factors file: @@ -1093,38 +1118,41 @@ def calculate_precision_recall(bayes_factors, output_file, essential_genes, non_ print("Error! the column name is not in the file") sys.exit(1) else: - bf_column = 'BF' + bf_column = "BF" bf.sort_values(by=bf_column, ascending=False, inplace=True) - cumulative_tp = 0. - cumulative_fp = 0. - precision = 1. - recall = 0. + cumulative_tp = 0.0 + cumulative_fp = 0.0 + precision = 1.0 + recall = 0.0 # note float formats ess = essentials.index.values non = nonessentials.index.values totNumEssentials = len([x for x in bf.index.values if x in ess]) - with open(output_file, 'w') as fout: - - fout.write('Gene\t') + with open(output_file, "w") as fout: + fout.write("Gene\t") fout.write(bf_column) - fout.write('\tRecall\tPrecision\tFDR\n') + fout.write("\tRecall\tPrecision\tFDR\n") for g in bf.index.values: - if (g in ess): + if g in ess: cumulative_tp += 1 - elif (g in non): + elif g in non: cumulative_fp += 1 recall = cumulative_tp / totNumEssentials - if ((cumulative_tp > 0) | (cumulative_fp > 0)): + if (cumulative_tp > 0) | (cumulative_fp > 0): precision = cumulative_tp / (cumulative_tp + cumulative_fp) - fout.write('{0:s}\t{1:4.3f}\t{2:4.3f}\t{3:4.3f}\t{4:4.3f}\n'.format(g, bf.loc[g, bf_column], recall, precision, 1.0-precision)) + fout.write( + "{0:s}\t{1:4.3f}\t{2:4.3f}\t{3:4.3f}\t{4:4.3f}\n".format( + g, bf.loc[g, bf_column], recall, precision, 1.0 - precision + ) + ) -if __name__ == '__main__': +if __name__ == "__main__": bagel.add_command(calculate_fold_change) bagel.add_command(calculate_bayes_factors) bagel.add_command(calculate_precision_recall) From 49306903fd7bc5ca8751be3c9c7d6cb1dfce63d3 Mon Sep 17 00:00:00 2001 From: mirpedrol Date: Tue, 7 Nov 2023 13:22:47 +0100 Subject: [PATCH 39/39] fix left-padding spaces --- modules/local/mageck/graphrra.nf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/local/mageck/graphrra.nf b/modules/local/mageck/graphrra.nf index c4f77c6d..2c531d5d 100644 --- a/modules/local/mageck/graphrra.nf +++ b/modules/local/mageck/graphrra.nf @@ -43,8 +43,8 @@ process MAGECK_GRAPHRRA { gdata <- transform(gdata, Rank = rank(Score)) png(filename = paste0("$meta.treatment","_vs_","$meta.reference","_rank.png"), width = 6, height = 4, units = "in", res = 300) p1 = ScatterView(gdata, x = "Rank", y = "Score", label = "id", - top = 5, auto_cut_y = TRUE, ylab = "Log2FC", - groups = c("top", "bottom")) + top = 5, auto_cut_y = TRUE, ylab = "Log2FC", + groups = c("top", "bottom")) print(p1) dev.off()