Exemplo n.º 1
0
static void thread_mark ( KmerSet * set, unsigned char thrdID )
{
	int i, in_num, out_num, cvgSingle;
	int l_cvg, r_cvg;
	kmer_t * rs;
	long long counter = 0;
	set->iter_ptr = 0;

	while ( set->iter_ptr < set->size )
	{
		if ( !is_kmer_entity_null ( set->flags, set->iter_ptr ) )
		{
			in_num = out_num = l_cvg = r_cvg = 0;
			rs = set->array + set->iter_ptr;

			for ( i = 0; i < 4; i++ )
			{
				cvgSingle = get_kmer_left_cov ( *rs, i );

				if ( cvgSingle > 0 )
				{
					in_num++;
					l_cvg += cvgSingle;
				}

				cvgSingle = get_kmer_right_cov ( *rs, i );

				if ( cvgSingle > 0 )
				{
					out_num++;
					r_cvg += cvgSingle;
				}
			}

			if ( rs->single )
			{
				kmerFreq[thrdID][1]++;
				counter++;
			}
			else
			{
				kmerFreq[thrdID][ ( l_cvg > r_cvg ? l_cvg : r_cvg )]++;
			}

			if ( in_num == 1 && out_num == 1 )
			{
				rs->linear = 1;
				tips[thrdID]++;
			}
		}

		set->iter_ptr++;
	}

	//printf("%lld single nodes, %lld linear\n",counter,tips[thrdID]);
}
Exemplo n.º 2
0
static void thread_delow ( KmerSet * set, unsigned char thrdID )
{
	int i, in_num, out_num, cvgSingle;
	int l_cvg, r_cvg;
	kmer_t * rs;
	set->iter_ptr = 0;

	while ( set->iter_ptr < set->size )
	{
		if ( !is_kmer_entity_null ( set->flags, set->iter_ptr ) )
		{
			in_num = out_num = l_cvg = r_cvg = 0;
			rs = set->array + set->iter_ptr;

			for ( i = 0; i < 4; i++ )
			{
				cvgSingle = get_kmer_left_cov ( *rs, i );

				if ( cvgSingle > 0 && cvgSingle <= deLowKmer )
				{
					set_kmer_left_cov ( *rs, i, 0 );
				}

				cvgSingle = get_kmer_right_cov ( *rs, i );

				if ( cvgSingle > 0 && cvgSingle <= deLowKmer )
				{
					set_kmer_right_cov ( *rs, i, 0 );
				}
			}

			if ( rs->l_links == 0 && rs->r_links == 0 )
			{
				rs->deleted = 1;
				tips[thrdID]++;
			}
		}

		set->iter_ptr++;
	}

	//printf("%lld single nodes, %lld linear\n",counter,tips[thrdID]);
}
Exemplo n.º 3
0
void output_vertex ( char * outfile )
{
	char    temp[256];
	FILE * fp;
	int i;
	kmer_t * node;
	KmerSet * set;
	sprintf ( temp, "%s.vertex", outfile );
	fp = ckopen ( temp, "w" );

	for ( i = 0; i < thrd_num; i++ )
	{
		set = KmerSets[i];
		set->iter_ptr = 0;

		while ( set->iter_ptr < set->size )
		{
			if ( !is_kmer_entity_null ( set->flags, set->iter_ptr ) )
			{
				node = set->array + set->iter_ptr;
				output1vt ( node, fp );
			}

			set->iter_ptr ++;
		}
	}

	fprintf ( fp, "\n" );
	printf ( "%d vertex outputed\n", outvCounter );
	fclose ( fp );
	sprintf ( temp, "%s.preGraphBasic", outfile );
	fp = ckopen ( temp, "w" );
	fprintf ( fp, "VERTEX %d K %d\n", outvCounter, overlaplen );
	fprintf ( fp, "\nEDGEs %d\n", num_ed );
	fprintf ( fp, "\nMaxReadLen %d MinReadLen %d MaxNameLen %d\n", maxReadLen4all, minReadLen, maxNameLen );
	fclose ( fp );
}
Exemplo n.º 4
0
void make_edge ( FILE * fp )
{
	int i = 0;
	kmer_t * node1;
	KmerSet * set;
	KmerSetsPatch = ( KmerSet ** ) ckalloc ( thrd_num * sizeof ( KmerSet * ) );

	for ( i = 0; i < thrd_num; i++ )
		{ KmerSetsPatch[i] = init_kmerset ( 1000, K_LOAD_FACTOR ); }

	nodeStack = ( STACK * ) createStack ( KMERPTBLOCKSIZE, sizeof ( KMER_PT ) );
	bal_nodeStack = ( STACK * ) createStack ( KMERPTBLOCKSIZE, sizeof ( KMER_PT ) );
	edge_c = nodeCounter = 0;
	edgeCounter = 0;

	for ( i = 0; i < thrd_num; i++ )
	{
		set = KmerSets[i];
		set->iter_ptr = 0;

		while ( set->iter_ptr < set->size )
		{
			if ( !is_kmer_entity_null ( set->flags, set->iter_ptr ) )
			{
				node1 = set->array + set->iter_ptr;
				startEdgeFromNode ( node1, fp );
			}

			set->iter_ptr ++;
		}
	}

	printf ( "%d (%d) edges %d extra nodes\n", edge_c, edgeCounter, nodeCounter );
	freeStack ( nodeStack );
	freeStack ( bal_nodeStack );
}