Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
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;

}
Ejemplo n.º 3
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);
}
Ejemplo n.º 4
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);
}
Ejemplo n.º 5
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;
}
Ejemplo n.º 6
0
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);
}