Пример #1
0
int _tmain(int argc, char* argv[])
{
    CKMCFile kmer_data_base;
    int32 i;
    uint32 min_count_to_set = 0;
    uint32 max_count_to_set = 0;
    std::string input_file_name;
    std::string output_file_name;

    FILE * out_file;
    //------------------------------------------------------------
    // Parse input parameters
    //------------------------------------------------------------
    if(argc < 3)
    {
        print_info();
        return EXIT_FAILURE;
    }

    for(i = 1; i < argc; ++i)
    {
        if(argv[i][0] == '-')
        {
            if(strncmp(argv[i], "-ci", 3) == 0)
                min_count_to_set = atoi(&argv[i][3]);
            else if(strncmp(argv[i], "-cx", 3) == 0)
                max_count_to_set = atoi(&argv[i][3]);
        }
        else
            break;
    }

    if(argc - i < 2)
    {
        print_info();
        return EXIT_FAILURE;
    }

    input_file_name = std::string(argv[i++]);
    output_file_name = std::string(argv[i]);

    if((out_file = fopen (output_file_name.c_str(),"wb")) == NULL)
    {
        print_info();
        return EXIT_FAILURE;
    }

    setvbuf(out_file, NULL ,_IOFBF, 1 << 24);

    //------------------------------------------------------------------------------
    // Open kmer database for listing and print kmers within min_count and max_count
    //------------------------------------------------------------------------------

    if (!kmer_data_base.OpenForListing(input_file_name))
    {
        print_info();
        return EXIT_FAILURE ;
    }
    else
    {
        uint32 _kmer_length;
        uint32 _mode;
        uint32 _counter_size;
        uint32 _lut_prefix_length;
        uint32 _signature_len;
        uint32 _min_count;
        uint32 _max_count;
        uint64 _total_kmers;

        kmer_data_base.Info(_kmer_length, _mode, _counter_size, _lut_prefix_length, _signature_len, _min_count, _max_count, _total_kmers);

        float counter;
        std::string str;

        CKmerAPI kmer_object(_kmer_length);

        if(min_count_to_set)
            if (!(kmer_data_base.SetMinCount(min_count_to_set)))
                return EXIT_FAILURE;
        if(max_count_to_set)
            if (!(kmer_data_base.SetMaxCount(max_count_to_set)))
                return EXIT_FAILURE;

        while (kmer_data_base.ReadNextKmer(kmer_object, counter))
        {
            kmer_object.to_string(str);

            if(_mode)
                fprintf(out_file, "%s\t%f\n", str.c_str(), counter);
            else
                fprintf(out_file, "%s\t%d\n", str.c_str(), (int)counter);
        }

        fclose(out_file);
        kmer_data_base.Close();
    }

    return EXIT_SUCCESS;
}
Пример #2
0
int _tmain(int argc, char* argv[])
{
	CKMCFile kmer_data_base;
	int32 i;
	uint32 min_count_to_set = 0;
	uint32 max_count_to_set = 0;
	std::string input_file_name;
	std::string output_file_name;

	FILE * out_file;
	//------------------------------------------------------------
	// Parse input parameters
	//------------------------------------------------------------
	if(argc < 3)
	{
		print_info();
		return EXIT_FAILURE;
	}

	for(i = 1; i < argc; ++i)
	{
		if(argv[i][0] == '-')
		{	
			if(strncmp(argv[i], "-ci", 3) == 0)
				min_count_to_set = atoi(&argv[i][3]);
			else if(strncmp(argv[i], "-cx", 3) == 0)
					max_count_to_set = atoi(&argv[i][3]);
		}
		else
			break;
	}

	if(argc - i < 2)
	{ 
		print_info();
		return EXIT_FAILURE;
	}

	input_file_name = std::string(argv[i++]);
	output_file_name = std::string(argv[i]);

	if((out_file = fopen (output_file_name.c_str(),"wb")) == NULL)
	{
		print_info();
		return EXIT_FAILURE;
	}

	setvbuf(out_file, NULL ,_IOFBF, 1 << 24);

	//------------------------------------------------------------------------------
	// Open kmer database for listing and print kmers within min_count and max_count
	//------------------------------------------------------------------------------

	if (!kmer_data_base.OpenForListing(input_file_name))
	{
		print_info();
		return EXIT_FAILURE ;
	}
	else
	{
		uint32 _kmer_length;
		uint32 _mode;
		uint32 _counter_size;
		uint32 _lut_prefix_length;
		uint32 _signature_len;
		uint32 _min_count;
		uint32 _max_count;
		uint64 _total_kmers;

		kmer_data_base.Info(_kmer_length, _mode, _counter_size, _lut_prefix_length, _signature_len, _min_count, _max_count, _total_kmers);

		
		//std::string str;
		char str[1024];
		uint32 counter_len;
		
		CKmerAPI kmer_object(_kmer_length);
		
		if(min_count_to_set)
		if (!(kmer_data_base.SetMinCount(min_count_to_set)))
				return EXIT_FAILURE;
		if(max_count_to_set)
		if (!(kmer_data_base.SetMaxCount(max_count_to_set)))
				return EXIT_FAILURE;	

		if (_mode) //quake compatible mode
		{
			float counter;
			while (kmer_data_base.ReadNextKmer(kmer_object, counter))
			{
				kmer_object.to_string(str);
				str[_kmer_length] = '\t';				
				counter_len = CNumericConversions::Double2PChar(counter, 6, (uchar*)str + _kmer_length + 1);				
				str[_kmer_length + 1 + counter_len] = '\n';
				fwrite(str, 1, _kmer_length + counter_len + 2, out_file);			
			}
		}
		else
		{
			uint32 counter;
			while (kmer_data_base.ReadNextKmer(kmer_object, counter))
			{
				kmer_object.to_string(str);
				str[_kmer_length] = '\t';
				counter_len = CNumericConversions::Int2PChar(counter, (uchar*)str + _kmer_length + 1);
				str[_kmer_length + 1 + counter_len] = '\n';
				fwrite(str, 1, _kmer_length + counter_len + 2, out_file);
			}
		}
		
	
		fclose(out_file);
		kmer_data_base.Close();
	}

	return EXIT_SUCCESS; 
}