本文整理汇总了C++中slAddHead函数的典型用法代码示例。如果您正苦于以下问题:C++ slAddHead函数的具体用法?C++ slAddHead怎么用?C++ slAddHead使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了slAddHead函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: AllocVar
struct dgNodeRef *dgFindPath(struct diGraph *dg, struct dgNode *a, struct dgNode *b)
/* Find shortest path from a to b. Return NULL if can't be found. */
{
struct dgNodeRef *refList = NULL, *ref;
struct dgConnection *con;
struct dgNode *node, *nNode;
struct dlList *fifo;
struct dlNode *ffNode;
struct dgNode endNode;
int fifoSize = 1;
/* Do some quick and easy tests first to return if have no way out
* of node A, or if B directly follows A. */
if (a->nextList == NULL)
return NULL;
if (a == b)
{
AllocVar(ref);
ref->node = a;
return ref;
}
if ((con = dgFindNodeInConList(a->nextList, b)) != NULL)
{
AllocVar(refList);
refList->node = a;
node = con->node;
AllocVar(ref);
ref->node = node;
slAddTail(&refList, ref);
return refList;
}
/* Set up for breadth first traversal. Will use a doubly linked
* list as a fifo. */
for (node = dg->nodeList; node != NULL; node = node->next)
node->tempEntry = NULL;
fifo = newDlList();
dlAddValTail(fifo, a);
a->tempEntry = &endNode;
while ((ffNode = dlPopHead(fifo)) != NULL)
{
--fifoSize;
node = ffNode->val;
freeMem(ffNode);
for (con = node->nextList; con != NULL; con = con->next)
{
nNode = con->node;
if (nNode->tempEntry == NULL)
{
nNode->tempEntry = node;
if (nNode == b)
{
while (nNode != &endNode && nNode != NULL)
{
AllocVar(ref);
ref->node = nNode;
slAddHead(&refList, ref);
nNode = nNode->tempEntry;
}
break;
}
else
{
dlAddValTail(fifo, nNode);
++fifoSize;
if (fifoSize > 100000)
errAbort("Internal error in dgFindPath");
}
}
}
}
freeDlList(&fifo);
return refList;
}
示例2: clusterClone
//.........这里部分代码省略.........
freeHash(&coordHash);
chrHash = newHash(0);
coordHash = newHash(0);
querySize = 0;
partCount = 0;
partsConsidered = 0;
}
tSize = psl->tEnd - psl->tStart;
percentCoverage = 100.0*((double)(tSize+1)/(psl->qSize + 1));
if (differentWord(psl->qName, prevAccPart))
{
++partsConsidered;
querySize += psl->qSize;
freeMem(prevAccPart);
prevAccPart = cloneString(psl->qName);
}
targetName = cloneString(psl->tName);
if (differentWord(targetName, prevTargetName))
{
freeMem(prevTargetName);
prevTargetName = cloneString(targetName);
}
/* keep a hash of chrom names encountered */
el = hashLookup(chrHash, targetName);
if (el == NULL)
{
if (percentCoverage > minCover)
{
hashAddInt(chrHash, targetName, 1);
chrCount = 1;
}
else
{
hashAddInt(chrHash, targetName, 0);
chrCount = 0;
}
}
else
{
if (percentCoverage > minCover)
{
chrCount = ptToInt(el->val) + 1;
el->val=intToPt(chrCount);
}
}
AllocVar(coord);
coord->start = psl->tStart;
coord->end = psl->tEnd;
coord->qSize = psl->qSize;
coord->strand = sameWord(psl->strand,"+") ? 1 : 0;
/* when coverage is sufficient */
if (percentCoverage > minCover)
{
++partCount;
coord->name = cloneString(psl->qName);
/* for each chrom name, accumulate a list of coordinates */
el = hashLookup(coordHash, targetName);
if (el == NULL)
{
AllocVar(coordListPt);
hashAdd(coordHash, targetName, coordListPt);
}
else
{
coordListPt = el->val;
}
slAddHead(coordListPt,coord);
verbose(2,"# %s\t%u\t%u\t%u\t%.4f\t%d %s:%d-%d %s\n",
psl->qName, psl->qSize, tSize, tSize - psl->qSize,
percentCoverage, chrCount, psl->tName, psl->tStart, psl->tEnd,
psl->strand);
}
else
{
verbose(3,"# %s\t%u\t%u\t%u\t%.4f\t%d %s:%d-%d %s\n",
psl->qName, psl->qSize, tSize, tSize - psl->qSize,
percentCoverage, chrCount, psl->tName, psl->tStart, psl->tEnd,
psl->strand);
}
freeMem(accName);
freeMem(targetName);
pslFree(&psl);
}
if (partCount > 0)
processResult(chrHash, coordHash, prevAccName, querySize,
partsConsidered);
else
verbose(1,"# ERROR %s %s - no coordinates found\n",
prevTargetName, prevAccName);
freeMem(prevAccName);
freeHash(&chrHash);
freeHash(&coordHash);
lineFileClose(&lf);
}
} /* static void clusterClone() */
示例3: pslRefRecycle
static void pslRefRecycle(struct pslSets *ps, struct pslRef *pr)
/* recycle a pslRef object */
{
memset(pr, 0, sizeof(struct pslRef));
slAddHead(&ps->refPool, pr);
}
示例4: pslSort2
void pslSort2(char *outDir, char *tempDir, boolean noHead)
/* Do second step of sort - merge all sorted files in tempDir
* to final outdir. */
{
char fileName[512];
struct slName *tmpList, *tmp;
struct midFile *midList = NULL, *mid;
int aliCount = 0;
FILE *f = NULL;
char lastTargetAcc[256];
char targetAcc[256];
strcpy(lastTargetAcc, "");
tmpList = listDir(tempDir, "tmp*.psl");
if (tmpList == NULL)
errAbort("No tmp*.psl files in %s\n", tempDir);
for (tmp = tmpList; tmp != NULL; tmp = tmp->next)
{
sprintf(fileName, "%s/%s", tempDir, tmp->name);
AllocVar(mid);
mid->lf = pslFileOpen(fileName);
slAddHead(&midList, mid);
}
printf("writing %s", outDir);
fflush(stdout);
/* Write out the lowest sorting line from mid list until done. */
for (;;)
{
struct midFile *bestMid = NULL;
if ( (++aliCount & 0xffff) == 0)
{
printf(".");
fflush(stdout);
}
for (mid = midList; mid != NULL; mid = mid->next)
{
if (mid->lf != NULL && mid->psl == NULL)
{
if ((mid->psl = nextPsl(mid->lf)) == NULL)
lineFileClose(&mid->lf);
}
if (mid->psl != NULL)
{
if (bestMid == NULL || pslCmpTarget(&mid->psl, &bestMid->psl) < 0)
bestMid = mid;
}
}
if (bestMid == NULL)
break;
getTargetAcc(bestMid->psl->tName, targetAcc);
if (!sameString(targetAcc, lastTargetAcc))
{
strcpy(lastTargetAcc, targetAcc);
carefulClose(&f);
sprintf(fileName, "%s/%s.psl", outDir, targetAcc);
f = mustOpen(fileName, "w");
if (!noHead)
pslWriteHead(f);
}
pslTabOut(bestMid->psl, f);
pslFree(&bestMid->psl);
}
carefulClose(&f);
printf("\n");
printf("Cleaning up temp files\n");
for (tmp = tmpList; tmp != NULL; tmp = tmp->next)
{
sprintf(fileName, "%s/%s", tempDir, tmp->name);
remove(fileName);
}
}
示例5: addChainQ
void addChainQ(struct chrom *chrom, struct chrom *otherChrom, struct chain *chain)
/* Add Q side of chain to fill/gap tree of chromosome.
* For this side we have to cope with reverse strand
* issues. */
{
struct slRef *spaceList;
struct slRef *ref;
struct cBlock *startBlock, *block, *nextBlock;
int gapStart, gapEnd;
struct gap *gap;
boolean isRev = (chain->qStrand == '-');
int qStart = chain->qStart, qEnd = chain->qEnd;
if (isRev)
{
reverseIntRange(&qStart, &qEnd, chain->qSize);
reverseBlocksQ(&chain->blockList, chain->qSize);
}
spaceList = findSpaces(chrom->spaces,qStart,qEnd);
startBlock = chain->blockList;
for (ref = spaceList; ref != NULL; ref = ref->next)
{
struct space *space = ref->val;
struct fill *fill;
for (;;)
{
nextBlock = startBlock->next;
if (nextBlock == NULL)
break;
gapEnd = nextBlock->qStart;
if (gapEnd > space->start)
break;
startBlock = nextBlock;
}
if ((fill = fillSpace(chrom, space, chain, startBlock, TRUE))
!= NULL)
{
for (block = startBlock; ; block = nextBlock)
{
nextBlock = block->next;
if (nextBlock == NULL)
break;
gapStart = block->qEnd;
gapEnd = nextBlock->qStart;
if (strictlyInside(space->start, space->end, gapStart, gapEnd))
{
int ts, te;
if (chain->qStrand == '+')
{
ts = block->tEnd;
te = nextBlock->tStart;
}
else
{
ts = nextBlock->tStart;
te = block->tEnd;
}
gap = gapNew(gapStart, gapEnd, ts, te);
addSpaceForGap(chrom, gap);
slAddHead(&fill->gapList, gap);
}
}
freez(&ref->val); /* aka space */
}
}
slFreeList(&spaceList);
if (isRev)
reverseBlocksQ(&chain->blockList, chain->qSize);
}
示例6: doPastedIdentifiers
void doPastedIdentifiers(struct sqlConnection *conn)
/* Process submit in paste identifiers page. */
{
char *idText = trimSpaces(cartString(cart, hgtaPastedIdentifiers));
htmlOpen("Table Browser (Input Identifiers)");
if (isNotEmpty(idText))
{
/* Write terms to temp file, checking whether they have matches, and
* save temp file name. */
boolean saveIdText = (strlen(idText) < MAX_IDTEXT);
char *idTextForLf = saveIdText ? cloneString(idText) : idText;
struct lineFile *lf = lineFileOnString("idText", TRUE, idTextForLf);
char *line, *word;
struct tempName tn;
FILE *f;
int totalTerms = 0, foundTerms = 0;
struct slName* missingTerms = NULL;
struct dyString *exampleMissingIds = dyStringNew(256);
char *actualDb = database;
if (sameWord(curTable, WIKI_TRACK_TABLE))
actualDb = wikiDbName();
struct hTableInfo *hti = maybeGetHti(actualDb, curTable, conn);
char *idField = getIdField(actualDb, curTrack, curTable, hti);
if (idField == NULL)
{
warn("Sorry, I can't tell which field of table %s to treat as the "
"identifier field.", curTable);
webNewSection("Table Browser");
cartRemove(cart, hgtaIdentifierDb);
cartRemove(cart, hgtaIdentifierTable);
cartRemove(cart, hgtaIdentifierFile);
mainPageAfterOpen(conn);
htmlClose();
return;
}
struct slName *allTerms = NULL, *term;
while (lineFileNext(lf, &line, NULL))
{
while ((word = nextWord(&line)) != NULL)
{
term = slNameNew(word);
slAddHead(&allTerms, term);
totalTerms++;
}
}
slReverse(&allTerms);
lineFileClose(&lf);
char *extraWhere = NULL;
int maxIdsInWhere = cartUsualInt(cart, "hgt_maxIdsInWhere", DEFAULT_MAX_IDS_IN_WHERE);
if (totalTerms > 0 && totalTerms <= maxIdsInWhere)
extraWhere = slNameToInExpression(idField, allTerms);
struct lm *lm = lmInit(0);
struct hash *matchHash = getAllPossibleIds(conn, lm, idField, extraWhere);
trashDirFile(&tn, "hgtData", "identifiers", ".key");
f = mustOpen(tn.forCgi, "w");
for (term = allTerms; term != NULL; term = term->next)
{
struct slName *matchList = NULL, *match;
if (matchHash == NULL)
{
matchList = slNameNew(term->name);
}
else
{
/* Support multiple alias->id mappings: */
char upcased[1024];
safecpy(upcased, sizeof(upcased), term->name);
touppers(upcased);
struct hashEl *hel = hashLookup(matchHash, upcased);
if (hel != NULL)
{
matchList = slNameNew((char *)hel->val);
while ((hel = hashLookupNext(hel)) != NULL)
{
match = slNameNew((char *)hel->val);
slAddHead(&matchList, match);
}
}
}
if (matchList != NULL)
{
foundTerms++;
for (match = matchList; match != NULL; match = match->next)
{
mustWrite(f, match->name, strlen(match->name));
mustWrite(f, "\n", 1);
}
}
else
{
slAddHead(&missingTerms, slNameNew(term->name));
}
}
slReverse(&missingTerms);
carefulClose(&f);
cartSetString(cart, hgtaIdentifierDb, database);
cartSetString(cart, hgtaIdentifierTable, curTable);
cartSetString(cart, hgtaIdentifierFile, tn.forCgi);
if (saveIdText)
//.........这里部分代码省略.........
示例7: printSettingsWithUrls
void printSettingsWithUrls(struct hash *ra,char *urlSetting,char *nameSetting,char *idSetting)
// will print one or more urls with name and optional id. Only Name is required!
// If more than one, then should add same number of slots to each ("fred;ethyl" & " ;wife")
{
char *names = hashFindVal(ra, nameSetting);
struct slName *nameList = slNameListFromString(names, ';');;
char *urls = NULL;
struct slName *urlList = NULL;
char *ids = NULL;
struct slName *idList = NULL;
if (idSetting != NULL)
ids = hashFindVal(ra, idSetting);
if (ids != NULL)
{
idList = slNameListFromString(ids, ';');
if (slCount(idList) > slCount(nameList))
{
if (slCount(nameList) == 1)
{
while (slCount(nameList) < slCount(idList))
slAddHead(&nameList,slNameNew(nameList->name));
}
else
errAbort("The number of of items in %s and %s must match for term %s",
nameSetting,idSetting,(char *)hashMustFindVal(ra,CV_TERM));
}
}
if (urlSetting != NULL)
urls = hashFindVal(ra, urlSetting);
if (urls != NULL)
{
if (slCount(nameList) == 1)
urlList = slNameNew(urls); // It is the case that singleton URLs sometimes have ';'!
else
{
urlList = slNameListFromString(urls, ';');
if (slCount(urlList) > slCount(nameList))
errAbort("The number of of items in %s and %s must match for term %s",
nameSetting,urlSetting,(char *)hashMustFindVal(ra,CV_TERM));
}
}
printf(" <TD>");
// while there are items in the list of vendorNames, print the vendorName
// and vendorID together with the url if present
struct slName *curName = NULL;
struct slName *curId;
struct slName *curUrl;
for (curName=nameList,curId=idList,curUrl=urlList; curName != NULL; curName=curName->next)
{
if (curName!=nameList) // Break between links
printf("<BR>\n ");
// if there is a url, add it as a link
char *url = NULL;
if (curUrl != NULL)
{
url = trimSpaces(curUrl->name);
if (isNotEmpty(url))
printf("<A TARGET=_BLANK HREF=%s>", url);
curUrl=curUrl->next;
}
printf("%s", curName->name);
if (curId != NULL)
{
char *id = trimSpaces(curId->name);
if (isNotEmpty(id))
printf(" %s", id );
curId=curId->next;
}
if (isNotEmpty(url))
printf("</A>");
}
puts("</TD>");
// Free the memory
slFreeList(&nameList);
slFreeList(&idList);
slFreeList(&urlList);
}
示例8: errAbort
struct bbiInterval *bigWigIntervalQuery(struct bbiFile *bwf, char *chrom, bits32 start, bits32 end,
struct lm *lm)
/* Get data for interval. Return list allocated out of lm. */
{
if (bwf->typeSig != bigWigSig)
errAbort("Trying to do bigWigIntervalQuery on a non big-wig file.");
bbiAttachUnzoomedCir(bwf);
struct bbiInterval *el, *list = NULL;
struct fileOffsetSize *blockList = bbiOverlappingBlocks(bwf, bwf->unzoomedCir,
chrom, start, end, NULL);
struct fileOffsetSize *block;
struct udcFile *udc = bwf->udc;
boolean isSwapped = bwf->isSwapped;
float val;
int i;
// slSort(&blockList, fileOffsetSizeCmp);
struct fileOffsetSize *mergedBlocks = fileOffsetSizeMerge(blockList);
for (block = mergedBlocks; block != NULL; block = block->next)
{
udcSeek(udc, block->offset);
char *blockBuf = needLargeMem(block->size);
udcRead(udc, blockBuf, block->size);
char *blockPt = blockBuf, *blockEnd = blockBuf + block->size;
while (blockPt < blockEnd)
{
struct bwgSectionHead head;
bwgSectionHeadFromMem(&blockPt, &head, isSwapped);
switch (head.type)
{
case bwgTypeBedGraph:
{
for (i=0; i<head.itemCount; ++i)
{
bits32 s = memReadBits32(&blockPt, isSwapped);
bits32 e = memReadBits32(&blockPt, isSwapped);
val = memReadFloat(&blockPt, isSwapped);
if (s < start) s = start;
if (e > end) e = end;
if (s < e)
{
lmAllocVar(lm, el);
el->start = s;
el->end = e;
el->val = val;
slAddHead(&list, el);
}
}
break;
}
case bwgTypeVariableStep:
{
for (i=0; i<head.itemCount; ++i)
{
bits32 s = memReadBits32(&blockPt, isSwapped);
bits32 e = s + head.itemSpan;
val = memReadFloat(&blockPt, isSwapped);
if (s < start) s = start;
if (e > end) e = end;
if (s < e)
{
lmAllocVar(lm, el);
el->start = s;
el->end = e;
el->val = val;
slAddHead(&list, el);
}
}
break;
}
case bwgTypeFixedStep:
{
bits32 s = head.start;
bits32 e = s + head.itemSpan;
for (i=0; i<head.itemCount; ++i)
{
val = memReadFloat(&blockPt, isSwapped);
bits32 clippedS = s, clippedE = e;
if (clippedS < start) clippedS = start;
if (clippedE > end) clippedE = end;
if (clippedS < clippedE)
{
lmAllocVar(lm, el);
el->start = clippedS;
el->end = clippedE;
el->val = val;
slAddHead(&list, el);
}
s += head.itemStep;
e += head.itemStep;
}
break;
}
default:
internalErr();
break;
}
}
}
slFreeList(&mergedBlocks);
//.........这里部分代码省略.........
示例9: newHash
struct hash *agpLoadAll(char *agpFile)
/* load AGP entries into a hash of AGP lists, one per chromosome */
{
struct hash *agpHash = newHash(0);
struct lineFile *lf = lineFileOpen(agpFile, TRUE);
char *words[9];
int lastPos = 0;
int wordCount;
struct agpFrag *agpFrag;
struct agpGap *agpGap;
char *chrom;
struct agp *agp;
struct hashEl *hel;
while ((wordCount = lineFileChopNext(lf, words, ArraySize(words))) != 0)
{
lineFileExpectAtLeast(lf, 8, wordCount);
chrom = words[0];
if (!hashFindVal(agpHash, chrom))
lastPos = 1;
AllocVar(agp);
if (words[4][0] != 'N' && words[4][0] != 'U')
{
/* not a gap */
lineFileExpectWords(lf, 9, wordCount);
agpFrag = agpFragLoad(words);
if (agpFrag->chromStart != lastPos)
errAbort(
"Frag start (%d, %d) doesn't match previous end line %d of %s\n",
agpFrag->chromStart, lastPos, lf->lineIx, lf->fileName);
if (agpFrag->chromEnd - agpFrag->chromStart !=
agpFrag->fragEnd - agpFrag->fragStart)
errAbort("Sizes don't match in %s and %s line %d of %s\n",
agpFrag->chrom, agpFrag->frag, lf->lineIx, lf->fileName);
lastPos = agpFrag->chromEnd + 1;
agp->entry = agpFrag;
agp->isFrag = TRUE;
}
else
{
/* gap */
lineFileExpectWords(lf, 8, wordCount);
agpGap = agpGapLoad(words);
if (agpGap->chromStart != lastPos)
errAbort("Gap start (%d, %d) doesn't match previous end line %d of %s\n",
agpGap->chromStart, lastPos, lf->lineIx, lf->fileName);
lastPos = agpGap->chromEnd + 1;
agp->entry = agpGap;
agp->isFrag = FALSE;
}
if ((hel = hashLookup(agpHash, chrom)) == NULL)
hashAdd(agpHash, chrom, agp);
else
slAddHead(&(hel->val), agp);
}
#ifndef DEBUG
{
struct hashCookie cookie;
struct hashEl *hel;
cookie = hashFirst(agpHash);
while ((hel = hashNext(&cookie)) != NULL)
{
struct agp *agpList;
agpList = (struct agp *)hel->val;
/*
for (agp = agpList; agp != NULL; agp = agp->next)
printf("isFrag: %d\n", agp->isFrag);
*/
}
}
#endif
/* reverse AGP lists */
//hashTraverseVals(agpHash, slReverse);
#ifndef DEBUG
{
struct hashCookie cookie;
struct hashEl *hel;
cookie = hashFirst(agpHash);
while ((hel = hashNext(&cookie)) != NULL)
{
struct agp *agpList;
slReverse(&hel->val);
agpList = hel->val;
/*
agpList = (struct agp *)hel->val;
slReverse(&agpList);
hashRemove(agpHash, hel->name);
hashAdd(agpHash, hel->name, agpList);
*/
/*
for (agp = agpList; agp != NULL; agp = agp->next)
printf("isFrag: %d\n", agp->isFrag);
*/
}
}
#endif
return agpHash;
}
示例10: loadCodeBlast
void loadCodeBlast(struct track *tg)
/* from the bed 6+1 codeBlast table, make a linkedFeaturesSeries and load it. */
{
struct linkedFeaturesSeries *lfs = NULL, *originalLfs, *codeLfs, *lfsList = NULL;
struct linkedFeatures *lf;
struct slName *codes = NULL, *track=NULL, *scores=NULL;
struct codeBlast *bedList;
struct codeBlast *cb, *list=NULL;
struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr;
char **temparray3;
char *temparray[32];
char *temparray2;
char **row;
char *tempstring;
int x;
int cutoff;
char cMode[64];
/*The most common names used to display method*/
char *codeNames[18] = {"within genus", "\t", "crenarchaea", "euryarchaea", "\t", "bacteria",
"\t", "eukarya", "\t", "thermophile", "hyperthermophile","acidophile",
"alkaliphile", "halophile", "methanogen", "strict aerobe",
"strict anaerobe", "anaerobe or aerobe"}; int i;
safef(cMode, sizeof(cMode), "%s.scoreFilter", tg->tdb->track);
cutoff=cartUsualInt(cart, cMode,0 );
sr=hRangeQuery(conn, tg->table, chromName, winStart, winEnd, NULL, 0);
while ((row = sqlNextRow(sr)) != NULL)
{
cb = codeBlastLoad(row);
slAddHead(&list, cb);
}
sqlFreeResult(&sr);
hFreeConn(&conn);
slReverse(&list);
if(list == NULL)
return;
for(cb = list; cb != NULL; cb = cb->next)
{
AllocVar(lfs);
AllocVar(lf);
lfs->name = cloneString(cb->name);
lf = lfFromBed6(cb,0,1000);
lf->score = cb->score;
tempstring=cloneString(cb->code);
chopString(tempstring, "," , temparray, ArraySize(temparray));
if(sameWord(database, "pyrFur2"))
{
temparray3=(char**)calloc(19*8,sizeof(char**));
for(x=0; x<19; x++)
{
temparray3[x]=(char *)calloc(256, sizeof(char*));
/* Fix to cloneString problem when both patricia and my track was showing at the same time */
if(temparray[x]!=NULL)
{
if(atoi(temparray[x])==1000)
temparray3[x]="1000";
else if(atoi(temparray[x])==900)
temparray3[x]="900";
else if(atoi(temparray[x])==800)
temparray3[x]="800";
else if(atoi(temparray[x])==700)
temparray3[x]="700";
else if(atoi(temparray[x])==600)
temparray3[x]="600";
else if(atoi(temparray[x])==500)
temparray3[x]="500";
else if(atoi(temparray[x])==400)
temparray3[x]="400";
else if(atoi(temparray[x])==300)
temparray3[x]="300";
else if(atoi(temparray[x])==200)
temparray3[x]="200";
else if(atoi(temparray[x])==100)
temparray3[x]="100";
else
temparray3[x]="0";
}
}
}
else
{
temparray3=(char**)calloc(18*8,sizeof(char**));
for(x=0; x<18; x++)
{
temparray3[x]=(char *)calloc(256, sizeof(char*));
/* Fix to cloneString problem when both patricia and my track was showing at the same time */
if(temparray[x]!=NULL)
{
if(atoi(temparray[x])==1000)
temparray3[x]="1000";
else if(atoi(temparray[x])==900)
temparray3[x]="900";
else if(atoi(temparray[x])==800)
temparray3[x]="800";
else if(atoi(temparray[x])==700)
temparray3[x]="700";
//.........这里部分代码省略.........
示例11: oneChromInput
void oneChromInput(char *database, char *chrom, int chromSize,
char *rangeTrack, char *expTrack,
struct hash *refLinkHash, struct hash *erHash, FILE *f)
/* Read in info for one chromosome. */
{
struct binKeeper *rangeBk = binKeeperNew(0, chromSize);
struct binKeeper *expBk = binKeeperNew(0, chromSize);
struct binKeeper *knownBk = binKeeperNew(0, chromSize);
struct bed *rangeList = NULL, *range;
struct bed *expList = NULL;
struct genePred *knownList = NULL;
struct rangeInfo *riList = NULL, *ri;
struct hash *riHash = hashNew(0); /* rangeInfo values. */
struct binElement *rangeBeList = NULL, *rangeBe, *beList = NULL, *be;
/* Load up data from database. */
rangeList = loadBed(database, chrom, rangeTrack, 12, rangeBk);
expList = loadBed(database, chrom, expTrack, 15, expBk);
knownList = loadGenePred(database, chrom, "refGene", knownBk);
/* Build range info basics. */
rangeBeList = binKeeperFindAll(rangeBk);
for (rangeBe = rangeBeList; rangeBe != NULL; rangeBe = rangeBe->next)
{
range = rangeBe->val;
AllocVar(ri);
slAddHead(&riList, ri);
hashAddSaveName(riHash, range->name, ri, &ri->id);
ri->range = range;
ri->commonName = findCommonName(range, knownBk, refLinkHash);
}
slReverse(&riList);
/* Mark split ones. */
beList = binKeeperFindAll(expBk);
for (be = beList; be != NULL; be = be->next)
{
struct bed *exp = be->val;
struct binElement *subList = binKeeperFind(rangeBk,
exp->chromStart, exp->chromEnd);
if (slCount(subList) > 1)
{
struct binElement *sub;
for (sub = subList; sub != NULL; sub = sub->next)
{
struct bed *range = sub->val;
struct rangeInfo *ri = hashMustFindVal(riHash, range->name);
ri->isSplit = TRUE;
}
}
slFreeList(&subList);
}
/* Output the nice ones: not split and having some expression info. */
for (ri = riList; ri != NULL; ri = ri->next)
{
if (!ri->isSplit)
{
struct bed *range = ri->range;
beList = binKeeperFind(expBk, range->chromStart, range->chromEnd);
if (beList != NULL)
outputAveraged(f, ri, erHash, beList);
slFreeList(&beList);
}
}
/* Clean up time! */
freeHash(&riHash);
genePredFreeList(&knownList);
bedFree(&rangeList);
bedFree(&expList);
slFreeList(&rangeBeList);
slFreeList(&beList);
slFreeList(&riList);
binKeeperFree(&rangeBk);
binKeeperFree(&expBk);
binKeeperFree(&knownBk);
}
示例12: update
void update(struct g2cFile *old, struct g2cFile *up)
{
struct gene *oldGene, *upGene;
struct cdnaHit *oldHit, *upHit;
struct hash *geneHash;
struct hashEl *hel;
int sameHitCount = 0;
int newHitCount = 0;
int newGeneCount = 0;
int updatedGeneCount = 0;
int altCount = 0;
struct geneFamily smallFamily;
struct geneFamily *family;
printf("Updating %s with %s\n", old->name, up->name);
/* Hash the existing gene names for faster lookup. */
geneHash = newHash(12);
for (oldGene = old->geneList; oldGene != NULL; oldGene = oldGene->next)
hashAdd(geneHash, oldGene->name, oldGene);
for (upGene = up->geneList; upGene != NULL; upGene = upGene->next)
{
boolean changedGene = FALSE;
if (isAltSplicedName(upGene->name))
{
family = getAltFamily(geneHash, upGene->name);
++altCount;
}
else
{
hel = hashLookup(geneHash, upGene->name);
if (hel != NULL)
{
smallFamily.gene = hel->val;
smallFamily.next = NULL;
family = &smallFamily;
}
else
family = NULL;
}
/* Set corresponding gene in old file to NULL until we
* need to find it. */
oldGene = NULL;
for (upHit = upGene->hitList; upHit != NULL; upHit = upHit->next)
{
if ((oldHit = findHitInFamily(family, upHit->name)) != NULL)
++sameHitCount;
else
{
if (oldGene == NULL)
{
/* We haven't found corresponding gene yet. First
* look for it in the family. */
struct geneFamily *member;
for (member = family; member != NULL; member = member->next)
{
if (strcmp(member->gene->name, upGene->name) == 0)
{
oldGene = member->gene;
break;
}
}
/* The corresponding gene doesn't exist yet. We
* have to make it up and hang it on the genelist
* for the file, the hash list, and the family list. */
if (oldGene == NULL)
{
oldGene = alloc(sizeof(*oldGene));
oldGene->name = upGene->name;
slAddHead(&old->geneList, oldGene);
hashAdd(geneHash, oldGene->name, oldGene);
member = alloc(sizeof(*member));
member->gene = oldGene;
slAddHead(&family, member);
++newGeneCount;
}
}
oldHit = alloc(sizeof(*oldHit));
oldHit->name = upHit->name;
oldHit->hel = hel;
slAddHead(&oldGene->hitList, oldHit);
++newHitCount;
changedGene = TRUE;
}
}
if (changedGene)
++updatedGeneCount;
}
slSort(&old->geneList, cmpName);
printf("Updated %d genes (including %d alt spliced ones) with %d cdna hits (%d hits unchanged) %d new genes\n",
updatedGeneCount, altCount, newHitCount, sameHitCount, newGeneCount);
}
示例13: alloc
struct g2cFile *loadG2cFile(char *fileName)
{
char lineBuf[1024*8];
int lineLen;
char *words[256*8];
int wordCount;
FILE *f;
int lineCount = 0;
struct g2cFile *gf = alloc(sizeof(*gf));
int hitCount = 0;
int cdnaCount = 0;
int geneCount = 0;
gf->name = fileName;
f = mustOpen(fileName, "r");
gf->cdnaHash = newHash(14);
while (fgets(lineBuf, sizeof(lineBuf), f) != NULL)
{
++lineCount;
lineLen = strlen(lineBuf);
if (lineLen >= sizeof(lineBuf) - 1)
{
errAbort("%s\nLine %d of %s too long, can only handle %d chars\n",
lineBuf, lineCount, fileName, sizeof(lineBuf)-1);
}
wordCount = chopString(lineBuf, whiteSpaceChopper, words, ArraySize(words));
if (wordCount > 0)
{
struct gene *gene = alloc(sizeof(*gene));
char *geneName = words[0];
int i;
/* Create new gene struct and put it on list. */
gene->name = cloneString(geneName);
slAddHead(&gf->geneList, gene);
++geneCount;
/* Put all cdna hits on gene. */
for (i=1; i<wordCount; ++i)
{
struct cdnaHit *hit;
struct cdnaVal *cdnaVal;
struct hashEl *hel;
char *cdnaName = words[i];
/* Get cdna, or if it's the first time we've seen it
* make up a data structure for it and hang it on
* hash list and cdna list. */
if ((hel = hashLookup(gf->cdnaHash, cdnaName)) == NULL)
{
cdnaVal = alloc(sizeof(*cdnaVal));
hel = hashAdd(gf->cdnaHash, cdnaName, cdnaVal);
cdnaVal->name = hel->name;
slAddHead(&gf->cdnaList, cdnaVal);
++cdnaCount;
}
else
{
cdnaVal = hel->val;
}
++cdnaVal->useCount;
/* Make up new cdna hit and hang it on the gene. */
hit = alloc(sizeof(*hit));
hit->hel = hel;
hit->name = hel->name;
slAddHead(&gene->hitList, hit);
++hitCount;
}
slReverse(&gene->hitList);
}
}
slReverse(&gf->geneList);
slSort(&gf->geneList, cmpName);
slSort(&gf->cdnaList, cmpName);
fclose(f);
reportHashStats(gf->cdnaHash);
printf("Loaded %s. %d genes %d cdnas %d hits\n", fileName,
geneCount, cdnaCount, hitCount);
return gf;
}
示例14: AllocVar
struct region *stitchedList(struct frag *fragList)
/* Stitch things together into list of regions. */
{
struct frag *frag, *nextFrag;
struct region *openList = NULL, *closedList = NULL, *region, *nextRegion, *stillOpenList = NULL;
struct psl *psl;
int distance = 0;
for (frag = fragList; frag != NULL; frag = nextFrag)
{
nextFrag = frag->next;
/* Clear hit flags. */
for (region = openList; region != NULL; region = region->next)
region->isHit = FALSE;
/* Loop through psl's extending open regions where possible
* and creating new open regions where not. */
for (psl = frag->pslList; psl != NULL; psl = psl->next)
{
if ((region = fragConnects(openList, psl, distance)) == NULL)
{
AllocVar(region);
slAddHead(&openList, region);
region->qName = frag->chrom;
region->qStart = frag->start;
region->qEnd = frag->end;
region->tName = psl->tName;
region->tStart = psl->tStart;
region->tEnd = psl->tEnd;
region->strand[0] = psl->strand[0];
}
region->match += psl->match;
region->misMatch += psl->misMatch;
region->repMatch += psl->repMatch;
region->nCount += psl->nCount;
region->qNumInsert += psl->qNumInsert;
region->qBaseInsert += psl->qBaseInsert;
region->tNumInsert += psl->tNumInsert;
region->tBaseInsert += psl->tBaseInsert;
region->isHit = TRUE;
}
/* Move regions not hit by this fragment to closed list. */
for (region = openList; region != NULL; region = nextRegion)
{
nextRegion = region->next;
if (region->isHit)
{
slAddHead(&stillOpenList, region);
}
else
{
slAddHead(&closedList, region);
}
}
openList = stillOpenList;
stillOpenList = NULL;
if (nextFrag != NULL)
distance = nextFrag->start - frag->start;
}
/* Move remainder of open list to cloest list. */
for (region = openList; region != NULL; region = nextRegion)
{
nextRegion = region->next;
slAddHead(&closedList, region);
}
slReverse(&closedList);
return closedList;
}
示例15: chainFastSubsetOnT
void chainFastSubsetOnT(struct chain *chain, struct cBlock *firstBlock,
int subStart, int subEnd, struct chain **retSubChain, struct chain **retChainToFree)
/* Get subchain as in chainSubsetOnT. Pass in initial block that may
* be known from some index to speed things up. */
{
struct chain *sub = NULL;
struct cBlock *oldB, *b, *bList = NULL;
int qStart = BIGNUM, qEnd = -BIGNUM;
int tStart = BIGNUM, tEnd = -BIGNUM;
/* Check for easy case. */
if (subStart <= chain->tStart && subEnd >= chain->tEnd)
{
*retSubChain = chain;
*retChainToFree = NULL;
return;
}
/* Build new block list and calculate bounds. */
for (oldB = firstBlock; oldB != NULL; oldB = oldB->next)
{
if (oldB->tStart >= subEnd)
break;
b = CloneVar(oldB);
if (b->tStart < subStart)
{
b->qStart += subStart - b->tStart;
b->tStart = subStart;
}
if (b->tEnd > subEnd)
{
b->qEnd -= b->tEnd - subEnd;
b->tEnd = subEnd;
}
slAddHead(&bList, b);
if (qStart > b->qStart)
qStart = b->qStart;
if (qEnd < b->qEnd)
qEnd = b->qEnd;
if (tStart > b->tStart)
tStart = b->tStart;
if (tEnd < b->tEnd)
tEnd = b->tEnd;
}
slReverse(&bList);
/* Make new chain based on old. */
if (bList != NULL)
{
double sizeRatio;
AllocVar(sub);
sub->blockList = bList;
sub->qName = cloneString(chain->qName);
sub->qSize = chain->qSize;
sub->qStrand = chain->qStrand;
sub->qStart = qStart;
sub->qEnd = qEnd;
sub->tName = cloneString(chain->tName);
sub->tSize = chain->tSize;
sub->tStart = tStart;
sub->tEnd = tEnd;
sub->id = chain->id;
/* Fake new score. */
sizeRatio = (sub->tEnd - sub->tStart);
sizeRatio /= (chain->tEnd - chain->tStart);
sub->score = sizeRatio * chain->score;
}
*retSubChain = *retChainToFree = sub;
}