int read_population(FILE *f, long generation) { long i, j; get_line(buf, 256, f); psize = strtol(buf, (char **) NULL, 10); if ((seq = (SEQ *) malloc(psize * sizeof(SEQ))) == NULL) return (-1); for (i = 0; i < psize; i++) { if (gn_read_id(&(seq[i].node_id), f) < 0) { fprintf(stderr, "error reading genome ID %ld, generation %ld -- exit\n", i, generation); for (j = 0; j < i; j++) free_genome(&(seq[i].genome)); free(seq); return (-1); } gn_node_idstring(&(seq[i].node_id), seq[i].name); if (read_genome(f, &(seq[i].genome), 0) < 0) { fprintf(stderr, "error reading genome %ld, generation %ld -- exit\n", i, generation); for (j = 0; j < i; j++) free_genome(&(seq[i].genome)); free(seq); return (-1); } } return (0); }
int main (int argc, char** argv) { if (argc != 7) usage(argc, argv); string fasta_filename = argv[1]; string masks_filename = argv[2]; string scov_filename = argv[3]; out_file = argv[4]; window_size = atoi(argv[5]); num_bins = atoi(argv[6]); //fprintf(stderr,"Using window_size %d, num_bins %d\n",window_size,num_bins); double bins_lambdas[num_bins]; sequence = read_genome(fasta_filename); //read in fasta file //printf("Read in %d chars from %s\n",sequence_length,fasta_filename); ifstream inf; open_file_binary(inf, scov_filename); scov = new double[sequence.length()]; inf.read((char *) scov, sizeof(double) * sequence.length()); inf.close(); //read in the masks open_file_binary(inf, masks_filename); masks = new char[sequence.length()]; if (masks ==NULL) { fprintf(stderr,"Problem with allocating memory!\n"); exit(1); } inf.read(masks, sequence.length()); inf.close(); build_gc_bins(bins_lambdas); delete[] scov; delete[] masks; return 0; }
int write_generation_pirdna(FILE *infile, FILE *outfile, const char *fname, long generation, int code) { GENOME genome; GN_NODE_ID node; long i, psize; char name[80], comment[512]; get_line(buf, 256, infile); psize = strtol(buf, (char **) NULL, 10); for (i = 0; i < psize; i++) { if (gn_read_id(&node, infile) < 0) { fprintf(stderr, "error reading genome ID %ld, generation %ld -- exit\n", i, generation); exit (EXIT_FAILURE); } if (read_genome(infile, &genome, 0) < 0) { fprintf(stderr, "error reading genome %ld, generation %ld -- exit\n", i, generation); exit (EXIT_FAILURE); } gn_node_idstring(&node, name); sprintf(comment, "File: %s, generation: %ld, #%ld, length: %ld", fname, generation, i, genome.length); switch (code) { case CODE_DNA: write_pirdna(outfile, &genome, name, comment); break; case CODE_GC: write_pirbin(outfile, &genome, name, comment, "cg"); break; default: fprintf(stderr, "Code type %d unknown\n", code); free_genome(&genome); return (-1); } free_genome(&genome); } return (0); }
int read_genomes(FILE *genomefile, POPULATION *pop) { long i, j; get_line(buf, 256, genomefile); pop->size = strtol(buf, (char **) NULL, 10); if ((pop->seq = (SEQ *) malloc(pop->size * sizeof(SEQ))) == NULL) return (-1); for (i = 0; i < pop->size; i++) { if (gn_read_id(&(pop->seq[i].node_id), genomefile) < 0) { fprintf(stderr, "error reading genome ID %ld\n", i); for (j = 0; j < i; j++) free_genome(&(pop->seq[i].genome)); free(pop->seq); return (-1); } gn_node_idstring(&(pop->seq[i].node_id), pop->seq[i].name); if (read_genome(genomefile, &(pop->seq[i].genome), 0) < 0) { fprintf(stderr, "error reading genome %ld\n", i); for (j = 0; j < i; j++) free_genome(&(pop->seq[i].genome)); free(pop->seq); return (-1); } } pop->max_len = 0; for (i = 0; i < pop->size; i++) { if (pop->max_len < pop->seq[i].genome.length) pop-> max_len = pop->seq[i].genome.length; } return (0); }
/** Returns: -1 - if we need to terminate (EOF or mapping is not readable) 0 - if the line was processed correctly */ static int readline(FILE * fp){ char c; /* char red */ char name[MAX_NAME+1]; /* name of file */ char output_filename[1024]; int i; /* reused in few places */ FILE *fdw = NULL; int ret = 0; if((c=getc(fp))==EOF) return -1; lineNum++; while(c=='\r') c=getc(fp); if(c=='\n') return 0; /* read name */ i = 0; while(1){ name[i++]=c; if(i==MAX_NAME){ /* out of buffer - cut the name */ name[i]='\0'; break; } if((c=getc(fp))==EOF) return -1; if(c=='\n') return 0; /* ignore - not complete line */ while(c=='\r') c=getc(fp); if(c==FIELDS_DELIMITER){ name[i] = '\0'; break; } } /* skip the rest, 5 tabs, until genome. Exit in case of EOL and EOL */ for(i=0; i<5; i++){ while(1){ c=getc(fp); while(c=='\r') c=getc(fp); if(c==EOF) return -1; if(c=='\n') return 0; if(c==FIELDS_DELIMITER){ break; } } } /* Here we have genome ahead, so we can create the file */ create_filepath(name, output_filename); if(debug) printf("%s\n", output_filename); if((fdw = fopen(output_filename, "w")) == NULL){ fprintf(stderr, "Can't open output file %s. Please create target directory and verify write permissions\n", output_filename); return -1; } if(fputs(header(), fdw)<0){ fprintf(stderr, "Can't write into file: %s\n", strerror(errno)); return -1; } else{ ret = read_genome(fp, fdw); } fclose(fdw); return ret; }
int write_generation_phylipdna(FILE *infile, FILE *outfile, long generation, int code) { SEQ *seq; long i, j, l, psize, max_len; char name[80]; get_line(buf, 256, infile); psize = strtol(buf, (char **) NULL, 10); if ((seq = (SEQ *) malloc(psize * sizeof(SEQ))) == NULL) return (-1); for (i = 0; i < psize; i++) { if (gn_read_id(&(seq[i].node_id), infile) < 0) { fprintf(stderr, "error reading genome ID %ld, generation %ld -- exit\n", i, generation); for (j = 0; j < i; j++) free_genome(&(seq[i].genome)); free(seq); return (-1); } if (read_genome(infile, &(seq[i].genome), 0) < 0) { fprintf(stderr, "error reading genome %ld, generation %ld -- exit\n", i, generation); for (j = 0; j < i; j++) free_genome(&(seq[i].genome)); free(seq); return (-1); } } max_len = 0; for (i = 0; i < psize; i++) { if (max_len < seq[i].genome.length) max_len = seq[i].genome.length; } switch (code) { case CODE_DNA: fprintf(outfile, "%ld %ld\n", psize, max_len * 4); for (i = 0; i < psize; i++) { gn_node_idstring(&(seq[i].node_id), name); l = strlen(name); for (j = 0; j < 10; j++) { if (j < l) fputc(name[j], outfile); else fputc(' ', outfile); } for (j = 0; j < ((max_len < 13) ? max_len : 13); j++) { if (j < seq[i].genome.length) fprint_dnachars(outfile, seq[i].genome.g[j]); else fprintf(outfile, "----"); } fprintf(outfile, "\n"); } for (l = j; l < max_len; l += 15) { fprintf(outfile, "\n"); for (i = 0; i < psize; i++) { for (j = l; j < ((l + 15 < max_len) ? l + 15 : max_len); j++) { if (j < seq[i].genome.length) fprint_dnachars(outfile, seq[i].genome.g[j]); else fprintf(outfile, "----"); } fprintf(outfile, "\n"); } } break; case CODE_GC: fprintf(outfile, "%ld %ld\n", psize, max_len * 8); for (i = 0; i < psize; i++) { gn_node_idstring(&(seq[i].node_id), name); l = strlen(name); for (j = 0; j < 10; j++) { if (j < l) fputc(name[j], outfile); else fputc(' ', outfile); } for (j = 0; j < ((max_len < 7) ? max_len : 7); j++) { if (j < seq[i].genome.length) fprint_binchars(outfile, seq[i].genome.g[j], "cg"); else fprintf(outfile, "--------"); } fprintf(outfile, "\n"); } for (l = j; l < max_len; l += 8) { fprintf(outfile, "\n"); for (i = 0; i < psize; i++) { for (j = l; j < ((l + 8 < max_len) ? l + 8 : max_len); j++) { if (j < seq[i].genome.length) fprint_binchars(outfile, seq[i].genome.g[j], "cg"); else fprintf(outfile, "--------"); } fprintf(outfile, "\n"); } } break; default: fprintf(stderr, "Code type %d unknown\n", code); for (i = 0; i < psize; i++) free_genome(&(seq[i].genome)); free(seq); return (-1); } for (i = 0; i < psize; i++) free_genome(&(seq[i].genome)); free(seq); return (0); }