Beispiel #1
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;
}
Beispiel #2
0
void eventTree_copyConstructP(EventTree *eventTree, Event *event,
		int64_t (unaryEventFilterFn)(Event *event)) {
	int64_t i;
	Event *event2;
	for(i=0; i<event_getChildNumber(event); i++) {
		event2 = event_getChild(event, i);
		while(event_getChildNumber(event2) == 1 && unaryEventFilterFn != NULL && !unaryEventFilterFn(event2)) {
			//skip the event
			event2 = event_getChild(event2, 0);
		}
		event_setOutgroupStatus(event_construct(event_getName(event2), event_getHeader(event2), event_getBranchLength(event2),
						eventTree_getEvent(eventTree, event_getName(event)), eventTree), event_isOutgroup(event2));
		eventTree_copyConstructP(eventTree, event2, unaryEventFilterFn);
	}
}
Beispiel #3
0
Event *event_construct2(Name name, const char *header, float branchLength, Event *parentEvent,
        Event *childEvent, EventTree *eventTree) {
    Event *event;
    event = event_construct(name, header, branchLength, parentEvent, eventTree);
#ifndef NDEBUG
    assert(parentEvent != NULL);
    assert(childEvent != NULL);
    assert(listContains(parentEvent->children, childEvent));
#endif
    listRemove(parentEvent->children, childEvent);
    listAppend(event->children, childEvent);
    childEvent->parent = event;
    childEvent->branchLength = childEvent->branchLength - event->branchLength;
    if (childEvent->branchLength < 0.0) {
        childEvent->branchLength = 0.0;
    }
    return event;
}
Beispiel #4
0
Event *event_loadFromBinaryRepresentation(void **binaryString,
        EventTree *eventTree) {
    Event *event, *parentEvent;
    Name name;
    float branchLength;
    char *header;

    event = NULL;
    if (binaryRepresentation_peekNextElementType(*binaryString) == CODE_EVENT) {
        binaryRepresentation_popNextElementType(binaryString);
        parentEvent = eventTree_getEvent(eventTree,
                binaryRepresentation_getName(binaryString));
        assert(parentEvent != NULL);
        name = binaryRepresentation_getName(binaryString);
        branchLength = binaryRepresentation_getFloat(binaryString);
        header = binaryRepresentation_getString(binaryString);
        event
                = event_construct(name, header, branchLength, parentEvent,
                        eventTree);
        event_setOutgroupStatus(event, binaryRepresentation_getBool(binaryString));
        free(header);
    }
    return event;
}
Beispiel #5
0
Event *event_construct3(const char *header, float branchLength, Event *parentEvent,
        EventTree *eventTree) {
    return event_construct(cactusDisk_getUniqueID(flower_getCactusDisk(
            eventTree_getFlower(eventTree))), header, branchLength, parentEvent,
            eventTree);
}