70f5ad4d3afb51df8cd4c1b40dd75a6a0d0ee915 braney Sat Jan 29 08:13:53 2022 -0800 require that chromAliasSetup be called at init time to avoid potential thread race conditions diff --git src/hg/lib/tests/hgvsTester.c src/hg/lib/tests/hgvsTester.c index de4819d..435ce45 100644 --- src/hg/lib/tests/hgvsTester.c +++ src/hg/lib/tests/hgvsTester.c @@ -1,105 +1,107 @@ /* hgvsTester -- exercise lib/hgHgvs.c */ /* Copyright (C) 2016 The Regents of the University of California * See kent/LICENSE or http://genome.ucsc.edu/license/ for licensing information. */ #include "common.h" #include "hgHgvs.h" #include "genbank.h" #include "knetUdc.h" #include "linefile.h" #include "memalloc.h" #include "options.h" +#include "chromAlias.h" static struct optionSpec optionSpecs[] = { {NULL, 0} }; void usage() /* explain usage and exit */ { errAbort( "hgvsTester - test program for lib/hgHgvs.c\n\n" "usage:\n" " hgvsTester db inputFile\n" //"options:\n" "Each line of inputFile is either a \"#\"-comment line or an HGVS(-like) term.\n" ); } int testHgvsTerms(char *db, char *inputFile) { // Each line of input is an HGVS term. Map it to reference assembly coords and print position. struct dyString *dy = dyStringNew(0); struct lineFile *lf = lineFileOpen(inputFile, TRUE); printf("# db: %s\n" "# inputFile: %s\n", db, inputFile); char *line; while (lineFileNext(lf, &line, NULL)) { char *term = trimSpaces(line); if (term[0] == '\0' || term[0] == '#') { puts(line); continue; } struct hgvsVariant *hgvsList = hgvsParseTerm(term); if (hgvsList == NULL) hgvsList = hgvsParsePseudoHgvs(db, term); if (hgvsList == NULL) printf("# Failed to parse '%s' as HGVS\n", term); else { struct hgvsVariant *hgvs = NULL; struct hash *bedHash = hashNew(0); int okCount = 0; for (hgvs = hgvsList; hgvs != NULL; hgvs = hgvs->next) { struct bed *region = hgvsMapToGenome(db, hgvs, NULL); if (region != NULL) { okCount++; // Now that hgvsParsePsuedoHgvs returns a list of valid positions // we only want to print the unique ones in the list dyStringClear(dy);; dyStringPrintf(dy, "%s\t%d\t%d\t%s\t0\t%c\n", region->chrom, region->chromStart, region->chromEnd, term, region->strand[0]); if (hashFindVal(bedHash, dy->string) == NULL) hashAdd(bedHash, cloneString(dy->string), region); } } // Complain only if none of the HGVS terms in the list could be mapped if (okCount == 0) printf("# Failed to map '%s' to %s assembly\n", term, db); struct hashEl *hel, *helList = hashElListHash(bedHash); for (hel = helList; hel != NULL; hel = hel->next) { struct bed *region = (struct bed *)hel->val; printf("%s\t%d\t%d\t%s\t0\t%c\n", region->chrom, region->chromStart, region->chromEnd, term, region->strand[0]); } } } lineFileClose(&lf); carefulCheckHeap(); return 0; } int main(int argc, char *argv[]) { // Check args optionInit(&argc, argv, optionSpecs); if (argc != 3) usage(); char *db = argv[1]; char *inputFile = argv[2]; // Set up environment pushCarefulMemHandler(LIMIT_2or6GB); +chromAliasSetup(db); initGenbankTableNames(db); if (udcCacheTimeout() < 300) udcSetCacheTimeout(300); udcSetDefaultDir("./udcCache"); knetUdcInstall(); return testHgvsTerms(db, inputFile); }