386915fb7bdbae22f8ed152174d8b8635524c1b2 galt Sun Oct 28 00:51:33 2018 -0700 code review fixes to hgBlat Search ALL. refs #22251 diff --git src/hg/hgBlat/hgBlat.c src/hg/hgBlat/hgBlat.c index 2e374c6..3bbafdd 100644 --- src/hg/hgBlat/hgBlat.c +++ src/hg/hgBlat/hgBlat.c @@ -20,30 +20,31 @@ #include "cart.h" #include "dbDb.h" #include "blatServers.h" #include "web.h" #include "hash.h" #include "botDelay.h" #include "trashDir.h" #include "trackHub.h" #include "hgConfig.h" #include "errCatch.h" #include "portable.h" #include "portable.h" #include "dystring.h" #include "chromInfo.h" #include "net.h" +#include "fuzzyFind.h" struct cart *cart; /* The user's ui state. */ struct hash *oldVars = NULL; boolean orgChange = FALSE; boolean dbChange = FALSE; boolean allGenomes = FALSE; struct gfResult /* Detailed gfServer results, this is a span of several nearby tiles, minimum 2 for dna. */ { struct gfResult *next; /* have to multiply translated coordinates by 3 */ int qStart; /* Query Start Coordinate */ @@ -83,74 +84,74 @@ int maxGeneTStart; /* Target Start Coordinate for gene with max hits */ int maxGeneTEnd; /* Target End Coordinate for gene with max hits*/ int maxGeneExons; /* Number of Exons in gene with max hits */ char maxGeneStrand[3]; /* + or - or ++ +- -+ -- Strand for gene with max hits */ char maxGeneTStrand;/* + or - TStrand for gene with max hits */ boolean done; /* Did the job get to finish */ boolean error; /* Some error happened */ char *networkErrMsg; /* Network layer error message */ struct dyString *dbg; /* Output debugging info */ struct gfResult *gfList; /* List of gfResult records */ boolean hide; /* To not show both strands, suppress the weaker-scoring one */ }; boolean debuggingGfResults = FALSE; //TRUE; -int slGfResultsCmp(const void *va, const void *vb) +int gfResultsCmp(const void *va, const void *vb) /* Compare two gfResults. */ { const struct gfResult *a = *((struct gfResult **)va); const struct gfResult *b = *((struct gfResult **)vb); int result = a->tStrand - b->tStrand; if (result == 0) { result = strcmp(a->chrom, b->chrom); if (result == 0) { return (a->tStart - b->tStart); } else return result; } else return result; } -int slRcPairsCmp(const void *va, const void *vb) +int rcPairsCmp(const void *va, const void *vb) /* Recombine Reverse-complimented Pairs (to hide the weaker one). */ { const struct genomeHits *a = *((struct genomeHits **)va); const struct genomeHits *b = *((struct genomeHits **)vb); // int result = strcmp(a->faName, b->faName); order by faName alphabetical int result = a->seqNumber - b->seqNumber; if (result == 0) { result = strcmp(a->db, b->db); if (result == 0) { return (a->queryRC - b->queryRC); } else return result; } else return result; } -int slHitsCmp(const void *va, const void *vb) -/* Compare two slHits. */ +int genomeHitsCmp(const void *va, const void *vb) +/* Compare two genomeHits. */ { const struct genomeHits *a = *((struct genomeHits **)va); const struct genomeHits *b = *((struct genomeHits **)vb); // int result = strcmp(a->faName, b->faName); order by faName alphabetical int result = a->seqNumber - b->seqNumber; if (result == 0) { if (a->error && b->error) return 0; else if (b->error && !a->error) return -1; else if (!b->error && a->error) return 1; else { @@ -223,39 +224,41 @@ } } static int remoteParallelLoadWait(int maxTimeInSeconds) /* Wait, checking to see if finished (completed or errAborted). * If timed-out or never-ran, record error status. * Return error count. */ { int maxTimeInMilliseconds = 1000 * maxTimeInSeconds; struct genomeHits *pfd; int errCount = 0; int waitTime = 0; while(1) { - sleep1000(50); // milliseconds + sleep1000(50); // milliseconds, give the threads some time to work waitTime += 50; + // check if they are done boolean done = TRUE; pthread_mutex_lock( &pfdMutex ); - if (pfdList || pfdRunning) + if (pfdList || pfdRunning) // lists not empty, stuff to do still done = FALSE; pthread_mutex_unlock( &pfdMutex ); if (done) break; + // check if max allowed time has been exceeded if (waitTime >= maxTimeInMilliseconds) break; } pthread_mutex_lock( &pfdMutex ); pfdNeverStarted = pfdList; pfdList = NULL; // stop the workers from starting any more waiting track loads for (pfd = pfdNeverStarted; pfd; pfd = pfd->next) { // query was never even started char temp[1024]; safef(temp, sizeof temp, "Ran out of time (%d milliseconds) unable to process %s %s", maxTimeInMilliseconds, pfd->genome, pfd->db); pfd->networkErrMsg = cloneString(temp); pfd->error = TRUE; ++errCount; } @@ -578,107 +581,84 @@ printf("\n"); printf("
Custom track name: "); cgiMakeTextVar( "trackName", trackName, 30); printf(" |
Custom track description: "); cgiMakeTextVar( "trackDescription", trackDescription,50); printf(" |
"); - // find maximum query name size for padding calculations - int maxQChromNameSize = 0; - for (psl = pslList; psl != NULL; psl = psl->next) - { - int l = strlen(psl->qName); - maxQChromNameSize = max(maxQChromNameSize,l); - } - maxQChromNameSize = max(maxQChromNameSize,5); - + // find maximum query name size for padding calculations and // find maximum target chrom name size for padding calculations + int maxQChromNameSize = 0; int maxTChromNameSize = 0; for (psl = pslList; psl != NULL; psl = psl->next) { - int l = strlen(psl->tName); - maxTChromNameSize = max(maxTChromNameSize,l); + int qLen = strlen(psl->qName); + maxQChromNameSize = max(maxQChromNameSize,qLen); + int tLen = strlen(psl->tName); + maxTChromNameSize = max(maxTChromNameSize,tLen); } + maxQChromNameSize = max(maxQChromNameSize,5); maxTChromNameSize = max(maxTChromNameSize,5); - // header padding - char tempQ[1024]; - char tempT[1024]; - - printf(" ACTIONS QUERY "); - tempQ[0] = 0; - safecatRepeatChar(tempQ, sizeof tempQ, ' ', (maxQChromNameSize - 5)); - printf("%s", tempQ); + + spaceOut(stdout, maxQChromNameSize - 5); printf("SCORE START END QSIZE IDENTITY CHROM "); - tempT[0] = 0; - safecatRepeatChar(tempT, sizeof tempT, ' ', (maxTChromNameSize - 5)); - printf("%s", tempT); + spaceOut(stdout, maxTChromNameSize - 5); printf(" STRAND START END SPAN\n"); printf("---------------------------------------------------------------------------------------------"); - - tempQ[0] = 0; - safecatRepeatChar(tempQ, sizeof tempQ, '-', (maxQChromNameSize - 5)); - printf("%s", tempQ); - - tempT[0] = 0; - safecatRepeatChar(tempT, sizeof tempT, '-', (maxTChromNameSize - 5)); - printf("%s", tempT); + repeatCharOut(stdout, '-', maxQChromNameSize - 5); + repeatCharOut(stdout, '-', maxTChromNameSize - 5); printf("\n"); for (psl = pslList; psl != NULL; psl = psl->next) { if (customText) printf("", browserUrl, psl->tName, psl->tStart + 1, psl->tEnd, database, customText, uiState, unhideTrack); else printf("", browserUrl, psl->tName, psl->tStart + 1, psl->tEnd, database, pslName, faName, uiState, unhideTrack); printf("browser "); printf("", hgcUrl, psl->tStart, pslName, cgiEncode(faName), psl->qName, psl->tName, psl->tStart, psl->tEnd, database, uiState); printf("details "); - tempQ[0] = 0; - safecpy(tempQ, sizeof tempQ, psl->qName); - int qPadding = maxQChromNameSize - strlen(psl->qName); - safecatRepeatChar(tempQ, sizeof tempQ, ' ', qPadding); - - tempT[0] = 0; - safecpy(tempT, sizeof tempT, psl->tName); - int tPadding = maxTChromNameSize - strlen(psl->tName); - safecatRepeatChar(tempT, sizeof tempT, ' ', tPadding); - - printf("%s %5d %5d %5d %5d %5.1f%% %s %-2s %9d %9d %6d\n", - tempQ, pslScore(psl), psl->qStart+1, psl->qEnd, psl->qSize, - 100.0 - pslCalcMilliBad(psl, TRUE) * 0.1, - tempT, psl->strand, psl->tStart+1, psl->tEnd, + printf("%s",psl->qName); + spaceOut(stdout, maxQChromNameSize - strlen(psl->qName)); + printf(" %5d %5d %5d %5d %5.1f%% ", + pslScore(psl), psl->qStart+1, psl->qEnd, psl->qSize, + 100.0 - pslCalcMilliBad(psl, TRUE) * 0.1); + printf("%s",psl->tName); + spaceOut(stdout, maxTChromNameSize - strlen(psl->tName)); + printf(" %-2s %9d %9d %6d\n", + psl->strand, psl->tStart+1, psl->tEnd, psl->tEnd - psl->tStart); } printf("\n"); puts("\n"); puts("