示例#1
0
static char *eventTree_makeNewickStringP(Event *event) {
	int64_t i;
	char *cA = NULL;
	char *cA3;
	if(event_getChildNumber(event) > 0) {
		for(i=0;i<event_getChildNumber(event); i++) {
			char *cA2 = eventTree_makeNewickStringP(event_getChild(event, i));
			if(i > 0) {
				cA3 = st_malloc(sizeof(char)*(strlen(cA)+strlen(cA2)+2));
				sprintf(cA3, "%s,%s", cA, cA2);
				free(cA);
				cA = cA3;
			}
			else {
				cA = st_malloc(sizeof(char)*(strlen(cA2)+2));
				sprintf(cA, "(%s", cA2);
			}
			free(cA2);
		}
		cA3 = st_malloc(sizeof(char)*(strlen(cA) + strlen(event_getHeader(event)) + 30));
		sprintf(cA3, "%s)%s:%g", cA, event_getHeader(event), event_getBranchLength(event));
		free(cA);
		cA = cA3;
	}
	else {
		cA = st_malloc(sizeof(char)*(strlen(event_getHeader(event)) + 30));
		sprintf(cA, "%s:%g", event_getHeader(event), event_getBranchLength(event));
	}
	return cA;
}
示例#2
0
Hmm *hmm_constructEmpty(double pseudoExpectation, StateMachineType type) {
    Hmm *hmm = st_malloc(sizeof(Hmm));
    hmm->type = type;
    switch (type) {
    case fiveState:
    case fiveStateAsymmetric:
        hmm->stateNumber = 5;
        break;
    case threeState:
    case threeStateAsymmetric:
        hmm->stateNumber = 3;
        break;
    default:
        st_errAbort("Unrecognised state type: %i\n", type);
    }
    hmm->transitions = st_malloc(hmm->stateNumber * hmm->stateNumber * sizeof(double));
    for (int64_t i = 0; i < hmm->stateNumber * hmm->stateNumber; i++) {
        hmm->transitions[i] = pseudoExpectation;
    }
    hmm->emissions = st_malloc(hmm->stateNumber * SYMBOL_NUMBER_NO_N * SYMBOL_NUMBER_NO_N * sizeof(double));
    for (int64_t i = 0; i < hmm->stateNumber * SYMBOL_NUMBER_NO_N * SYMBOL_NUMBER_NO_N; i++) {
        hmm->emissions[i] = pseudoExpectation;
    }
    hmm->likelihood = 0.0;
    return hmm;
}
示例#3
0
Block *block_construct2(Name name, int64_t length,
		End *leftEnd, End *rightEnd,
		Flower *flower) {
	Block *block;
	block = st_malloc(sizeof(Block));
	block->rBlock = st_malloc(sizeof(Block));
	block->rBlock->rBlock = block;
	block->blockContents = st_malloc(sizeof(BlockContents));
	block->rBlock->blockContents = block->blockContents;

	block->orientation = 1;
	block->rBlock->orientation = 0;

	block->blockContents->name = name;
	block->blockContents->segments = stSortedSet_construct3(blockConstruct_constructP, NULL);
	block->blockContents->length = length;
	block->blockContents->flower = flower;

	block->leftEnd = leftEnd;
	end_setBlock(leftEnd, block);
	block->rBlock->leftEnd = end_getReverse(rightEnd);
	end_setBlock(rightEnd, block);

	flower_addBlock(flower, block);

	return block;
}
示例#4
0
static void test_stSet_getUnion(CuTest* testCase) {
    testSetup();
    // Check union of empty sets is empty
    stSet *set2 = stSet_construct();
    stSet *set3 = stSet_construct();
    stSet *set4 = stSet_getUnion(set2, set3);
    CuAssertTrue(testCase, stSet_size(set4) == 0);
    stSet_destruct(set2);
    stSet_destruct(set3);
    stSet_destruct(set4);
    // Check union of non empty set and empty set is non-empty
    set2 = stSet_construct();
    set3 = stSet_getUnion(set0, set2);
    CuAssertTrue(testCase, stSet_size(set3) == 6);
    stSet_destruct(set2);
    stSet_destruct(set3);
    // Check union of two non-empty overlapping sets is correct
    set2 = stSet_construct();
    set3 = stSet_construct();
    stIntTuple **uniqs = (stIntTuple **) st_malloc(sizeof(*uniqs) * 4);
    uniqs[0] = stIntTuple_construct2(9, 0);
    uniqs[1] = stIntTuple_construct2(9, 1);
    uniqs[2] = stIntTuple_construct2(9, 2);
    uniqs[3] = stIntTuple_construct2(9, 3);
    stIntTuple **common = (stIntTuple **) st_malloc(sizeof(*uniqs) * 5);
    common[0] = stIntTuple_construct2(5, 0);
    common[1] = stIntTuple_construct2(5, 1);
    common[2] = stIntTuple_construct2(5, 2);
    common[3] = stIntTuple_construct2(5, 3);
    common[4] = stIntTuple_construct2(5, 4);
    for (int i = 0; i < 5; ++i) {
        stSet_insert(set2, common[i]);
        stSet_insert(set3, common[i]);
    }
    stSet_insert(set2, uniqs[0]);
    stSet_insert(set2, uniqs[1]);
    stSet_insert(set3, uniqs[2]);
    stSet_insert(set3, uniqs[3]);
    set4 = stSet_getUnion(set2, set3);
    CuAssertTrue(testCase, stSet_size(set4) == 9);
    for (int i = 0; i < 4; ++i) {
        CuAssertTrue(testCase, stSet_search(set4, uniqs[i]) != NULL);
    }
    for (int i = 0; i < 5; ++i) {
        CuAssertTrue(testCase, stSet_search(set4, common[i]) != NULL);
    }
    stSet_destruct(set2);
    stSet_destruct(set3);
    stSet_destruct(set4);
    // Check we get an exception with sets with different functions.
    stTry {
        stSet_getUnion(set0, set1);
    } stCatch(except) {
        CuAssertTrue(testCase, stExcept_getId(except) == SET_EXCEPTION_ID);
    } stTryEnd
    testTeardown();
}
示例#5
0
stSortedSet *stSortedSet_construct3(int (*compareFn)(const void *, const void *),
                                      void (*destructElementFn)(void *)) {
    stSortedSet *sortedSet = st_malloc(sizeof(stSortedSet));
    struct _stSortedSet_construct3Fn *i = st_malloc(sizeof(struct _stSortedSet_construct3Fn));
    i->compareFn = compareFn == NULL ? st_sortedSet_cmpFn : compareFn; //this is a total hack to make the function pass ISO C compatible.
    sortedSet->sortedSet = avl_create((int (*)(const void *, const void *, void *))st_sortedSet_construct3P, i, NULL);
    sortedSet->destructElementFn = destructElementFn;
    sortedSet->numberOfLiveIterators = 0;
    return sortedSet;
}
示例#6
0
stPosetAlignment *stPosetAlignment_construct(int64_t sequenceNumber) {
    stPosetAlignment *posetAlignment = st_malloc(sizeof(stPosetAlignment));
    posetAlignment->sequenceNumber = sequenceNumber;
    posetAlignment->constraintLists = st_malloc(sizeof(stSortedSet *) * sequenceNumber * sequenceNumber);
    for(int64_t i=0; i<posetAlignment->sequenceNumber; i++) {
        for(int64_t j=0; j<posetAlignment->sequenceNumber; j++) {
            if(i != j) {
                posetAlignment->constraintLists[i*posetAlignment->sequenceNumber + j] =
                    stSortedSet_construct3((int (*)(const void *, const void *))comparePositions,
                            (void (*)(void *))stIntTuple_destruct);
            }
        }
    }
    return posetAlignment;
}
示例#7
0
static Flower *flower_construct3(Name name, CactusDisk *cactusDisk) {
    Flower *flower;
    flower = st_malloc(sizeof(Flower));

    flower->name = name;

    flower->sequences = stSortedSet_construct3(flower_constructSequencesP, NULL);
    flower->caps = stSortedSet_construct3(flower_constructCapsP, NULL);
    flower->ends = stSortedSet_construct3(flower_constructEndsP, NULL);
    flower->segments = stSortedSet_construct3(flower_constructSegmentsP, NULL);
    flower->blocks = stSortedSet_construct3(flower_constructBlocksP, NULL);
    flower->groups = stSortedSet_construct3(flower_constructGroupsP, NULL);
    flower->chains = stSortedSet_construct3(flower_constructChainsP, NULL);
    flower->faces = stSortedSet_construct3(flower_constructFacesP, NULL);

    flower->parentFlowerName = NULL_NAME;
    flower->cactusDisk = cactusDisk;
    flower->faceIndex = 0;
    flower->chainIndex = 0;

    flower->builtBlocks = 0;
    flower->builtFaces = 0;
    flower->builtTrees = 0;

    cactusDisk_addFlower(flower->cactusDisk, flower);

    flower->eventTree = NULL;

    return flower;
}
示例#8
0
static char *
filter_double_bangs (const char *chunk)
{
    st_uint size, i = 0, count = 0;
    const char *p = chunk;
    char *buf;

    size = strlen (chunk);

    if (size < 2)
	return st_strdup (chunk);

    /* count number of redundant bangs */
    while (p[0] && p[1]) {
	if (ST_UNLIKELY (p[0] == '!' && p[1] == '!'))
	    count++;
	p++;
    }
    
    buf = st_malloc (size - count + 1);

    /* copy over text skipping over redundant bangs */
    p = chunk;
    while (*p) {
	if (*p == '!')
	    p++;
	buf[i++] = *p;
	p++;
    }
    buf[i] = 0;

    return buf;
}
示例#9
0
char *cStr_getStringFromIntArray(int64_t *array, int64_t size, const char sep) {
	int64_t i;
	int numChars = 0;
	char *string = NULL;
	char buffer[64];

	for (i = 0; i < size; i++) {
		numChars += cStr_getIntLength(array[i]);
	}
	numChars += (size - 1);

	string = st_malloc(sizeof(char) * (numChars + 1));
	string[0] = '\0';

	cStr_itoa(array[0], buffer);
	strcat(string, buffer);
	for (i = 1; i < size; i++) {
		cStr_appendChar(string, sep);
		cStr_itoa(array[i], buffer);
		strcat(string, buffer);
	}

	i = strlen(string);
	string[i+1] = '\0';

	return string;
}
示例#10
0
Block_InstanceIterator *block_copyInstanceIterator(Block_InstanceIterator *iterator) {
	Block_InstanceIterator *iterator2;
	iterator2 = st_malloc(sizeof(struct _block_instanceIterator));
	iterator2->block = iterator->block;
	iterator2->iterator = stSortedSet_copyIterator(iterator->iterator);
	return iterator2;
}
示例#11
0
Block_InstanceIterator *block_getInstanceIterator(Block *block) {
	Block_InstanceIterator *iterator;
	iterator = st_malloc(sizeof(struct _block_instanceIterator));
	iterator->block = block;
	iterator->iterator = stSortedSet_getIterator(block->blockContents->segments);
	return iterator;
}
示例#12
0
struct hashtable_itr *
hashtable_iterator(struct hashtable *h)
{
    unsigned int i, tablelength;
    struct hashtable_itr *itr = (struct hashtable_itr *)
        st_malloc(sizeof(struct hashtable_itr));
    if (NULL == itr) return NULL;
    itr->h = h;
    itr->e = NULL;
    itr->parent = NULL;
    tablelength = h->tablelength;
    itr->index = tablelength;
    if (0 == h->entrycount) return itr;

    for (i = 0; i < tablelength; i++)
    {
        if (NULL != h->table[i])
        {
            itr->e = h->table[i];
            itr->index = i;
            break;
        }
    }
    return itr;
}
示例#13
0
StateMachine *stateMachine3_construct(StateMachineType type) {
    StateMachine3 *sM3 = st_malloc(sizeof(StateMachine3));
    sM3->TRANSITION_MATCH_CONTINUE = -0.030064059121770816; //0.9703833696510062f
    sM3->TRANSITION_MATCH_FROM_GAP_X = -1.272871422049609; //1.0 - gapExtend - gapSwitch = 0.280026392297485
    sM3->TRANSITION_MATCH_FROM_GAP_Y = -1.272871422049609; //1.0 - gapExtend - gapSwitch = 0.280026392297485
    sM3->TRANSITION_GAP_OPEN_X = -4.21256642; //0.0129868352330243
    sM3->TRANSITION_GAP_OPEN_Y = -4.21256642; //0.0129868352330243
    sM3->TRANSITION_GAP_EXTEND_X = -0.3388262689231553; //0.7126062401851738f;
    sM3->TRANSITION_GAP_EXTEND_Y = -0.3388262689231553; //0.7126062401851738f;
    sM3->TRANSITION_GAP_SWITCH_TO_X = -4.910694825551255; //0.0073673675173412815f;
    sM3->TRANSITION_GAP_SWITCH_TO_Y = -4.910694825551255; //0.0073673675173412815f;
    emissions_setMatchProbsToDefaults(sM3->EMISSION_MATCH_PROBS);
    emissions_setGapProbsToDefaults(sM3->EMISSION_GAP_X_PROBS);
    emissions_setGapProbsToDefaults(sM3->EMISSION_GAP_Y_PROBS);
    if (type != threeState && type != threeStateAsymmetric) {
        st_errAbort("Tried to create a three state state-machine with the wrong type");
    }
    sM3->model.type = type;
    sM3->model.stateNumber = 3;
    sM3->model.matchState = match;
    sM3->model.startStateProb = stateMachine3_startStateProb;
    sM3->model.endStateProb = stateMachine3_endStateProb;
    sM3->model.raggedStartStateProb = stateMachine3_raggedStartStateProb;
    sM3->model.raggedEndStateProb = stateMachine3_raggedEndStateProb;
    sM3->model.cellCalculate = stateMachine3_cellCalculate;

    return (StateMachine *) sM3;
}
示例#14
0
static void test_st_randomInt64_distribution_0(CuTest *testCase) {
    /*
     * check the distribution of the randomInt64 function
     */
    double med, var, mu = 0.0;
    uint64_t n = 1000000;
    uint64_t reps = 50;
    int64_t min = 0;
    int64_t max = 101;
    int64_t *array = NULL;
    for (uint64_t j = 0; j < reps; ++j) {
        array = (int64_t *) st_malloc(sizeof(*array) * n);
        for (int64_t i = 0; i < n; i++) {
            array[i] = st_randomInt64(min, max);
            mu = runningMean64(mu, array[i], i);
        }
        var = sv64(array, n, mu);
        med = median64(array, n); // median() will sort array
        CuAssertTrue(testCase, array[0] <= array[n - 1]);
        CuAssertTrue(testCase, array[0] < max);
        CuAssertTrue(testCase, array[n - 1] < max);
        // median of discrete uniform is
        // median = (a + b) / 2
        CuAssertTrue(testCase, med == 50.0);
        // mean of discrete uniform is
        // mu = (a + b) / 2
        CuAssertTrue(testCase, mu > 0.9 * (max - 1) / 2.0);
        CuAssertTrue(testCase, mu < 1.1 * (max - 1) / 2.0);
        // variance of discrete uniform is
        // var = ((b - a + 1)^2 - 1) / 12
        CuAssertTrue(testCase, var < 1.1 * (((max - min + 1) * (max - min + 1) - 1) / 12.0));
        CuAssertTrue(testCase, var > 0.9 * (((max - min + 1) * (max - min + 1) - 1) / 12.0));
        free(array);
    }
}
示例#15
0
static Substring *substring_construct(Name name, int64_t start, int64_t length) {
    Substring *substring = st_malloc(sizeof(Substring));
    substring->name = name;
    substring->start = start;
    substring->length = length;
    return substring;
}
示例#16
0
char *eventTree_makeNewickString(EventTree *eventTree) {
	Event *rootEvent = eventTree_getRootEvent(eventTree);
	char *cA = eventTree_makeNewickStringP(rootEvent);
	char *cA2 = st_malloc(sizeof(char)*(strlen(cA) + 2));
	sprintf(cA2, "%s;", cA);
	free(cA);
	return cA2;
}
示例#17
0
Sequence *sequence_construct(MetaSequence *metaSequence, Flower *flower) {
	Sequence *sequence;
	sequence = st_malloc(sizeof(Sequence));
	sequence->metaSequence = metaSequence;
	sequence->flower = flower;
	flower_addSequence(flower, sequence);
	return sequence;
}
示例#18
0
struct List *parseTrioFile(char *trioFile) {
    FILE *fileHandle = fopen(trioFile, "r");
    int bytesRead;
    int nBytes = 100;
    char *cA;
    int j;

