d3752edc12da1bf08427946150f564dbdd5d2254
angie
  Thu Oct 24 13:55:51 2019 -0700
bigDbSnp track handler code - initial commit.  refs #23283
* dnautil: Added trimRefAltLeft to get left-justified trimming (a la VCF not HGVS).
* bigBedClick: do hReplaceGbdb up front in parseDetailsTablUrls instead of waiting until endpoint.
* trackDbCustom.c: consolidating type-handling for wig/bigWig vs. bigBed-based big*.

diff --git src/hg/lib/customFactory.c src/hg/lib/customFactory.c
index 0f98946..feb5f71 100644
--- src/hg/lib/customFactory.c
+++ src/hg/lib/customFactory.c
@@ -2782,30 +2782,37 @@
 	struct customPp *cpp, char *type,
     	struct customTrack *track)
 /* Return TRUE if looks like we're handling a bigNarrowPeak track */
 {
 return (sameType(type, "bigNarrowPeak"));
 }
 
 static boolean bigGenePredRecognizer(struct customFactory *fac,
 	struct customPp *cpp, char *type,
     	struct customTrack *track)
 /* Return TRUE if looks like we're handling a bigGenePred track */
 {
 return (sameType(type, "bigGenePred"));
 }
 
+static boolean bigDbSnpRecognizer(struct customFactory *fac, struct customPp *cpp, char *type,
+                                  struct customTrack *track)
+/* Return TRUE if looks like we're handling a bigDbSnp track */
+{
+return (sameType(type, "bigDbSnp"));
+}
+
 static boolean bigBedRecognizer(struct customFactory *fac,
 	struct customPp *cpp, char *type,
     	struct customTrack *track)
 /* Return TRUE if looks like we're handling a bigBed track */
 {
 return (sameType(type, "bigBed"));
 }
 
 static struct customTrack *bigBedLoader(struct customFactory *fac,
 	struct hash *chromHash,
     	struct customPp *cpp, struct customTrack *track, boolean dbRequested)
 /* Load up big bed data until get next track line. */
 {
 /* Not much to this.  A bigBed has nothing here but a track line. */
 struct hash *settings = track->tdb->settingsHash;
@@ -2963,30 +2970,39 @@
     NULL,
     "bigBarChart",
     bigBarChartRecognizer,
     bigBarChartLoader
     };
 
 static struct customFactory bigInteractFactory =
 /* Factory for bigBarChart tracks */
     {
     NULL,
     "bigInteract",
     bigInteractRecognizer,
     bigInteractLoader
     };
 
+static struct customFactory bigDbSnpFactory =
+/* Factory for bigDbSnp tracks */
+    {
+    NULL,
+    "bigDbSnp",
+    bigDbSnpRecognizer,
+    bigBedLoader,
+    };
+
 static struct customFactory bigBedFactory =
 /* Factory for bigBed tracks */
     {
     NULL,
     "bigBed",
     bigBedRecognizer,
     bigBedLoader,
     };
 
 
 /*** BAM Factory - for client-side BAM alignment files ***/
 
 static boolean bamRecognizer(struct customFactory *fac,	struct customPp *cpp, char *type,
 			     struct customTrack *track)
 /* Return TRUE if looks like we're handling a bam track */
@@ -3460,30 +3476,31 @@
     slAddTail(&factoryList, &wigFactory);
     slAddTail(&factoryList, &bigWigFactory);
     slAddTail(&factoryList, &chromGraphFactory);
     slAddTail(&factoryList, &pslFactory);
     slAddTail(&factoryList, &gtfFactory);
     slAddTail(&factoryList, &gffFactory);
     slAddTail(&factoryList, &pgSnpFactory);
     slAddTail(&factoryList, &bedFactory);
     slAddTail(&factoryList, &bigGenePredFactory);
     slAddTail(&factoryList, &bigNarrowPeakFactory);
     slAddTail(&factoryList, &bigPslFactory);
     slAddTail(&factoryList, &bedTabixFactory);
     slAddTail(&factoryList, &longTabixFactory);
     slAddTail(&factoryList, &bigChainFactory);
     slAddTail(&factoryList, &bigMafFactory);
+    slAddTail(&factoryList, &bigDbSnpFactory);
     slAddTail(&factoryList, &bigBedFactory);
     slAddTail(&factoryList, &bedGraphFactory);
     slAddTail(&factoryList, &microarrayFactory);
     slAddTail(&factoryList, &coloredExonFactory);
     slAddTail(&factoryList, &encodePeakFactory);
     slAddTail(&factoryList, &bedDetailFactory);
     slAddTail(&factoryList, &adjacencyFactory);
     slAddTail(&factoryList, &bamFactory);
     slAddTail(&factoryList, &vcfTabixFactory);
     slAddTail(&factoryList, &makeItemsFactory);
     slAddTail(&factoryList, &bigDataOopsFactory);
     slAddTail(&factoryList, &barChartFactory);
     slAddTail(&factoryList, &bigBarChartFactory);
     slAddTail(&factoryList, &interactFactory);
     slAddTail(&factoryList, &bigInteractFactory);