533112afe2a2005e80cdb1f82904ea65032d4302 braney Sat Oct 2 11:37:34 2021 -0700 split hg/lib into two separate libaries, one only used by the cgis diff --git src/hg/lib/pcrResult.c src/hg/lib/pcrResult.c deleted file mode 100644 index 9d4f1e8..0000000 --- src/hg/lib/pcrResult.c +++ /dev/null @@ -1,214 +0,0 @@ -/* pcrResult -- support for internal track of hgPcr results. */ - -/* Copyright (C) 2014 The Regents of the University of California - * See README in this or parent directory for licensing information. */ - -#include "common.h" -#include "hdb.h" -#include "hui.h" -#include "obscure.h" -#include "targetDb.h" -#include "pcrResult.h" - - -char *pcrResultCartVar(char *db) -/* Returns the cart variable name for PCR result track info for db. - * Don't free the result! */ -{ -static char buf[1024]; -safef(buf, sizeof(buf), "%s_%s", PCR_RESULT_TRACK_NAME, db); -return buf; -} - -#define setPtIfNotNull(pt, val) if (pt != NULL) *pt = val - -boolean pcrResultParseCart(char *db, struct cart *cart, char **retPslFile, - char **retPrimerFile, - struct targetDb **retTarget) -/* Parse out hgPcrResult cart variable into components and make sure - * they are valid. If so, set *ret's and return TRUE. Otherwise, null out - * *ret's and return FALSE (and clear the cart variable if it exists). - * ret's are ignored if NULL. */ -{ -char *cartVar = pcrResultCartVar(cartString(cart, "db")); -char *hgPcrResult = cartOptionalString(cart, cartVar); -if (isEmpty(hgPcrResult)) - { - setPtIfNotNull(retPslFile, NULL); - setPtIfNotNull(retPrimerFile, NULL); - setPtIfNotNull(retTarget, NULL); - return FALSE; - } -static char buf[2048]; -char *words[3]; -int wordCount; -safecpy(buf, sizeof(buf), hgPcrResult); -wordCount = chopLine(buf, words); -if (wordCount < 2) - errAbort("Badly formatted hgPcrResult variable: %s", hgPcrResult); -char *pslFile = words[0]; -char *primerFile = words[1]; -char *targetName = (wordCount > 2) ? words[2] : NULL; -struct targetDb *target = NULL; -if (isNotEmpty(targetName)) - target = targetDbLookup(db, targetName); - -if (!fileExists(pslFile) || !fileExists(primerFile) || - (wordCount > 2 && target == NULL)) - { - cartRemove(cart, cartVar); - setPtIfNotNull(retPslFile, NULL); - setPtIfNotNull(retPrimerFile, NULL); - setPtIfNotNull(retTarget, NULL); - return FALSE; - } -setPtIfNotNull(retPslFile, cloneString(pslFile)); -setPtIfNotNull(retPrimerFile, cloneString(primerFile)); -setPtIfNotNull(retTarget, target); -if (retTarget == NULL) - targetDbFreeList(&target); -return TRUE; -} - -void pcrResultGetPrimers(char *fileName, char **retFPrimer, char **retRPrimer) -/* Given a file whose first line is 2 words (forward primer, reverse primer) - * set the ret's to upper-cased primer sequences. - * Do not free the statically allocated ret's. */ -{ -static char fPrimer[1024], rPrimer[1024];; -struct lineFile *lf = lineFileOpen(fileName, TRUE); -char *words[2]; -if (! lineFileRow(lf, words)) - lineFileAbort(lf, "Couldn't read primers"); -if (retFPrimer != NULL) - { - safecpy(fPrimer, sizeof(fPrimer), words[0]); - touppers(fPrimer); - *retFPrimer = fPrimer; - } -if (retRPrimer != NULL) - { - safecpy(rPrimer, sizeof(rPrimer), words[1]); - touppers(rPrimer); - *retRPrimer = rPrimer; - } -lineFileClose(&lf); -} - -void pcrResultGetPsl(char *fileName, struct targetDb *target, char *item, - char *chrom, int itemStart, int itemEnd, - struct psl **retItemPsl, struct psl **retOtherPsls) -/* Read in psl from file. If a psl matches the given item position, set - * retItemPsl to that; otherwise add it to retOtherPsls. Die if no psl - * matches the given item position. */ -{ -struct lineFile *lf = lineFileOpen(fileName, TRUE); -struct psl *itemPsl = NULL, *otherPsls = NULL; -char *pslFields[21]; -while (lineFileRow(lf, pslFields)) - { - struct psl *psl = pslLoad(pslFields); - boolean gotIt = FALSE; - if (target != NULL) - { - if (sameString(psl->tName, item) && psl->tStart == itemStart && psl->tEnd == itemEnd) - gotIt = TRUE; - } - else if (sameString(psl->tName, chrom) && psl->tStart == itemStart && - psl->tEnd == itemEnd) - gotIt = TRUE; - if (gotIt) - itemPsl = psl; - else - slAddHead(&otherPsls, psl); - } -lineFileClose(&lf); -if (itemPsl == NULL) - { - if (target != NULL) - errAbort("Did not find record for amplicon in %s sequence %s", - target->description, item); - else - errAbort("Did not find record for amplicon at %s:%d-%d", - chrom, itemStart, itemEnd); - } -if (retItemPsl != NULL) - *retItemPsl = itemPsl; -else - pslFree(&itemPsl); -if (retOtherPsls != NULL) - { - slSort(&otherPsls, pslCmpTarget); - *retOtherPsls = otherPsls; - } -else - pslFreeList(&otherPsls); -} - -struct trackDb *pcrResultFakeTdb() -/* Construct a trackDb record for PCR Results track. */ -{ -struct trackDb *tdb; -AllocVar(tdb); -tdb->track = cloneString(PCR_RESULT_TRACK_NAME); -tdb->table = cloneString(PCR_RESULT_TRACK_NAME); -tdb->shortLabel = cloneString(PCR_RESULT_TRACK_LABEL); -tdb->longLabel = cloneString(PCR_RESULT_TRACK_LONGLABEL); -tdb->grp = cloneString("map"); -tdb->type = cloneString("psl ."); -tdb->priority = 100.01; -tdb->canPack = TRUE; -tdb->visibility = tvPack; -tdb->html = hFileContentsOrWarning(hHelpFile(PCR_RESULT_TRACK_NAME)); -trackDbPolish(tdb); -if (tdb->settingsHash == NULL) - tdb->settingsHash = hashNew(0); -hashAdd(tdb->settingsHash, BASE_COLOR_DEFAULT, cloneString("diffBases")); -hashAdd(tdb->settingsHash, BASE_COLOR_USE_SEQUENCE, - cloneString(PCR_RESULT_TRACK_NAME)); -hashAdd(tdb->settingsHash, SHOW_DIFF_BASES_ALL_SCALES, cloneString(".")); -hashAdd(tdb->settingsHash, INDEL_DOUBLE_INSERT, cloneString("on")); -hashAdd(tdb->settingsHash, INDEL_QUERY_INSERT, cloneString("on")); -hashAdd(tdb->settingsHash, INDEL_POLY_A, cloneString("on")); -hashAdd(tdb->settingsHash, "nextItemButton", cloneString("off")); -return tdb; -} - -char *pcrResultItemAccName(char *acc, char *name) -/* If a display name is given in addition to the acc, concatenate them - * into a single name that must match a non-genomic target item's name - * in the targetDb .2bit. Do not free the result. */ -{ -static char accName[256]; -if (isEmpty(name)) - safecpy(accName, sizeof(accName), acc); -else - safef(accName, sizeof(accName), "%s__%s", acc, name); -return accName; -} - -char *pcrResultItemAccession(char *nameIn) -/* If nameIn contains a concatenated accession and display name, returns - * just the accession. Do not free the result.*/ -{ -char *ptr = strstr(nameIn, "__"); -if (ptr != NULL) - { - static char nameOut[128]; - safecpy(nameOut, sizeof(nameOut), nameIn); - nameOut[ptr-nameIn] = '\0'; - return nameOut; - } -return nameIn; -} - -char *pcrResultItemName(char *nameIn) -/* If nameIn contains a concatenated accession and display name, returns - * just the name. If accession only, returns NULL. Do not free the result.*/ -{ -char *ptr = strstr(nameIn, "__"); -if (ptr != NULL) - return ptr+2; -return NULL; -} -