本文整理汇总了C++中BaseMolecule::asQueryMolecule方法的典型用法代码示例。如果您正苦于以下问题:C++ BaseMolecule::asQueryMolecule方法的具体用法?C++ BaseMolecule::asQueryMolecule怎么用?C++ BaseMolecule::asQueryMolecule使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BaseMolecule
的用法示例。
在下文中一共展示了BaseMolecule::asQueryMolecule方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getHCount
int MoleculeSavers::getHCount (BaseMolecule &mol, int index, int atom_number, int atom_charge)
{
int hydrogens_count = -1;
if (!mol.isRSite(index) && !mol.isPseudoAtom(index) && !mol.isTemplateAtom(index))
{
if (!mol.isQueryMolecule())
{
if (mol.getAtomAromaticity(index) == ATOM_AROMATIC &&
((atom_number != ELEM_C && atom_number != ELEM_O) || atom_charge != 0))
hydrogens_count = mol.asMolecule().getImplicitH_NoThrow(index, -1);
}
else
{
QueryMolecule::Atom &atom = mol.asQueryMolecule().getAtom(index);
if (!atom.sureValue(QueryMolecule::ATOM_TOTAL_H, hydrogens_count))
{
// Try to check if there are only one constraint
QueryMolecule::Atom *constraint = atom.sureConstraint(QueryMolecule::ATOM_TOTAL_H);
if (constraint != NULL)
hydrogens_count = constraint->value_min;
else
hydrogens_count = -1;
}
}
}
return hydrogens_count;
}
示例2: markIgnoredHydrogens
void MoleculeSubstructureMatcher::markIgnoredHydrogens (BaseMolecule &mol, int *arr, int value_keep, int value_ignore)
{
int i;
for (i = mol.vertexBegin(); i != mol.vertexEnd(); i = mol.vertexNext(i))
arr[i] = value_keep;
for (i = mol.vertexBegin(); i != mol.vertexEnd(); i = mol.vertexNext(i))
{
if (mol.getAtomNumber(i) != ELEM_H)
continue;
if (!mol.possibleAtomIsotope(i, 0))
continue;
if (mol.isQueryMolecule())
{
// Check if atom has fragment constraint.
// For example [$([#1][N])] should be ignored
if (mol.asQueryMolecule().getAtom(i).hasConstraint(QueryMolecule::ATOM_FRAGMENT))
continue;
}
const Vertex &vertex = mol.getVertex(i);
if (vertex.degree() == 1)
{
int nei_idx = vertex.neiVertex(vertex.neiBegin());
if (mol.getAtomNumber(nei_idx) == ELEM_H && mol.possibleAtomIsotope(nei_idx, 0))
continue; // do not ignore rare H-H fragment
// Check if hydrogen forms a cis-trans bond or stereocenter
int nei_vertex_idx = vertex.neiVertex(vertex.neiBegin());
if (mol.stereocenters.exists(nei_vertex_idx))
continue;
// For example for this query hydrogens should be unfolded: [H]\\C=C/C
const Vertex &nei_vertex = mol.getVertex(nei_vertex_idx);
bool not_ignore = false;
for (int nei = nei_vertex.neiBegin(); nei != nei_vertex.neiEnd(); nei = nei_vertex.neiNext(nei))
{
int edge = nei_vertex.neiEdge(nei);
if (mol.cis_trans.getParity(edge) != 0)
{
not_ignore = true;
break;
}
}
if (not_ignore)
continue;
arr[i] = value_ignore;
}
}
}
示例3: _mergeWithSubmolecule
void QueryMolecule::_mergeWithSubmolecule (BaseMolecule &bmol, const Array<int> &vertices,
const Array<int> *edges, const Array<int> &mapping, int skip_flags)
{
QueryMolecule &mol = bmol.asQueryMolecule();
int i;
// atoms
for (i = 0; i < vertices.size(); i++)
{
int newidx = mapping[vertices[i]];
_atoms.expand(newidx + 1);
_atoms.set(newidx, mol.getAtom(vertices[i]).clone());
}
// bonds
if (edges != 0)
for (i = 0; i < edges->size(); i++)
{
const Edge &edge = mol.getEdge(edges->at(i));
int beg = mapping[edge.beg];
int end = mapping[edge.end];
if (beg == -1 || end == -1)
// must have been thrown before in mergeWithSubgraph()
throw Error("_mergeWithSubmolecule: internal");
int idx = findEdgeIndex(beg, end);
_bonds.expand(idx + 1);
_bonds.set(idx, mol.getBond(edges->at(i)).clone());
// Aromaticity
if (!(skip_flags & SKIP_AROMATICITY))
aromaticity.setCanBeAromatic(idx, mol.aromaticity.canBeAromatic(edges->at(i)));
if (!(skip_flags & SKIP_CIS_TRANS) && mol.cis_trans.getParity(edges->at(i)) != 0)
setBondStereoCare(idx, mol.bondStereoCare(edges->at(i)));
}
else
for (i = mol.edgeBegin(); i < mol.edgeEnd(); i = mol.edgeNext(i))
{
const Edge &edge = mol.getEdge(i);
int beg = mapping[edge.beg];
int end = mapping[edge.end];
if (beg == -1 || end == -1)
continue;
int idx = findEdgeIndex(beg, end);
_bonds.expand(idx + 1);
_bonds.set(idx, mol.getBond(i).clone());
// Aromaticity
if (!(skip_flags & SKIP_AROMATICITY))
aromaticity.setCanBeAromatic(idx, mol.aromaticity.canBeAromatic(i));
if (!(skip_flags & SKIP_CIS_TRANS) && mol.cis_trans.getParity(i) != 0)
setBondStereoCare(idx, mol.bondStereoCare(i));
}
// 3D constraints
if (!(skip_flags & SKIP_3D_CONSTRAINTS))
spatial_constraints.buildOnSubmolecule(mol.spatial_constraints, mapping.ptr());
// fixed atoms
if (!(skip_flags & SKIP_FIXED_ATOMS))
{
for (i = 0; i < mol.fixed_atoms.size(); i++)
{
int idx = mapping[mol.fixed_atoms[i]];
if (idx >= 0)
fixed_atoms.push(idx);
}
}
// components
if (!(skip_flags & SKIP_COMPONENTS))
{
for (i = 0; i < vertices.size(); i++)
{
int v_idx = vertices[i];
if (mol.components.size() > v_idx)
{
int newidx = mapping[v_idx];
components.expandFill(newidx + 1, 0);
components[newidx] = mol.components[v_idx];
}
}
}
updateEditRevision();
}