370cc36518fec8f45d0053dec74a4af6ac7ff0cb
braney
Thu Dec 11 09:12:31 2025 -0800
in bigBed click handling, if the trackDb type has a field number in it
make sure it's the same as the one in the bigBed itself, otherwise
print an error.
diff --git src/hg/hgc/bigBedClick.c src/hg/hgc/bigBedClick.c
index 72263adcb6d..2638b8dd9f9 100644
--- src/hg/hgc/bigBedClick.c
+++ src/hg/hgc/bigBedClick.c
@@ -3,30 +3,31 @@
/* Copyright (C) 2013 The Regents of the University of California
* See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */
#include "common.h"
#include "wiggle.h"
#include "cart.h"
#include "hgc.h"
#include "hCommon.h"
#include "hgColors.h"
#include "bigBed.h"
#include "hui.h"
#include "subText.h"
#include "web.h"
#include "chromAlias.h"
#include "quickLift.h"
+#include "hgConfig.h"
static void bigGenePredLinks(char *track, char *item)
/* output links to genePred driven sequence dumps */
{
printf("
Links to sequence:
\n");
printf("\n");
puts("- \n");
hgcAnchorSomewhere("htcTranslatedPredMRna", item, "translate", seqName);
printf("Translated Protein from genomic DNA\n");
puts("
\n");
puts("- \n");
hgcAnchorSomewhere("htcGeneMrna", item, track, seqName);
printf("Predicted mRNA \n");
puts("
\n");
@@ -377,35 +378,42 @@
if (start == end)
{
// item is an insertion; expand the search range from 0 bases to 2 so we catch it:
ivStart = max(0, start-1);
ivEnd++;
}
char *quickLiftFile = cloneString(trackDbSetting(tdb, "quickLiftUrl"));
struct hash *chainHash = NULL;
struct bigBedInterval *bbList = NULL;
if (quickLiftFile)
bbList = quickLiftGetIntervals(quickLiftFile, bbi, chrom, ivStart, ivEnd, &chainHash);
else
bbList = bigBedIntervalQuery(bbi, chrom, ivStart, ivEnd, 0, lm);
/* Get bedSize if it's not already defined. */
-if (bedSize == 0)
+if (bedSize != 0) // defined in trackDb
{
- bedSize = bbi->definedFieldCount;
+ // check to make sure trackDb number is the same as the number
+ // of defined fields
+ if (bedSize != bbi->definedFieldCount)
+ warn("trackDb for %s has type with %d bed fields but the bigBed file %s has %d bed fields. Fields may be printed with the wrong contents.", tdb->track, bedSize, fileName, bbi->definedFieldCount);
}
+boolean bigBedOnePath = cfgOptionBooleanDefault("bigBedOnePath", FALSE);
+if (bigBedOnePath || (bedSize == 0))
+ bedSize = bbi->definedFieldCount;
+
char *scoreFilter = cartOrTdbString(cart, tdb, "scoreFilter", NULL);
int minScore = 0;
if (scoreFilter)
minScore = atoi(scoreFilter);
/* Find particular item in list - matching start, and item if possible. */
boolean found = FALSE;
boolean firstTime = TRUE;
struct bigBedInterval *bb;
for (bb = bbList; bb != NULL; bb = bb->next)
{
if (bedSize > 3)
{
char *name = cloneFirstWordByDelimiterNoSkip(bb->rest, '\t');
boolean match = (isEmpty(name) && isEmpty(item)) || sameOk(name, item);