void removeLowCovEdges (int lenCutoff, unsigned short covCutoff)
{
    unsigned int bal_ed;
    unsigned int arcRight_n, arcLeft_n;
    ARC *arcLeft, *arcRight;
    unsigned int i;
    int counter = 0;

    for (i = 1; i <= num_ed; i++)
    {
        if (edge_array[i].deleted || edge_array[i].cvg == 0 || edge_array[i].cvg > covCutoff * 10 || edge_array[i].length >= lenCutoff || EdSameAsTwin (i) || edge_array[i].length == 0)
        {
            continue;
        }

        bal_ed = getTwinEdge (i);
        arcRight = arcCount (i, &arcRight_n);
        arcLeft = arcCount (bal_ed, &arcLeft_n);

        if (arcLeft_n < 1 || arcRight_n < 1)
        {
            continue;
        }

        destroyEdge (i);
        counter++;
    }

    printf ("Remove low coverage(%d): %d inner edges destroyed\n", covCutoff, counter);
    removeDeadArcs ();
    linearConcatenate ();
    compactEdgeArray ();
}
void cutTipsInGraph (int cutLen, boolean strict)
{
    int flag = 1;
    unsigned int i;

    if (!cutLen)
    {
        cutLen = 2 * overlaplen;
    }

    //if(cutLen > 100) cutLen = 100;
    printf ("strict %d, cutLen %d\n", strict, cutLen);

    if (strict)
    {
        linearConcatenate ();
    }

    caseA = caseB = caseC = caseD = caseE = 0;

    while (flag)
    {
        flag = 0;

        for (i = 1; i <= num_ed; i++)
        {
            if (edge_array[i].deleted)
            {
                continue;
            }

            if (isUnreliableTip (i, cutLen, strict))
            {
                destroyEdge (i);
                flag++;
            }
        }

        printf ("a cutTipsInGraph lap, %d tips cut\n", flag);
    }

    removeDeadArcs ();

    if (strict)
    {
        printf ("case A %d, B %d C %d D %d E %d\n", caseA, caseB, caseC, caseD, caseE);
    }

    linearConcatenate ();
    compactEdgeArray ();
    printf("\n");
}
void removeWeakEdges (int lenCutoff, unsigned int multiCutoff)
{
    unsigned int bal_ed;
    unsigned int arcRight_n, arcLeft_n;
    ARC *arcLeft, *arcRight;
    unsigned int i;
    int counter = 0;

    for (i = 1; i <= num_ed; i++)
    {
        if (edge_array[i].deleted || edge_array[i].length == 0 || edge_array[i].length > lenCutoff || EdSameAsTwin (i))
        {
            continue;
        }

        bal_ed = getTwinEdge (i);
        arcRight = arcCount (i, &arcRight_n);

        if (arcRight_n > 1 || !arcRight || arcRight->multiplicity > multiCutoff)
        {
            continue;
        }

        arcLeft = arcCount (bal_ed, &arcLeft_n);

        if (arcLeft_n > 1 || !arcLeft || arcLeft->multiplicity > multiCutoff)
        {
            continue;
        }

        destroyEdge (i);
        counter++;
    }

    printf ("%d weak inner edges destroyed\n", counter);
    removeDeadArcs ();
    /*
       linearConcatenate();
       compactEdgeArray();
     */
}
Exemplo n.º 4
0
void solveReps()
{
	unsigned int i;
	unsigned int repTime;
	int counter = 0;
	boolean flag;
	//debugging(30514);
	extraEdgeNum = num_ed + 1;

	for ( i = 1; i <= num_ed; i++ )
	{
		repTime = solvable ( i );

		if ( repTime == 0 )
			{ continue; }

		flag = interferingCheck ( i, repTime );

		if ( flag )
			{ continue; }

		split1edge ( i, repTime );
		counter ++;  //+= 2*(repTime-1);

		if ( EdSmallerThanTwin ( i ) )
			{ i++; }
	}

	printf ( "%d repeats solvable, %d more edges\n", counter, extraEdgeNum - 1 - num_ed );
	num_ed = extraEdgeNum - 1;
	removeDeadArcs();

	if ( markersArray )
	{
		free ( ( void * ) markersArray );
		markersArray = NULL;
	}
}