void agpToFaOne(struct agpFrag **pAgpList, char *agpFile, char *agpSeq, char *seqDir, int lastPos, FILE *f) /* Given one sequence's worth of AGP in pAgpList, process it into FASTA * and write to f. */ { DNA *dna = NULL; slReverse(pAgpList); if (lastPos == 0) errAbort("%s not found in %s\n", agpSeq, agpFile); dna = needHugeMem(lastPos+1); memset(dna, 'n', lastPos); dna[lastPos] = 0; if (optionExists("simpleMulti")) { simpleMultiFillInSequence(0, seqDir, *pAgpList, dna, lastPos); } else if (optionExists("simpleMultiMixed")) { simpleMultiFillInSequence(1, seqDir, *pAgpList, dna, lastPos); } else if (optionExists("simple")) { simpleFillInSequence(seqDir, *pAgpList, dna, lastPos); } else { gsFillInSequence(seqDir, *pAgpList, dna, lastPos); } verbose(2,"Writing %s (%d bases)\n", agpSeq, lastPos); faWriteNext(f, agpSeq, dna, lastPos); agpFragFreeList(pAgpList); }
static void goldFree(struct track *tg) /* Free up goldTrackGroup items. */ { agpFragFreeList((struct agpFrag**)&tg->items); agpGapFreeList((struct agpGap**)&tg->customPt); }
void bedDown(char *database, char *table, char *faName, char *tabName) /* bedDown - Make stuff to find a BED format submission in a new version. */ { char query[512]; struct sqlConnection *conn = sqlConnect(database); struct sqlConnection *conn2 = sqlConnect(database); struct sqlResult *sr; char **row; struct bed bed; static char nibChrom[64]; int nibStart = 0; int nibSize = 0; int nibEnd = 0; int nibTargetSize = 512*1024; struct dnaSeq *nibSeq = NULL; int midPos; int chromSize; int s, e, sz; FILE *fa = mustOpen(faName, "w"); FILE *tab = mustOpen(tabName, "w"); FILE *nib = NULL; char nibFileName[512]; char seqName[512]; struct agpFrag *chromFragList = NULL, *frag, *fragsLeft = NULL; int fragPos; char *destName; char *destStrand; sqlSafef(query, sizeof query, "select chrom,chromStart,chromEnd,name from %s order by chrom,chromStart", table); sr = sqlGetResult(conn, query); while ((row = sqlNextRow(sr)) != NULL) { bedStaticLoad(row, &bed); /* Fix badly cased Exofish chromosomes mostly... */ if (sameString(bed.chrom, "chrna_random")) bed.chrom = "chrNA_random"; else if (sameString(bed.chrom, "chrul_random")) bed.chrom = "chrUL_random"; else if (sameString(bed.chrom, "chrx_random")) bed.chrom = "chrX_random"; else if (sameString(bed.chrom, "chry_random")) bed.chrom = "chrY_random"; else if (sameString(bed.chrom, "chrx")) bed.chrom = "chrX"; else if (sameString(bed.chrom, "chry")) bed.chrom = "chrY"; if (!sameString(bed.chrom, nibChrom)) { strcpy(nibChrom, bed.chrom); nibSize = nibStart = nibEnd = 0; sqlSafef(query, sizeof query, "select fileName from chromInfo where chrom = '%s'", bed.chrom); sqlQuickQuery(conn2, query, nibFileName, sizeof(nibFileName)); carefulClose(&nib); nibOpenVerify(nibFileName, &nib, &chromSize); agpFragFreeList(&chromFragList); chromFragList = fragsLeft = loadChromAgp(conn2, bed.chrom); printf("%s has %d bases in %d fragments\n", nibFileName, chromSize, slCount(chromFragList)); } midPos = (bed.chromStart + bed.chromEnd)/2; s = midPos - 200; if (s < 0) s = 0; e = midPos + 200; if (e > chromSize) e = chromSize; sz = e-s; if (rangeIntersection(s,e,nibStart,nibEnd) < sz) { freeDnaSeq(&nibSeq); nibStart = s; nibSize = nibTargetSize; if (nibSize < sz) nibSize = sz; nibEnd = nibStart + nibSize; if (nibEnd > chromSize) { nibEnd = chromSize; nibSize = nibEnd - nibStart; } nibSeq = nibLdPart(nibFileName, nib, chromSize, nibStart, nibSize); } if (findCoveringFrag(midPos, &fragsLeft, &frag, &fragPos)) { destName = frag->frag; destStrand = frag->strand; } else { destName = "?"; fragPos = 0; destStrand = "+"; warn("Couldn't find %s@%s:%d in agpFrag list", bed.name, bed.chrom, midPos); } fprintf(tab, "%s\t%s\t%s\t%d\t%d\t%d\t%d\t%s\t%s\t%d\n", bed.name, database, bed.chrom, bed.chromStart, bed.chromEnd - bed.chromStart, s - bed.chromStart, e-bed.chromStart, destName, destStrand, fragPos); sprintf(seqName, "%s.%s.%s.%d", bed.name, database, bed.chrom, bed.chromStart); faWriteNext(fa, seqName, nibSeq->dna + s - nibStart, sz); } freeDnaSeq(&nibSeq); sqlFreeResult(&sr); sqlDisconnect(&conn); sqlDisconnect(&conn2); }