45eded6990186ff6cb0c8674c9265bfd6fc90390
braney
  Mon Nov 15 15:17:29 2021 -0800
some tweaks to allow bigMaf's that are children to be output as MAF in
table browser

diff --git src/hg/hgTables/maf.c src/hg/hgTables/maf.c
index 42162d1..9fd8181 100644
--- src/hg/hgTables/maf.c
+++ src/hg/hgTables/maf.c
@@ -30,31 +30,31 @@
 
 if (sameString(track->table, table))
     {
     if (startsWithWord("maf",track->type) || startsWithWord("wigMaf",track->type) || startsWithWord("bigMaf",track->type))
         return TRUE;
     }
 else
     {
     struct slRef *tdbRefList = trackDbListGetRefsToDescendantLeaves(track->subtracks);
     struct slRef *tdbRef;
     for (tdbRef = tdbRefList; tdbRef != NULL; tdbRef = tdbRef->next)
         {
 	struct trackDb *childTdb = tdbRef->val;
         if(sameString(childTdb->table, table))
             {
-            if (startsWithWord("maf",childTdb->type) || startsWithWord("wigMaf",childTdb->type))
+            if (startsWithWord("maf",childTdb->type) || startsWithWord("wigMaf",childTdb->type) || startsWithWord("bigMaf",childTdb->type))
                 return TRUE;
             break;
             }
         }
     slFreeList(&tdbRefList);
     }
 return FALSE;
 }
 
 void doOutMaf(struct trackDb *track, char *table, struct sqlConnection *conn)
 /* Output regions as MAF.  maf tables look bed-like enough for
  * cookedBedsOnRegions to handle intersections. */
 {
 struct region *region = NULL, *regionList = getRegions();
 struct lm *lm = lmInit(64*1024);
@@ -90,31 +90,32 @@
 	char dbChrom[64];
 	safef(dbChrom, sizeof(dbChrom), "%s.%s", hubConnectSkipHubPrefix(database), bed->chrom);
 	/* For MAF, we clip to viewing window (region) instead of showing
 	 * entire items that happen to overlap the window/region, which is
 	 * what we get from cookedBedList. */
 	if (bed->chromStart < region->start)
 	    bed->chromStart = region->start;
 	if (bed->chromEnd > region->end)
 	    bed->chromEnd = region->end;
 	if (bed->chromStart >= bed->chromEnd)
 	    continue;
 	if (ct == NULL)
 	    {
             if (isBigBed(database, table, curTrack, ctLookupName))
                 {
-                char *fileName = trackDbSetting(track, "bigDataUrl");
+                struct trackDb *subTdb = hashFindVal(fullTableToTdbHash, table);
+                char *fileName = trackDbSetting(subTdb, "bigDataUrl");
                 struct bbiFile *bbi = bigBedFileOpen(fileName);
                 mafList = bigMafLoadInRegion(bbi, bed->chrom, bed->chromStart, bed->chromEnd);
                 }
 	    else if (mafFile != NULL)
 		mafList = mafLoadInRegion2(conn, conn, table,
 			bed->chrom, bed->chromStart, bed->chromEnd, mafFile);
 	    else
 		mafList = mafLoadInRegion(conn, table, bed->chrom,
 					  bed->chromStart, bed->chromEnd);
 	    }
 	else
 	    mafList = mafLoadInRegion2(ctConn, ctConn2, ct->dbTableName,
 		    bed->chrom, bed->chromStart, bed->chromEnd, mafFile);
 	for (maf = mafList; maf != NULL; maf = maf->next)
 	    {