コード例 #1
0
ファイル: log.c プロジェクト: a5216652166/rcp100
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);
}
コード例 #2
0
ファイル: qFinderDMM.cpp プロジェクト: azmfaridee/mothur
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);
    }


}
コード例 #3
0
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);
    }
}