Skip to content

Commit

Permalink
support gnomAD Genome - issue 2445
Browse files Browse the repository at this point in the history
  • Loading branch information
nickzren committed Aug 3, 2017
1 parent f6f8aaa commit 05a6331
Show file tree
Hide file tree
Showing 14 changed files with 505 additions and 55 deletions.
3 changes: 3 additions & 0 deletions src/main/java/Program.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/function/annotation/base/AnnotatedVariant.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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());
Expand Down Expand Up @@ -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();
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/function/external/base/DataManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
49 changes: 45 additions & 4 deletions src/main/java/function/external/gnomad/GnomADCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
}
}
53 changes: 28 additions & 25 deletions src/main/java/function/external/gnomad/GnomADExome.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -42,7 +42,7 @@ public GnomADExome(String chr, int pos, String ref, String alt) {

initCoverage();

initAF();
initMaf();
}

public GnomADExome(ResultSet rs) {
Expand All @@ -51,27 +51,26 @@ 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;

if (ref.length() != alt.length()) {
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);
}
}

private void initCoverage() {
try {
String sql = GnomADManager.getSql4Cvg(chr, pos);
String sql = GnomADManager.getSql4CvgExome(chr, pos);

ResultSet rs = DBManager.executeQuery(sql);

Expand All @@ -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");
}

Expand All @@ -122,33 +125,33 @@ 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]);
}
}

return value;
}

public boolean isValid() {
return GnomADCommand.isGnomADExomeAFValid(getMaxAF())
return GnomADCommand.isGnomADExomeMafValid(getMaxMaf())
&& GnomADCommand.isGnomADExomeAsRfValid(asRf, isSnv);
}

Expand All @@ -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("',");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand All @@ -27,4 +32,4 @@ public boolean isValid() {
public String toString() {
return gnomADExome.toString();
}
}
}
Loading

0 comments on commit 05a6331

Please sign in to comment.