void gffToBed(char *inGff, char *outBed) /* gffToBed - Convert a gff file (gff1 or gff2) to bed. Not tested with gff3 */ { struct gffFile *gff = gffRead(inGff); FILE *f = mustOpen(outBed, "w"); char *exonFeature = bestExonFeature(gff); gffGroupLines(gff); separateGroupsByChromosome(gff); struct gffGroup *group; for (group = gff->groupList; group != NULL; group = group->next) { struct genePred *gp; if (gff->isGtf) gp = genePredFromGroupedGtf(gff, group, group->name, FALSE, FALSE); else gp = genePredFromGroupedGff(gff, group, group->name, exonFeature, FALSE, FALSE); if (gp != NULL) { assert(gp->txStart == gp->exonStarts[0]); struct bed *bed = bedFromGenePred(gp); bedTabOutN(bed, 12, f); bedFree(&bed); } } carefulClose(&f); }
static void gtfToGenePred(char *gtfFile, char *gpFile, char *infoFile) /* gtfToGenePred - convert a GTF file to a genePred.. */ { struct gffFile *gtf = gffRead(gtfFile); FILE *gpFh, *infoFh = NULL; struct gffGroup *group; if (!gtf->isGtf) errAbort("%s doesn't appear to be a GTF file (GFF not supported by this program)", gtfFile); gffGroupLines(gtf); gpFh = mustOpen(gpFile, "w"); if (infoFile != NULL) { infoFh = mustOpen(infoFile, "w"); fputs(infoHeader, infoFh); } if (!doSimple) for (group = gtf->groupList; group != NULL; group = group->next) if (inclGroup(group)) gtfGroupToGenePred(gtf, group, gpFh, infoFh); carefulClose(&gpFh); gffFileFree(>f); }
void gffIntoDatabase(char *database, char *fileName, char *table, int offset) /* Load a gff file into database. */ { struct gffFile *gff = gffFileNew(""); struct gffGroup *group; struct genePred *gpList = NULL, *gp; FILE *f; char *tabName = "genePred.tab"; /* Load fixed gff and convert it to genePred. */ gffFileAdd(gff, fileName, 0); gffGroupLines(gff); for (group = gff->groupList; group != NULL; group = group->next) { gp = genePredFromGroupedGff(gff, group, group->name, "exon", genePredCdsStatFld|genePredExonFramesFld, genePredGxfDefaults); if (gp != NULL) { slAddHead(&gpList, gp); genePredOffset(gp, offset); } } slSort(&gpList, genePredCmp); /* Create tab-delimited file. */ f = mustOpen(tabName, "w"); for (gp = gpList; gp != NULL; gp = gp->next) genePredTabOut(gp, f); carefulClose(&f); /* Load into database. */ loadIntoDatabase(database, createGenePred, "sanger22", tabName); }