/* cluster.c Compile with: gcc -g cluster.c -lm -o cluster Example run: cluster hs2.l4.list > hs2.l4.c Clusters regions reported by kkno/kunk/(infocon/phylogen/agree). */ #include #include #include #include #define Usage "%s \n" #define LARGE_NUMBER 99999999 #define DEFAULT_MAX_GAP 0 void fatalf(char *msg, char *val); FILE *ckopen(char *name, char *mode); void *ckalloc(size_t amount); int main(int argc, char *argv[]) { char buffer[1000]; int cFrom[10000], cTo[10000], MAX_GAP; int k, i, from, to; FILE *fp; if ((argc!=2) && (argc!=3)) fatalf(Usage,argv[0]); if ((argc==3) && !strncmp(argv[2],"G=",2)) MAX_GAP = atoi(argv[2]+2); else MAX_GAP = DEFAULT_MAX_GAP; fp = ckopen(argv[1],"r"); k = -1; cFrom[0] = cTo[0] = LARGE_NUMBER; while (fgets(buffer,1000,fp)!=NULL) { if (!isdigit(buffer[0])) continue; sscanf(buffer, "%d %d", &from, &to); if ((k>=0) && (from<=cTo[k]+1+MAX_GAP)) /* overlap -- extend cluster */ cTo[k] = to; else { /* new cluster */ cFrom[++k] = from; cTo[k] = to; } } printf("#clusters: %d\n#========================\n",++k); for (i=0; i