    char *species[3];

    struct List *speciesList = NULL;
    speciesList = constructEmptyList(0, freeTrioNames);

    cA = st_malloc(nBytes + 1);
    bytesRead = benLine(&cA, &nBytes, fileHandle);

    while(bytesRead != -1) {
        if (bytesRead > 0) {
            species[0] = st_malloc(sizeof(char) * (1 + (bytesRead)));
            species[1] = st_malloc(sizeof(char) * (1 + (bytesRead)));
            species[2] = st_malloc(sizeof(char) * (1 + (bytesRead)));
            j = sscanf(cA, "%s\t%s\t%s", species[0], species[1], species[2]);
            if (j != 3) {
                fprintf(stderr, "Invalid triple line '%s' in '%s'\n", cA, trioFile);
                exit(1);
            }

            cStr_lowerCase(species[0]);
            cStr_lowerCase(species[1]);
            cStr_lowerCase(species[2]);
            qsort(species, 3, sizeof(char *), cStr_compare);

            TrioNames *trio = st_malloc(sizeof(TrioNames));
            trio->speciesA = species[0];
            trio->speciesB = species[1];
            trio->speciesC = species[2];
            
            listAppend(speciesList, trio);
        }
        bytesRead = benLine(&cA, &nBytes, fileHandle);
    }
    fclose(fileHandle);

