void FONSEModel::updateTracesWithInitialValues(Genome & genome) { std::vector <std::string> groupList = parameter->getGroupList(); for (unsigned i = 0; i < genome.getGenomeSize(); i++) { parameter->updateSynthesisRateTrace(0, i); parameter->updateMixtureAssignmentTrace(0, i); } for (unsigned i = 0; i < groupList.size(); i++) { parameter->updateCodonSpecificParameterTrace(0, getGrouping(i)); } }
double FONSEModel::calculateAllPriors() { double priorRatio = 0.0; unsigned size = getGroupListSize(); for (unsigned i = 0; i < size; i++) { std::string grouping = getGrouping(i); priorRatio += calculateMutationPrior(grouping, false); } // add more priors if necessary. return priorRatio; }
void FONSEModel::calculateLogLikelihoodRatioPerGene(Gene& gene, unsigned geneIndex, unsigned k, double* logProbabilityRatio) { double likelihood = 0.0; double likelihood_proposed = 0.0; std::string curAA; std::vector <unsigned> positions; double mutation[5]; double selection[5]; //SequenceSummary *sequenceSummary = gene.getSequenceSummary(); //currently unused // get correct index for everything unsigned mutationCategory = parameter->getMutationCategory(k); unsigned selectionCategory = parameter->getSelectionCategory(k); unsigned expressionCategory = parameter->getSynthesisRateCategory(k); double phiValue = parameter->getSynthesisRate(geneIndex, expressionCategory, false); double phiValue_proposed = parameter->getSynthesisRate(geneIndex, expressionCategory, true); /* TODO: This loop causes a compiler warning because i is an int, but openMP won't compile if I change i to unsigned. Maybe worth looking into? */ #ifdef _OPENMP //#ifndef __APPLE__ #pragma omp parallel for private(mutation, selection, positions, curAA) reduction(+:likelihood,likelihood_proposed) #endif for (unsigned i = 0u; i < getGroupListSize(); i++) { curAA = getGrouping(i); parameter->getParameterForCategory(mutationCategory, FONSEParameter::dM, curAA, false, mutation); parameter->getParameterForCategory(selectionCategory, FONSEParameter::dOmega, curAA, false, selection); likelihood += calculateLogLikelihoodRatioPerAA(gene, curAA, mutation, selection, phiValue); likelihood_proposed += calculateLogLikelihoodRatioPerAA(gene, curAA, mutation, selection, phiValue_proposed); } //my_print("% %\n", logLikelihood, logLikelihood_proposed); double stdDevSynthesisRate = parameter->getStdDevSynthesisRate(selectionCategory, false); double logPhiProbability = Parameter::densityLogNorm(phiValue, (-(stdDevSynthesisRate * stdDevSynthesisRate) / 2), stdDevSynthesisRate, true); double logPhiProbability_proposed = Parameter::densityLogNorm(phiValue_proposed, (-(stdDevSynthesisRate * stdDevSynthesisRate) / 2), stdDevSynthesisRate, true); double currentLogLikelihood = (likelihood + logPhiProbability); double proposedLogLikelihood = (likelihood_proposed + logPhiProbability_proposed); if (phiValue == 0) { my_print("phiValue is 0\n"); } if (phiValue_proposed == 0) { my_print("phiValue_prop is 0\n"); } logProbabilityRatio[0] = (proposedLogLikelihood - currentLogLikelihood) - (std::log(phiValue) - std::log(phiValue_proposed)); logProbabilityRatio[1] = currentLogLikelihood - std::log(phiValue_proposed); if (std::isinf(logProbabilityRatio[1])) { my_print("logProb1 inf\n"); } logProbabilityRatio[2] = proposedLogLikelihood - std::log(phiValue); if (std::isinf(logProbabilityRatio[2])) { my_print("logProb2 inf\n"); } //------------NOTE: Jeremy, Cedric changed the reverse jump to where we DON'T include it. I had my PA //LogLikelihood go to 0 because of now missing terms. I have added the code underneath to where we calculate it---/ logProbabilityRatio[3] = currentLogLikelihood; logProbabilityRatio[4] = proposedLogLikelihood; }
void BrowseThread::populateModel() { m_path_mutex.lock(); MDir thisPath = m_path; BrowseTableModel* thisModelObserver = m_model_observer; m_path_mutex.unlock(); // Refresh the name filters in case we loaded new SoundSource plugins. QStringList nameFilters(SoundSourceProxy::getSupportedFileNamePatterns()); QDirIterator fileIt(thisPath.dir().absolutePath(), nameFilters, QDir::Files | QDir::NoDotAndDotDot); // remove all rows // This is a blocking operation // see signal/slot connection in BrowseTableModel emit(clearModel(thisModelObserver)); QList< QList<QStandardItem*> > rows; int row = 0; // Iterate over the files while (fileIt.hasNext()) { // If a user quickly jumps through the folders // the current task becomes "dirty" m_path_mutex.lock(); MDir newPath = m_path; m_path_mutex.unlock(); if (thisPath.dir() != newPath.dir()) { qDebug() << "Abort populateModel()"; return populateModel(); } QString filepath = fileIt.next(); auto pTrack = Track::newTemporary(filepath, thisPath.token()); SoundSourceProxy(pTrack).updateTrackFromSource(); QList<QStandardItem*> row_data; QStandardItem* item = new QStandardItem("0"); item->setData("0", Qt::UserRole); row_data.insert(COLUMN_PREVIEW, item); item = new QStandardItem(pTrack->getFileName()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_FILENAME, item); item = new QStandardItem(pTrack->getArtist()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ARTIST, item); item = new QStandardItem(pTrack->getTitle()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_TITLE, item); item = new QStandardItem(pTrack->getAlbum()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ALBUM, item); item = new QStandardItem(pTrack->getAlbumArtist()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_ALBUMARTIST, item); item = new QStandardItem(pTrack->getTrackNumber()); item->setToolTip(item->text()); item->setData(item->text().toInt(), Qt::UserRole); row_data.insert(COLUMN_TRACK_NUMBER, item); const QString year(pTrack->getYear()); item = new YearItem(year); item->setToolTip(year); // The year column is sorted according to the numeric calendar year item->setData(mixxx::TrackMetadata::parseCalendarYear(year), Qt::UserRole); row_data.insert(COLUMN_YEAR, item); item = new QStandardItem(pTrack->getGenre()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_GENRE, item); item = new QStandardItem(pTrack->getComposer()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_COMPOSER, item); item = new QStandardItem(pTrack->getGrouping()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_GROUPING, item); item = new QStandardItem(pTrack->getComment()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_COMMENT, item); QString duration = pTrack->getDurationText(mixxx::Duration::Precision::SECONDS); item = new QStandardItem(duration); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_DURATION, item); item = new QStandardItem(pTrack->getBpmText()); item->setToolTip(item->text()); item->setData(pTrack->getBpm(), Qt::UserRole); row_data.insert(COLUMN_BPM, item); item = new QStandardItem(pTrack->getKeyText()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_KEY, item); item = new QStandardItem(pTrack->getType()); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_TYPE, item); item = new QStandardItem(pTrack->getBitrateText()); item->setToolTip(item->text()); item->setData(pTrack->getBitrate(), Qt::UserRole); row_data.insert(COLUMN_BITRATE, item); QString location = pTrack->getLocation(); QString nativeLocation = QDir::toNativeSeparators(location); item = new QStandardItem(nativeLocation); item->setToolTip(nativeLocation); item->setData(location, Qt::UserRole); row_data.insert(COLUMN_NATIVELOCATION, item); QDateTime modifiedTime = pTrack->getFileModifiedTime().toLocalTime(); item = new QStandardItem(modifiedTime.toString(Qt::DefaultLocaleShortDate)); item->setToolTip(item->text()); item->setData(modifiedTime, Qt::UserRole); row_data.insert(COLUMN_FILE_MODIFIED_TIME, item); QDateTime creationTime = pTrack->getFileCreationTime().toLocalTime(); item = new QStandardItem(creationTime.toString(Qt::DefaultLocaleShortDate)); item->setToolTip(item->text()); item->setData(creationTime, Qt::UserRole); row_data.insert(COLUMN_FILE_CREATION_TIME, item); const mixxx::ReplayGain replayGain(pTrack->getReplayGain()); item = new QStandardItem( mixxx::ReplayGain::ratioToString(replayGain.getRatio())); item->setToolTip(item->text()); item->setData(item->text(), Qt::UserRole); row_data.insert(COLUMN_REPLAYGAIN, item); rows.append(row_data); ++row; // If 10 tracks have been analyzed, send it to GUI // Will limit GUI freezing if (row % 10 == 0) { // this is a blocking operation emit(rowsAppended(rows, thisModelObserver)); qDebug() << "Append " << rows.count() << " from " << filepath; rows.clear(); } // Sleep additionally for 10ms which prevents us from GUI freezes msleep(20); } emit(rowsAppended(rows, thisModelObserver)); qDebug() << "Append last " << rows.count(); }