本文整理汇总了C++中slReverse函数的典型用法代码示例。如果您正苦于以下问题:C++ slReverse函数的具体用法?C++ slReverse怎么用?C++ slReverse使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了slReverse函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: AllocVar
struct altGraphX *txGraphToAltGraphX(struct txGraph *tx)
/* Copy transcription graph to altSpliceX format. */
{
/* Allocate struct and deal with easy fields. */
struct altGraphX *ag;
AllocVar(ag);
ag->tName = cloneString(tx->tName);
ag->tStart = tx->tStart;
ag->tEnd = tx->tEnd;
ag->name = cloneString(tx->name);
ag->id = 0;
ag->strand[0] = tx->strand[0];
/* Deal with vertices. */
int vertexCount = ag->vertexCount = tx->vertexCount;
AllocArray(ag->vTypes, vertexCount);
AllocArray(ag->vPositions, vertexCount);
int i;
for (i=0; i<vertexCount; ++i)
{
struct txVertex *v = &tx->vertices[i];
ag->vTypes[i] = v->type;
ag->vPositions[i] = v->position;
}
/* Deal with edges. */
int edgeCount = ag->edgeCount = tx->edgeCount;
AllocArray(ag->edgeStarts, edgeCount);
AllocArray(ag->edgeEnds, edgeCount);
AllocArray(ag->edgeTypes, edgeCount);
struct txEdge *edge;
for (edge = tx->edgeList, i=0; edge != NULL; edge = edge->next, ++i)
{
assert(i < edgeCount);
ag->edgeStarts[i] = edge->startIx;
ag->edgeEnds[i] = edge->endIx;
ag->edgeTypes[i] = edge->type;
}
/* Deal with evidence inside of edges. */
for (edge = tx->edgeList; edge != NULL; edge = edge->next)
{
struct evidence *ev;
AllocVar(ev);
int *mrnaIds = AllocArray(ev->mrnaIds, edge->evCount);
int i;
struct txEvidence *txEv;
for (txEv = edge->evList, i=0; txEv != NULL; txEv = txEv->next, ++i)
{
assert(i < edge->evCount);
struct txSource *source = &tx->sources[txEv->sourceId];
char *sourceType = source->type;
if (sameString(sourceType, "refSeq") || sameString(sourceType, "mrna") || sameString(sourceType, "est"))
{
mrnaIds[ev->evCount] = txEv->sourceId;
ev->evCount += 1;
}
}
slAddHead(&ag->evidence, ev);
}
slReverse(&ag->evidence);
/* Convert sources into mrnaRefs. */
int sourceCount = ag->mrnaRefCount = tx->sourceCount;
AllocArray(ag->mrnaRefs, sourceCount);
int sourceIx;
for (sourceIx=0; sourceIx<sourceCount; ++sourceIx)
{
struct txSource *source = &tx->sources[sourceIx];
ag->mrnaRefs[sourceIx] = cloneString(source->accession);
}
/* Deal with tissues and libs by just making arrays of all zero. */
AllocArray(ag->mrnaTissues, tx->sourceCount);
AllocArray(ag->mrnaLibs, tx->sourceCount);
return ag;
}
开发者ID:blumroy,项目名称:kentUtils,代码行数:77,代码来源:txgToAgx.c
示例2: writeMergers
void writeMergers(struct cdnaAliList *calList, char *cdnaName, char *bacNames[])
/* Write out any mergers indicated by this cdna. This destroys calList. */
{
struct cdnaAliList *startBac, *endBac, *cal, *prevCal, *nextCal;
int bacCount;
int bacIx;
{
if (sameString(cdnaName, "R08304_AND_R08305"))
{
uglyf("Got you %s\n", cdnaName);
}
}
slSort(&calList, cmpCal);
for (startBac = calList; startBac != NULL; startBac = endBac)
{
/* Scan until find a cal that isn't pointing into the same BAC. */
bacCount = 1;
bacIx = startBac->bacIx;
prevCal = startBac;
for (cal = startBac->next; cal != NULL; cal = cal->next)
{
if (cal->bacIx != bacIx)
{
prevCal->next = NULL;
break;
}
++bacCount;
prevCal = cal;
}
endBac = cal;
if (bacCount > 1)
{
while (startBac != NULL)
{
struct cdnaAliList *clumpList = NULL, *leftoverList = NULL;
for (cal = startBac; cal != NULL; cal = nextCal)
{
nextCal = cal->next;
if (noMajorOverlap(cal, clumpList))
{
slAddHead(&clumpList, cal);
}
else
{
slAddHead(&leftoverList, cal);
}
}
slReverse(&clumpList);
slReverse(&leftoverList);
if (slCount(clumpList) > 1)
{
char lastStrand = 0;
boolean switchedStrand = FALSE;
if (!allSameContig(clumpList))
{
fprintf(mergerOut, "%s glues %s contigs", cdnaName, bacNames[bacIx]);
lastStrand = clumpList->strand;
for (cal = clumpList; cal != NULL; cal = cal->next)
{
if (cal->strand != lastStrand)
switchedStrand = TRUE;
fprintf(mergerOut, " %d %c %c' (%d-%d) %3.1f%%", cal->seqIx, cal->strand,
cal->dir,
cal->start, cal->end, 100.0*cal->cookedScore);
}
fprintf(mergerOut, "\n");
}
}
freeCalList(&clumpList);
startBac = leftoverList;
}
}
else
{
freeCalList(&startBac);
}
}
}
开发者ID:davidhoover,项目名称:kent,代码行数:80,代码来源:patSpace.c
示例3: loadHumMusL
void loadHumMusL(struct track *tg)
/* Load humMusL track with 2 zoom levels and one normal level.
* Also used for loading the musHumL track (called Human Cons)
* on the mouse browser. It decides which of 4 tables to
* load based on how large of a window the user is looking at*/
{
struct sqlConnection *conn = hAllocConn(database);
struct sqlResult *sr;
char **row;
int rowOffset;
struct sample *sample;
struct linkedFeatures *lfList = NULL, *lf;
char *hasDense = NULL;
char *where = NULL;
char tableName[256];
int z;
float pixPerBase = 0;
if(tl.picWidth == 0)
errAbort("hgTracks.c::loadHumMusL() - can't have pixel width of 0");
pixPerBase = (winEnd - winStart)/ tl.picWidth;
/* Determine zoom level. */
if (!strstr(tg->table,"HMRConservation"))
z = humMusZoomLevel();
else z=0;
if(z == 1 )
safef(tableName, sizeof(tableName), "%s_%s", "zoom1",
tg->table);
else if( z == 2)
safef(tableName, sizeof(tableName), "%s_%s", "zoom50",
tg->table);
else if(z == 3)
safef(tableName, sizeof(tableName), "%s_%s",
"zoom2500", tg->table);
else
safef(tableName, sizeof(tableName), "%s", tg->table);
//printf("(%s)", tableName );
sr = hRangeQuery(conn, tableName, chromName, winStart, winEnd,
where, &rowOffset);
while ((row = sqlNextRow(sr)) != NULL)
{
sample = sampleLoad(row+rowOffset);
lf = lfFromSample(sample);
slAddHead(&lfList, lf);
sampleFree(&sample);
}
if(where != NULL)
freez(&where);
sqlFreeResult(&sr);
hFreeConn(&conn);
slReverse(&lfList);
/* sort to bring items with common names to the same line
but only for tracks with a summary table (with name=shortLabel)
in
dense mode*/
if( hasDense != NULL )
{
sortGroupList = tg; /* used to put track name at
* top of sorted list. */
slSort(&lfList, lfNamePositionCmp);
sortGroupList = NULL;
}
tg->items = lfList;
}
开发者ID:CEpBrowser,项目名称:CEpBrowser--from-UCSC-CGI-BIN,代码行数:71,代码来源:sampleTracks.c
示例4: parseFixedStepSection
static void parseFixedStepSection(struct lineFile *lf, boolean clipDontDie, struct lm *lm,
int itemsPerSlot, char *chrom, bits32 chromSize, bits32 span, bits32 sectionStart,
bits32 step, struct bwgSection **pSectionList)
/* Read the single column data in section until get to end. */
{
struct lm *lmLocal = lmInit(0);
/* Stream through section until get to end of file or next section,
* adding values from single column to list. */
char *words[1];
char *line;
struct bwgFixedStepItem *item, *itemList = NULL;
int originalSectionSize = 0;
bits32 sectionEnd = sectionStart;
while (lineFileNextReal(lf, &line))
{
if (steppedSectionEnd(line, 1))
{
lineFileReuse(lf);
break;
}
chopLine(line, words);
lmAllocVar(lmLocal, item);
item->val = lineFileNeedDouble(lf, words, 0);
if (sectionEnd + span > chromSize)
{
warn("line %d of %s: chromosome %s has %u bases, but item ends at %u",
lf->lineIx, lf->fileName, chrom, chromSize, sectionEnd + span);
if (!clipDontDie)
noWarnAbort();
}
else
{
slAddHead(&itemList, item);
++originalSectionSize;
}
sectionEnd += step;
}
slReverse(&itemList);
/* Break up into sections of no more than items-per-slot size, and convert to packed format. */
int sizeLeft = originalSectionSize;
for (item = itemList; item != NULL; )
{
/* Figure out size of this section */
int sectionSize = sizeLeft;
if (sectionSize > itemsPerSlot)
sectionSize = itemsPerSlot;
sizeLeft -= sectionSize;
/* Allocate and fill in section. */
struct bwgSection *section;
lmAllocVar(lm, section);
section->chrom = chrom;
section->start = sectionStart;
sectionStart += sectionSize * step;
section->end = sectionStart - step + span;
section->type = bwgTypeFixedStep;
section->itemStep = step;
section->itemSpan = span;
section->itemCount = sectionSize;
/* Allocate array for data, and copy from list to array representation */
struct bwgFixedStepPacked *packed; /* An array */
section->items.fixedStepPacked = lmAllocArray(lm, packed, sectionSize);
int i;
for (i=0; i<sectionSize; ++i)
{
packed->val = item->val;
item = item->next;
++packed;
}
/* Add section to list. */
slAddHead(pSectionList, section);
}
lmCleanup(&lmLocal);
}
开发者ID:CRG-Barcelona,项目名称:libbeato,代码行数:79,代码来源:bwgCreate.c
示例5: saveAxtBundle
static void saveAxtBundle(char *chromName, int chromSize, int chromOffset,
struct ffAli *ali,
struct dnaSeq *tSeq, struct hash *t3Hash, struct dnaSeq *qSeq,
boolean qIsRc, boolean tIsRc,
enum ffStringency stringency, int minMatch, struct gfOutput *out)
/* Save alignment to axtBundle. */
{
struct axtData *ad = out->data;
struct ffAli *sAli, *eAli, *ff, *rt, *eFf = NULL;
struct axt *axt;
struct dyString *q = newDyString(1024), *t = newDyString(1024);
struct axtBundle *gab;
struct trans3 *t3List = NULL;
if (t3Hash != NULL)
t3List = hashMustFindVal(t3Hash, tSeq->name);
AllocVar(gab);
gab->tSize = chromSize;
gab->qSize = qSeq->size;
for (sAli = ali; sAli != NULL; sAli = eAli)
{
eAli = ffNextBreak(sAli, 8, tSeq, t3List);
dyStringClear(q);
dyStringClear(t);
for (ff = sAli; ff != eAli; ff = ff->right)
{
dyStringAppendN(q, ff->nStart, ff->nEnd - ff->nStart);
dyStringAppendN(t, ff->hStart, ff->hEnd - ff->hStart);
rt = ff->right;
if (rt != eAli)
{
int nGap = rt->nStart - ff->nEnd;
int nhStart = trans3GenoPos(rt->hStart, tSeq, t3List, FALSE)
+ chromOffset;
int ohEnd = trans3GenoPos(ff->hEnd, tSeq, t3List, TRUE)
+ chromOffset;
int hGap = nhStart - ohEnd;
int gap = max(nGap, hGap);
if (nGap < 0 || hGap < 0)
{
errAbort("Negative gap size in %s vs %s", tSeq->name, qSeq->name);
}
if (nGap == gap)
{
dyStringAppendN(q, ff->nEnd, gap);
dyStringAppendMultiC(t, '-', gap);
}
else
{
dyStringAppendN(t, ff->hEnd, gap);
dyStringAppendMultiC(q, '-', gap);
}
}
eFf = ff; /* Keep track of last block in bunch */
}
assert(t->stringSize == q->stringSize);
AllocVar(axt);
axt->qName = cloneString(qSeq->name);
axt->qStart = sAli->nStart - qSeq->dna;
axt->qEnd = eFf->nEnd - qSeq->dna;
axt->qStrand = (qIsRc ? '-' : '+');
axt->tName = cloneString(chromName);
axt->tStart = trans3GenoPos(sAli->hStart, tSeq, t3List, FALSE) + chromOffset;
axt->tEnd = trans3GenoPos(eFf->hEnd, tSeq, t3List, TRUE) + chromOffset;
axt->tStrand = (tIsRc ? '-' : '+');
axt->symCount = t->stringSize;
axt->qSym = cloneString(q->string);
axt->tSym = cloneString(t->string);
axt->frame = trans3Frame(sAli->hStart, t3List);
if (out->qIsProt)
axt->score = axtScoreProteinDefault(axt);
else
axt->score = axtScoreDnaDefault(axt);
slAddHead(&gab->axtList, axt);
}
slReverse(&gab->axtList);
dyStringFree(&q);
dyStringFree(&t);
slAddHead(&ad->bundleList, gab);
}
开发者ID:kenongit,项目名称:sequencing,代码行数:80,代码来源:gfOut.c
示例6: udcSeek
static struct bigBedInterval *bigBedIntervalsMatchingName(struct bbiFile *bbi,
struct fileOffsetSize *fosList, BbFirstWordMatch matcher, int fieldIx,
void *target, struct lm *lm)
/* Return list of intervals inside of sectors of bbiFile defined by fosList where the name
* matches target somehow. */
{
struct bigBedInterval *interval, *intervalList = NULL;
struct fileOffsetSize *fos;
boolean isSwapped = bbi->isSwapped;
for (fos = fosList; fos != NULL; fos = fos->next)
{
/* Read in raw data */
udcSeek(bbi->udc, fos->offset);
char *rawData = needLargeMem(fos->size);
udcRead(bbi->udc, rawData, fos->size);
/* Optionally uncompress data, and set data pointer to uncompressed version. */
char *uncompressedData = NULL;
char *data = NULL;
int dataSize = 0;
if (bbi->uncompressBufSize > 0)
{
data = uncompressedData = needLargeMem(bbi->uncompressBufSize);
dataSize = zUncompress(rawData, fos->size, uncompressedData, bbi->uncompressBufSize);
}
else
{
data = rawData;
dataSize = fos->size;
}
/* Set up for "memRead" routines to more or less treat memory block like file */
char *blockPt = data, *blockEnd = data + dataSize;
struct dyString *dy = dyStringNew(32); // Keep bits outside of chrom/start/end here
/* Read next record into local variables. */
while (blockPt < blockEnd)
{
bits32 chromIx = memReadBits32(&blockPt, isSwapped);
bits32 s = memReadBits32(&blockPt, isSwapped);
bits32 e = memReadBits32(&blockPt, isSwapped);
int c;
dyStringClear(dy);
// TODO - can simplify this probably just to for (;;) {if ((c = *blockPt++) == 0) ...
while ((c = *blockPt++) >= 0)
{
if (c == 0)
break;
dyStringAppendC(dy, c);
}
if ((*matcher)(dy->string, fieldIx, target))
{
lmAllocVar(lm, interval);
interval->start = s;
interval->end = e;
interval->rest = cloneString(dy->string);
interval->chromId = chromIx;
slAddHead(&intervalList, interval);
}
}
/* Clean up temporary buffers. */
dyStringFree(&dy);
freez(&uncompressedData);
freez(&rawData);
}
slReverse(&intervalList);
return intervalList;
}
开发者ID:cestmoi7,项目名称:AGAPE,代码行数:70,代码来源:bigBed.c
示例7: cirTreeRange
static struct rTree *rTreeFromChromRangeArray( struct lm *lm, int blockSize, int itemsPerSlot,
void *itemArray, int itemSize, bits64 itemCount, void *context,
struct cirTreeRange (*fetchKey)(const void *va, void *context),
bits64 (*fetchOffset)(const void *va, void *context), bits64 endFileOffset,
int *retLevelCount)
{
char *items = itemArray;
struct rTree *el, *list=NULL, *tree = NULL;
/* Make first level above leaf. */
bits64 i;
bits64 nextOffset = (*fetchOffset)(items, context);
for (i=0; i<itemCount; i += itemsPerSlot)
{
/* Figure out if we are on final iteration through loop, and the
* count of items in this iteration. */
boolean finalIteration = FALSE;
int oneSize = itemCount-i;
if (oneSize > itemsPerSlot)
oneSize = itemsPerSlot;
else
finalIteration = TRUE;
/* Allocate element and put on list. */
lmAllocVar(lm, el);
slAddHead(&list, el);
/* Fill out most of element from first item in element. */
char *startItem = items + itemSize * i;
struct cirTreeRange key = (*fetchKey)(startItem, context);
el->startChromIx = el->endChromIx = key.chromIx;
el->startBase = key.start;
el->endBase = key.end;
el->startFileOffset = nextOffset;
/* Figure out end of element from offset of next element (or file size
* for final element.) */
if (finalIteration)
nextOffset = endFileOffset;
else
{
char *endItem = startItem + itemSize*oneSize;
nextOffset = (*fetchOffset)(endItem, context);
}
el->endFileOffset = nextOffset;
/* Expand area spanned to include all items in block. */
int j;
for (j=1; j<oneSize; ++j)
{
void *item = items + itemSize*(i+j);
key = (*fetchKey)(item, context);
if (key.chromIx < el->startChromIx)
{
el->startChromIx = key.chromIx;
el->startBase = key.start;
}
else if (key.chromIx == el->startChromIx)
{
if (key.start < el->startBase)
el->startBase = key.start;
}
if (key.chromIx > el->endChromIx)
{
el->endChromIx = key.chromIx;
el->endBase = key.end;
}
else if (key.chromIx == el->endChromIx)
{
if (key.end > el->endBase)
el->endBase = key.end;
}
}
}
slReverse(&list);
verbose(2, "Made %d primary index nodes out of %llu items\n", slCount(list), itemCount);
/* Now iterate through making more and more condensed versions until have just one. */
int levelCount = 1;
tree = list;
while (tree->next != NULL || levelCount < 2)
{
list = NULL;
int slotsUsed = blockSize;
struct rTree *parent = NULL, *next;
for (el = tree; el != NULL; el = next)
{
next = el->next;
if (slotsUsed >= blockSize)
{
slotsUsed = 1;
lmAllocVar(lm, parent);
parent = lmCloneMem(lm, el, sizeof(*el));
parent->children = el;
el->parent = parent;
el->next = NULL;
slAddHead(&list, parent);
}
else
{
//.........这里部分代码省略.........
开发者ID:Puneet-Shivanand,项目名称:zinba,代码行数:101,代码来源:cirTree.c
示例8: cdwJobCleanFailed
void cdwJobCleanFailed(int submitId)
/* Check out the symlink to determine its type. */
{
struct sqlConnection *conn = sqlConnect("cdw");
struct dyString *query = dyStringNew(0);
sqlDyStringPrintf(query,
"select id, commandLine, startTime, endTime, returnCode, pid from cdwJob where submitId=%d "
"order by commandLine,CAST(returnCode AS unsigned)",
submitId);
// NOTE we need this CAST on returnCode since it can be -1. we want success 0 first.
// TODO DO we need to add any other conditions such as distinguishing
// between running, queued, and done?
/* Scan through result set finding redundant rows beyond success row. */
struct sqlResult *sr = sqlGetResult(conn, query->string);
char **row;
char *lastCommand = "";
boolean success = FALSE;
struct slInt *list = NULL;
struct slInt *e;
while ((row = sqlNextRow(sr)) != NULL)
{
unsigned int id = sqlUnsigned(row[0]);
char *commandLine = row[1];
unsigned long startTime = sqlUnsignedLong(row[2]);
unsigned long endTime = sqlUnsignedLong(row[3]);
int returnCode = sqlSigned(row[4]);
unsigned int pid = sqlUnsigned(row[5]);
verbose(2, "%u\t%s\t%lu\t%lu\t%d\t%u\t%u\n", id, commandLine, startTime, endTime, returnCode, pid, submitId);
if (sameString(lastCommand, commandLine))
{
if (success) // we already succeeded, the old failure is unwanted baggage.
{
e = slIntNew(id); // or add it to a list of rows whose ids should get removed
slAddHead(&list, e);
}
}
else
{
if (returnCode == 0)
success = TRUE;
else
success = FALSE;
}
// note fields pid and submitId are defined as signed integers in cdwJob table, probably should be unsigned.
lastCommand = cloneString(commandLine);
}
sqlFreeResult(&sr);
slReverse(&list);
for(e=list;e;e=e->next)
{
dyStringClear(query);
sqlDyStringPrintf(query, "delete from cdwJob where id=%u", (unsigned int) e->val);
//printf("%s\n", query->string);
sqlUpdate(conn, query->string);
}
/* Clean up and go home */
dyStringFree(&query);
sqlDisconnect(&conn);
}
开发者ID:ucscGenomeBrowser,项目名称:kent,代码行数:69,代码来源:cdwJobCleanFailed.c
示例9: hashNew
struct bbiChromUsage *bbiChromUsageFromBedFile(struct lineFile *lf,
struct hash *chromSizesHash, int *retMinDiff, double *retAveSize, bits64 *retBedCount)
/* Go through bed file and collect chromosomes and statistics. */
{
char *row[3];
struct hash *uniqHash = hashNew(0);
struct bbiChromUsage *usage = NULL, *usageList = NULL;
int lastStart = -1;
bits32 id = 0;
bits64 totalBases = 0, bedCount = 0;
int minDiff = BIGNUM;
lineFileRemoveInitialCustomTrackLines(lf);
for (;;)
{
int rowSize = lineFileChopNext(lf, row, ArraySize(row));
if (rowSize == 0)
break;
lineFileExpectWords(lf, 3, rowSize);
char *chrom = row[0];
int start = lineFileNeedNum(lf, row, 1);
int end = lineFileNeedNum(lf, row, 2);
if (start > end)
{
errAbort("end (%d) before start (%d) line %d of %s",
end, start, lf->lineIx, lf->fileName);
}
++bedCount;
totalBases += (end - start);
if (usage == NULL || differentString(usage->name, chrom))
{
if (hashLookup(uniqHash, chrom))
{
errAbort("%s is not sorted at line %d. Please use \"sort -k1,1 -k2,2n\" or bedSort and try again.",
lf->fileName, lf->lineIx);
}
hashAdd(uniqHash, chrom, NULL);
struct hashEl *chromHashEl = hashLookup(chromSizesHash, chrom);
if (chromHashEl == NULL)
errAbort("%s is not found in chromosome sizes file", chrom);
int chromSize = ptToInt(chromHashEl->val);
AllocVar(usage);
usage->name = cloneString(chrom);
usage->id = id++;
usage->size = chromSize;
slAddHead(&usageList, usage);
lastStart = -1;
}
if (end > usage->size)
errAbort("End coordinate %d bigger than %s size of %d line %d of %s", end, usage->name, usage->size, lf->lineIx, lf->fileName);
usage->itemCount += 1;
if (lastStart >= 0)
{
int diff = start - lastStart;
if (diff < minDiff)
{
if (diff < 0)
errAbort("%s is not sorted at line %d. Please use \"sort -k1,1 -k2,2n\" or bedSort and try again.",
lf->fileName, lf->lineIx);
minDiff = diff;
}
}
lastStart = start;
}
slReverse(&usageList);
*retMinDiff = minDiff;
*retAveSize = (double)totalBases/bedCount;
*retBedCount = bedCount;
freeHash(&uniqHash);
return usageList;
}
开发者ID:JinfengChen,项目名称:pblat,代码行数:72,代码来源:bbiWrite.c
示例10: wormGdfGenesInRange
struct gapInfo *findLargeGaps(struct xaAli *xa, struct gapInfo *oldList)
/* Find large gaps in alignment and classify them. */
{
struct gdfGene *gdfList;
struct gapInfo *gapList = NULL, *gap;
int ceIx=0, cbIx=0, symIx=0;
int ceStart=0, cbStart=0, symStart=0;
int runSize = 0;
char sym, lastSym = 0;
int symCount = xa->symCount;
/* Fetch C. elegans region. */
gdfList = wormGdfGenesInRange(xa->target, xa->tStart, xa->tEnd, &wormSangerGdfCache);
/* Run a little state machine that does something at the end of each solid run
* of a symbol. */
for (symIx = 0; symIx <= symCount; ++symIx)
{
sym = xa->hSym[symIx];
if (sym != lastSym)
{
if (runSize > 32) /* Introns need to be at least this long. */
{
/* We're at end of a solid run. */
if (lastSym == 'Q' || lastSym == 'T')
{
int ceGapStart = xa->tStart + ceStart;
int ceGapEnd = xa->tStart + ceIx;
struct gdfGene *gdf;
char hBefore = xa->hSym[symStart-1];
char hAfter = sym;
char strand = '.';
AllocVar(gap);
gap->query = cloneString(xa->query);
gap->qStart = xa->qStart + cbStart;
gap->qEnd = xa->qStart + cbIx;
gap->target = cloneString(xa->target);
gap->tStart = ceGapStart;
gap->tEnd = ceGapEnd;
gap->name = cloneString(xa->name);
gap->size = runSize;
gap->hSym = lastSym;
if (uniqueGap(oldList, gap))
{
slAddHead(&gapList, gap);
classifyGap(gdfList, xa->target, ceGapStart, ceGapEnd, lastSym, &gap->type, &gdf);
if (gdf != NULL)
strand = gdf->strand;
gap->hasIntronEnds = isIntron(xa, symStart, symIx, lastSym, strand, &gap->slideCount, &gap->isRc);
if (gap->hasIntronEnds)
slideGap(gap, xa, lastSym, symStart, symIx);
if (isConserved(hBefore) && isConserved(hAfter))
gap->hasStrongHomology = TRUE;
if (gap->hasStrongHomology)
{
if (lastSym == 'T')
writeGap(gap, xa, symStart+gap->slideCount, symIx+gap->slideCount, strand, out);
}
}
}
}
runSize = 0;
ceStart = ceIx;
cbStart = cbIx;
symStart = symIx;
lastSym = sym;
}
++runSize;
if (xa->qSym[symIx] != '-')
++cbIx;
if (xa->tSym[symIx] != '-')
++ceIx;
}
gdfFreeGeneList(&gdfList);
slReverse(&gapList);
return gapList;
}
开发者ID:davidhoover,项目名称:kent,代码行数:80,代码来源:newIntron.c
示例11: main
int main(int argc, char *argv[])
{
FILE *xaFile;
struct xaAli *xa;
struct gapInfo *gapList = NULL, *gaps;
int count = 0;
long startTime = clock1000();
char *xaName, *newName;
char *first;
boolean cbFirst;
if (argc != 4)
usage();
first = argv[1];
xaName = argv[2];
newName = argv[3];
if (sameWord("elegans", first))
cbFirst = FALSE;
else if (sameWord("briggsae", first))
cbFirst = TRUE;
else
usage();
dnaUtilOpen();
intronHash = newHash(0);
out = mustOpen(newName, "w");
xaFile = mustOpen(xaName, "r");
while ((xa = xaReadNext(xaFile, FALSE)) != NULL)
{
char *s;
if (!cbFirst)
{
char *swaps;
int swapi;
char swapc;
uglyf("Swapping....\n");
swaps = xa->query;
xa->query = xa->target;
xa->target = swaps;
swapi = xa->qStart;
xa->qStart = xa->tStart;
xa->tStart = swapi;
swapi = xa->qEnd;
xa->qEnd = xa->tEnd;
xa->tEnd = swapi;
swapc = xa->qStrand;
xa->qStrand = xa->tStrand;
xa->tStrand = swapc;
swaps = xa->qSym;
xa->qSym = xa->tSym;
xa->tSym = swaps;
swapSym(xa->hSym, xa->symCount);
}
uglyf("%d query %s target %s\n", count, xa->query, xa->target);
s = chromFromPath(xa->target);
freeMem(xa->target);
xa->target = s;
if (++count % 500 == 0)
printf("Processing %d\n", count);
gaps = findLargeGaps(xa, gapList);
gapList = slCat(gaps, gapList);
xaAliFree(xa);
}
slReverse(&gapList);
report(out, "Processing took %f seconds\n", (clock1000()-startTime)*0.001);
reportGaps(gapList, out);
printAllHistograms(out);
calcCeHomoCount();
printHomologousEndStats(out);
printSameIntronStats(out);
return 0;
}
开发者ID:davidhoover,项目名称:kent,代码行数:72,代码来源:newIntron.c
示例12: txGeneCanonical
void txGeneCanonical(char *codingCluster, char *infoFile,
char *noncodingGraph, char *genesBed, char *nearCoding,
char *outCanonical, char *outIsoforms, char *outClusters)
/* txGeneCanonical - Pick a canonical version of each gene - that is the form
* to use when just interested in a single splicing varient. Produces final
* transcript clusters as well. */
{
/* Read in input into lists in memory. */
struct txCluster *coding, *codingList = txClusterLoadAll(codingCluster);
struct txGraph *graph, *graphList = txGraphLoadAll(noncodingGraph);
struct bed *bed, *nextBed, *bedList = bedLoadNAll(genesBed, 12);
struct txInfo *info, *infoList = txInfoLoadAll(infoFile);
struct bed *nearList = bedLoadNAll(nearCoding, 12);
/* Make hash of all beds. */
struct hash *bedHash = hashNew(18);
for (bed = bedList; bed != NULL; bed = bed->next)
hashAdd(bedHash, bed->name, bed);
/* Make has of all info. */
struct hash *infoHash = hashNew(18);
for (info = infoList; info != NULL; info = info->next)
hashAdd(infoHash, info->name, info);
/* Make a binKeeper structure that we'll populate with coding genes. */
struct hash *sizeHash = minChromSizeFromBeds(bedList);
struct hash *keeperHash = minChromSizeKeeperHash(sizeHash);
/* Make list of coding genes and toss them into binKeeper.
* This will eat up bed list, but bedHash is ok. */
struct gene *gene, *geneList = NULL;
for (coding = codingList; coding != NULL; coding = coding->next)
{
gene = geneFromCluster(coding, bedHash, infoHash);
slAddHead(&geneList, gene);
struct binKeeper *bk = hashMustFindVal(keeperHash, gene->chrom);
binKeeperAdd(bk, gene->start, gene->end, gene);
}
/* Go through near-coding genes and add them to the coding gene
* they most overlap. */
for (bed = nearList; bed != NULL; bed = nextBed)
{
nextBed = bed->next;
gene = mostOverlappingGene(keeperHash, bed);
if (gene == NULL)
errAbort("%s is near coding, but doesn't overlap any coding!?", bed->name);
geneAddBed(gene, bed);
}
/* Add non-coding genes. */
for (graph = graphList; graph != NULL; graph = graph->next)
{
gene = geneFromGraph(graph, bedHash);
slAddHead(&geneList, gene);
}
/* Sort so it all looks nicer. */
slSort(&geneList, geneCmp);
/* Open up output files. */
FILE *fCan = mustOpen(outCanonical, "w");
FILE *fIso = mustOpen(outIsoforms, "w");
FILE *fClus = mustOpen(outClusters, "w");
/* Loop through, making up gene name, and writing output. */
int geneId = 0;
for (gene = geneList; gene != NULL; gene = gene->next)
{
/* Make up name. */
char name[16];
safef(name, sizeof(name), "g%05d", ++geneId);
/* Reverse transcript list just to make it look better. */
slReverse(&gene->txList);
/* Write out canonical file output */
bed = hashMustFindVal(bedHash, gene->niceTx->name);
fprintf(fCan, "%s\t%d\t%d\t%d\t%s\t%s\n",
bed->chrom, bed->chromStart, bed->chromEnd, geneId,
gene->niceTx->name, gene->niceTx->name);
/* Write out isoforms output. */
for (bed = gene->txList; bed != NULL; bed = bed->next)
fprintf(fIso, "%d\t%s\n", geneId, bed->name);
/* Write out cluster output, starting with bed 6 standard fields. */
fprintf(fClus, "%s\t%d\t%d\t%s\t%d\t%c\t",
gene->chrom, gene->start, gene->end, name, 0, gene->strand);
/* Write out thick-start/thick end. */
if (gene->isCoding)
{
int thickStart = gene->end, thickEnd = gene->start;
for (bed = gene->txList; bed != NULL; bed = bed->next)
{
if (bed->thickStart < bed->thickEnd)
{
thickStart = min(thickStart, bed->thickStart);
thickEnd = max(thickEnd, bed->thickEnd);
//.........这里部分代码省略.........
开发者ID:CEpBrowser,项目名称:CEpBrowser--from-UCSC-CGI-BIN,代码行数:101,代码来源:txGeneCanonical.c
示例13: loadSimpleBed
//.........这里部分代码省略.........
char *topTable = NULL;
if (tg->bedSize <= 3)
loader = bedLoad3;
else if (tg->bedSize == 4)
loader = bedLoad;
else if (tg->bedSize == 5)
loader = bedLoad5;
else
loader = bedLoad6;
// pairedTagAlign loader is required for base coloring using sequence from seq1 & seq2
// after removing optional bin column, this loader assumes seq1 and seq2 are in
// row[6] and row[7] respectively of the sql result.
if ((setting = trackDbSetting(tg->tdb, BASE_COLOR_USE_SEQUENCE))
&& sameString(setting, "seq1Seq2"))
loader = bedLoadPairedTagAlign;
/* limit to a specified count of top scoring items.
* If this is selected, it overrides selecting item by specified score */
if ((setting = trackDbSettingClosestToHome(tg->tdb, "filterTopScorers")) != NULL)
{
wordCt = chopLine(cloneString(setting), words);
if (wordCt >= 3)
{
doScoreCtFilter = cartUsualBooleanClosestToHome(cart, tg->tdb, FALSE,
"filterTopScorersOn",sameString(words[0], "on"));
scoreFilterCt = cartUsualIntClosestToHome(cart, tg->tdb, FALSE,
"filterTopScorersCt", atoi(words[1]));
topTable = words[2];
/* if there are not too many rows in the table then can define */
/* top table as the track or subtrack table */
if (sameWord(topTable, "self"))
topTable = cloneString(tg->table);
}
}
/* Get list of items */
if (tg->isBigBed)
{
char *scoreFilter = cartOrTdbString(cart, tg->tdb, "scoreFilter", NULL);
if (scoreFilter != NULL || tg->visibility != tvDense)
{
struct lm *lm = lmInit(0);
struct bigBedInterval *bb, *bbList = bigBedSelectRange(tg, chromName, winStart, winEnd, lm);
char *bedRow[32];
char startBuf[16], endBuf[16];
int minScore = 0;
if (scoreFilter)
minScore = atoi(scoreFilter);
for (bb = bbList; bb != NULL; bb = bb->next)
{
bigBedIntervalToRow(bb, chromName, startBuf, endBuf, bedRow, ArraySize(bedRow));
bed = loader(bedRow);
if (scoreFilter == NULL || bed->score >= minScore)
slAddHead(&list, bed);
}
lmCleanup(&lm);
}
}
else
{
struct sqlResult *sr = NULL;
/* limit to items above a specified score */
char *scoreFilterClause = getScoreFilterClause(cart, tg->tdb,NULL);
if (doScoreCtFilter && (topTable != NULL) && hTableExists(database, topTable))
{
safef(query, sizeof(query),"select * from %s order by score desc limit %d",
topTable, scoreFilterCt);
sr = sqlGetResult(conn, query);
rowOffset = hOffsetPastBin(database, hDefaultChrom(database), topTable);
}
else if(scoreFilterClause != NULL && tg->bedSize >= 5)
{
sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, scoreFilterClause, &rowOffset);
}
else
{
sr = hRangeQuery(conn, tg->table, chromName, winStart, winEnd, NULL, &rowOffset);
}
freeMem(scoreFilterClause);
while ((row = sqlNextRow(sr)) != NULL)
{
bed = loader(row+rowOffset);
slAddHead(&list, bed);
}
sqlFreeResult(&sr);
}
if (doScoreCtFilter)
{
/* filter out items not in this window */
struct bed *newList = bedFilterListInRange(list, NULL, chromName, winStart, winEnd);
list = newList;
}
slReverse(&list);
hFreeConn(&conn);
tg->items = list;
}
开发者ID:CEpBrowser,项目名称:CEpBrowser--from-UCSC-CGI-BIN,代码行数:101,代码来源:bedTrack.c
示例14: filterBed
//.........这里部分代码省略.........
for (fil = mud->filterList; fil != NULL; fil = fil->next)
{
struct hash *hash = fil->hash;
int wordIx, wordCount;
char *words[128];
if (hash != NULL)
{
boolean anyWild;
char *dupPat = cloneString(fil->pattern);
wordCount = chopLine(dupPat, words);
for (wordIx=0; wordIx <wordCount; ++wordIx)
{
char *pattern = cloneString(words[wordIx]);
if (lastChar(pattern) != '*')
{
int len = strlen(pattern)+1;
pattern = needMoreMem(pattern, len, len+1);
pattern[len-1] = '*';
}
anyWild = (strchr(pattern, '*') != NULL || strchr(pattern, '?') != NULL);
touppers(pattern);
for(lf = *pLfList; lf != NULL; lf=lf->next)
{
char copy[SMALLBUF];
boolean gotMatch;
safef(copy, sizeof(copy), "%s", lf->name);
touppers(copy);
if (anyWild)
gotMatch = wildMatch(pattern, copy);
else
gotMatch = sameString(pattern, copy);
if (gotMatch)
{
hashAdd(hash, lf->name, NULL);
}
}
freez(&pattern);
}
freez(&dupPat);
}
}
/* Scan through linked features coloring and or including/excluding ones that
* match filter. */
for (lf = *pLfList; lf != NULL; lf = next)
{
boolean passed = andLogic;
next = lf->next;
for (fil = mud->filterList; fil != NULL; fil = fil->next)
{
if (fil->hash != NULL)
{
if (hashLookup(fil->hash, lf->name) == NULL)
{
if (andLogic)
passed = FALSE;
}
else
{
if (!andLogic)
passed = TRUE;
}
}
}
if (passed ^ isExclude)
{
slAddHead(&newList, lf);
if (colorIx > 0)
lf->filterColor = colorIx;
}
else
{
slAddHead(&oldList, lf);
}
}
slReverse(&newList);
slReverse(&oldList);
if (colorIx > 0)
{
/* Draw stuff that passes filter first in full mode, last in dense. */
if (tg->visibility == tvDense)
{
newList = slCat(oldList, newList);
}
else
{
newList = slCat(newList, oldList);
}
}
*pLfList = newList;
tg->limitedVisSet = FALSE; /* Need to recalculate this after filtering. */
/* Free up hashes, etc. */
for (fil = mud->filterList; fil != NULL; fil = fil->next)
{
hashFree(&fil->hash);
}
}
开发者ID:CEpBrowser,项目名称:CEpBrowser--from-UCSC-CGI-BIN,代码行数:101,代码来源:bedTrack.c
示例15: hashNew
struct mafAli *mafFromBed12(char *database, char *track, struct bed *bed,
struct slName *orgList)
/* Construct a maf out of exons in bed. */
{
/* Loop through all block in bed, collecting a list of mafs, one
* for each block. While we're at make a hash of all species seen. */
struct hash *speciesHash = hashNew(0);
struct mafAli *mafList = NULL, *maf, *bigMaf;
struct mafComp *comp, *bigComp;
int totalTextSize = 0;
int i;
for (i=0; i<bed->blockCount; ++i)
{
int start = bed->chromStart + bed->chromStarts[i];
int end = start + bed->blockSizes[i];
if (thickOnly)
{
start = max(start, bed->thickStart);
end = min(end, bed->thickEnd);
}
if (start < end)
{
maf = hgMafFrag(database, track, bed->chrom, start, end, '+',
database, NULL);
slAddHead(&mafList, maf);
for (comp = maf->components; comp != NULL; comp = comp->next)
hashStore(speciesHash, comp->src);
totalTextSize += maf->textSize;
}
}
slReverse(&mafList);
/* Add species in order list too */
struct slName *org;
for (org = orgList; org != NULL; org = org->next)
hashStore(speciesHash, org->name);
/* Allocate memory for return maf that contains all blocks concatenated together.
* Also fill in components with any species seen at all. */
AllocVar(bigMaf);
bigMaf->textSize = totalTextSize;
struct hashCookie it = hashFirst(speciesHash);
struct hashEl *hel;
while ((hel = hashNext(&it)) != NULL)
{
AllocVar(bigComp);
bigComp->src = cloneString(hel->name);
bigComp->text = needLargeMem(totalTextSize + 1);
memset(bigComp->text, '.', totalTextSize);
bigComp->text[totalTextSize] = 0;
bigComp->strand = '+';
bigComp->srcSize = totalTextSize; /* It's safe if a bit of a lie. */
hel->val = bigComp;
slAddHead(&bigMaf->components, bigComp);
}
/* Loop through maf list copying in data. */
int textOffset = 0;
for (maf = mafList; maf != NULL; maf = maf->next)
{
for (comp = maf->components; comp != NULL; comp = comp->next)
{
bigComp = hashMustFindVal(speciesHash, comp->src);
memcpy(bigComp->text + textOffset, comp->text, maf->textSize);
bigComp->size += comp->size;
}
textOffset += maf->textSize;
}
/* Cope with strand of darkness. */
if (bed->strand[0] == '-')
{
for (comp = bigMaf->components; comp != NULL; comp = comp->next)
reverseComplement(comp->text, bigMaf->textSize);
}
/* If got an order list then reorder components according to it. */
if (orgList != NULL)
{
struct mafComp *newList = NULL;
for (org = orgList; org != NULL; org = org->next)
{
comp = hashMustFindVal(speciesHash, org->name);
slAddHead(&newList, comp);
}
slReverse(&newList);
bigMaf->components = newList;
}
/* Rename our own component to bed name */
comp = hashMustFindVal(speciesHash, database);
freeMem(comp->src);
comp->src = cloneString(bed->name);
/* Clean up and go home. */
hashFree(&speciesHash);
mafAliFreeList(&mafList);
return bigMaf;
}
开发者ID:CEpBrowser,项目名称:CEpBrowser--from-UCSC-CGI-BIN,代码行数:100,代码来源:mafOrtholog.c
示例16: rangeTreeNew
struct bed *breakUpBedAtCdsBreaks(struct cdsEvidence *cds, struct bed *bed)
/* Create a new broken-up that excludes part of gene between CDS breaks.
* Also jiggles cds->end coordinate to cope with the sequence we remove.
* Deals with transcript to genome coordinate mapping including negative
* strand. Be afraid, be very afraid! */
{
/* Create range tree covering all breaks. The coordinates here
* are transcript coordinates. While we're out it shrink outer CDS
* since we are actually shrinking transcript. */
struct rbTree *gapTree = rangeTreeNew();
int bedSize = bed->chromEnd - bed->chromStart;
struct lm *lm = gapTree->lm; /* Convenient place to allocate memory. */
int i, lastCds = cds->cdsCount-1;
for (i=0; i<lastCds; ++i)
{
int gapStart = cds->cdsStarts[i] + cds->cdsSizes[i];
int gapEnd = cds->cdsStarts[i+1];
int gapSize = gapEnd - gapStart;
cds->end -= gapSize;
rangeTreeAdd(gapTree, gapStart, gapEnd);
}
/* Get list of exons in bed, flipped to reverse strand if need be. */
struct range *exon, *exonList = bedToExonList(bed, lm);
if (bed->strand[0] == '-')
flipExonList(&exonList, bedSize);
/* Go through exon list, mapping each exon to transcript
* coordinates. Check if exon needs breaking up, and if
* so do so, as we copy it to new list. */
/* Copy exons to new list, breaking them up if need be. */
struct range *newList = NULL, *nextExon, *newExon;
int txStartPos = 0, txEndPos;
for (exon = exon
|
请发表评论