4c4eb6b4f0728fc8a985c5245267602d3bd86227
angie
Thu Nov 21 09:49:25 2013 -0800
I misunderstood the SO term NMD_transcript_variant to mean 'a variantthat induces nonsense-mediate decay', i.e. worse than just a stop-gain.
However, the term actually means 'variant in a transcript that is
*already* subject to NMD', i.e. less serious than a variant in an
intron of a gene that gets translated. gpFx.c now has different
logic for assigning that term, and hgVai has a new filtering option.
fixes #12205
diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index bb4ad05..10c61a2 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -669,32 +669,34 @@
selectDbNsfp(dbNsfpTables);
selectDbSnp(gotSnp);
selectCons(elTrackRefList, scoreTrackRefList);
puts("");
}
void selectFiltersFunc()
/* Options to restrict variants based on gene region/soTerm from gpFx */
{
startCollapsibleSection("filtersFunc", "Functional role", FALSE);
printf("Include variants annotated as
\n");
cartMakeCheckBox(cart, "hgva_include_intergenic", TRUE);
printf("intergenic
\n");
cartMakeCheckBox(cart, "hgva_include_upDownstream", TRUE);
printf("upstream/downstream of gene
\n");
+cartMakeCheckBox(cart, "hgva_include_nmdTranscript", TRUE);
+printf("in transcript already subject to nonsense-mediated decay (NMD)
\n");
cartMakeCheckBox(cart, "hgva_include_exonLoss", TRUE);
-printf("exon loss
\n");
+printf("exon loss caused by deletion
\n");
cartMakeCheckBox(cart, "hgva_include_utr", TRUE);
printf("5' or 3' UTR
\n");
cartMakeCheckBox(cart, "hgva_include_cdsSyn", TRUE);
printf("CDS - synonymous coding change
\n");
cartMakeCheckBox(cart, "hgva_include_cdsNonSyn", TRUE);
printf("CDS - non-synonymous (missense, stop gain/loss, frameshift etc)
\n");
cartMakeCheckBox(cart, "hgva_include_intron", TRUE);
printf("intron
\n");
cartMakeCheckBox(cart, "hgva_include_splice", TRUE);
printf("splice site or splice region
\n");
cartMakeCheckBox(cart, "hgva_include_nonCodingExon", TRUE);
printf("exon of non-coding gene
\n");
puts("
");
endCollapsibleSection();
}
@@ -908,30 +910,31 @@
void textOpen()
/* Start serving up plain text, possibly via a pipeline to gzip. */
{
char *fileName = cartUsualString(cart, "hgva_outFile", "");
char *compressType = cartUsualString(cart, "hgva_compressType", textOutCompressGzip);
compressPipeline = textOutInit(fileName, compressType);
}
void setGpVarFuncFilter(struct annoGrator *gpVarGrator)
/* Use cart variables to configure gpVarGrator's filtering by functional category. */
{
struct annoGratorGpVarFuncFilter aggvFuncFilter;
ZeroVar(&aggvFuncFilter);
aggvFuncFilter.intergenic = cartUsualBoolean(cart, "hgva_include_intergenic", FALSE);
aggvFuncFilter.upDownstream = cartUsualBoolean(cart, "hgva_include_upDownstream", TRUE);
+aggvFuncFilter.nmdTranscript = cartUsualBoolean(cart, "hgva_include_nmdTranscript", TRUE);
aggvFuncFilter.exonLoss = cartUsualBoolean(cart, "hgva_include_exonLoss", TRUE);
aggvFuncFilter.utr = cartUsualBoolean(cart, "hgva_include_utr", TRUE);
aggvFuncFilter.cdsSyn = cartUsualBoolean(cart, "hgva_include_cdsSyn", TRUE);
aggvFuncFilter.cdsNonSyn = cartUsualBoolean(cart, "hgva_include_cdsNonSyn", TRUE);
aggvFuncFilter.intron = cartUsualBoolean(cart, "hgva_include_intron", TRUE);
aggvFuncFilter.splice = cartUsualBoolean(cart, "hgva_include_splice", TRUE);
aggvFuncFilter.nonCodingExon = cartUsualBoolean(cart, "hgva_include_nonCodingExon", TRUE);
annoGratorGpVarSetFuncFilter(gpVarGrator, &aggvFuncFilter);
}
#define NO_MAXROWS 0
struct annoGrator *gratorForSnpBed4(struct hash *gratorsByName, char *suffix,
struct annoAssembly *assembly, char *chrom,
enum annoGratorOverlap overlapRule,