    free(cA);

    return speciesList;
}
示例#19
0
stSortedSetIterator *stSortedSet_copyIterator(stSortedSetIterator *iterator) {
    stSortedSetIterator *copyIterator;
    copyIterator = st_malloc(sizeof(stSortedSetIterator));
    copyIterator->sortedSet = iterator->sortedSet;
    copyIterator->sortedSet->numberOfLiveIterators++;
    avl_t_copy(&copyIterator->traverser, &iterator->traverser);
    return copyIterator;
}
示例#20
0
stSortedSetIterator *stSortedSet_getIterator(stSortedSet *items) {
    stSortedSetIterator *iterator;
    iterator = st_malloc(sizeof(stSortedSetIterator));
    iterator->sortedSet = items;
    avl_t_init(&iterator->traverser, items->sortedSet);
    items->numberOfLiveIterators++;
    return iterator;
}
CapCodeParameters *capCodeParameters_construct(int64_t minimumNCount,
        int64_t maxInsertionLength, int64_t maxDeletionLength) {
    CapCodeParameters *capCodeParameters = st_malloc(sizeof(CapCodeParameters));
    capCodeParameters->minimumNCount = minimumNCount;
    capCodeParameters->maxInsertionLength = maxInsertionLength;
    capCodeParameters->maxDeletionLength = maxDeletionLength;
    return capCodeParameters;
}
示例#22
0
stTree *stTree_construct(void) {
    stTree *tree = st_malloc(sizeof(stTree));
    tree->branchLength = INFINITY;
    tree->nodes = stList_construct3(0, (void (*)(void *))stTree_destruct);
    tree->label = NULL;
    tree->parent = NULL;
    tree->clientData = NULL;
    return tree;
}
示例#23
0
EventTree *eventTree_construct(CactusDisk *cactusDisk, Name rootEventName) {
	EventTree *eventTree;
	eventTree = st_malloc(sizeof(EventTree));
        eventTree->cactusDisk = cactusDisk;
        cactusDisk_setEventTree(cactusDisk, eventTree);
	eventTree->events = stSortedSet_construct3(eventTree_constructP, NULL);
	eventTree->rootEvent = event_construct(rootEventName, "ROOT", INT64_MAX, NULL, eventTree); //do this last as reciprocal call made to add the event to the events.
	return eventTree;
}
SegmentHolder *segmentHolder_construct(Segment *segment, int64_t offset, char base1, char base2, char base3) {
    SegmentHolder *segmentHolder = st_malloc(sizeof(SegmentHolder));
    segmentHolder->segment = segment;
    segmentHolder->offset = offset;
    segmentHolder->base1 = base1;
    segmentHolder->base2 = base2;
    segmentHolder->base3 = base3;
    return segmentHolder;
}
static void testBinaryRepresentation_resizeObjectAsPowerOf2(CuTest* testCase) {
    for(int64_t i=0; i<100000; i++) {
        int64_t recordSize = i;
        void *vA = st_malloc(recordSize);
        vA = binaryRepresentation_resizeObjectAsPowerOf2(vA, &recordSize);
        CuAssertTrue(testCase, i <= recordSize);
        CuAssertTrue(testCase, i == 0 || i*2 >= recordSize);
        free(vA);
    }
}
示例#26
0
stTreap *stTreap_construct(void *value) {
	//strand(time(0));
	stTreap *node = st_malloc(sizeof(stTreap));
	node->key = 0;
	node->priority = rand();
	node->left = node->right = node->parent = NULL;
	node->count = 1;
	node->value = value;
	return(node);
}
static char *formatSequenceHeader(Sequence *sequence) {
    const char *sequenceHeader = sequence_getHeader(sequence);
    if (strlen(sequenceHeader) > 0) {
        char *cA = st_malloc(sizeof(char) * (1 + strlen(sequenceHeader)));
        sscanf(sequenceHeader, "%s", cA);
        return cA;
    } else {
        return cactusMisc_nameToString(sequence_getName(sequence));
    }
}
示例#28
0
AlignedPair *alignedPair_construct(int64_t subsequenceIdentifier1, int64_t position1, bool strand1,
        int64_t subsequenceIdentifier2, int64_t position2, bool strand2, int64_t score, int64_t rScore) {
    AlignedPair *alignedPair = st_malloc(sizeof(AlignedPair));
    alignedPair->subsequenceIdentifier = subsequenceIdentifier1;
    alignedPair->position = position1;
    alignedPair->strand = strand1;

    alignedPair->reverse = st_malloc(sizeof(AlignedPair));
    alignedPair->reverse->reverse = alignedPair;

    alignedPair->reverse->subsequenceIdentifier = subsequenceIdentifier2;
    alignedPair->reverse->position = position2;
    alignedPair->reverse->strand = strand2;

    alignedPair->score = score;
    alignedPair->reverse->score = rScore;

    return alignedPair;
}
示例#29
0
/*
 * Fill in a hashtable which to every node associates
 * alist of lifted edges
 */
