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; }
void testEvent_getBranchLength(CuTest* testCase) { cactusEventTestSetup(); CuAssertDblEquals(testCase, INT64_MAX, event_getBranchLength(rootEvent), 1.000); CuAssertDblEquals(testCase, 0.5, event_getBranchLength(internalEvent), 0.001); CuAssertDblEquals(testCase, 0.2, event_getBranchLength(leafEvent1), 0.001); CuAssertDblEquals(testCase, 1.3, event_getBranchLength(leafEvent2), 0.001); cactusEventTestTeardown(); }
void event_writeBinaryRepresentation(Event *event, void(*writeFn)( const void * ptr, size_t size, size_t count)) { binaryRepresentation_writeElementType(CODE_EVENT, writeFn); binaryRepresentation_writeName(event_getName(event_getParent(event)), writeFn); binaryRepresentation_writeName(event_getName(event), writeFn); binaryRepresentation_writeFloat(event_getBranchLength(event), writeFn); binaryRepresentation_writeString(event_getHeader(event), writeFn); binaryRepresentation_writeBool(event_isOutgroup(event), writeFn); }
static stTree *eventTree_getStTree_R(Event *event) { stTree *ret = stTree_construct(); stTree_setLabel(ret, stString_print("%" PRIi64, event_getName(event))); stTree_setBranchLength(ret, event_getBranchLength(event)); for(int64_t i = 0; i < event_getChildNumber(event); i++) { Event *child = event_getChild(event, i); stTree *childStTree = eventTree_getStTree_R(child); stTree_setParent(childStTree, ret); } return ret; }
float event_getSubTreeBranchLength(Event *event) { assert(event != NULL); int64_t i; Event *childEvent; float branchLength; branchLength = 0.0; for (i = 0; i < event_getChildNumber(event); i++) { childEvent = event_getChild(event, i); branchLength += event_getSubTreeBranchLength(childEvent) + event_getBranchLength(childEvent); } return branchLength; }
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); } }