4898794edd81be5285ea6e544acbedeaeb31bf78 max Tue Nov 23 08:10:57 2021 -0800 Fixing pointers to README file for license in all source code files. refs #27614 diff --git src/hg/lib/bigBedLabel.c src/hg/lib/bigBedLabel.c index 10894f4..4d5b74a 100644 --- src/hg/lib/bigBedLabel.c +++ src/hg/lib/bigBedLabel.c @@ -1,126 +1,126 @@ /* bigBedLabel.c - Label things in big beds . */ /* Copyright (C) 2018 The Regents of the University of California - * See README in this or parent directory for licensing information. */ + * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "bPlusTree.h" #include "bbiFile.h" #include "bigBed.h" #include "hgFind.h" #include "trix.h" #include "trackHub.h" #include "hubConnect.h" #include "hdb.h" #include "errCatch.h" #include "hui.h" #include "obscure.h" void bigBedLabelCalculateFields(struct cart *cart, struct trackDb *tdb, struct bbiFile *bbi, struct slInt **labelColumns ) /* Figure out which fields are available to label a bigBed track. */ { //struct bbiFile *bbi = fetchBbiForTrack(track); struct asObject *as = bigBedAsOrDefault(bbi); struct slPair *labelList = buildFieldList(tdb, "labelFields", as); if (labelList == NULL) { // There is no labelFields entry in the trackDb. // If there is a name, use it by default, otherwise no label by default if (bbi->fieldCount > 3) slAddHead(labelColumns, slIntNew(3)); } else if (sameString(labelList->name, "none")) return; // no label else { // what has the user said to use as a label // we need to check parents as well as this tdb char cartVar[1024]; struct hashEl *labelEl = NULL; struct trackDb *cartTdb = tdb; while ( labelEl == NULL) { safef(cartVar, sizeof cartVar, "%s.label", cartTdb->track); labelEl = cartFindPrefix(cart, cartVar); if ((labelEl != NULL) || (cartTdb->parent == NULL)) break; cartTdb = cartTdb->parent; } // fill hash with fields that should be used for labels // first turn on all the fields that are in defaultLabelFields struct hash *onHash = newHash(4); struct slPair *defaultLabelList = buildFieldList(tdb, "defaultLabelFields", as); if (defaultLabelList != NULL) { for(; defaultLabelList; defaultLabelList = defaultLabelList->next) hashStore(onHash, defaultLabelList->name); } else // no default list, use first entry in labelFields as default hashStore(onHash, labelList->name); // use cart variables to tweak the default-on hash for(; labelEl; labelEl = labelEl->next) { /* the field name is after the <trackName>.label string */ char *fieldName = &labelEl->name[strlen(cartVar) + 1]; if (sameString((char *)labelEl->val, "1")) hashStore(onHash, fieldName); else if (sameString((char *)labelEl->val, "0")) hashRemove(onHash, fieldName); } struct slPair *thisLabel = labelList; for(; thisLabel; thisLabel = thisLabel->next) { if (hashLookup(onHash, thisLabel->name)) { // put this column number in the list of columns to use to make label slAddHead(labelColumns, slIntNew(ptToInt(thisLabel->val))); } } slReverse(labelColumns); } } char *bigBedMakeLabel(struct trackDb *tdb, struct slInt *labelColumns, struct bigBedInterval *bb, char *chromName) // Build a label for a bigBedTrack from the requested label fields. { char *labelSeparator = stripEnclosingDoubleQuotes(trackDbSettingClosestToHome(tdb, "labelSeparator")); if (labelSeparator == NULL) labelSeparator = "/"; char *restFields[256]; if (bb->rest != NULL) chopTabs(cloneString(bb->rest), restFields); struct dyString *dy = newDyString(128); boolean firstTime = TRUE; struct slInt *labelInt = labelColumns; for(; labelInt; labelInt = labelInt->next) { if (!firstTime) dyStringAppend(dy, labelSeparator); switch(labelInt->val) { case 0: dyStringAppend(dy, chromName); break; case 1: dyStringPrintf(dy, "%d", bb->start); break; case 2: dyStringPrintf(dy, "%d", bb->end); break; default: assert(bb->rest != NULL); dyStringPrintf(dy, "%s", restFields[labelInt->val - 3]); break; } firstTime = FALSE; } return dyStringCannibalize(&dy); }