diff --git a/client/src/app/components/pages/human-result/human-result.component.html b/client/src/app/components/pages/human-result/human-result.component.html
index 9b6eb94..260450a 100644
--- a/client/src/app/components/pages/human-result/human-result.component.html
+++ b/client/src/app/components/pages/human-result/human-result.component.html
@@ -206,17 +206,19 @@
gnomAD
- Population Allele Frequencies of {{ variantString }} from gnomAD
+ Population Allele Frequencies of
+ Chr{{ hg38Variant.chr }}:{{ hg38Variant.pos }} {{ hg38Variant.ref }}>{{ hg38Variant.alt }}
+ from gnomAD
open_in_new
More on gnomAD
-
+
diff --git a/client/src/app/services/api.service.ts b/client/src/app/services/api.service.ts
index afd6356..4406d28 100644
--- a/client/src/app/services/api.service.ts
+++ b/client/src/app/services/api.service.ts
@@ -108,7 +108,7 @@ export class ApiService {
}
getGnomADVaraint(variant: Variant): Observable {
- const url = `${environment.apiHost}/data/gnomAD/variant/${variant.chr}:${variant.pos}${variant.ref}>${variant.alt}`;
+ const url = `${environment.apiHost}/data/gnomAD/variant/${variant.chr}:${variant.pos}${variant.ref}>${variant.alt}?build=${variant.build || 'hg19'}`;
return new Observable(observer => {
this.http.get(url).subscribe((res: any) => {
res = res || {};
diff --git a/server/app.js b/server/app.js
index 9075cdc..90e0f73 100644
--- a/server/app.js
+++ b/server/app.js
@@ -66,6 +66,8 @@ console.log(`Running @ ${config.env}`);
console.log(`DECIPHER control data using collection ${config.decipher.control.name}`);
console.log(`DECIPEHR disease data using collection ${config.decipher.disease.name}`);
console.log(`DECIPHER disease access is restricted to ${config.decipher.disease.allowedReferer}`);
+console.log(`gnomAD data using version ${config.gnomad.version} ` +
+ `(collections: ${config.gnomad.variant.name}, ${config.gnomad.gene.name})`);
const httpServer = http.createServer(app);
// Mongoose
diff --git a/server/config/index.js b/server/config/index.js
index 58a4ffe..89e2692 100644
--- a/server/config/index.js
+++ b/server/config/index.js
@@ -21,6 +21,9 @@ const config = {
version: process.env.DECIPHER_DISEASE_VERSION,
name: `DECIPHERDisease${process.env.DECIPHER_DISEASE_VERSION ? `.${process.env.DECIPHER_DISEASE_VERSION}` : ''}`
}
+ },
+ gnomad: {
+ version: process.env.GNOMAD_VERSION || '2.1.1',
}
},
@@ -41,6 +44,9 @@ const config = {
version: process.env.DECIPHER_DISEASE_VERSION,
name: `DECIPHERDisease${process.env.DECIPHER_DISEASE_VERSION ? `.${process.env.DECIPHER_DISEASE_VERSION}` : ''}`
}
+ },
+ gnomad: {
+ version: process.env.GNOMAD_VERSION || '2.1.1',
}
},
@@ -72,7 +78,19 @@ config[env].mongo.url = `mongodb://${config[env].mongo.username}:${config[env].m
}/${config[env].mongo.database}`;
config[env].omim = require(path.join(rootPath, 'config/omim', `${env}.json`));
-
+config[env].gnomad.variant = {
+ name:
+ config[env].gnomad.version === '2.1.1'
+ ? 'GnomAD'
+ : `Gnomad.${config[env].gnomad.version}`,
+ defaultBuild: config[env].gnomad.version === '2.1.1' ? 'hg19' : 'hg38',
+};
+config[env].gnomad.gene = {
+ name:
+ config[env].gnomad.version === '2.1.1'
+ ? 'GnomADGene'
+ : `GnomadGene.${config[env].gnomad.version}`,
+};
config[env].liftover = {
hg38Version: process.env.LIFTOVER_HG38_VERSION || 'hg38_201312',
hg19Version: process.env.LIFTOVER_HG19_VERSION || 'hg19_200902',
diff --git a/server/controllers/gnomAD.controller.js b/server/controllers/gnomAD.controller.js
index 2e7d250..5e0b863 100644
--- a/server/controllers/gnomAD.controller.js
+++ b/server/controllers/gnomAD.controller.js
@@ -2,6 +2,7 @@ const GnomAD = require('../models/gnomAD.model');
const utils = require('../utils');
const db = require('../utils/db');
+const config = require('../config');
// eslint-disable-next-line no-unused-vars
const replace = (doc) => {
@@ -21,13 +22,18 @@ exports.findByVariant = (req, res) => {
return res.status(404).send({ message: 'Invalid variant' });
}
- db.gnomAD.getByVariant(variant, null, build)
+ const majorVersion = config.gnomad.version.split('.')[0] || '2';
+ (majorVersion === '2'
+ ? db.gnomAD.getByVariant(variant, null, build)
+ : db.gnomAD.getByVariantV2(variant, null, build)
+ )
.then((doc) => {
return res.json(doc);
- }).catch((err) => {
+ })
+ .catch((err) => {
console.log(err);
return res.status(500).send({
- message: 'Server error occured'
+ message: 'Server error occured',
});
});
};
diff --git a/server/models/gnomAD.model.js b/server/models/gnomAD.model.js
index 1975e14..a602c6e 100644
--- a/server/models/gnomAD.model.js
+++ b/server/models/gnomAD.model.js
@@ -1,4 +1,5 @@
const mongoose = require('mongoose');
+const config = require('../config');
const gnomADSchema = mongoose.Schema({
chr: {
@@ -25,5 +26,5 @@ const gnomADSchema = mongoose.Schema({
type: Number,
select: false
}
-}, { collection: 'GnomAD' });
+}, { collection: config.gnomad.variant.name });
module.exports = mongoose.model('GnomAD', gnomADSchema);
diff --git a/server/models/gnomADGene.model.js b/server/models/gnomADGene.model.js
index 40c3c1e..45a835c 100644
--- a/server/models/gnomADGene.model.js
+++ b/server/models/gnomADGene.model.js
@@ -1,5 +1,6 @@
const mongoose = require('mongoose');
const ObjectId = mongoose.Schema.Types.ObjectId;
+const config = require('../config');
const gnomADGeneSchema = mongoose.Schema({
geneId: {
@@ -16,5 +17,5 @@ const gnomADGeneSchema = mongoose.Schema({
type: Number,
select: false
}
-}, { collection: 'GnomADGene' });
+}, { collection: config.gnomad.gene.name });
module.exports = mongoose.model('GnomADGene', gnomADGeneSchema);
diff --git a/server/utils/db/gnomAD.js b/server/utils/db/gnomAD.js
index 6f02c41..a8670ce 100644
--- a/server/utils/db/gnomAD.js
+++ b/server/utils/db/gnomAD.js
@@ -96,3 +96,32 @@ exports.getByVariant = (variant, projection, build) => {
});
};
+// Query by hg38 for newer version for gnomAD (v3+)
+exports.getByVariantV2 = async (variant, projection, build) => {
+ projection = projection || {};
+ projection['_id'] = 0;
+
+ if (build === 'hg19') {
+ // need to liftOver to hg38
+ try {
+ variant = await utils.liftover.liftOverVariant(variant, 'hg19', 'hg38');
+ } catch (err) {
+ console.error('Error while liftOver hg19 to hg38 for getByVariantV2', err);
+ return null;
+ }
+ }
+ if (!variant || !variant.ref || !variant.alt) {
+ console.error('Error: liftOver returned null variant for getByVariantV2');
+ return null;
+ }
+
+ return GnomAD.findOne(
+ {
+ hg38Chr: variant.chr,
+ hg38Pos: variant.pos,
+ ref: variant.ref,
+ alt: variant.alt,
+ },
+ projection
+ ).lean();
+};