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,