Ejemplo n.º 1
0
char * alternative_bases(char reference_base, char * bases_for_snp, int number_of_samples)
{
	int i;
	int num_alt_bases = 0;
	char * alt_bases = calloc(MAXIMUM_NUMBER_OF_ALT_BASES+1, sizeof(char));
	for(i=0; i< number_of_samples; i++ )
	{
    char current_base = bases_for_snp[i];
		if(current_base != reference_base)
		{
      if(is_unknown(current_base))
      {
        // VCF spec only allows ACGTN* for alts
        current_base = '*';
      }
      
			if(check_if_char_in_string(alt_bases, current_base, num_alt_bases) == 0)
			{
				if (num_alt_bases >= MAXIMUM_NUMBER_OF_ALT_BASES)
				{
					fprintf(stderr, "Unexpectedly large number of alternative bases found between sequences.  Please check input file is not corrupted\n\n");
					fflush(stderr);
					exit(EXIT_FAILURE);
				}
				alt_bases[num_alt_bases] = current_base;
				num_alt_bases++;
			}
		}
	}
  alt_bases[num_alt_bases] = '\0';
	return alt_bases;
}
Ejemplo n.º 2
0
char * alternative_bases(char reference_base, char * bases_for_snp, int number_of_samples)
{
	int i;
	int num_alt_bases = 0;
	char * alt_bases = calloc(MAXIMUM_NUMBER_OF_ALT_BASES+1, sizeof(char));
	for(i=0; i< number_of_samples; i++ )
	{
		if((bases_for_snp[i] != reference_base) && (bases_for_snp[i] != '-') && (toupper(bases_for_snp[i]) != 'N') )
		{
			if(check_if_char_in_string(alt_bases, bases_for_snp[i], num_alt_bases) == 0)
			{
				if (num_alt_bases >= MAXIMUM_NUMBER_OF_ALT_BASES)
				{
					fprintf(stderr, "Unexpectedly large number of alternative bases found between sequences.  Please check input file is not corrupted\n\n");
					fflush(stderr);
					exit(EXIT_FAILURE);
				}
				alt_bases[num_alt_bases] = bases_for_snp[i];
				num_alt_bases++;
			}
		}
	}
	return alt_bases;
}