void EnsembleGenerator::generate(unsigned int multi_state_model_size) { init(); if(ensembles_.size() < multi_state_model_size) { std::cerr << "Only MultiStateModels up to " << multi_state_model_size << " states are supported" << std::endl; return; } for(unsigned int i=1; i<multi_state_model_size; i++) { if(ensembles_[i-1].size() > 0) { add_one_state(ensembles_[i-1], ensembles_[i]); Ensemble rescored_ensemble; Vector<Vector<saxs::WeightedFitParameters> > rescored_fps; rescore(ensembles_[i], rescored_ensemble, rescored_fps); std::cout << "initial size " << ensembles_[i].size() << " after rescoring " << rescored_ensemble.size() << std::endl; output(rescored_ensemble, rescored_fps); if(rescored_ensemble.size() > 0) { for(unsigned int j = 0; j < scorers_.size(); j++) { SAXSMultiStateModelScore<saxs::ChiScore> *s = dynamic_cast<SAXSMultiStateModelScore<saxs::ChiScore>*>(scorers_[j]); if(s != NULL) s->set_average_c1_c2(rescored_fps[j]); } } } } }
void EnsembleGenerator::init() { // reserve space ensembles_.insert(ensembles_.begin(), 100, Ensemble()); ensembles_[0].reserve(N_); // generate & score N MultiStateModels of size 1 (=SingleStateModels) for(unsigned int i=0; i<N_; i++) { MultiStateModel m(1); m.add_state(i); //m.set_score(get_score(e)); double min_score = std::numeric_limits<double>::max(); for (unsigned int j=0; j<scorers_.size(); j++) { double score = scorers_[j]->get_score(m); if(score < min_score) min_score = score; } m.set_score(min_score); ensembles_[0].push_back(m); } std::sort(ensembles_[0].begin(), ensembles_[0].end(), CompareMultiStateModels()); // erase low scoring MultiStateModels if(ensembles_[0].size() > K_) { ensembles_[0].erase(ensembles_[0].begin()+K_, ensembles_[0].end()); std::cout << "Number of MultiStateModels of size 1: " << ensembles_[0].size() << std::endl; } Ensemble rescored_ensemble; Vector<Vector<saxs::WeightedFitParameters> > rescored_fps; rescore(ensembles_[0], rescored_ensemble, rescored_fps); output(rescored_ensemble, rescored_fps); }
/*! update options when dialog accepted */ void ContestOptionsDialog::updateOptions() { // need to rescore log if dupe mode, multimode, or mults view change settings->setValue(c_masterfile,MasterLineEdit->text()); bool oldMultiMode=settings->value(c_multimode,c_multimode_def).toBool(); bool newMultiMode=MultiModeCheckBox->isChecked(); settings->setValue(c_multimode,newMultiMode); if (oldMultiMode!=newMultiMode) emit(multiModeChanged()); settings->setValue(c_mastermode,MasterCheckBox->isChecked()); settings->setValue(c_sprintmode,SprintCheckBox->isChecked()); settings->setValue(c_showmode,ShowModeCheckBox->isChecked()); int oldDupeMode=settings->value(c_dupemode,c_dupemode_def).toInt(); int newDupeMode=dupesComboBox->currentIndex(); settings->setValue(c_dupemode,newDupeMode); bool oldShowMults=settings->value(c_showmults,c_showmults_def).toBool(); bool newShowMults=ShowMultsCheckBox->isChecked(); settings->setValue(c_showmults,newShowMults); bool oldMultsBand=settings->value(c_multsband,c_multsband_def).toBool(); bool newMultsBand=MultsByBandCheckBox->isChecked(); settings->setValue(c_multsband,newMultsBand); if ((newDupeMode!=oldDupeMode && (oldDupeMode==NO_DUPE_CHECKING || newDupeMode==NO_DUPE_CHECKING)) || oldShowMults!=newShowMults || oldMultiMode!=newMultiMode || oldMultsBand!=newMultsBand) emit(rescore()); settings->setValue(c_sentexch1,lineEditExch1->text()); settings->setValue(c_sentexch2,lineEditExch2->text()); settings->setValue(c_sentexch3,lineEditExch3->text()); settings->setValue(c_sentexch4,lineEditExch4->text()); // off time calculation bool oldOffTimeEnabled=settings->value(c_off_time_enable,c_off_time_enable_def).toBool(); bool newOffTimeEnabled=OffTimeCheckBox->isChecked(); settings->setValue(c_off_time_enable,newOffTimeEnabled); int oldMin=settings->value(c_off_time_min,c_off_time_min_def).toInt(); int newMin=offMinimumLineEdit->text().toInt(); settings->setValue(c_off_time_min,newMin); QDateTime oldStartDate=settings->value(c_off_time_start,c_off_time_start_def).toDateTime(); QDateTime newStartDate=startDateTimeEdit->dateTime(); settings->setValue(c_off_time_start,newStartDate); QDateTime oldEndDate=settings->value(c_off_time_end,c_off_time_end_def).toDateTime(); QDateTime newEndDate=endDateTimeEdit->dateTime(); settings->setValue(c_off_time_end,newEndDate); if (oldOffTimeEnabled!=newOffTimeEnabled || oldMin!=newMin || oldStartDate!=newStartDate || oldEndDate!=newEndDate) emit(updateOffTime()); settings->sync(); }