#include "gromacs/topology/atomprop.h"
#include "gromacs/topology/atoms.h"
#include "gromacs/topology/atomsbuilder.h"
+#include "gromacs/topology/mtop_util.h"
#include "gromacs/topology/topology.h"
#include "gromacs/trajectory/trajectoryframe.h"
#include "gromacs/utility/cstringutil.h"
}
if (enum_rot == en_rotXYZ || enum_rot == en_rotZ)
{
- rotate_conf(xout->size(), as_rvec_array(xout->data()), NULL, alfa, beta, gamma);
+ rotate_conf(xout->size(), as_rvec_array(xout->data()), nullptr, alfa, beta, gamma);
}
for (size_t i = 0; i < xout->size(); ++i)
{
static void insert_mols(int nmol_insrt, int ntry, int seed,
real defaultDistance, real scaleFactor,
- t_topology *top, std::vector<RVec> *x,
+ t_atoms *atoms, t_symtab *symtab, std::vector<RVec> *x,
const std::set<int> &removableAtoms,
const t_atoms &atoms_insrt, const std::vector<RVec> &x_insrt,
int ePBC, matrix box,
fprintf(stderr, "Initialising inter-atomic distances...\n");
gmx_atomprop_t aps = gmx_atomprop_init();
std::vector<real> exclusionDistances(
- makeExclusionDistances(&top->atoms, aps, defaultDistance, scaleFactor));
+ makeExclusionDistances(atoms, aps, defaultDistance, scaleFactor));
const std::vector<real> exclusionDistances_insrt(
makeExclusionDistances(&atoms_insrt, aps, defaultDistance, scaleFactor));
gmx_atomprop_destroy(aps);
set_pbc(&pbc, ePBC, box);
/* With -ip, take nmol_insrt from file posfn */
- double **rpos = NULL;
+ double **rpos = nullptr;
const bool insertAtPositions = !posfn.empty();
if (insertAtPositions)
{
nmol_insrt, posfn.c_str());
}
- gmx::AtomsBuilder builder(&top->atoms, &top->symtab);
- gmx::AtomsRemover remover(top->atoms);
+ gmx::AtomsBuilder builder(atoms, symtab);
+ gmx::AtomsRemover remover(*atoms);
{
- const int finalAtomCount = top->atoms.nr + nmol_insrt * atoms_insrt.nr;
- const int finalResidueCount = top->atoms.nres + nmol_insrt * atoms_insrt.nres;
+ const int finalAtomCount = atoms->nr + nmol_insrt * atoms_insrt.nr;
+ const int finalResidueCount = atoms->nres + nmol_insrt * atoms_insrt.nres;
builder.reserve(finalAtomCount, finalResidueCount);
x->reserve(finalAtomCount);
exclusionDistances.reserve(finalAtomCount);
gmx::AnalysisNeighborhoodPositions pos(*x);
gmx::AnalysisNeighborhoodSearch search = nb.initSearch(&pbc, pos);
if (isInsertionAllowed(&search, exclusionDistances, x_n, exclusionDistances_insrt,
- top->atoms, removableAtoms, &remover))
+ *atoms, removableAtoms, &remover))
{
x->insert(x->end(), x_n.begin(), x_n.end());
exclusionDistances.insert(exclusionDistances.end(),
fprintf(stderr, "Added %d molecules (out of %d requested)\n",
mol - failed, nmol_insrt);
- const int originalAtomCount = top->atoms.nr;
- const int originalResidueCount = top->atoms.nres;
- remover.refreshAtomCount(top->atoms);
+ const int originalAtomCount = atoms->nr;
+ const int originalResidueCount = atoms->nres;
+ remover.refreshAtomCount(*atoms);
remover.removeMarkedElements(x);
- remover.removeMarkedAtoms(&top->atoms);
- if (top->atoms.nr < originalAtomCount)
+ remover.removeMarkedAtoms(atoms);
+ if (atoms->nr < originalAtomCount)
{
fprintf(stderr, "Replaced %d residues (%d atoms)\n",
- originalResidueCount - top->atoms.nres,
- originalAtomCount - top->atoms.nr);
+ originalResidueCount - atoms->nres,
+ originalAtomCount - atoms->nr);
}
- if (rpos != NULL)
+ if (rpos != nullptr)
{
for (int i = 0; i < DIM; ++i)
{
InsertMolecules()
: bBox_(false), nmolIns_(0), nmolTry_(10), seed_(0),
defaultDistance_(0.105), scaleFactor_(0.57), enumRot_(en_rotXYZ),
- top_(NULL), ePBC_(-1)
+ top_(nullptr), ePBC_(-1)
{
clear_rvec(newBox_);
clear_rvec(deltaR_);
}
virtual ~InsertMolecules()
{
- if (top_ != NULL)
+ if (top_ != nullptr)
{
- done_top(top_);
+ done_mtop(top_);
sfree(top_);
}
}
// From ITopologyProvider
- virtual t_topology *getTopology(bool /*required*/) { return top_; }
+ virtual gmx_mtop_t *getTopology(bool /*required*/) { return top_; }
virtual int getAtomCount() { return 0; }
// From ICommandLineOptionsModule
RotationType enumRot_;
Selection replaceSel_;
- t_topology *top_;
+ gmx_mtop_t *top_;
std::vector<RVec> x_;
matrix box_;
int ePBC_;
snew(top_, 1);
if (!inputConfFile_.empty())
{
- readConformation(inputConfFile_.c_str(), top_, &x_, NULL,
+ readConformation(inputConfFile_.c_str(), top_, &x_, nullptr,
&ePBC_, box_, "solute");
- if (top_->atoms.nr == 0)
+ if (top_->natoms == 0)
{
fprintf(stderr, "Note: no atoms in %s\n", inputConfFile_.c_str());
}
int ePBC_dummy;
matrix box_dummy;
readConformation(insertConfFile_.c_str(), top_insrt, &x_insrt,
- NULL, &ePBC_dummy, box_dummy, "molecule");
+ nullptr, &ePBC_dummy, box_dummy, "molecule");
if (top_insrt->atoms.nr == 0)
{
gmx_fatal(FARGS, "No molecule in %s, please check your input",
insertConfFile_.c_str());
}
- if (top_->name == NULL)
+ if (top_->name == nullptr)
{
top_->name = top_insrt->name;
}
}
}
+ // TODO: Adapt to use mtop throughout.
+ t_atoms atoms = gmx_mtop_global_atoms(top_);
+
/* add nmol_ins molecules of atoms_ins
in random orientation at random place */
insert_mols(nmolIns_, nmolTry_, seed_, defaultDistance_, scaleFactor_,
- top_, &x_, removableAtoms, top_insrt->atoms, x_insrt,
+ &atoms, &top_->symtab, &x_, removableAtoms, top_insrt->atoms, x_insrt,
ePBC_, box_, positionFile_, deltaR_, enumRot_);
/* write new configuration to file confout */
fprintf(stderr, "Writing generated configuration to %s\n",
outputConfFile_.c_str());
- write_sto_conf(outputConfFile_.c_str(), *top_->name, &top_->atoms,
- as_rvec_array(x_.data()), NULL, ePBC_, box_);
+ write_sto_conf(outputConfFile_.c_str(), *top_->name, &atoms,
+ as_rvec_array(x_.data()), nullptr, ePBC_, box_);
/* print size of generated configuration */
fprintf(stderr, "\nOutput configuration contains %d atoms in %d residues\n",
- top_->atoms.nr, top_->atoms.nres);
+ atoms.nr, atoms.nres);
+ done_atom(&atoms);
done_top(top_insrt);
sfree(top_insrt);