void logDistribute(const char *data, uint8_t level, uint64_t fc, uint32_t proc) { uint8_t old_level = shm->config.log_level; uint64_t old_facility = shm->config.facility; shm->config.current_rate++; if (rcpLogAccept(shm, level, fc)) { // store the log logStore(data, level, fc, proc); // send the log to cli logSendCli(proc, fc, data, level); } ASSERT(old_level == shm->config.log_level); ASSERT(old_facility == shm->config.facility); }
double qFinderDMM::getNegativeLogLikelihood(){ try { double eta = 0.10000; double nu = 0.10000; vector<double> pi(numPartitions, 0.0000); vector<double> logBAlpha(numPartitions, 0.0000); double doubleSum = 0.0000; for(int i=0;i<numPartitions;i++){ if (m->control_pressed) { return 0; } double sumAlphaK = 0.0000; pi[i] = weights[i] / (double)numSamples; for(int j=0;j<numOTUs;j++){ double alpha = exp(lambdaMatrix[i][j]); sumAlphaK += alpha; logBAlpha[i] += lgamma(alpha); } logBAlpha[i] -= lgamma(sumAlphaK); } for(int i=0;i<numSamples;i++){ if (m->control_pressed) { return 0; } double probability = 0.0000; double factor = 0.0000; double sum = 0.0000; vector<double> logStore(numPartitions, 0.0000); double offset = -numeric_limits<double>::max(); for(int j=0;j<numOTUs;j++){ sum += countMatrix[i][j]; factor += lgamma(countMatrix[i][j] + 1.0000); } factor -= lgamma(sum + 1.0); for(int k=0;k<numPartitions;k++){ double sumAlphaKX = 0.0000; double logBAlphaX = 0.0000; for(int j=0;j<numOTUs;j++){ double alphaX = exp(lambdaMatrix[k][j]) + (double)countMatrix[i][j]; sumAlphaKX += alphaX; logBAlphaX += lgamma(alphaX); } logBAlphaX -= lgamma(sumAlphaKX); logStore[k] = logBAlphaX - logBAlpha[k] - factor; if(logStore[k] > offset){ offset = logStore[k]; } } for(int k=0;k<numPartitions;k++){ probability += pi[k] * exp(-offset + logStore[k]); } doubleSum += log(probability) + offset; } double L5 = - numOTUs * numPartitions * lgamma(eta); double L6 = eta * numPartitions * numOTUs * log(nu); double alphaSum, lambdaSum; alphaSum = lambdaSum = 0.0000; for(int i=0;i<numPartitions;i++){ for(int j=0;j<numOTUs;j++){ if (m->control_pressed) { return 0; } alphaSum += exp(lambdaMatrix[i][j]); lambdaSum += lambdaMatrix[i][j]; } } alphaSum *= -nu; lambdaSum *= eta; return (-doubleSum - L5 - L6 - alphaSum - lambdaSum); } catch(exception& e){ m->errorOut(e, "qFinderDMM", "getNegativeLogLikelihood"); exit(1); } }
void datagramInterpreter(uint8_t t, const uint8_t *data, int size) { switch(t) { case DG_HEARTBEAT: // Heartbeat if(heartbeatReset) { memcpy((void*) &heartbeatCount, data, sizeof(heartbeatCount)); heartbeatTime = time(NULL); } break; case DG_CONSOLE: // Console output consoleWrite(data, size); break; case DG_INITIALIZED: initDone = true; break; case DG_READY: // Initialization done // consoleNotef("ready\n"); logReady = true; break; case DG_LOGDATA: // Log data if(size > 0) logStore((const uint16_t*) data, size/2); else if(receivingLog) { logDisplay(); logClose(); // Auto clear if(!autoClearDone) sendCommand("clear"); autoClearDone = true; } break; case DG_LOGINFO: // Log stamp memcpy(&logInfo, data, sizeof(logInfo)); consoleNotef("LOG %d OF MODEL %s\n", logInfo.stamp, logInfo.name); receivingLog = logOpen(&logInfo); break; case DG_PARAMS: // Param backup if(size > 0) { memset(modelName, '\0', NAME_LEN); memcpy(modelName, (char*) data, size); consoleNotef("BACKUP %s START\n", modelName); backupOpen(modelName);; } else { consoleNotef("BACKUP END\n"); backupClose(); } break; case DG_SIMLINK: // Simulator link control record udpClient(data, size); break; default: consoleNotef("FUNNY DATAGRAM TYPE = %d SIZE = %d\n", t, size); } }