23e3f7b1a4c78acd2198da73f4a4392290c51736 angie Fri Apr 19 16:12:24 2013 -0700 Added detection of many new SO terms to gpFx: {5,3} UTR, splice_{donor,acceptor},non_coding_exon, and very detailed coding change terms to match Ensembl e.g. stop_retained_variant, NMD_transcript_variant). Also tweaks to annoFormatVep to represent insertion positions the way they do. TODO: lots more testing! and convert gpFx to use localmem. refs #6152 diff --git src/hg/inc/gpFx.h src/hg/inc/gpFx.h index bc69c42..3b5f6d2 100644 --- src/hg/inc/gpFx.h +++ src/hg/inc/gpFx.h @@ -1,29 +1,54 @@ #ifndef GPFX_H #define GPFX_H #include "variant.h" #include "soTerm.h" // a single gpFx variant effect call struct gpFx { struct gpFx *next; char *allele; // Allele sequence used to determine functional effect - struct soCall so; // Sequence Ontology ID of effect and plus associated data + char *transcript; // ID of feature affected by this call + uint soNumber; // Sequence Ontology Number of effect + enum detailType // This tells which value to use for 'union details' below + { + unknown, // Catch uninitialized (except for needMem) use + codingChange, // (non)synonymous variant, deletions in CDS + nonCodingExon, // variant in non-coding gene or UTR of coding gene + intron, // intron_variant + none // variant for which soNumber is enough (e.g. up/downstream) + } detailType; + union details + { + struct codingChange // (non)synonymous variant, deletions in CDS + { + uint exonNumber; // 0-based exon number (from genePred, beware false "introns") + uint cDnaPosition; // offset of variant in transcript cDNA + uint cdsPosition; // offset of variant from transcript's cds start + uint pepPosition; // offset of variant in translated product + char *aaOld; // peptides, before change by variant (starting at pepPos) + char *aaNew; // peptides, changed by variant + char *codonOld; // codons, before change by variant (starting at cdsPos) + char *codonNew; // codons, changed by variant + } codingChange; + struct nonCodingExon // variant in non-coding gene or UTR of coding gene + { + uint exonNumber; // 0-based exon number (from genePred, beware false "introns") + uint cDnaPosition; // offset of variant in transcript cDNA + } nonCodingExon; + struct intron // intron_variant + { + uint intronNumber; // 0-based intron number (from genePred, beware false "introns") + } intron; + } details; }; struct gpFx *gpFxPredEffect(struct variant *variant, struct genePred *pred, struct dnaSeq *transcriptSequence); // return the predicted effect(s) of a variation list on a genePred // number of bases up or downstream that we flag #define GPRANGE 5000 -#define gpFxIsCodingChange(gpfx) (gpfx->so.soNumber == inframe_deletion || \ - gpfx->so.soNumber == inframe_insertion || \ - gpfx->so.soNumber == frameshift_variant || \ - gpfx->so.soNumber == synonymous_variant || \ - gpfx->so.soNumber == missense_variant || \ - gpfx->so.soNumber == stop_gained) - #endif /* GPFX_H */