56e08dec28f452488f1a5794efd06a8d8aacfde1
tdreszer
Fri Sep 30 14:25:27 2011 -0700
Changes to fix redmine 4892 composite/view/subtrack inconsistency.
diff --git src/hg/lib/trackDbCustom.c src/hg/lib/trackDbCustom.c
index f93a216..0f1f0bc 100644
--- src/hg/lib/trackDbCustom.c
+++ src/hg/lib/trackDbCustom.c
@@ -673,70 +673,82 @@
printf("%s
\n", origAssembly);
else if (stringIn(origAssembly, freeze))
printf("%s
\n", freeze);
else
printf("%s (%s)
\n", freeze, origAssembly);
}
}
}
eCfgType cfgTypeFromTdb(struct trackDb *tdb, boolean warnIfNecessary)
/* determine what kind of track specific configuration is needed,
warn if not multi-view compatible */
{
eCfgType cType = cfgNone;
char *type = tdb->type;
+assert(type != NULL);
+
if(startsWith("wigMaf", type))
cType = cfgWigMaf;
else if(startsWith("wig", type))
cType = cfgWig;
else if(startsWith("bigWig", type))
cType = cfgWig;
else if(startsWith("bedGraph", type))
cType = cfgWig;
-else if(startsWith("netAlign", type))
- {
+else if(startsWith("netAlign", type)
+ || startsWith("net", tdb->track)) // SPECIAL CASE from hgTrackUi which might not be needed
cType = cfgNetAlign;
- warnIfNecessary = FALSE;
- }
else if(sameWord("bed5FloatScore", type)
|| sameWord("bed5FloatScoreWithFdr",type))
cType = cfgBedScore;
else if(sameWord("narrowPeak",type)
|| sameWord("broadPeak", type)
|| sameWord("encodePeak",type)
|| sameWord("gappedPeak",type))
cType = cfgPeak;
-else if(sameWord("genePred",type))
+else if(startsWithWord("genePred",type))
cType = cfgGenePred;
-else if(sameWord("bedLogR",type) || sameWord("peptideMapping", type))
+else if(sameWord("bedLogR",type)
+ || sameWord("peptideMapping", type))
cType = cfgBedScore;
-else if(startsWith("bed ", type))
+else if(startsWithWord("bed", type))
{
char *words[3];
- chopLine(cloneString( type), words);
+ int wordCount = chopLine(cloneString( type), words);
if (trackDbSetting(tdb, "bedFilter") != NULL)
cType = cfgBedFilt;
- else if (atoi(words[1]) >= 5 && trackDbSettingClosestToHome(tdb, "noScoreFilter") == NULL)
+ else if ((atoi(words[1]) >= 5 || trackDbSetting(tdb, "scoreMin") != NULL)
+ && (wordCount == 3 || !tdbIsTrackUiTopLevel(tdb))) // Historically needed 'bed n .'
+ {
cType = cfgBedScore;
+
+ // FIXME: UGLY SPECIAL CASE should be handled in trackDb!
+ if (startsWith("encodeGencodeIntron", tdb->track))
+ cType = cfgNone;
+ }
}
else if(startsWith("chain",type))
cType = cfgChain;
+else if (startsWith("bamWig", type))
+ cType = cfgWig;
else if (startsWith("bam", type))
cType = cfgBam;
else if (startsWith("psl", type))
cType = cfgPsl;
+else if (sameWord("vcfTabix",type))
+ cType = cfgVcf;
// TODO: Only these are configurable so far
if(cType == cfgNone && warnIfNecessary)
{
if(!startsWith("bed ", type) && !startsWith("bigBed", type)
&& subgroupFind(tdb,"view",NULL))
warn("Track type \"%s\" is not yet supported in multi-view composites for %s.",type,tdb->track);
}
return cType;
}
char *trackDbSetting(struct trackDb *tdb, char *name)
/* Look for a trackDb setting from lowest level on up chain of parents. */
{
struct trackDb *generation;