56e08dec28f452488f1a5794efd06a8d8aacfde1 tdreszer Fri Sep 30 14:25:27 2011 -0700 Changes to fix redmine 4892 composite/view/subtrack inconsistency. diff --git src/hg/hgTrackUi/hgTrackUi.c src/hg/hgTrackUi/hgTrackUi.c index dd460f3..0c9eeb2 100644 --- src/hg/hgTrackUi/hgTrackUi.c +++ src/hg/hgTrackUi/hgTrackUi.c @@ -2431,266 +2431,215 @@ "genome.ucsc.edu", db); } else { // TODO: use hTrackUiName() printf("

NOTE: Early access to additional track data may be available on the Preview Browser.", "genome-preview.ucsc.edu", db, tdb->track); } } } void specificUi(struct trackDb *tdb, struct trackDb *tdbList, struct customTrack *ct, boolean ajax) /* Draw track specific parts of UI. */ { char *track = tdb->track; +// Ideally check cfgTypeFromTdb()/cfgByCfgType() first, but with all these special cases already in +// place, lets be cautious at this time. +// NOTE: Developer, please try to use cfgTypeFromTdb()/cfgByCfgType(). if (sameString(track, "stsMap")) stsMapUi(tdb); else if (sameString(track, "affyTxnPhase2")) affyTxnPhase2Ui(tdb); else if (sameString(track, "cgapSage")) cgapSageUi(tdb); else if (sameString(track, "stsMapMouseNew")) stsMapMouseUi(tdb); else if (sameString(track, "stsMapRat")) stsMapRatUi(tdb); else if (sameString(track, "snpMap")) snpMapUi(tdb); else if (sameString(track, "snp")) snpUi(tdb); else if (snpVersion(track) >= 125) snp125Ui(tdb); -else if (sameString(track, "rertyHumanDiversityLd") || - startsWith("hapmapLd", track) || - sameString(tdb->type, "ld2")) +else if (sameString(track, "rertyHumanDiversityLd") + || startsWith("hapmapLd", track) + || sameString(tdb->type, "ld2")) ldUi(tdb); else if (sameString(track, "cbr_waba")) cbrWabaUi(tdb); else if (sameString(track, "fishClones")) fishClonesUi(tdb); else if (sameString(track, "recombRate")) recombRateUi(tdb); else if (sameString(track, "recombRateRat")) recombRateRatUi(tdb); else if (sameString(track, "recombRateMouse")) recombRateMouseUi(tdb); else if (sameString(track, "cghNci60")) cghNci60Ui(tdb); -else if (sameString(track, "xenoRefGene")) +else if (sameString(track, "xenoRefGene") + || sameString(track, "refGene")) refGeneUI(tdb); else if (startsWith("transMapAln", track)) transMapUI(tdb); -else if (sameString(track, "refGene")) - refGeneUI(tdb); else if (sameString(track, "rgdGene2")) rgdGene2UI(tdb); else if (sameString(track, "knownGene")) knownGeneUI(tdb); else if (sameString(track, "omimLocation")) omimLocationUI(tdb); else if (sameString(track, "omimGene2")) omimGene2UI(tdb); else if (sameString(track, "omimGene")) omimGeneUI(tdb); else if (sameString(track, "hg17Kg")) hg17KgUI(tdb); -else if (startsWith("ucscRetro", track) || startsWith("retroMrnaInfo", track)) +else if (startsWith("ucscRetro", track) + || startsWith("retroMrnaInfo", track)) retroGeneUI(tdb); else if (sameString(track, "ensGeneNonCoding")) ensemblNonCodingUI(tdb); else if (sameString(track, "vegaGeneComposite")) vegaGeneUI(tdb); -else if (sameString(track, "all_mrna")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "mrna")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "splicesP")) - bedUi(tdb, cart, "", FALSE); -else if(sameString(track,"FantomCageBedForward") || sameString(track,"FantomCageBedReverse") || - sameString(track,"FantomCageReadForward") || sameString(track,"FantomCageReadReverse")) - bedUi(tdb, cart, "", FALSE); -else if (sameString(track, "all_est")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "est")) +else if (sameString(track, "all_mrna") + || sameString(track, "mrna") + || sameString(track, "all_est") + || sameString(track, "est") + || sameString(track, "tightMrna") + || sameString(track, "tightEst") + || sameString(track, "intronEst")) mrnaUi(tdb, FALSE); -else if (sameString(track, "tightMrna")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "tightEst")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "intronEst")) - mrnaUi(tdb, FALSE); -else if (sameString(track, "xenoMrna")) - mrnaUi(tdb, TRUE); -else if (sameString(track, "xenoEst")) +else if (sameString(track, "xenoMrna") + || sameString(track, "xenoEst")) mrnaUi(tdb, TRUE); else if (sameString(track, "rosetta")) rosettaUi(tdb); else if (startsWith("blastDm", track)) blastFBUi(tdb); else if (sameString(track, "blastSacCer1SG")) blastSGUi(tdb); -else if (sameString(track, "blastHg17KG") || sameString(track, "blastHg16KG") - || sameString(track, "blastCe3WB") || sameString(track, "blastHg18KG") - || sameString(track, "blatzHg17KG")|| startsWith("mrnaMap", track)|| startsWith("mrnaXeno", track)) +else if (sameString(track, "blastHg17KG") + || sameString(track, "blastHg16KG") + || sameString(track, "blastCe3WB") + || sameString(track, "blastHg18KG") + || sameString(track, "blatzHg17KG") + || startsWith("mrnaMap", track) + || startsWith("mrnaXeno", track)) blastUi(tdb); else if (sameString(track, "hgPcrResult")) pcrResultUi(tdb); -else if (startsWith("bedGraph", tdb->type) || startsWith("bigWig", tdb->type)) - wigCfgUi(cart,tdb,tdb->track,NULL, FALSE); -else if (startsWith("bamWig", tdb->type)) - wigCfgUi(cart,tdb,tdb->track,NULL, FALSE); -else if (startsWith("wig", tdb->type)) - { - if (startsWith("wigMaf", tdb->type)) - wigMafCfgUi(cart, tdb, tdb->track, NULL, FALSE, database); - else - wigCfgUi(cart,tdb,tdb->track, NULL, FALSE); - } else if (startsWith("chromGraph", tdb->type)) chromGraphUi(tdb); -/* else if (sameString(track, "affyHumanExon")) */ -/* affyAllExonUi(tdb); */ else if (sameString(track, "ancientR")) ancientRUi(tdb); else if (sameString(track, "zoo") || sameString(track, "zooNew" )) zooWiggleUi(tdb); -else if (sameString(track, "humMusL") || - sameString( track, "musHumL") || - sameString( track, "regpotent") || - sameString( track, "mm3Rn2L" ) || - sameString( track, "mm3Hg15L" ) || - sameString( track, "hg15Mm3L" )) +else if (sameString(track, "humMusL") + || sameString( track, "musHumL") + || sameString( track, "regpotent") + || sameString( track, "mm3Rn2L" ) + || sameString( track, "mm3Hg15L" ) + || sameString( track, "hg15Mm3L" )) humMusUi(tdb,7); -/* NOTE: type psl xeno tracks use crossSpeciesUi, so - * add explicitly here only if track has another type (bed, chain). - * For crossSpeciesUi, the - * default for chrom coloring is "on", unless track setting - * colorChromDefault is set to "off" */ -else if (startsWith("net", track)) - netAlignCfgUi(database, cart, tdb, tdb->track, NULL, FALSE); -else if (startsWith("chain", track) || endsWith("chainSelf", track)) +else if (startsWith("chain", track) + || endsWith("chainSelf", track)) chainColorUi(tdb); -else if (sameString(track, "orthoTop4")) - /* still used ?? */ - crossSpeciesUi(tdb); -else if (sameString(track, "mouseOrtho")) - crossSpeciesUi(tdb); -else if (sameString(track, "mouseSyn")) +else if (sameString(track, "orthoTop4") // still used ?? + || sameString(track, "mouseOrtho") + || sameString(track, "mouseSyn")) + // NOTE: type psl xeno tracks use crossSpeciesUi, so + // add explicitly here only if track has another type (bed, chain). + // For crossSpeciesUi, the + // default for chrom coloring is "on", unless track setting + // colorChromDefault is set to "off" crossSpeciesUi(tdb); else if (sameString(track, "affyTranscriptome")) affyTranscriptomeUi(tdb); - else if (startsWith("sample", tdb->type)) genericWiggleUi(tdb,7); else if (sameString(track, WIKI_TRACK_TABLE)) wikiTrackUi(tdb); else if (sameString(track, RULER_TRACK_NAME)) rulerUi(tdb); else if (sameString(track, OLIGO_MATCH_TRACK_NAME)) oligoMatchUi(tdb); else if (sameString(track, CUTTERS_TRACK_NAME)) cutterUi(tdb); else if(sameString(track, "affyTransfrags")) affyTransfragUi(tdb); else if (sameString(track, "gvPos")) gvUi(tdb); else if (sameString(track, "oreganno")) oregannoUi(tdb); else if (startsWith("retroposons", track)) retroposonsUi(tdb); else if (sameString(track, "tfbsConsSites")) tfbsConsSitesUi(tdb); else if (sameString(track, "CGHBreastCancerUCSF")) ucsfdemoUi(tdb); else if (startsWith("hapmapSnps", track)) hapmapSnpsUi(tdb); else if (sameString(track, "switchDbTss")) switchDbScoreUi(tdb); -else if (sameString(track, "dgv") || (startsWith("dgvV", track) && isdigit(track[4]))) +else if (sameString(track, "dgv") + || (startsWith("dgvV", track) && isdigit(track[4]))) dgvUi(tdb); -#ifdef USE_BAM -else if (sameString(tdb->type, "bam")) - bamCfgUi(cart, tdb, track, NULL, FALSE); -#endif -else if (sameString(tdb->type, "vcfTabix")) - vcfCfgUi(cart, tdb, track, NULL, FALSE); +else + { // NOTE for developers: please avoid special cases and use cfgTypeFromTdb//cfgByCfgType() + // When you do, then multi-view cfg and subtrack cfg will work. + eCfgType cType = cfgTypeFromTdb(tdb,FALSE); + if (cType != cfgNone) + { + boolean boxed = trackDbSettingClosestToHomeOn(tdb, "boxedCfg"); + cfgByCfgType(cType,database, cart, tdb,tdb->track, NULL, boxed); + } else if (tdb->type != NULL) { /* handle all tracks with type genePred or bed or "psl xeno " */ char *typeLine = cloneString(tdb->type); char *words[8]; int wordCount = 0; wordCount = chopLine(typeLine, words); if (wordCount > 0) { - if (sameWord(words[0], "genePred")) - { - genePredCfgUi(cart,tdb,tdb->track,NULL,FALSE); - } - else if(sameWord(words[0], "encodePeak") || sameWord(words[0], "narrowPeak") - || sameWord(words[0], "broadPeak") || sameWord(words[0], "gappedPeak")) - { - encodePeakUi(tdb, ct); - } - else if (sameWord(words[0], "expRatio")) - { + if (sameWord(words[0], "expRatio")) expRatioUi(tdb); - } else if (sameWord(words[0], "array")) /* not quite the same as an "expRatio" type (custom tracks) */ - { expRatioCtUi(tdb); - } - /* if bed has score then show optional filter based on score */ - else if (sameWord(words[0], "bed") && wordCount == 3) - { - /* Note: jaxQTL3 is a bed 8 format track because of - thickStart/thickStart, but there is no valid score. - Similarly, the score field for wgRna track is no long used either. - It originally was usd to depict different RNA types. But the new - wgRna table has a new field 'type', which is used to store RNA - type info and from which to determine the display color of each entry. - */ - int bedFieldCount = atoi(words[1]); - if ((bedFieldCount >= 5 || trackDbSetting(tdb, "scoreMin") != NULL) - && !sameString(track, "jaxQTL3") && !sameString(track, "wgRna") - && !startsWith("encodeGencodeIntron", track)) - { - cfgByCfgType(cfgBedScore,database, cart, tdb,tdb->track, NULL, trackDbSettingClosestToHomeOn(tdb, "boxedCfg")); - } - } - else if (sameWord(words[0], "bed5FloatScore") || sameWord(words[0], "bed5FloatScoreWithFdr")) - scoreCfgUi(database, cart,tdb,tdb->track,NULL,1000,FALSE); else if (sameWord(words[0], "psl")) { if (wordCount == 3) if (sameWord(words[1], "xeno")) crossSpeciesUi(tdb); baseColorDrawOptDropDown(cart, tdb); indelShowOptions(cart, tdb); } else if (sameWord(words[0], "factorSource")) { printf("
Cell Abbreviations:
\n"); char *sourceTable = trackDbRequiredSetting(tdb, "sourceTable"); struct sqlConnection *conn = hAllocConn(database); hPrintAbbreviationTable(conn, sourceTable, "Cell Type"); hFreeConn(&conn); } } freeMem(typeLine); } + } if (tdbIsSuperTrack(tdb)) { superTrackUi(tdb, tdbList); } else if (tdbIsComposite(tdb)) // for the moment generalizing this to include other containers... { hCompositeUi(database, cart, tdb, NULL, NULL, MAIN_FORM, trackHash); } if (!ajax) { previewLinks(database, tdb); extraUiLinks(database,tdb, trackHash); } }