40665f857785f2b82af4f5de26642d2be9986d1e
angie
  Thu Dec 15 14:14:31 2016 -0800
If null variants (no_sequence_alteration) are not filtered out, then show them without bothering to intersect with genes.  This avoids wasted time and redundant output.

diff --git src/hg/inc/gpFx.h src/hg/inc/gpFx.h
index 03892b4..68972dd 100644
--- src/hg/inc/gpFx.h
+++ src/hg/inc/gpFx.h
@@ -1,67 +1,70 @@
 /* gpFx --- routines to calculate the effect of variation on a genePred */
 
 /* Copyright (C) 2013 The Regents of the University of California 
  * See README in this or parent directory for licensing information. */
 
 #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
     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, struct lm *lm);
 // return the predicted effect(s) of a variation list on a genePred
 
 // number of bases up or downstream that we flag
 #define GPRANGE 5000
 
 boolean hasAltAllele(struct allele *alleles);
 /* Return TRUE if alleles include at least one non-reference allele. */
 
 char *firstAltAllele(struct allele *alleles);
 /* Ensembl always reports an alternate allele, even if that allele is not being used
  * to calculate any consequence.  When allele doesn't really matter, just use the
  * first alternate allele that is given. */
 
+struct gpFx *gpFxNoVariation(struct variant *variant, struct lm *lm);
+/* Return a gpFx with SO term no_sequence_alteration, for VCF rows that aren't really variants. */
+
 #endif /* GPFX_H */