68684c7c01875a771889d1fd03354f58bae34427 braney Tue Oct 31 15:01:59 2023 -0700 rename bedCollect to chainArrangeCollect in response to code review diff --git src/utils/bedCollect/bedCollect.c src/utils/bedCollect/bedCollect.c deleted file mode 100644 index ea61e9f..0000000 --- src/utils/bedCollect/bedCollect.c +++ /dev/null @@ -1,110 +0,0 @@ -/* bedCollect - collect overlapping beds into a single bed. */ -#include "common.h" -#include "linefile.h" -#include "hash.h" -#include "options.h" -#include "basicBed.h" -#include "dystring.h" - -void usage() -/* Explain usage and exit. */ -{ -errAbort( - "bedCollect - collect overlapping beds into a chainArrange.as structure\n" - "usage:\n" - " bedCollect input.bed output.bed\n" - "note: input beds need to be sorted with bedSort\n" - "options:\n" - " -exact overlapping blocks must be exactly the same range and score\n" - ); -} - -boolean exact; // overlapping blocks must be exactly the same range and score - -/* Command line validation table. */ -static struct optionSpec options[] = { - {"exact", OPTION_BOOLEAN}, - {NULL, 0}, -}; - -static void outBed(FILE *f, struct bed *bed, struct hash *nameHash) -{ -static int count = 0; -struct slName *names = hashSlNameFromHash(nameHash); -int sizeQuery = bed->score; -bed->score = slCount(names); -struct dyString *dy = newDyString(100); -for(; names; names = names->next) - { - dyStringAppend(dy, names->name); - if (names->next) - dyStringAppend(dy, ","); - } -bed->name = dy->string; -//fprintf(f, "%s %d %d arr%d %d + %d %d 0 %s %d %d-%dbp\n", bed->chrom, bed->chromStart, bed->chromEnd, count++, bed->score, bed->chromStart, bed->chromEnd, bed->name, sizeQuery, bed->score, sizeQuery ); -fprintf(f, "%s %d %d arr%d %d + %d %d 0 %s %d\n", bed->chrom, bed->chromStart, bed->chromEnd, count++, bed->score, bed->chromStart, bed->chromEnd, bed->name, sizeQuery); -//bedOutputN(bed, 5, f, '\t', '\n'); -} - -void bedCollect(char *inFile, char *outFile) -/* bedCollect - collect overlapping beds into a single bed. */ -{ -struct bed *allBeds = bedLoadAll(inFile); -FILE *f = mustOpen(outFile, "w"); -struct bed *bed, *prevBed = allBeds; -prevBed->score = 1; -struct hash *nameHash = newHash(0); -hashStore(nameHash, prevBed->name); - -if (exact) - { - for(bed = prevBed->next; bed; bed = bed->next) - { - if (differentString(prevBed->chrom, bed->chrom) || (prevBed->chromStart != bed->chromStart) || (prevBed->chromEnd != bed->chromEnd) || (prevBed->score != bed->score)) - { - outBed(f, prevBed, nameHash); - - freeHash(&nameHash); - nameHash = newHash(0); - prevBed = bed; - hashStore(nameHash, bed->name); - } - else - { - hashStore(nameHash, bed->name); - } - } - } -else - { - for(bed = prevBed->next; bed; bed = bed->next) - { - if (differentString(prevBed->chrom, bed->chrom) || (prevBed->chromEnd <= bed->chromStart)) - { - outBed(f, prevBed, nameHash); - - freeHash(&nameHash); - nameHash = newHash(0); - prevBed = bed; - hashStore(nameHash, bed->name); - } - else - { - hashStore(nameHash, bed->name); - prevBed->chromEnd = (bed->chromEnd > prevBed->chromEnd) ? bed->chromEnd : prevBed->chromEnd; - } - } - outBed(f, prevBed, nameHash); - } -} - -int main(int argc, char *argv[]) -/* Process command line. */ -{ -optionInit(&argc, argv, options); -if (argc != 3) - usage(); -exact = optionExists("exact"); -bedCollect(argv[1], argv[2]); -return 0; -}