static stHash *buildFaces_computeLiftedEdges(Flower * flower) {
    stHash *liftedEdgesTable = stHash_construct3(buildFaces_hashfunction,
            buildFaces_key_eq_fn, NULL, buildFaces_destructValue);
    Flower_CapIterator *iter = flower_getCapIterator(flower);
    Cap *cap, *attachedAncestor;
    Cap *adjacency, *adjacencyAncestor;
    stList *liftedEdges;
    LiftedEdge *liftedEdge;

    // Iterate through potential bottom nodes
    while ((cap = flower_getNextCap(iter))) {
        // ... check if connected
        if ((adjacency = cap_getAdjacency(cap))) {
            // ... lift
            attachedAncestor = cap_getTopCap(cap);
            adjacencyAncestor = cap_getTopCap(cap_getPositiveOrientation(
                    adjacency));

#ifndef NDEBUG
            assert((attachedAncestor && adjacencyAncestor) || (!attachedAncestor && !adjacencyAncestor));
#endif

            // If root node
            if (attachedAncestor == NULL)
                continue;

            // ... create lifted edge
            liftedEdge = st_malloc(sizeof(LiftedEdge));
            liftedEdge->destination = adjacencyAncestor;
            liftedEdge->bottomNode = cap;

#ifndef NDEBUG
            // Self loop
            if (adjacencyAncestor == attachedAncestor)
                abort();
#endif

            // ... add it to the hashtable
            if ((liftedEdges
                    = stHash_search(liftedEdgesTable, attachedAncestor))) {
                stList_append(liftedEdges, liftedEdge);
            } else {
                liftedEdges = stList_construct3(2,
                        buildFaces_stList_destructElem);
                stList_append(liftedEdges, liftedEdge);
                stHash_insert(liftedEdgesTable, attachedAncestor, liftedEdges);
            }
        }
    }

    flower_destructCapIterator(iter);
    return liftedEdgesTable;
}
示例#30
0
STNODE* st_createEmptyNode(NODETYPE type){
	STNODE *temp = NULL;
	temp = (STNODE*)st_malloc(sizeof(STNODE));
	if(temp != NULL){
		temp->type = type;
		temp->value.semType = SEM_UNDEF;
		temp->value.vint = 0;
		temp->nops = 0;
		temp->op = NULL;
	} else fatal(STR_OUT_OF_MEMORY);
	return temp;
}