static struct mafAli *getRefAli(char *database, char *chrom, int start, int end) { struct mafAli *ali; struct mafComp *comp; char buffer[1024]; AllocVar(ali); AllocVar(comp); ali->components = comp; ali->textSize = end - start; safef(buffer, sizeof buffer, "%s.%s", database, chrom); comp->src = cloneString(buffer); comp->start = start; comp->strand = '+'; comp->size = end - start; struct dnaSeq *seq = hChromSeqMixed(database, chrom, start , end); comp->text = cloneString(seq->dna); freeDnaSeq(&seq); return ali; }
void ultraPcrRegions(char *database, char *bedFile, char *outFa) /* ultraPcrRegions - Get regions to PCR up and some surrounding sequence. */ { int extraSize = 1000; FILE *f = mustOpen(outFa, "w"); struct bed *bed, *bedList = bedLoadNAll(bedFile, 4); hSetDb(database); for (bed = bedList; bed != NULL; bed = bed->next) { int bedSize = bed->chromEnd - bed->chromStart; int chromSize = hChromSize(bed->chrom); int seqSize; int seqStart = bed->chromStart - extraSize; int seqEnd = bed->chromEnd + extraSize; int firstParenPos, secondParenPos; struct dyString *dy; char fileName[512]; struct dnaSeq *seq; if (seqStart < 0) seqStart = 0; if (seqEnd > chromSize) seqEnd = chromSize; seqSize = seqEnd - seqStart; firstParenPos = bed->chromStart - seqStart; secondParenPos = firstParenPos + bedSize; seq = hChromSeqMixed(bed->chrom, seqStart, seqEnd); dy = dyStringNew(seqSize+2); dyStringAppendN(dy, seq->dna, firstParenPos); dyStringAppendC(dy, '('); dyStringAppendN(dy, seq->dna+firstParenPos, secondParenPos-firstParenPos); dyStringAppendC(dy, ')'); dyStringAppendN(dy, seq->dna+secondParenPos, seqSize - secondParenPos); faWriteNext(f, bed->name, dy->string, dy->stringSize); } carefulClose(&f); }