feeb7ee7651d3a85ebc34c4fb32243a841eacdf2 braney Mon Apr 16 16:23:04 2012 -0700 on-going work on annoGrator (#6152). Started using Sequence Ontology numbers from EBI, and added a generic variant structure as input to gpFx library diff --git src/hg/lib/gpFx.c src/hg/lib/gpFx.c index b30cd05..dc93d33 100644 --- src/hg/lib/gpFx.c +++ src/hg/lib/gpFx.c @@ -71,87 +71,104 @@ struct genePred *pred) // check to see if a single variant is in an exon or an intron { int ii; struct gpFx *effectsList = NULL; for(ii=0; ii < pred->exonCount - 1; ii++) { // check if in intron if (positiveRangeIntersection(pred->exonEnds[ii], pred->exonStarts[ii+1], variant->chromStart, variant->chromEnd)) { struct gpFx *effects; AllocVar(effects); - effects->gpFxType = gpFxIntron; - effects->gpFxNumber = ii; + effects->so.soNumber = intron_variant; + effects->so.sub.intron.transcript = cloneString(pred->name); + effects->so.sub.intron.intronNumber = ii; slAddHead(&effectsList, effects); } } return effectsList; } static struct gpFx *gpFxCheckBackground(struct variant *variant, struct genePred *pred) // check to see if the variant is up or downstream or in intron of the gene { struct gpFx *effectsList = NULL, *effects; for(; variant ; variant = variant->next) { // is this variant in an intron effectsList = slCat(effectsList, gpFxCheckIntrons(variant, pred)); if (positiveRangeIntersection(pred->txStart - GPRANGE, pred->txStart, variant->chromStart, variant->chromEnd)) { AllocVar(effects); if (*pred->strand == '+') - effects->gpFxType = gpFxUpstream; + ;//effects->gpFxType = gpFxUpstream; else - effects->gpFxType = gpFxDownstream; + ;//ffects->gpFxType = gpFxDownstream; effectsList = slCat(effectsList, effects); } if (positiveRangeIntersection(pred->txEnd, pred->txEnd + GPRANGE, variant->chromStart, variant->chromEnd)) { AllocVar(effects); if (*pred->strand == '+') - effects->gpFxType = gpFxDownstream; + ;//ffects->gpFxType = gpFxDownstream; else - effects->gpFxType = gpFxUpstream; + ;//ffects->gpFxType = gpFxUpstream; effectsList = slCat(effectsList, effects); } } return effectsList; } +static void checkVariantList(struct variant *variant) +// check to see that we either have one variant (possibly with multiple +// alleles) or that if we have a list of variants, they only have +// one allele a piece. +{ +if (variant->next == NULL) // just one variant + return; + +for(; variant; variant = variant->next) + if (variant->numAlleles != 1) + errAbort("gpFxPredEffect needs either 1 variant, or only 1 allele in all variants"); +} + struct gpFx *gpFxPredEffect(struct variant *variant, struct genePred *pred, char **returnTranscript, char **returnCoding) // return the predicted effect(s) of a variation list on a genePred { struct gpFx *effectsList = NULL; +// make sure we can deal with the variants that are coming in +checkVariantList(variant); + // check to see if SNP is up or downstream in intron effectsList = slCat(effectsList, gpFxCheckBackground(variant, pred)); // check to see if SNP is in the transcript effectsList = slCat(effectsList, gpFxCheckExons(variant, pred, returnTranscript, returnCoding)); if (effectsList != NULL) return effectsList; // default is no effect struct gpFx *noEffect; AllocVar(noEffect); noEffect->next = NULL; -noEffect->gpFxType = gpFxNone; +;//oEffect->gpFxType = gpFxNone; return noEffect; }