const typename Eigen::Block<const MatrixType> PointMatcher<T>::DataPoints::getConstViewByName(const std::string& name, const Labels& labels, const MatrixType& data, const int viewRow) const { unsigned row(0); for(BOOST_AUTO(it, labels.begin()); it != labels.end(); ++it) { if (it->text == name) { if (viewRow >= 0) { if (viewRow >= int(it->span)) throw InvalidField( (boost::format("Requesting row %1% of field %2% that only has %3% rows") % viewRow % name % it->span).str() ); return data.block(row + viewRow, 0, 1, data.cols()); } else return data.block(row, 0, it->span, data.cols()); } row += it->span; } throw InvalidField("Field " + name + " not found"); }
void PointMatcher<T>::DataPoints::allocateFields(const Labels& newLabels, Labels& labels, MatrixType& data) const { typedef vector<bool> BoolVector; BoolVector present(newLabels.size(), false); // for fields that exist, take note and check dimension size_t additionalDim(0); for (size_t i = 0; i < newLabels.size(); ++i) { const string& newName(newLabels[i].text); const size_t newSpan(newLabels[i].span); for(BOOST_AUTO(it, labels.begin()); it != labels.end(); ++it) { if (it->text == newName) { if (it->span != newSpan) throw InvalidField( (boost::format("The existing field %1% has dimension %2%, different than requested dimension %3%") % newName % it->span % newSpan).str() ); present[i] = true; break; } } if (!present[i]) additionalDim += newSpan; } // for new fields allocate const int oldDim(data.rows()); const int totalDim(oldDim + additionalDim); const int pointCount(features.cols()); data.conservativeResize(totalDim, pointCount); for (size_t i = 0; i < newLabels.size(); ++i) { if (!present[i]) labels.push_back(newLabels[i]); } }
double test_set(DBN& dbn, const Samples& images, const Labels& labels, Functor&& f) { return test_set(dbn, images.begin(), images.end(), labels.begin(), labels.end(), std::forward<Functor>(f)); }
void PointMatcher<T>::DataPoints::concatenateLabelledMatrix(Labels* labels, MatrixType* data, const Labels extraLabels, const MatrixType extraData) { const int nbPoints1 = data->cols(); const int nbPoints2 = extraData.cols(); const int nbPointsTotal = nbPoints1 + nbPoints2; if (*labels == extraLabels) { if (labels->size() > 0) { // same descriptors, fast merge data->conservativeResize(Eigen::NoChange, nbPointsTotal); data->rightCols(nbPoints2) = extraData; } } else { // different descriptors, slow merge // collect labels to be kept Labels newLabels; for(BOOST_AUTO(it, labels->begin()); it != labels->end(); ++it) { for(BOOST_AUTO(jt, extraLabels.begin()); jt != extraLabels.end(); ++jt) { if (it->text == jt->text) { if (it->span != jt->span) throw InvalidField( (boost::format("The field %1% has dimension %2% in this, different than dimension %3% in that") % it->text % it->span % jt->span).str() ); newLabels.push_back(*it); break; } } } // allocate new descriptors if (newLabels.size() > 0) { MatrixType newData; Labels filledLabels; this->allocateFields(newLabels, filledLabels, newData); assert(newLabels == filledLabels); // fill unsigned row(0); for(BOOST_AUTO(it, newLabels.begin()); it != newLabels.end(); ++it) { Eigen::Block<MatrixType> view(newData.block(row, 0, it->span, newData.cols())); view.leftCols(nbPoints1) = getViewByName(it->text, *labels, *data); view.rightCols(nbPoints2) = getViewByName(it->text, extraLabels, extraData); row += it->span; } // swap descriptors data->swap(newData); *labels = newLabels; } else { *data = MatrixType(); *labels = Labels(); } } }
//------------------------------------------------------------------------------ void ImagePlaneProbeWidget::UpdateGUI() { if( mol_ == 0 ) return; updatingGUI_ = true; /// Grid data if( mol_->HasGridData() ) { typedef MolekelMolecule::SurfaceLabels Labels; Labels labels = mol_->GetGridLabels(); gridsComboBox_->setEnabled( labels.size() != 0 ); Labels::const_iterator i = labels.begin(); const Labels::const_iterator end = labels.end(); for( i; i != end; ++i ) gridsComboBox_->addItem( i->c_str() ); const double minValue = mol_->GetGridDataMin( labels.size() ? *( labels.begin() ) : "" ); const double maxValue = mol_->GetGridDataMax( labels.size() ? *( labels.begin() ) : "" ); gridDataRangeLabel_->setText( QString( "(%1, %2)" ).arg( minValue ).arg( maxValue ) ); } else gridDataGroup_->setEnabled( false ); /// Electron density if( mol_->CanComputeElectronDensity() ) eldensGroup_->setEnabled( true ); else eldensGroup_->setEnabled( false ); /// Spin density if( mol_->CanComputeSpinDensity() ) spindensGroup_->setEnabled( true ); else spindensGroup_->setEnabled( false ); /// MEP if( mol_->CanComputeMEP() ) mepGroup_->setEnabled( true ); else mepGroup_->setEnabled( false ); /// Orbitals orbitalsGroup_->setEnabled( false ); if( mol_->GetNumberOfOrbitals() != 0 ) { // update orbitals const int orbitals = mol_->GetNumberOfOrbitals(); table_->setRowCount( orbitals ); QStringList verticalHeaders; for( int i = 0; i != orbitals; ++i ) { QTableWidgetItem *eigenValueItem = new QTableWidgetItem; eigenValueItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); eigenValueItem->setText( QString( "%1" ).arg( mol_->GetOrbitalEigenValue( i ) ) ); QTableWidgetItem *occupationItem = new QTableWidgetItem; occupationItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); occupationItem->setText( QString( "%1" ).arg( mol_->GetOrbitalOccupation( i ) ) ); QTableWidgetItem *typeItem = new QTableWidgetItem; typeItem->setText( QString( "%1" ).arg( mol_->GetOrbitalType( i ) ) ); QTableWidgetItem *selectedItem = new QTableWidgetItem; selectedItem->setCheckState( Qt::Unchecked ); selectedItem->setData( Qt::UserRole, i ); table_->setItem( i, 0, selectedItem ); table_->setItem( i, 1, eigenValueItem ); table_->setItem( i, 2, occupationItem ); table_->setItem( i, 3, typeItem ); if( mol_->IsAlphaOrbital( i ) ) { verticalHeaders << QString( "%1 (%2)" ).arg( i ).arg( tr( "alpha" ) ); } else if( mol_->IsBetaOrbital( i ) ) { verticalHeaders << QString( "%1 (%2)" ).arg( i ).arg( tr( "beta" ) ); } } table_->setVerticalHeaderLabels( verticalHeaders ); table_->resizeColumnsToContents(); /// @todo do we need the following to make sure everything is unselected ? /// table_->setRangeSelected( QTableWidgetSelectionRange( 0, 0, table_->rowCount() - 1, 3 ), false ); } stepSizeSpinBox_->setValue( 0.25 ); updatingGUI_ = false; if( mol_->GetNumberOfOrbitals() != 0 ) orbitalsGroup_->setEnabled( true ); // signals are not emitted since slot are not active during UI update; // emit signals with default value to make sure all observers are // properly initialized // toggle group checkboxes to disable group content orbitalsGroup_->setChecked( true ); orbitalsGroup_->setChecked( false ); emit OrbitalSelected( -1 ); emit StepChanged( stepSizeSpinBox_->value() ); }