From 05a63311e46dc8fba23a6573eca9a54fe9f6df10 Mon Sep 17 00:00:00 2001 From: Nick Ren Date: Thu, 3 Aug 2017 16:14:03 -0400 Subject: [PATCH] support gnomAD Genome - issue 2445 --- src/main/java/Program.java | 3 + .../annotation/base/AnnotatedVariant.java | 17 ++ .../function/external/base/DataManager.java | 3 +- .../external/gnomad/GnomADCommand.java | 49 +++++- .../function/external/gnomad/GnomADExome.java | 53 +++--- ...omADOutput.java => GnomADExomeOutput.java} | 13 +- .../external/gnomad/GnomADGenome.java | 157 ++++++++++++++++++ .../external/gnomad/GnomADGenomeOutput.java | 35 ++++ .../external/gnomad/GnomADManager.java | 93 +++++++++-- .../external/gnomad/ListGnomADExome.java | 6 +- .../external/gnomad/ListGnomADGenome.java | 94 +++++++++++ .../java/function/variant/base/Output.java | 3 +- .../base/VariantLevelFilterCommand.java | 29 +++- src/main/java/utils/CommandManager.java | 5 + 14 files changed, 505 insertions(+), 55 deletions(-) rename src/main/java/function/external/gnomad/{GnomADOutput.java => GnomADExomeOutput.java} (55%) create mode 100644 src/main/java/function/external/gnomad/GnomADGenome.java create mode 100644 src/main/java/function/external/gnomad/GnomADGenomeOutput.java create mode 100644 src/main/java/function/external/gnomad/ListGnomADGenome.java diff --git a/src/main/java/Program.java b/src/main/java/Program.java index 93bedf28..44621fcb 100644 --- a/src/main/java/Program.java +++ b/src/main/java/Program.java @@ -44,6 +44,7 @@ import function.external.genomes.List1000Genomes; import function.external.gerp.GerpCommand; import function.external.gerp.ListGerp; +import function.external.gnomad.ListGnomADGenome; import function.external.kaviar.KaviarCommand; import function.external.kaviar.ListKaviar; import function.external.knownvar.KnownVarCommand; @@ -175,6 +176,8 @@ private static void startAnalysis() { runAnalysis(new ListExac()); } else if (GnomADCommand.isListGnomADExome) { runAnalysis(new ListGnomADExome()); + } else if (GnomADCommand.isListGnomADGenome) { + runAnalysis(new ListGnomADGenome()); } else if (KnownVarCommand.isListKnownVar) { runAnalysis(new ListKnownVar()); } else if (FlankingCommand.isListFlankingSeq) { diff --git a/src/main/java/function/annotation/base/AnnotatedVariant.java b/src/main/java/function/annotation/base/AnnotatedVariant.java index ab552ac1..53486dbe 100644 --- a/src/main/java/function/annotation/base/AnnotatedVariant.java +++ b/src/main/java/function/annotation/base/AnnotatedVariant.java @@ -15,6 +15,7 @@ import function.external.genomes.GenomesCommand; import function.external.gerp.GerpCommand; import function.external.gerp.GerpManager; +import function.external.gnomad.GnomADGenome; import function.variant.base.Variant; import function.variant.base.VariantManager; import function.external.kaviar.Kaviar; @@ -59,6 +60,7 @@ public class AnnotatedVariant extends Variant { // external db annotations private Exac exac; private GnomADExome gnomADExome; + private GnomADGenome gnomADGenome; private Kaviar kaviar; private Evs evs; private float gerpScore; @@ -89,6 +91,12 @@ private void checkValid() throws Exception { isValid = gnomADExome.isValid(); } + + if (isValid & GnomADCommand.isIncludeGnomADGenome) { + gnomADGenome = new GnomADGenome(chrStr, startPosition, refAllele, allele); + + isValid = gnomADGenome.isValid(); + } if (isValid & ExacCommand.isIncludeExac) { exac = new Exac(chrStr, startPosition, refAllele, allele); @@ -320,6 +328,7 @@ public void getExternalData(StringBuilder sb) { sb.append(getEvsStr()); sb.append(getExacStr()); sb.append(getGnomADExomeStr()); + sb.append(getGnomADGenomeStr()); sb.append(getKnownVarStr()); sb.append(getKaviarStr()); sb.append(get1000Genomes()); @@ -348,6 +357,14 @@ public String getGnomADExomeStr() { } } + public String getGnomADGenomeStr() { + if (GnomADCommand.isIncludeGnomADGenome) { + return gnomADGenome.toString(); + } else { + return ""; + } + } + public String getKaviarStr() { if (KaviarCommand.isIncludeKaviar) { return kaviar.toString(); diff --git a/src/main/java/function/external/base/DataManager.java b/src/main/java/function/external/base/DataManager.java index 552b043d..87feeff7 100644 --- a/src/main/java/function/external/base/DataManager.java +++ b/src/main/java/function/external/base/DataManager.java @@ -29,7 +29,8 @@ public static String getVersion() { sb.append(EvsManager.getVersion()); sb.append(ExacManager.getVersion()); - sb.append(GnomADManager.getVersion()); + sb.append(GnomADManager.getExomeVersion()); + sb.append(GnomADManager.getGenomeVersion()); sb.append(KnownVarManager.getVersion()); sb.append(KaviarManager.getVersion()); sb.append(GenomesManager.getVersion()); diff --git a/src/main/java/function/external/gnomad/GnomADCommand.java b/src/main/java/function/external/gnomad/GnomADCommand.java index 433d3b11..d5cf6ab5 100644 --- a/src/main/java/function/external/gnomad/GnomADCommand.java +++ b/src/main/java/function/external/gnomad/GnomADCommand.java @@ -9,19 +9,34 @@ public class GnomADCommand { public static boolean isListGnomADExome = false; + public static boolean isListGnomADGenome = false; public static boolean isIncludeGnomADExome = false; + public static boolean isIncludeGnomADGenome = false; public static String gnomADExomePop = "global"; - public static float gnomADExomeAF = Data.NO_FILTER; + public static String gnomADGenomePop = "global"; + public static float gnomADExomeMaf = Data.NO_FILTER; + public static float gnomADGenomeMaf = Data.NO_FILTER; public static float gnomADExomeAsRfSnv = Data.NO_FILTER; + public static float gnomADGenomeAsRfSnv = Data.NO_FILTER; public static float gnomADExomeAsRfIndel = Data.NO_FILTER; + public static float gnomADGenomeAsRfIndel = Data.NO_FILTER; - public static boolean isGnomADExomeAFValid(float value) { - if (gnomADExomeAF == Data.NO_FILTER) { + public static boolean isGnomADExomeMafValid(float value) { + if (gnomADExomeMaf == Data.NO_FILTER) { return true; } - return value <= gnomADExomeAF + return value <= gnomADExomeMaf + || value == Data.FLOAT_NA; + } + + public static boolean isGnomADGenomeMafValid(float value) { + if (gnomADGenomeMaf == Data.NO_FILTER) { + return true; + } + + return value <= gnomADGenomeMaf || value == Data.FLOAT_NA; } @@ -33,6 +48,14 @@ public static boolean isGnomADExomeAsRfValid(float value, boolean isSnv) { } } + public static boolean isGnomADGenomeAsRfValid(float value, boolean isSnv) { + if (isSnv) { + return isGnomADGenomeAsRfSnvValid(value); + } else { + return isGnomADGenomeAsRfIndelValid(value); + } + } + private static boolean isGnomADExomeAsRfSnvValid(float value) { if (gnomADExomeAsRfSnv == Data.NO_FILTER) { return true; @@ -42,6 +65,15 @@ private static boolean isGnomADExomeAsRfSnvValid(float value) { || value == Data.FLOAT_NA; } + private static boolean isGnomADGenomeAsRfSnvValid(float value) { + if (gnomADGenomeAsRfSnv == Data.NO_FILTER) { + return true; + } + + return value >= gnomADGenomeAsRfSnv + || value == Data.FLOAT_NA; + } + private static boolean isGnomADExomeAsRfIndelValid(float value) { if (gnomADExomeAsRfIndel == Data.NO_FILTER) { return true; @@ -50,4 +82,13 @@ private static boolean isGnomADExomeAsRfIndelValid(float value) { return value >= gnomADExomeAsRfIndel || value == Data.FLOAT_NA; } + + private static boolean isGnomADGenomeAsRfIndelValid(float value) { + if (gnomADGenomeAsRfIndel == Data.NO_FILTER) { + return true; + } + + return value >= gnomADGenomeAsRfIndel + || value == Data.FLOAT_NA; + } } diff --git a/src/main/java/function/external/gnomad/GnomADExome.java b/src/main/java/function/external/gnomad/GnomADExome.java index fc3cf5e2..c97a9b3a 100644 --- a/src/main/java/function/external/gnomad/GnomADExome.java +++ b/src/main/java/function/external/gnomad/GnomADExome.java @@ -21,7 +21,7 @@ public class GnomADExome { private float meanCoverage; private int sampleCovered10x; - private float[] af; + private float[] maf; private String[] gts; private String filter; private float abMedian; @@ -42,7 +42,7 @@ public GnomADExome(String chr, int pos, String ref, String alt) { initCoverage(); - initAF(); + initMaf(); } public GnomADExome(ResultSet rs) { @@ -51,6 +51,8 @@ public GnomADExome(ResultSet rs) { pos = rs.getInt("pos"); ref = rs.getString("ref_allele"); alt = rs.getString("alt_allele"); + maf = new float[GnomADManager.GNOMAD_EXOME_POP.length]; + gts = new String[GnomADManager.GNOMAD_EXOME_POP.length]; isSnv = true; @@ -58,12 +60,9 @@ public GnomADExome(ResultSet rs) { isSnv = false; } - af = new float[GnomADManager.GNOMAD_EXOME_POP.length]; - gts = new String[GnomADManager.GNOMAD_EXOME_POP.length]; - initCoverage(); - setAF(rs); + setMaf(rs); } catch (Exception e) { ErrorManager.send(e); } @@ -71,7 +70,7 @@ public GnomADExome(ResultSet rs) { private void initCoverage() { try { - String sql = GnomADManager.getSql4Cvg(chr, pos); + String sql = GnomADManager.getSql4CvgExome(chr, pos); ResultSet rs = DBManager.executeQuery(sql); @@ -87,32 +86,36 @@ private void initCoverage() { } } - private void initAF() { - af = new float[GnomADManager.GNOMAD_EXOME_POP.length]; + private void initMaf() { + maf = new float[GnomADManager.GNOMAD_EXOME_POP.length]; gts = new String[GnomADManager.GNOMAD_EXOME_POP.length]; try { - String sql = GnomADManager.getSqlByVariant(chr, pos, ref, alt); + String sql = GnomADManager.getSql4MafExome(chr, pos, ref, alt); ResultSet rs = DBManager.executeQuery(sql); if (rs.next()) { - setAF(rs); + setMaf(rs); } else if (meanCoverage > 0) { - resetAF(0); + resetMaf(0); } else { - resetAF(Data.FLOAT_NA); + resetMaf(Data.FLOAT_NA); } } catch (Exception e) { ErrorManager.send(e); } } - private void setAF(ResultSet rs) throws SQLException { + private void setMaf(ResultSet rs) throws SQLException { for (int i = 0; i < GnomADManager.GNOMAD_EXOME_POP.length; i++) { float af = rs.getFloat(GnomADManager.GNOMAD_EXOME_POP[i] + "_af"); - this.af[i] = af; + if (af > 0.5) { + af = 1 - af; + } + + maf[i] = af; gts[i] = rs.getString(GnomADManager.GNOMAD_EXOME_POP[i] + "_gts"); } @@ -122,25 +125,25 @@ private void setAF(ResultSet rs) throws SQLException { asRf = rs.getFloat("AS_RF"); } - private void resetAF(float value) { + private void resetMaf(float value) { for (int i = 0; i < GnomADManager.GNOMAD_EXOME_POP.length; i++) { - af[i] = value; - gts[i] = Data.STRING_NA; + maf[i] = value; + gts[i] = "NA"; } - filter = Data.STRING_NA; + filter = "NA"; abMedian = Data.FLOAT_NA; gqMedian = Data.INTEGER_NA; asRf = Data.FLOAT_NA; } - private float getMaxAF() { + private float getMaxMaf() { float value = Data.FLOAT_NA; for (int i = 0; i < GnomADManager.GNOMAD_EXOME_POP.length; i++) { - if (af[i] != Data.FLOAT_NA + if (maf[i] != Data.FLOAT_NA && GnomADCommand.gnomADExomePop.contains(GnomADManager.GNOMAD_EXOME_POP[i])) { - value = Math.max(value, af[i]); + value = Math.max(value, maf[i]); } } @@ -148,7 +151,7 @@ private float getMaxAF() { } public boolean isValid() { - return GnomADCommand.isGnomADExomeAFValid(getMaxAF()) + return GnomADCommand.isGnomADExomeMafValid(getMaxMaf()) && GnomADCommand.isGnomADExomeAsRfValid(asRf, isSnv); } @@ -161,9 +164,9 @@ public String toString() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < GnomADManager.GNOMAD_EXOME_POP.length; i++) { - sb.append(FormatManager.getFloat(af[i])).append(","); + sb.append(FormatManager.getFloat(maf[i])).append(","); - if (gts[i].equals(Data.STRING_NA)) { + if (gts[i].equals("NA")) { sb.append(gts[i]).append(","); } else { sb.append("'").append(gts[i]).append("',"); diff --git a/src/main/java/function/external/gnomad/GnomADOutput.java b/src/main/java/function/external/gnomad/GnomADExomeOutput.java similarity index 55% rename from src/main/java/function/external/gnomad/GnomADOutput.java rename to src/main/java/function/external/gnomad/GnomADExomeOutput.java index 1bb7804c..432590bc 100644 --- a/src/main/java/function/external/gnomad/GnomADOutput.java +++ b/src/main/java/function/external/gnomad/GnomADExomeOutput.java @@ -6,16 +6,21 @@ * * @author nick */ -public class GnomADOutput { +public class GnomADExomeOutput { GnomADExome gnomADExome; public static String getTitle() { return "Variant ID," - + GnomADManager.getTitle(); + + GnomADManager.getExomeTitle(); } - public GnomADOutput(ResultSet rs) { + public GnomADExomeOutput(String id) { + String[] tmp = id.split("-"); // chr-pos-ref-alt + gnomADExome = new GnomADExome(tmp[0], Integer.parseInt(tmp[1]), tmp[2], tmp[3]); + } + + public GnomADExomeOutput(ResultSet rs) { gnomADExome = new GnomADExome(rs); } @@ -27,4 +32,4 @@ public boolean isValid() { public String toString() { return gnomADExome.toString(); } -} \ No newline at end of file +} diff --git a/src/main/java/function/external/gnomad/GnomADGenome.java b/src/main/java/function/external/gnomad/GnomADGenome.java new file mode 100644 index 00000000..9f479705 --- /dev/null +++ b/src/main/java/function/external/gnomad/GnomADGenome.java @@ -0,0 +1,157 @@ +package function.external.gnomad; + +import global.Data; +import utils.ErrorManager; +import utils.FormatManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import utils.DBManager; + +/** + * + * @author nick + */ +public class GnomADGenome { + + private String chr; + private int pos; + private String ref; + private String alt; + private boolean isSnv; + + private float[] maf; + private String[] gts; + private String filter; + private float abMedian; + private int gqMedian; + private float asRf; + + public GnomADGenome(String chr, int pos, String ref, String alt) { + this.chr = chr; + this.pos = pos; + this.ref = ref; + this.alt = alt; + + isSnv = true; + + if (ref.length() != alt.length()) { + isSnv = false; + } + + initMaf(); + } + + public GnomADGenome(ResultSet rs) { + try { + chr = rs.getString("chr"); + pos = rs.getInt("pos"); + ref = rs.getString("ref_allele"); + alt = rs.getString("alt_allele"); + maf = new float[GnomADManager.GNOMAD_GENOME_POP.length]; + gts = new String[GnomADManager.GNOMAD_GENOME_POP.length]; + + isSnv = true; + + if (ref.length() != alt.length()) { + isSnv = false; + } + + setMaf(rs); + } catch (Exception e) { + ErrorManager.send(e); + } + } + + private void initMaf() { + maf = new float[GnomADManager.GNOMAD_GENOME_POP.length]; + gts = new String[GnomADManager.GNOMAD_GENOME_POP.length]; + + try { + String sql = GnomADManager.getSql4MafGenome(chr, pos, ref, alt); + + ResultSet rs = DBManager.executeQuery(sql); + + if (rs.next()) { + setMaf(rs); + } else { + resetMaf(Data.FLOAT_NA); + } + } catch (Exception e) { + ErrorManager.send(e); + } + } + + private void setMaf(ResultSet rs) throws SQLException { + for (int i = 0; i < GnomADManager.GNOMAD_GENOME_POP.length; i++) { + float af = rs.getFloat(GnomADManager.GNOMAD_GENOME_POP[i] + "_af"); + + if (af > 0.5) { + af = 1 - af; + } + + maf[i] = af; + gts[i] = rs.getString(GnomADManager.GNOMAD_GENOME_POP[i] + "_gts"); + } + + filter = rs.getString("filter"); + abMedian = rs.getFloat("AB_MEDIAN"); + gqMedian = rs.getInt("GQ_MEDIAN"); + asRf = rs.getFloat("AS_RF"); + } + + private void resetMaf(float value) { + for (int i = 0; i < GnomADManager.GNOMAD_GENOME_POP.length; i++) { + maf[i] = value; + gts[i] = "NA"; + } + + filter = "NA"; + abMedian = Data.FLOAT_NA; + gqMedian = Data.INTEGER_NA; + asRf = Data.FLOAT_NA; + } + + private float getMaxMaf() { + float value = Data.FLOAT_NA; + + for (int i = 0; i < GnomADManager.GNOMAD_GENOME_POP.length; i++) { + if (maf[i] != Data.FLOAT_NA + && GnomADCommand.gnomADGenomePop.contains(GnomADManager.GNOMAD_GENOME_POP[i])) { + value = Math.max(value, maf[i]); + } + } + + return value; + } + + public boolean isValid() { + return GnomADCommand.isGnomADGenomeMafValid(getMaxMaf()) + && GnomADCommand.isGnomADGenomeAsRfValid(asRf, isSnv); + } + + public String getVariantId() { + return chr + "-" + pos + "-" + ref + "-" + alt; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + + for (int i = 0; i < GnomADManager.GNOMAD_GENOME_POP.length; i++) { + sb.append(FormatManager.getFloat(maf[i])).append(","); + + if (gts[i].equals("NA")) { + sb.append(gts[i]).append(","); + } else { + sb.append("'").append(gts[i]).append("',"); + } + } + + sb.append(filter).append(","); + sb.append(FormatManager.getFloat(abMedian)).append(","); + sb.append(FormatManager.getInteger(gqMedian)).append(","); + sb.append(FormatManager.getFloat(asRf)).append(","); + + return sb.toString(); + } +} diff --git a/src/main/java/function/external/gnomad/GnomADGenomeOutput.java b/src/main/java/function/external/gnomad/GnomADGenomeOutput.java new file mode 100644 index 00000000..8ae3482c --- /dev/null +++ b/src/main/java/function/external/gnomad/GnomADGenomeOutput.java @@ -0,0 +1,35 @@ +package function.external.gnomad; + +import java.sql.ResultSet; + +/** + * + * @author nick + */ +public class GnomADGenomeOutput { + + GnomADGenome gnomADGenome; + + public static String getTitle() { + return "Variant ID," + + GnomADManager.getGenomeTitle(); + } + + public GnomADGenomeOutput(String id) { + String[] tmp = id.split("-"); // chr-pos-ref-alt + gnomADGenome = new GnomADGenome(tmp[0], Integer.parseInt(tmp[1]), tmp[2], tmp[3]); + } + + public GnomADGenomeOutput(ResultSet rs) { + gnomADGenome = new GnomADGenome(rs); + } + + public boolean isValid() { + return gnomADGenome.isValid(); + } + + @Override + public String toString() { + return gnomADGenome.toString(); + } +} diff --git a/src/main/java/function/external/gnomad/GnomADManager.java b/src/main/java/function/external/gnomad/GnomADManager.java index 954bfd1b..8e449940 100644 --- a/src/main/java/function/external/gnomad/GnomADManager.java +++ b/src/main/java/function/external/gnomad/GnomADManager.java @@ -10,19 +10,21 @@ public class GnomADManager { public static final String[] GNOMAD_EXOME_POP = {"global", "afr", "amr", "asj", "eas", "sas", "fin", "nfe", "oth"}; + public static final String[] GNOMAD_GENOME_POP = {"global", "afr", "amr", "asj", "eas", "fin", "nfe", "oth"}; - static final String coverageTable = "gnomad.exome_coverage_170228"; - static String variantTable = "gnomad.exome_variant_170228"; + private static final String exomeCoverageTable = "gnomad.exome_coverage_170228"; + private static final String exomeVariantTable = "gnomad.exome_variant_170228"; + private static final String genomeVariantTable = "gnomad.genome_variant_chr1_170228"; public static void init() { } - public static String getTitle() { + public static String getExomeTitle() { String title = ""; if (GnomADCommand.isIncludeGnomADExome) { for (String str : GNOMAD_EXOME_POP) { - title += "gnomAD Exome " + str + " af," + title += "gnomAD Exome " + str + " maf," + "gnomAD Exome " + str + " gts,"; } @@ -37,24 +39,50 @@ public static String getTitle() { return title; } - public static String getVersion() { + public static String getGenomeTitle() { + String title = ""; + + if (GnomADCommand.isIncludeGnomADGenome) { + for (String str : GNOMAD_GENOME_POP) { + title += "gnomAD Genome " + str + " maf," + + "gnomAD Genome " + str + " gts,"; + } + + title += "gnomAD Genome filter," + + "gnomAD Genome AB MEDIAN," + + "gnomAD Genome GQ MEDIAN," + + "gnomAD Genome AS RF,"; + } + + return title; + } + + public static String getExomeVersion() { if (GnomADCommand.isIncludeGnomADExome) { - return "gnomAD Exome: " + DataManager.getVersion(variantTable) + "\n"; + return "gnomAD Exome: " + DataManager.getVersion(exomeVariantTable) + "\n"; + } else { + return ""; + } + } + + public static String getGenomeVersion() { + if (GnomADCommand.isIncludeGnomADGenome) { + return "gnomAD Genome: " + DataManager.getVersion(genomeVariantTable) + "\n"; } else { return ""; } } - public static String getSql4Cvg(String chr, int pos) { + public static String getSql4CvgExome(String chr, int pos) { String sql = "SELECT mean_cvg, covered_10x " - + "FROM " + coverageTable + " " + + "FROM " + exomeCoverageTable + " " + "WHERE chr = '" + chr + "' " + "AND pos = " + pos; return sql; } - public static String getSqlByRegion(Region region) { + public static String getSql4MafExome(Region region) { String result = "chr,pos,ref_allele,alt_allele,"; for (String str : GNOMAD_EXOME_POP) { @@ -64,15 +92,31 @@ public static String getSqlByRegion(Region region) { result += "filter,AB_MEDIAN,GQ_MEDIAN,AS_RF "; - String sql = "SELECT " + result - + "FROM " + variantTable + " " + String sql = "SELECT " + result + "FROM " + exomeVariantTable + " " + "WHERE chr = '" + region.getChrStr() + "' " + "AND pos BETWEEN " + region.getStartPosition() + " AND " + region.getEndPosition(); return sql; } - public static String getSqlByVariant(String chr, + public static String getSql4MafGenome(Region region) { + String result = "chr,pos,ref_allele,alt_allele,"; + + for (String str : GNOMAD_GENOME_POP) { + result += str + "_af," + + str + "_gts,"; + } + + result += "filter,AB_MEDIAN,GQ_MEDIAN,AS_RF "; + + String sql = "SELECT " + result + "FROM gnomad.genome_variant_chr" + region.getChrStr() + "_170228 " + + "WHERE chr = '" + region.getChrStr() + "' " + + "AND pos BETWEEN " + region.getStartPosition() + " AND " + region.getEndPosition(); + + return sql; + } + + public static String getSql4MafExome(String chr, int pos, String ref, String alt) { String result = ""; @@ -83,11 +127,32 @@ public static String getSqlByVariant(String chr, result += "filter,AB_MEDIAN,GQ_MEDIAN,AS_RF "; - return "SELECT " + result - + "FROM " + variantTable + " " + String sql = "SELECT " + result + "FROM " + exomeVariantTable + " " + "WHERE chr = '" + chr + "' " + "AND pos = " + pos + " " + "AND ref_allele = '" + ref + "' " + "AND alt_allele = '" + alt + "'"; + + return sql; + } + + public static String getSql4MafGenome(String chr, + int pos, String ref, String alt) { + String result = ""; + + for (String str : GNOMAD_GENOME_POP) { + result += str + "_af," + + str + "_gts,"; + } + + result += "filter,AB_MEDIAN,GQ_MEDIAN,AS_RF "; + + String sql = "SELECT " + result + "FROM gnomad.genome_variant_chr" + chr + "_170228 " + + "WHERE chr = '" + chr + "' " + + "AND pos = " + pos + " " + + "AND ref_allele = '" + ref + "' " + + "AND alt_allele = '" + alt + "'"; + + return sql; } } diff --git a/src/main/java/function/external/gnomad/ListGnomADExome.java b/src/main/java/function/external/gnomad/ListGnomADExome.java index bbfce8af..8cce32cd 100644 --- a/src/main/java/function/external/gnomad/ListGnomADExome.java +++ b/src/main/java/function/external/gnomad/ListGnomADExome.java @@ -26,7 +26,7 @@ public class ListGnomADExome extends AnalysisBase { public void initOutput() { try { bwGnomADExome = new BufferedWriter(new FileWriter(gnomADExomeFilePath)); - bwGnomADExome.write(GnomADOutput.getTitle()); + bwGnomADExome.write(GnomADExomeOutput.getTitle()); bwGnomADExome.newLine(); } catch (Exception ex) { ErrorManager.send(ex); @@ -61,12 +61,12 @@ public void processDatabaseData() throws Exception { Region region = RegionManager.getRegion(r); - String sqlCode = GnomADManager.getSqlByRegion(region); + String sqlCode = GnomADManager.getSql4MafExome(region); ResultSet rset = DBManager.executeReadOnlyQuery(sqlCode); while (rset.next()) { - GnomADOutput output = new GnomADOutput(rset); + GnomADExomeOutput output = new GnomADExomeOutput(rset); if (VariantManager.isVariantIdIncluded(output.gnomADExome.getVariantId()) && output.isValid()) { diff --git a/src/main/java/function/external/gnomad/ListGnomADGenome.java b/src/main/java/function/external/gnomad/ListGnomADGenome.java new file mode 100644 index 00000000..9c18b9d1 --- /dev/null +++ b/src/main/java/function/external/gnomad/ListGnomADGenome.java @@ -0,0 +1,94 @@ +package function.external.gnomad; + +import function.AnalysisBase; +import function.variant.base.Region; +import function.variant.base.RegionManager; +import function.variant.base.VariantManager; +import utils.CommonCommand; +import utils.ErrorManager; +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.sql.ResultSet; +import utils.DBManager; + +/** + * + * @author nick + */ +public class ListGnomADGenome extends AnalysisBase { + + BufferedWriter bwGnomADGenome = null; + final String gnomADGenomeFilePath = CommonCommand.outputPath + "gnomad.genome.csv"; + + int analyzedRecords = 0; + + @Override + public void initOutput() { + try { + bwGnomADGenome = new BufferedWriter(new FileWriter(gnomADGenomeFilePath)); + bwGnomADGenome.write(GnomADGenomeOutput.getTitle()); + bwGnomADGenome.newLine(); + } catch (Exception ex) { + ErrorManager.send(ex); + } + } + + @Override + public void closeOutput() { + try { + bwGnomADGenome.flush(); + bwGnomADGenome.close(); + } catch (Exception ex) { + ErrorManager.send(ex); + } + } + + @Override + public void doAfterCloseOutput() { + } + + @Override + public void beforeProcessDatabaseData() { + } + + @Override + public void afterProcessDatabaseData() { + } + + @Override + public void processDatabaseData() throws Exception { + for (int r = 0; r < RegionManager.getRegionSize(); r++) { + + Region region = RegionManager.getRegion(r); + + String sqlCode = GnomADManager.getSql4MafGenome(region); + + ResultSet rset = DBManager.executeReadOnlyQuery(sqlCode); + + while (rset.next()) { + GnomADGenomeOutput output = new GnomADGenomeOutput(rset); + + if (VariantManager.isVariantIdIncluded(output.gnomADGenome.getVariantId()) + && output.isValid()) { + bwGnomADGenome.write(output.gnomADGenome.getVariantId() + ","); + bwGnomADGenome.write(output.toString()); + bwGnomADGenome.newLine(); + } + + countVariant(); + } + + rset.close(); + } + } + + private void countVariant() { + System.out.print("Processing variant " + + ++analyzedRecords + " \r"); + } + + @Override + public String toString() { + return "Start running list gnomad genome function"; + } +} diff --git a/src/main/java/function/variant/base/Output.java b/src/main/java/function/variant/base/Output.java index e541a0f4..e5d81a22 100644 --- a/src/main/java/function/variant/base/Output.java +++ b/src/main/java/function/variant/base/Output.java @@ -51,7 +51,8 @@ public static String getAnnotationDataTitle() { public static String getExternalDataTitle() { return EvsManager.getTitle() + ExacManager.getTitle() - + GnomADManager.getTitle() + + GnomADManager.getExomeTitle() + + GnomADManager.getGenomeTitle() + KnownVarManager.getTitle() + KaviarManager.getTitle() + GenomesManager.getTitle() diff --git a/src/main/java/function/variant/base/VariantLevelFilterCommand.java b/src/main/java/function/variant/base/VariantLevelFilterCommand.java index 6f3d16b9..30c9468f 100644 --- a/src/main/java/function/variant/base/VariantLevelFilterCommand.java +++ b/src/main/java/function/variant/base/VariantLevelFilterCommand.java @@ -102,21 +102,41 @@ public static void initOptions(Iterator iterator) GnomADCommand.gnomADExomePop = option.getValue(); GnomADCommand.isIncludeGnomADExome = true; break; - case "--gnomad-exome-af": - checkValueValid(1, 0, option); - GnomADCommand.gnomADExomeAF = getValidFloat(option); + case "--gnomad-genome-pop": + checkValuesValid(GnomADManager.GNOMAD_GENOME_POP, option); + GnomADCommand.gnomADGenomePop = option.getValue(); + GnomADCommand.isIncludeGnomADGenome = true; + break; + case "--gnomad-exome-maf": + checkValueValid(0.5, 0, option); + GnomADCommand.gnomADExomeMaf = getValidFloat(option); GnomADCommand.isIncludeGnomADExome = true; break; + case "--gnomad-genome-maf": + checkValueValid(0.5, 0, option); + GnomADCommand.gnomADGenomeMaf = getValidFloat(option); + GnomADCommand.isIncludeGnomADGenome = true; + break; case "--gnomad-exome-as-rf-snv": checkValueValid(Data.NO_FILTER, Data.NO_FILTER, option); GnomADCommand.gnomADExomeAsRfSnv = getValidFloat(option); GnomADCommand.isIncludeGnomADExome = true; break; + case "--gnomad-genome-as-rf-snv": + checkValueValid(Data.NO_FILTER, Data.NO_FILTER, option); + GnomADCommand.gnomADGenomeAsRfSnv = getValidFloat(option); + GnomADCommand.isIncludeGnomADGenome = true; + break; case "--gnomad-exome-as-rf-indel": checkValueValid(Data.NO_FILTER, Data.NO_FILTER, option); GnomADCommand.gnomADExomeAsRfIndel = getValidFloat(option); GnomADCommand.isIncludeGnomADExome = true; break; + case "--gnomad-genome-as-rf-indel": + checkValueValid(Data.NO_FILTER, Data.NO_FILTER, option); + GnomADCommand.gnomADGenomeAsRfIndel = getValidFloat(option); + GnomADCommand.isIncludeGnomADGenome = true; + break; case "--known-var-only": KnownVarCommand.isKnownVarOnly = true; KnownVarCommand.isIncludeKnownVar = true; @@ -220,6 +240,9 @@ public static void initOptions(Iterator iterator) case "--include-gnomad-exome": GnomADCommand.isIncludeGnomADExome = true; break; + case "--include-gnomad-genome": + GnomADCommand.isIncludeGnomADGenome = true; + break; case "--include-gerp": GerpCommand.isIncludeGerp = true; break; diff --git a/src/main/java/utils/CommandManager.java b/src/main/java/utils/CommandManager.java index 5e6bc586..7be72ade 100644 --- a/src/main/java/utils/CommandManager.java +++ b/src/main/java/utils/CommandManager.java @@ -352,6 +352,11 @@ private static void initFunctionOptions() throws Exception { GnomADCommand.isListGnomADExome = true; GnomADCommand.isIncludeGnomADExome = true; break; + case "--list-gnomad-genome": + CommonCommand.isNonSampleAnalysis = true; + GnomADCommand.isListGnomADGenome = true; + GnomADCommand.isIncludeGnomADGenome = true; + break; case "--list-known-var": CommonCommand.isNonSampleAnalysis = true; KnownVarCommand.isListKnownVar = true;