IMP logo
IMP Reference Guide  develop.aa56373736,2024/03/18
The Integrative Modeling Platform
atom/dope_and_excluded_volume.cpp

This example shows you a way to create a pair score that combines IMP::score_functor::Dope and excluded volume (via IMP::score_functor::HarmonicLowerBound).

/** \example atom/dope_and_excluded_volume.cpp
This example shows you a way to create a pair score that combines
IMP::score_functor::Dope and excluded volume (via
IMP::score_functor::HarmonicLowerBound).
*/
#include <IMP/atom/Chain.h>
#include <IMP/atom/Atom.h>
#include <IMP/core/XYZR.h>
#include <IMP/flags.h>
namespace {
const double dope_threshold = 16;
const double spring_constant = 1;
// create some pairs that can be score with dope
IMP::ParticleIndex rpi = m->add_particle("root");
for (unsigned int i = 0; i < 2; ++i) {
IMP::ParticleIndex rpi = m->add_particle("residue");
IMP::atom::Residue::setup_particle(m, rpi, IMP::atom::ALA, i);
chain.add_child(residue);
IMP::ParticleIndex api = m->add_particle("atom");
IMP::algebra::Vector3D coords(0, 10 * i, 0);
residue.add_child(atom);
atoms.push_back(api);
}
// add Dope atom types
for (unsigned int i = 0; i < atoms.size(); ++i) {
for (unsigned int j = 0; j < i; ++j) {
all_pairs.push_back(IMP::ParticleIndexPair(atoms[i], atoms[j]));
}
}
return all_pairs;
}
}
int main(int argc, char *argv[]) {
try {
// do normal IMP initialization of command line arguments
// Run with --help to see options.
"Show how to use dope and excluded volume");
Score;
DopeAndExcludedVolumeDistancePairScore;
// create one
new DopeAndExcludedVolumeDistancePairScore(
Score(IMP::score_functor::Dope(dope_threshold),
SoftSphere(Harmonic(spring_constant))));
// Now let's use it
new IMP::Model();
IMP::ParticleIndexPairs pips = setup_pairs(model);
for (unsigned int i = 0; i < pips.size(); ++i) {
std::cout << "Score is " << score->evaluate_index(
model, pips[i], nullptr) << std::endl;
}
return 0;
}
catch (const std::exception &e) {
std::cerr << "ERROR: " << e.what() << std::endl;
return 1;
}
}