19package denoptim.graph.rings;
21import static org.junit.jupiter.api.Assertions.assertEquals;
22import static org.junit.jupiter.api.Assertions.assertFalse;
23import static org.junit.jupiter.api.Assertions.assertTrue;
25import java.util.HashMap;
26import java.util.HashSet;
30import java.util.logging.Logger;
32import javax.vecmath.Point3d;
34import org.junit.jupiter.api.Test;
35import org.openscience.cdk.Atom;
36import org.openscience.cdk.PseudoAtom;
37import org.openscience.cdk.interfaces.IAtom;
38import org.openscience.cdk.interfaces.IAtomContainer;
39import org.openscience.cdk.interfaces.IChemObjectBuilder;
40import org.openscience.cdk.silent.SilentChemObjectBuilder;
42import denoptim.graph.APClass;
43import denoptim.graph.DGraph;
44import denoptim.graph.Fragment;
45import denoptim.graph.Vertex;
46import denoptim.graph.Vertex.BBType;
47import denoptim.molecularmodeling.ThreeDimTreeBuilder;
48import denoptim.utils.Randomizer;
76 IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();
78 IAtomContainer iacO = builder.newAtomContainer();
79 IAtom aO =
new Atom(
"O",
new Point3d(0,0,0));
82 vO.
addAP(0,
new Point3d(0,-1,0), apc);
83 vO.
addAP(0,
new Point3d(2,0,0), apc);
84 vO.
addAP(0,
new Point3d(0,1,0), apc);
86 IAtomContainer iacC = builder.newAtomContainer();
87 IAtom aC =
new Atom(
"C",
new Point3d(0,0,0));
90 vC.
addAP(0,
new Point3d(0,-1,0), apc);
91 vC.
addAP(0,
new Point3d(2,0,0), apc);
92 vC.
addAP(0,
new Point3d(0,1,0), apc);
94 IAtomContainer iacCd = builder.newAtomContainer();
95 IAtom aCd =
new Atom(
"C",
new Point3d(0,0,0));
98 vC2.
addAP(0,
new Point3d(0,-1,0), apc);
99 vC2.
addAP(0,
new Point3d(0,1,0), apc);
110 IAtomContainer iacN = builder.newAtomContainer();
111 IAtom aN =
new Atom(
"N",
new Point3d(0,0,0));
114 vN.
addAP(0,
new Point3d(0,-1,0), apc);
115 vN.
addAP(0,
new Point3d(2,0,0), apc);
116 vN.
addAP(0,
new Point3d(0,1,0), apc);
120 IAtomContainer iacD = builder.newAtomContainer();
122 new Point3d(0,0,0)));
124 rcvM.
addAP(0,
new Point3d(-1,0,0), atMinus);
135 IAtomContainer iacE = builder.newAtomContainer();
137 new Point3d(0,0,0)));
139 rcvP.
addAP(0,
new Point3d(-1,0,0), atPlus);
165 Logger logger = Logger.getLogger(
"DummyLogger");
186 int numCompatibilities = 0;
187 for (
int i=0; i<rcvs.size(); i++)
190 for (
int j=i+1; j<rcvs.size(); j++)
196 numCompatibilities++;
202 assertEquals(15, numCompatibilities);
209 rcParams.rceMode = 0;
210 for (
int i=0; i<rcvs.size(); i++)
213 for (
int j=i+1; j<rcvs.size(); j++)
226 Map<String,String> allowedConstitutions =
new HashMap<String,String>();
227 allowedConstitutions.put(
"case-1",
"[#6]1[#6][#8][#6][#6][#6]1");
228 allowedConstitutions.put(
"case-2",
"[#6]1[#6][#7][#6][#6][#6]1");
231 Map<Vertex,Set<Vertex>> expectedRCCompatibilities =
232 new HashMap<Vertex,Set<Vertex>>();
233 expectedRCCompatibilities.put(rcvM,
new HashSet<Vertex>());
234 expectedRCCompatibilities.get(rcvM).add(rcvP3);
235 expectedRCCompatibilities.put(rcvP2,
new HashSet<Vertex>());
236 expectedRCCompatibilities.get(rcvP2).add(rcvM2);
237 expectedRCCompatibilities.get(rcvP2).add(rcvM3);
242 expectedRCCompatibilities.put(rcvP,
new HashSet<Vertex>());
243 expectedRCCompatibilities.get(rcvP).add(rcvP3);
245 numCompatibilities = 0;
246 for (
int i=0; i<rcvs.size(); i++)
249 for (
int j=i+1; j<rcvs.size(); j++)
255 numCompatibilities++;
256 assertTrue(expectedRCCompatibilities.containsKey(vI));
257 assertTrue(expectedRCCompatibilities.get(vI).contains(vJ));
261 assertEquals(4, numCompatibilities);
269 rcParams.rceMode = 0;
270 Set<String> elementsRequired =
new HashSet<String>();
271 elementsRequired.add(
"N");
272 elementsRequired.add(
"Ru");
273 rcParams.reqElInRings = elementsRequired;
275 expectedRCCompatibilities =
new HashMap<Vertex,Set<Vertex>>();
276 expectedRCCompatibilities.put(rcvP,
new HashSet<Vertex>());
277 expectedRCCompatibilities.get(rcvP).add(rcvM2);
278 expectedRCCompatibilities.get(rcvP).add(rcvM3);
279 expectedRCCompatibilities.put(rcvP2,
new HashSet<Vertex>());
280 expectedRCCompatibilities.get(rcvP2).add(rcvM2);
281 expectedRCCompatibilities.get(rcvP2).add(rcvM3);
286 expectedRCCompatibilities.put(rcvM,
new HashSet<Vertex>());
287 expectedRCCompatibilities.get(rcvM).add(rcvM2);
288 expectedRCCompatibilities.get(rcvM).add(rcvM3);
289 expectedRCCompatibilities.put(rcvP3,
new HashSet<Vertex>());
290 expectedRCCompatibilities.get(rcvP3).add(rcvM2);
291 expectedRCCompatibilities.get(rcvP3).add(rcvM3);
292 expectedRCCompatibilities.put(rcvM2,
new HashSet<Vertex>());
293 expectedRCCompatibilities.get(rcvM2).add(rcvM3);
295 numCompatibilities = 0;
296 for (
int i=0; i<rcvs.size(); i++)
299 for (
int j=i+1; j<rcvs.size(); j++)
305 numCompatibilities++;
306 assertTrue(expectedRCCompatibilities.containsKey(vI));
307 assertTrue(expectedRCCompatibilities.get(vI).contains(vJ));
311 assertEquals(9, numCompatibilities);
static final APClass RCACLASSPLUS
Conventional class of attachment points on ring-closing vertexes.
static final APClass RCACLASSMINUS
Conventional class of attachment points on ring-closing vertexes.
static APClass make(String ruleAndSubclass)
Creates an APClass if it does not exist already, or returns the reference to the existing instance.
Container for the list of vertices and the edges that connect them.
void addVertex(Vertex vertex)
Appends a vertex to this graph without creating any edge.
ArrayList< Vertex > getRCVertices()
Search for ring closing vertices: vertices that contain only a RingClosingAttractor
void appendVertexOnAP(AttachmentPoint srcAP, AttachmentPoint trgAP)
Append a vertex to this graph: adds the new vertex to the list of vertices belonging to the graph,...
Class representing a continuously connected portion of chemical object holding attachment points.
void addAP(int atomPositionNumber)
Adds an attachment point with a dummy APClass.
Fragment clone()
Returns a deep copy of this fragments.
A vertex is a data structure that has an identity and holds a list of AttachmentPoints.
void setVertexId(long vertexId2)
void setAsRCV(boolean isRCV)
AttachmentPoint getAP(int i)
Get attachment point i on this vertex.
This object represents a path in a DGraph.
The RingClosingAttractor represent the available valence/connection that allows to close a ring.
static final HashMap< APClass, String > RCALABELPERAPCLASS
Conventional labels for attractor pseudoatom.
Parameters and setting related to handling ring closures.
void setConstitutionalClosabilityConds(Map< String, String > ringClosabCondAsSMARTS)
Sets the list of constitutions that can be formed by ring closure.
Tool to build build three-dimensional (3D) tree-like molecular structures from DGraph.
void setAlignBBsIn3D(boolean align)
Sets the flag that controls whether building blocks have to be aligned according to the AP vectors or...
IAtomContainer convertGraphTo3DAtomContainer(DGraph graph)
Created a three-dimensional molecular representation from a given DGraph.
Tool to generate random numbers and random decisions.
The type of building block.