diff options
author | Manoj Rajagopalan <manoj@nanorex.com> | 2008-04-04 03:08:00 +0000 |
---|---|---|
committer | Manoj Rajagopalan <manoj@nanorex.com> | 2008-04-04 03:08:00 +0000 |
commit | 74df27dadf7ef89e4089bd9423f1053ed2658362 (patch) | |
tree | 83a01478f817e9604fcabdd000fad6b978abd17b | |
parent | 2c888f29dc7826b39a860a195df9fbad81a9d85b (diff) | |
download | nanoengineer-74df27dadf7ef89e4089bd9423f1053ed2658362.tar.gz nanoengineer-74df27dadf7ef89e4089bd9423f1053ed2658362.zip |
Testing mmp files moved to $NV1_HOME/Testing/MMP_TestFiles/ and tests updated to contain relative paths
New graphics test named Testing/Plugins/MMPOpenGLRendererTest for MMP import/export
Added an extra CppUnit file-import test (benzene) and added atom- and bond-level diagnostics
This test confirms that there is a bug in scenegraph construction
- spurious bonds are visible in MMPOpenGLRendererTest as well as in NXOpenGLRenderingEngineTest
- all atoms that should be connected by bonds are not connected.
23 files changed, 2145 insertions, 238 deletions
diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.pro b/cad/plugins/NanoVision-1/src/KDevelop/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.pro index 094dd7a70..6471d896a 100644 --- a/cad/plugins/NanoVision-1/src/KDevelop/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.pro +++ b/cad/plugins/NanoVision-1/src/KDevelop/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.pro @@ -3,7 +3,8 @@ TEMPLATE = lib CONFIG += dll \ plugin \ stl \ - debug_and_release + debug_and_release \ + rtti SOURCES += ../../../Plugins/NanorexMMPImportExport/NanorexMMPImportExport.cpp @@ -34,9 +35,10 @@ QMAKE_CXXFLAGS_DEBUG += -DNX_DEBUG \ -O0 \ -fno-inline + LIBS += -L../../../../lib \ - -lNanorexUtility \ -lNanorexInterface \ + -lNanorexUtility \ -L$(OPENBABEL_LIBPATH) \ -lopenbabel diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Testing/CppUnit/CppUnit.pro b/cad/plugins/NanoVision-1/src/KDevelop/Testing/CppUnit/CppUnit.pro index 0c30510c0..46c24875e 100644 --- a/cad/plugins/NanoVision-1/src/KDevelop/Testing/CppUnit/CppUnit.pro +++ b/cad/plugins/NanoVision-1/src/KDevelop/Testing/CppUnit/CppUnit.pro @@ -41,11 +41,11 @@ win32 : TARGETDEPS ~= s/.so/.a/g DESTDIR = ../../../../bin -CONFIG += debug_and_release \ -stl +CONFIG += stl \ + debug_and_release # This tell qmake to not create a Mac bundle for this application. -CONFIG -= app_bundle +CONFIG -= app_bundle QMAKE_CXXFLAGS_DEBUG += -DNX_DEBUG \ -g \ @@ -59,8 +59,7 @@ TARGETDEPS += ../../../../lib/libNanorexInterface.so \ QT -= gui -DISTFILES += ../../../Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.rl \ - ../../../Plugins/NanorexMMPImportExport/molecule.rl \ +DISTFILES += ../../../Plugins/NanorexMMPImportExport/molecule.rl \ ../../../Plugins/NanorexMMPImportExport/atom.rl \ ../../../Plugins/NanorexMMPImportExport/utilities.rl \ ../../../Plugins/NanorexMMPImportExport/group.rl \ @@ -68,10 +67,11 @@ DISTFILES += ../../../Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest. + LIBS += -L../../../../lib \ - -lNanorexMMPImportExport \ - -lNanorexUtility \ -lNanorexInterface \ + -lNanorexUtility \ + -lNanorexMMPImportExport \ -L$(OPENBABEL_LIBPATH) \ -L$(HDF5_SIMRESULTS_INCPATH) \ -lcppunit \ diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/MMPOpenGLRendererTest/MMPOpenGLRendererTest.pro b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/MMPOpenGLRendererTest/MMPOpenGLRendererTest.pro new file mode 100644 index 000000000..a850d81d0 --- /dev/null +++ b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/MMPOpenGLRendererTest/MMPOpenGLRendererTest.pro @@ -0,0 +1,35 @@ +SOURCES += ../../../../Plugins/NanorexMMPImportExport/MMPOpenGLRendererTest.cpp + +TEMPLATE = app + +CONFIG -= release + +CONFIG += debug \ +stl \ +rtti \ +opengl +QT += opengl + +DESTDIR = ../../../../../bin/ + +QMAKE_CXXFLAGS_DEBUG += -DNX_DEBUG \ + -g \ + -O0 \ + -fno-inline + +INCLUDEPATH += ../../../../../src/Plugins/RenderingEngines/OpenGL \ + ../../../../../src/Plugins/RenderingEngines/OpenGL/GLT \ + $(OPENBABEL_INCPATH) \ + ../../../../../src \ + ../../../../../include + +LIBS += -L../../../../../lib \ + -lNXBallAndStickOpenGLRenderer \ + -lNXOpenGLRenderingEngine \ + -lNanorexMMPImportExport \ + -lNanorexInterface \ + -lNanorexUtility \ + -lopenbabel + +TARGETDEPS += ../../../../../lib/libNXBallAndStickOpenGLRenderer.so + diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/Plugins.pro b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/Plugins.pro index 319e1df43..d662c94f6 100644 --- a/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/Plugins.pro +++ b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/Plugins.pro @@ -2,5 +2,6 @@ TEMPLATE = subdirs CONFIG += ordered -SUBDIRS += RenderingEngines +SUBDIRS += RenderingEngines \ + MMPOpenGLRendererTest diff --git a/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngineTest/NXOpenGLRenderingEngineTest.pro b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngineTest/NXOpenGLRenderingEngineTest.pro index 0f9329253..3d3540efd 100644 --- a/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngineTest/NXOpenGLRenderingEngineTest.pro +++ b/cad/plugins/NanoVision-1/src/KDevelop/Testing/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngineTest/NXOpenGLRenderingEngineTest.pro @@ -1,7 +1,5 @@ TEMPLATE = app -CONFIG -= release - CONFIG += stl \ opengl \ debug_and_release \ @@ -31,12 +29,13 @@ TARGETDEPS += ../../../../../../../lib/libNXBallAndStickOpenGLRenderer.so \ + LIBS += -L../../../../../../../lib \ - -lNanorexUtility \ - -lNanorexInterface \ - -lNXOpenGLRenderingEngine \ -lNXBallAndStickOpenGLRenderer \ - -lopenbabel \ + -lNXOpenGLRenderingEngine \ + -lNanorexInterface \ + -lNanorexUtility \ -lNXOpenGLSceneGraph \ - -lGLT + -lGLT \ + -lopenbabel diff --git a/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro b/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro index 2690bfed6..15c2d2f42 100644 --- a/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro +++ b/cad/plugins/NanoVision-1/src/KDevelop/nv1/nv1.pro @@ -2,7 +2,8 @@ TEMPLATE = app CONFIG += stl \ opengl \ - debug_and_release + debug_and_release \ + rtti QT += opengl @@ -92,13 +93,14 @@ TARGETDEPS += ../../../lib/libNXOpenGLSceneGraph.a \ # ../../../lib/libNXBallAndStickOpenGLRenderer.so # ../../../lib/libNXOpenGLRenderingEngine.so +# -lNXOpenGLRenderingEngine +# -lNXBallAndStickOpenGLRenderer + LIBS += -L../../../lib \ - -lNanorexInterface \ -lNanorexUtility \ + -lNanorexInterface \ -L$(OPENBABEL_LIBPATH) \ -lNXOpenGLSceneGraph \ -lGLT \ -lopenbabel -# -lNXOpenGLRenderingEngine -# -lNXBallAndStickOpenGLRenderer diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/MMPOpenGLRendererTest.cpp b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/MMPOpenGLRendererTest.cpp new file mode 100644 index 000000000..ce966d12c --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/MMPOpenGLRendererTest.cpp @@ -0,0 +1,52 @@ +// Copyright 2008 Nanorex, Inc. See LICENSE file for details. + +#include "Nanorex/Interface/NXMoleculeSet.h" +#include "Nanorex/Interface/NXDataStoreInfo.h" +#include "Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.h" +#include "Plugins/NanorexMMPImportExport/NanorexMMPImportExport.h" +#include "Plugins/RenderingEngines/OpenGL/Renderers/NXBallAndStickOpenGLRenderer.h" + +#include <QApplication> +#include <QMainWindow> + +using namespace Nanorex; +using namespace std; + +int main(int argc, char *argv[]) +{ + NXAtomData basRenderData(0); + + // create application and main window + QApplication app(argc, argv); + QMainWindow mainWindow; + NXOpenGLRenderingEngine *renderingEngine + = new NXOpenGLRenderingEngine(&mainWindow); + mainWindow.setCentralWidget(renderingEngine); + NXBallAndStickOpenGLRenderer *renderer = + new NXBallAndStickOpenGLRenderer(renderingEngine); + renderingEngine->setRenderer("bas", renderer); + renderingEngine->setRenderer("def", renderer); + renderingEngine->initializePlugins(); + + mainWindow.show(); + + basRenderData.setRenderStyleCode("bas"); + NXMoleculeSet theMoleculeSet; + NXDataStoreInfo dataStoreInfo; + NanorexMMPImportExport importer; + NXCommandResult const *result = + importer.importFromFile(&theMoleculeSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/benzene.mmp", 0,0); + assert(result->getResult() == (int) NX_CMD_SUCCESS); + + renderingEngine->clearFrames(); + assert(renderingEngine->getFrameCount() == 0); + result = renderingEngine->addFrame(&theMoleculeSet); + assert(result->getResult() == (int) NX_CMD_SUCCESS); + assert(renderingEngine->getFrameCount() == 1); + renderingEngine->setCurrentFrame(0); + + return app.exec(); +} + + diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.cpp b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.cpp index 6ef6cb658..c372ad896 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.cpp +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.cpp @@ -928,7 +928,7 @@ char const NanorexMMPImportExport::_s_hybridizationName[8][8] = { /* CONSTRUCTOR */ NanorexMMPImportExport::NanorexMMPImportExport() { - reset(); +reset(); } /* DESTRUCTOR */ @@ -990,7 +990,7 @@ importFromFile(NXMoleculeSet *rootMoleculeSetPtr, { reset(); bool success = true; - + NXCommandResult *result = new NXCommandResult(); result->setResult(NX_CMD_SUCCESS); @@ -1281,32 +1281,32 @@ _eof_trans: case 38: #line 79 "NanorexMMPImportExport.rl" { p--; { - if(top == stackSize) { - stackSize += stackSize; - stack.resize(stackSize, 0); + if(top == stackSize) { + stackSize += stackSize; + stack.resize(stackSize, 0); // cerr << "Resized stack" << endl; - } -{stack[top++] = cs; cs = 294; goto _again;}} } + } + {stack[top++] = cs; cs = 294; goto _again;}} } break; case 39: #line 82 "NanorexMMPImportExport.rl" { p--; { - if(top == stackSize) { - stackSize += stackSize; - stack.resize(stackSize, 0); + if(top == stackSize) { + stackSize += stackSize; + stack.resize(stackSize, 0); // cerr << "Resized stack" << endl; - } -{stack[top++] = cs; cs = 294; goto _again;}} } + } + {stack[top++] = cs; cs = 294; goto _again;}} } break; case 40: #line 87 "NanorexMMPImportExport.rl" { p--; { - if(top == stackSize) { - stackSize += stackSize; - stack.resize(stackSize, 0); + if(top == stackSize) { + stackSize += stackSize; + stack.resize(stackSize, 0); // cerr << "Resized stack" << endl; - } -{stack[top++] = cs; cs = 294; goto _again;}} } + } + {stack[top++] = cs; cs = 294; goto _again;}} } break; case 44: #line 1 "NanorexMMPImportExport.rl" @@ -1465,10 +1465,13 @@ void NanorexMMPImportExport::newAtom(int id, int atomicNum, int x, int y, int z, atomPtr = molPtr->NewAtom(); + atomPtr->SetAtomicNum(atomicNum); NXAtomData *atomDataPtr = new NXAtomData(atomicNum); atomDataPtr->setIdx(id); atomDataPtr->setRenderStyleCode(style); + assert(atomDataPtr->GetDataType() == NXAtomDataType); atomPtr->SetData(atomDataPtr); // atomic number + assert(atomPtr->HasData(NXAtomDataType)); foundAtomList[id] = atomPtr; @@ -1519,7 +1522,7 @@ void NanorexMMPImportExport::newBond(string const& bondType, int targetAtomId) if(targetAtomExistsQuery == foundAtomList.end()) { CSEVERE("**ERROR** attempting to bond to non-existent atomID " - + NXUtility::itos(targetAtomId)); + + NXUtility::itos(targetAtomId)); } else { OBAtom *const targetAtomPtr = targetAtomExistsQuery->second; @@ -1528,20 +1531,21 @@ void NanorexMMPImportExport::newBond(string const& bondType, int targetAtomId) // when encountering a blank line if(molPtr->GetBond(atomPtr, targetAtomPtr) == NULL) { // bond was not previously encountered, include - CDEBUG("bonding atom #" + NXUtility::itos(atomPtr->GetIdx()) + - " to atom #" + NXUtility::itos(targetAtomPtr->GetIdx())); + int atomId = ((NXAtomData*)(atomPtr->GetData(NXAtomDataType)))->getIdx(); + CDEBUG("bonding atom #" + NXUtility::itos(atomId) + + " to atom #" + NXUtility::itos(targetAtomId)); bondPtr = molPtr->NewBond(); bondOrder = GetBondOrderFromType(bondType); bondPtr->SetBondOrder(bondOrder); - bondPtr->SetBegin(atomPtr); - bondPtr->SetEnd(targetAtomPtr); atomPtr->AddBond(bondPtr); targetAtomPtr->AddBond(bondPtr); + bondPtr->SetBegin(atomPtr); + bondPtr->SetEnd(targetAtomPtr); CDEBUG("bond" + bondType + " " + NXUtility::itos(targetAtomId)); } else { CSEVERE("bond to atom #" + NXUtility::itos(targetAtomId) + - " already exists"); + " already exists"); } } @@ -1554,7 +1558,7 @@ int NanorexMMPImportExport::GetBondOrderFromType(string const& type) if(type == "1") return 1; else if(type == "2") - return 2; + return 2; else if(type == "3") return 3; else if(type == "a") @@ -1598,7 +1602,7 @@ NanorexMMPImportExport::newMolecule(string const& name, string const& style) /* FUNCTION: newViewDataGroup */ void NanorexMMPImportExport::newViewDataGroup(void) { - insideViewDataGroup = true; +insideViewDataGroup = true; CDEBUG("[special] group (View Data)"); } @@ -1690,7 +1694,7 @@ void NanorexMMPImportExport::endGroup(string const& name) "group (" + groupName + ')'); } - + if(insideViewDataGroup) { insideViewDataGroup = false; molSetPtr = NULL; @@ -1731,7 +1735,7 @@ NanorexMMPImportExport::newChunkInfo(std::string const& key, if(insideViewDataGroup) return; - + /// @todo } @@ -1795,7 +1799,7 @@ NanorexMMPImportExport::GetAtomRenderStyleCode(OBAtom *const atomPtr) /* FUNCTION: PrintMolecule */ /* static */ void NanorexMMPImportExport::PrintMolecule(ostream& o, - OBMol *const molPtr) +OBMol *const molPtr) { set<int> prevAtomIdx; set<int> prevBondIdx; /// @todo - replace with simple bond count diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.rl b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.rl index 99c4e7d3e..be03cff1f 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.rl +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExport.rl @@ -46,7 +46,7 @@ inline void DEBUG_MSG(string const& filename, int line, string const& s) machine mmp_parser; include group "group.rl"; - + mmpformat_line = 'mmpformat' nonNEWLINEspace+ @@ -63,7 +63,7 @@ inline void DEBUG_MSG(string const& filename, int line, string const& s) 'kelvin' nonNEWLINEspace+ whole_number % { kelvinTemp = intVal; } - nonNEWLINEspace* + nonNEWLINEspace* EOL; end_line = 'end' nonNEWLINEspace+; @@ -76,28 +76,28 @@ main := WHITESPACE* WHITESPACE* )? group_view_data_stmt_begin_line - @ { fhold; fcall group_scanner; } - WHITESPACE* + @ { fhold; fcall group_scanner; } + WHITESPACE* group_mol_struct_stmt_begin_line - @ { fhold; fcall group_scanner; } - WHITESPACE* + @ { fhold; fcall group_scanner; } + WHITESPACE* end1_line WHITESPACE* group_clipboard_stmt_begin_line - @ { fhold; fcall group_scanner; } - WHITESPACE* + @ { fhold; fcall group_scanner; } + WHITESPACE* end_line any* ; # dynamic stack re-sizing -prepush { - if(top == stackSize) { - stackSize += stackSize; - stack.resize(stackSize, 0); + prepush { + if(top == stackSize) { + stackSize += stackSize; + stack.resize(stackSize, 0); // cerr << "Resized stack" << endl; + } } -} }%% @@ -129,7 +129,7 @@ char const NanorexMMPImportExport::_s_hybridizationName[8][8] = { /* CONSTRUCTOR */ NanorexMMPImportExport::NanorexMMPImportExport() { - reset(); +reset(); } /* DESTRUCTOR */ @@ -182,7 +182,7 @@ importFromFile(NXMoleculeSet *rootMoleculeSetPtr, { reset(); bool success = true; - + NXCommandResult *result = new NXCommandResult(); result->setResult(NX_CMD_SUCCESS); @@ -255,10 +255,13 @@ void NanorexMMPImportExport::newAtom(int id, int atomicNum, int x, int y, int z, atomPtr = molPtr->NewAtom(); + atomPtr->SetAtomicNum(atomicNum); NXAtomData *atomDataPtr = new NXAtomData(atomicNum); atomDataPtr->setIdx(id); atomDataPtr->setRenderStyleCode(style); + assert(atomDataPtr->GetDataType() == NXAtomDataType); atomPtr->SetData(atomDataPtr); // atomic number + assert(atomPtr->HasData(NXAtomDataType)); foundAtomList[id] = atomPtr; @@ -309,7 +312,7 @@ void NanorexMMPImportExport::newBond(string const& bondType, int targetAtomId) if(targetAtomExistsQuery == foundAtomList.end()) { CSEVERE("**ERROR** attempting to bond to non-existent atomID " - + NXUtility::itos(targetAtomId)); + + NXUtility::itos(targetAtomId)); } else { OBAtom *const targetAtomPtr = targetAtomExistsQuery->second; @@ -318,20 +321,21 @@ void NanorexMMPImportExport::newBond(string const& bondType, int targetAtomId) // when encountering a blank line if(molPtr->GetBond(atomPtr, targetAtomPtr) == NULL) { // bond was not previously encountered, include - CDEBUG("bonding atom #" + NXUtility::itos(atomPtr->GetIdx()) + - " to atom #" + NXUtility::itos(targetAtomPtr->GetIdx())); + int atomId = ((NXAtomData*)(atomPtr->GetData(NXAtomDataType)))->getIdx(); + CDEBUG("bonding atom #" + NXUtility::itos(atomId) + + " to atom #" + NXUtility::itos(targetAtomId)); bondPtr = molPtr->NewBond(); bondOrder = GetBondOrderFromType(bondType); bondPtr->SetBondOrder(bondOrder); - bondPtr->SetBegin(atomPtr); - bondPtr->SetEnd(targetAtomPtr); atomPtr->AddBond(bondPtr); targetAtomPtr->AddBond(bondPtr); + bondPtr->SetBegin(atomPtr); + bondPtr->SetEnd(targetAtomPtr); CDEBUG("bond" + bondType + " " + NXUtility::itos(targetAtomId)); } else { CSEVERE("bond to atom #" + NXUtility::itos(targetAtomId) + - " already exists"); + " already exists"); } } @@ -344,7 +348,7 @@ int NanorexMMPImportExport::GetBondOrderFromType(string const& type) if(type == "1") return 1; else if(type == "2") - return 2; + return 2; else if(type == "3") return 3; else if(type == "a") @@ -388,7 +392,7 @@ NanorexMMPImportExport::newMolecule(string const& name, string const& style) /* FUNCTION: newViewDataGroup */ void NanorexMMPImportExport::newViewDataGroup(void) { - insideViewDataGroup = true; +insideViewDataGroup = true; CDEBUG("[special] group (View Data)"); } @@ -480,7 +484,7 @@ void NanorexMMPImportExport::endGroup(string const& name) "group (" + groupName + ')'); } - + if(insideViewDataGroup) { insideViewDataGroup = false; molSetPtr = NULL; @@ -521,7 +525,7 @@ NanorexMMPImportExport::newChunkInfo(std::string const& key, if(insideViewDataGroup) return; - + /// @todo } @@ -585,7 +589,7 @@ NanorexMMPImportExport::GetAtomRenderStyleCode(OBAtom *const atomPtr) /* FUNCTION: PrintMolecule */ /* static */ void NanorexMMPImportExport::PrintMolecule(ostream& o, - OBMol *const molPtr) +OBMol *const molPtr) { set<int> prevAtomIdx; set<int> prevBondIdx; /// @todo - replace with simple bond count diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.cpp b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.cpp index aaaa84f62..80f96b45c 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.cpp +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.cpp @@ -9497,7 +9497,7 @@ void NanorexMMPImportExportRagelTest::fileParseTest(void) void NanorexMMPImportExportRagelTest::fileParseTestH2O(void) { - ifstream infile("H2O.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/H2O.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile); @@ -9513,7 +9513,7 @@ void NanorexMMPImportExportRagelTest::fileParseTestH2O(void) void NanorexMMPImportExportRagelTest::fileParseTestHOOH(void) { - ifstream infile("hydrogen_peroxide.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile); @@ -9529,7 +9529,7 @@ void NanorexMMPImportExportRagelTest::fileParseTestHOOH(void) void NanorexMMPImportExportRagelTest::fileParseTestChlorophyll(void) { - ifstream infile("chlorophyll.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/chlorophyll.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); @@ -9545,7 +9545,7 @@ void NanorexMMPImportExportRagelTest::fileParseTestChlorophyll(void) void NanorexMMPImportExportRagelTest::fileParseTestVanillin(void) { - ifstream infile("vanillin.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/vanillin.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); @@ -9562,7 +9562,7 @@ void NanorexMMPImportExportRagelTest::fileParseTestVanillin(void) void NanorexMMPImportExportRagelTest::fileParseTestNanocar(void) { - ifstream infile("nanocar.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/nanocar.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.rl b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.rl index 913a5ac52..2f2f9dd70 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.rl +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportRagelTest.rl @@ -1,6 +1,6 @@ // Copyright 2008 Nanorex, Inc. See LICENSE file for details. -#include "NanorexMMPImportExportTest.h" +#include "NanorexMMPImportExportRagelTest.h" #include "Nanorex/Utility/NXUtility.h" #include <sstream> #include <cfloat> @@ -8,9 +8,11 @@ using namespace Nanorex; using namespace std; -CPPUNIT_TEST_SUITE_REGISTRATION(NanorexMMPImportExportTest); -CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(NanorexMMPImportExportTest, - "NanorexMMPImportExportTestSuite"); +CPPUNIT_TEST_SUITE_REGISTRATION(NanorexMMPImportExportRagelTest); +CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(NanorexMMPImportExportRagelTest, + "NanorexMMPImportExportRagelTestSuite"); + +// #define VERBOSE #if defined(VERBOSE) #define CERR(s) \ @@ -21,17 +23,17 @@ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(NanorexMMPImportExportTest, // -- member functions -- -void NanorexMMPImportExportTest::setUp(void) +void NanorexMMPImportExportRagelTest::setUp(void) { } -void NanorexMMPImportExportTest::tearDown(void) +void NanorexMMPImportExportRagelTest::tearDown(void) { } -void NanorexMMPImportExportTest::reset(void) +void NanorexMMPImportExportRagelTest::reset(void) { atomIds.clear(); atomicNums.clear(); @@ -59,25 +61,25 @@ void NanorexMMPImportExportTest::reset(void) } -void NanorexMMPImportExportTest::syntaxError(string const& errorMessage) +void NanorexMMPImportExportRagelTest::syntaxError(string const& errorMessage) { cerr << lineNum << ": Syntax Error : " << errorMessage << endl; } void -NanorexMMPImportExportTest::atomLineTestSetUp(vector<string>& testStrings, - vector<AtomTestInfo>& answers) +NanorexMMPImportExportRagelTest::atomLineTestSetUp(vector<string>& testStrings, + vector<AtomTestInfo>& answers) { testStrings.clear(); answers.clear(); testStrings.push_back("atom 12 (10) (1,2,3) def\n"); answers.push_back(AtomTestInfo(12, 10, 1, 2, 3, "def")); - + testStrings.push_back("atom 6 (99 ) ( 15632,-2, -63 ) bas \n"); answers.push_back(AtomTestInfo(6, 99, 15632, -2, -63, "bas")); - + testStrings.push_back("atom 12 (10) (1,2,3) def " "# this one's got a comment \n"); answers.push_back(AtomTestInfo(12, 10, 1, 2, 3, "def")); @@ -88,7 +90,7 @@ NanorexMMPImportExportTest::atomLineTestSetUp(vector<string>& testStrings, } -void NanorexMMPImportExportTest::atomLineTest(void) +void NanorexMMPImportExportRagelTest::atomLineTest(void) { vector<string> testStrings; vector<AtomTestInfo> answers; @@ -102,7 +104,7 @@ void NanorexMMPImportExportTest::atomLineTest(void) CPPUNIT_ASSERT(atomLocs.back().x == answers[i].pos.x); CPPUNIT_ASSERT(atomLocs.back().y == answers[i].pos.y); CPPUNIT_ASSERT(atomLocs.back().z == answers[i].pos.z); - // cerr << "style comparison: " << currentAtomStyle << " =?= " << answers[i].style << endl; +// cerr << "style comparison: " << currentAtomStyle << " =?= " << answers[i].style << endl; CPPUNIT_ASSERT(atomStyles.back() == answers[i].style); } CPPUNIT_ASSERT(atomIds.size() == testStrings.size()); @@ -119,7 +121,7 @@ void NanorexMMPImportExportTest::atomLineTest(void) include atom "atom.rl"; main := space** atom_decl_line - // @ { newAtom(atomId, atomicNum, x, y, z, atomStyle); } +// @ { newAtom(atomId, atomicNum, x, y, z, atomStyle); } $lerr { CPPUNIT_ASSERT_MESSAGE(false, "Error encountered in atom_decl_line_test" " state machine"); @@ -128,14 +130,14 @@ main := space** atom_decl_line }%% -void NanorexMMPImportExportTest::atomLineTestHelper(char const *const testInput) +void NanorexMMPImportExportRagelTest::atomLineTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); char const *eof = NULL; int cs; - // cerr << "atomLineTestHelper (debug): *(pe-1) = (int) " << (int) *(pe-1) << endl; +// cerr << "atomLineTestHelper (debug): *(pe-1) = (int) " << (int) *(pe-1) << endl; %% machine atom_decl_line_test; %% write data; @@ -144,9 +146,9 @@ void NanorexMMPImportExportTest::atomLineTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::newAtom(int atomId, int atomicNum, - int x, int y, int z, - std::string const& atomStyle) +void NanorexMMPImportExportRagelTest::newAtom(int atomId, int atomicNum, + int x, int y, int z, + std::string const& atomStyle) { ++atomCount; CERR("atom " + NXUtility::itos(atomId) + " (" + NXUtility::itos(atomicNum) @@ -157,14 +159,14 @@ void NanorexMMPImportExportTest::newAtom(int atomId, int atomicNum, atomLocs.push_back(Position(x,y,z)); atomStyles.push_back(atomStyle); - // properties +// properties atomProps.push_back(map<string,string>()); bonds.push_back(map<string, vector<int> >()); } -void NanorexMMPImportExportTest::bondLineTest(void) +void NanorexMMPImportExportRagelTest::bondLineTest(void) { char *testInput = NULL; @@ -199,7 +201,7 @@ main := space** bond_line }%% -void NanorexMMPImportExportTest::bondLineTestHelper(char const *const testInput) +void NanorexMMPImportExportRagelTest::bondLineTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -213,8 +215,8 @@ void NanorexMMPImportExportTest::bondLineTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::newBond(std::string const& bondType, - int targetAtomId) +void NanorexMMPImportExportRagelTest::newBond(std::string const& bondType, + int targetAtomId) { if(bondType == "1") ++bond1Count; @@ -230,13 +232,13 @@ void NanorexMMPImportExportTest::newBond(std::string const& bondType, ++bondgCount; CERR("bond" + bondType + " " + NXUtility::itos(targetAtomId)); - // currentBondType = bondType; - // targetAtomIds.push_back(targetAtomId); +// currentBondType = bondType; +// targetAtomIds.push_back(targetAtomId); bonds.back()[bondType].push_back(targetAtomId); } -void NanorexMMPImportExportTest::bondDirectionTest(void) +void NanorexMMPImportExportRagelTest::bondDirectionTest(void) { char const *testInput = NULL; @@ -268,7 +270,7 @@ main := space** bond_direction_line void -NanorexMMPImportExportTest::bondDirectionTestHelper(char const *const testInput) +NanorexMMPImportExportRagelTest::bondDirectionTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -282,7 +284,7 @@ NanorexMMPImportExportTest::bondDirectionTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::newBondDirection(int atomId1, int atomId2) +void NanorexMMPImportExportRagelTest::newBondDirection(int atomId1, int atomId2) { CERR("bond_direction " + NXUtility::itos(atomId1) + " " + NXUtility::itos(atomId2)); @@ -291,7 +293,7 @@ void NanorexMMPImportExportTest::newBondDirection(int atomId1, int atomId2) } -void NanorexMMPImportExportTest::infoAtomTest(void) +void NanorexMMPImportExportRagelTest::infoAtomTest(void) { char const *testInput = NULL; atomProps.push_back(map<string,string>()); @@ -300,16 +302,16 @@ void NanorexMMPImportExportTest::infoAtomTest(void) infoAtomTestHelper(testInput); CPPUNIT_ASSERT(atomProps.back()["hybridization"] == "sp3"); - // spaces +// spaces testInput = "info atom company = Nanorex \n"; infoAtomTestHelper(testInput); CPPUNIT_ASSERT(atomProps.back()["company"] == "Nanorex"); - // spaces in keys and values +// spaces in keys and values testInput = "info atom key with spaces = value with spaces\n"; infoAtomTestHelper(testInput); - // cerr << "infoAtomTest: COMPARING '" << infoAtomKeys.back() << "' and '" - // << infoAtomValues.back() << "'" << endl; +// cerr << "infoAtomTest: COMPARING '" << infoAtomKeys.back() << "' and '" +// << infoAtomValues.back() << "'" << endl; CPPUNIT_ASSERT(atomProps.back()["key with spaces"] == "value with spaces"); testInput = " info atom " @@ -338,7 +340,7 @@ main := space** }%% -void NanorexMMPImportExportTest::infoAtomTestHelper(char const *const testInput) +void NanorexMMPImportExportRagelTest::infoAtomTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -352,28 +354,28 @@ void NanorexMMPImportExportTest::infoAtomTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::newAtomInfo(std::string const& key, - std::string const& value) +void NanorexMMPImportExportRagelTest::newAtomInfo(std::string const& key, + std::string const& value) { ++infoAtomCount; - // string key1 = key; - // stripTrailingWhiteSpaces(key1); - // string value1 = value; - // stripTrailingWhiteSpaces(value1); +// string key1 = key; +// stripTrailingWhiteSpaces(key1); +// string value1 = value; +// stripTrailingWhiteSpaces(value1); CERR("info atom '" + key + "' = '" + value + "'"); - // infoAtomKeys.push_back(key); - // infoAtomValues.push_back(value); +// infoAtomKeys.push_back(key); +// infoAtomValues.push_back(value); atomProps.back().insert(make_pair(key, value)); } -void NanorexMMPImportExportTest::atomStmtTest(void) +void NanorexMMPImportExportRagelTest::atomStmtTest(void) { reset(); char const *testInput = NULL; - // cerr << "Performing atom_stmt test" << endl; +// cerr << "Performing atom_stmt test" << endl; testInput = "atom 15 (6) (50, -50, 600) style with spaces \n" @@ -405,7 +407,7 @@ void NanorexMMPImportExportTest::atomStmtTest(void) include atom "atom.rl"; main := WHITESPACE* atom_decl_line - // %{newAtom(atomId, atomicNum, x, y, z, atomStyle);} +// %{newAtom(atomId, atomicNum, x, y, z, atomStyle);} (WHITESPACE* (atom_decl_line | atom_attrib_line))* $lerr { CPPUNIT_ASSERT_MESSAGE(false, "Error encountered in " @@ -415,7 +417,7 @@ main := WHITESPACE* atom_decl_line }%% -void NanorexMMPImportExportTest::atomStmtTestHelper(char const *const testInput) +void NanorexMMPImportExportRagelTest::atomStmtTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -429,14 +431,14 @@ void NanorexMMPImportExportTest::atomStmtTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::multipleAtomStmtTest(void) +void NanorexMMPImportExportRagelTest::multipleAtomStmtTest(void) { reset(); char const *testInput = NULL; - // cerr << "Performing atom_stmt test" << endl; - // #if 0 +// cerr << "Performing atom_stmt test" << endl; +// #if 0 testInput = ""; multipleAtomStmtTestHelper(testInput); CPPUNIT_ASSERT(atomIds.size() == 0); @@ -454,7 +456,7 @@ void NanorexMMPImportExportTest::multipleAtomStmtTest(void) CPPUNIT_ASSERT(atomIds.size() == 0); CPPUNIT_ASSERT(atomicNums.size() == 0); - // single line +// single line lineNum = 1; testInput = "atom 15 (6) (50, -50, 600) style with spaces \n" @@ -476,9 +478,9 @@ void NanorexMMPImportExportTest::multipleAtomStmtTest(void) CPPUNIT_ASSERT(bonds.back()["1"][0] == 4); CPPUNIT_ASSERT(bonds.back()["1"][1] == 6); CPPUNIT_ASSERT(bonds.back()["1"][2] == 7); - // #endif +// #endif - // two lines +// two lines lineNum = 1; testInput = "atom 1 (9) (-2, 4, 1000) custom style \n" @@ -498,7 +500,7 @@ void NanorexMMPImportExportTest::multipleAtomStmtTest(void) multipleAtomStmtTestHelper(testInput); - // include contribs from previous test - data structures haven't been cleared +// include contribs from previous test - data structures haven't been cleared CPPUNIT_ASSERT(atomIds.size() == 4); CPPUNIT_ASSERT(atomicNums.size() == 4); CPPUNIT_ASSERT(atomLocs.size() == 4); @@ -540,15 +542,15 @@ void NanorexMMPImportExportTest::multipleAtomStmtTest(void) atom_stmt := |* #EOL => { cerr << "EOL, p = " << p << endl; }; WHITESPACE* atom_decl_line; - WHITESPACE* bond_line; - WHITESPACE* bond_direction_line; - WHITESPACE* info_atom_line; - WHITESPACE* 0 => {fret;}; + WHITESPACE* bond_line; + WHITESPACE* bond_direction_line; + WHITESPACE* info_atom_line; + WHITESPACE* 0 => {fret;}; *|; main := (WHITESPACE** atom_decl_line @ { //newAtom(atomId, atomicNum, x, y, z, atomStyle); - // cerr << "calling, p = " << p << endl; +// cerr << "calling, p = " << p << endl; fcall atom_stmt;})* $lerr { CPPUNIT_ASSERT_MESSAGE(false, "Error encountered in " @@ -560,7 +562,7 @@ main := (WHITESPACE** atom_decl_line void -NanorexMMPImportExportTest:: +NanorexMMPImportExportRagelTest:: multipleAtomStmtTestHelper(char const *const testInput) { char const *p = testInput; @@ -578,7 +580,7 @@ multipleAtomStmtTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::molLineTest(void) +void NanorexMMPImportExportRagelTest::molLineTest(void) { char const *testInput = NULL; @@ -587,7 +589,7 @@ void NanorexMMPImportExportTest::molLineTest(void) CPPUNIT_ASSERT(currentMolName == "Nanorex1"); CPPUNIT_ASSERT(currentMolStyle == "style1"); - // spaces and tabs +// spaces and tabs testInput = " mol ( Nanorex2 ) style with lotsa spaces" "\tand \t\ttabs \n"; @@ -596,13 +598,13 @@ void NanorexMMPImportExportTest::molLineTest(void) CPPUNIT_ASSERT(currentMolStyle == "style with lotsa spaces\tand \t\ttabs"); - // mol names with spaces +// mol names with spaces testInput = "mol ( name with spaces and\ttabs\t) style\t3 \n"; molLineTestHelper(testInput); CPPUNIT_ASSERT(currentMolName == "name with spaces and\ttabs"); CPPUNIT_ASSERT(currentMolStyle == "style\t3"); - // no mol style which should default to "def" +// no mol style which should default to "def" testInput = "mol (Untitled)\n"; molLineTestHelper(testInput); CPPUNIT_ASSERT(currentMolName == "Untitled"); @@ -624,7 +626,7 @@ main := mol_decl_line }%% -void NanorexMMPImportExportTest::molLineTestHelper(char const *const testInput) +void NanorexMMPImportExportRagelTest::molLineTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -639,7 +641,7 @@ void NanorexMMPImportExportTest::molLineTestHelper(char const *const testInput) void -NanorexMMPImportExportTest::newMolecule(string const& name, string const& style) +NanorexMMPImportExportRagelTest::newMolecule(string const& name, string const& style) { ++molCount; currentMolName = name; @@ -649,44 +651,44 @@ NanorexMMPImportExportTest::newMolecule(string const& name, string const& style) void -NanorexMMPImportExportTest::newChunkInfo(string const& key, - string const& value) +NanorexMMPImportExportRagelTest::newChunkInfo(string const& key, + string const& value) { ++infoChunkCount; CERR("info chunk " << key << " = " << value); - /// @todo +/// @todo } -void NanorexMMPImportExportTest::groupLineTest(void) +void NanorexMMPImportExportRagelTest::groupLineTest(void) { - // clear group-name stack +// clear group-name stack while(!groupNameStack.empty()) groupNameStack.pop_back(); char const *testInput = NULL; - // #if 0 +// #if 0 testInput = "group (FirstGroup) #FirstGroupStyle\n"; groupLineTestHelper(testInput); CPPUNIT_ASSERT(groupNameStack.size() == 1); CPPUNIT_ASSERT(groupNameStack.back() == "FirstGroup"); - // CPPUNIT_ASSERT(currentGroupStyle == "FirstGroupStyle"); +// CPPUNIT_ASSERT(currentGroupStyle == "FirstGroupStyle"); testInput = "group ( Group name with spaces ) \n"; groupLineTestHelper(testInput); CPPUNIT_ASSERT(groupNameStack.size() == 2); CPPUNIT_ASSERT(groupNameStack.back() == "Group name with spaces"); - // CPPUNIT_ASSERT(currentGroupStyle == "Group s\ttyle with spaces"); +// CPPUNIT_ASSERT(currentGroupStyle == "Group s\ttyle with spaces"); testInput = "group ( Group that has a name but no style) \n"; groupLineTestHelper(testInput); CPPUNIT_ASSERT(groupNameStack.size() == 3); - // CPPUNIT_ASSERT(groupNameStack.back() == "Group that has a name but no style"); - // #endif +// CPPUNIT_ASSERT(groupNameStack.back() == "Group that has a name but no style"); +// #endif testInput = "group \t (View \t Data\t)\n"; - // testInput = "group \t (\tClipboard\t)\n"; +// testInput = "group \t (\tClipboard\t)\n"; groupLineTestHelper(testInput); CPPUNIT_ASSERT(groupNameStack.size() == 4); CPPUNIT_ASSERT(groupNameStack.back() == "View Data"); @@ -710,14 +712,14 @@ void NanorexMMPImportExportTest::groupLineTest(void) CPPUNIT_ASSERT(currentGroupName == "FirstGroup"); CPPUNIT_ASSERT(groupNameStack.empty()); - // Set of statements one after another +// Set of statements one after another lineNum = 0; testInput = "group (group 1)\n" "group (group 1_1) #def\n" "egroup (group 1_1)\n" "group (amines)\n" - "group (histamines) def\n" + "group (histamines) #def\n" "group ( histhistamines\t) \t#def\t\n" "egroup\n" "group (histhistamines siblings)\n" @@ -758,7 +760,7 @@ main := any* >{ /*cerr << "scanner call: p = " << p << endl;*/ fhold; fcall mini void -NanorexMMPImportExportTest::groupLineTestHelper(char const *const testInput) +NanorexMMPImportExportRagelTest::groupLineTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -773,7 +775,7 @@ NanorexMMPImportExportTest::groupLineTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::newViewDataGroup(void) +void NanorexMMPImportExportRagelTest::newViewDataGroup(void) { ++groupCount; CERR("group (View Data)"); @@ -782,16 +784,16 @@ void NanorexMMPImportExportTest::newViewDataGroup(void) } #if 0 -void NanorexMMPImportExportTest::endViewDataGroup(void) +void NanorexMMPImportExportRagelTest::endViewDataGroup(void) { - cerr << lineNum << ": endgroup (View Data)" << endl; - currentGroupName = groupNameStack.back(); - groupNameStack.pop_back(); +cerr << lineNum << ": endgroup (View Data)" << endl; +currentGroupName = groupNameStack.back(); +groupNameStack.pop_back(); } #endif void -NanorexMMPImportExportTest::newMolStructGroup(std::string const& name) +NanorexMMPImportExportRagelTest::newMolStructGroup(std::string const& name) { ++groupCount; CERR("group (" + name + ") "); @@ -800,18 +802,18 @@ NanorexMMPImportExportTest::newMolStructGroup(std::string const& name) } #if 0 -void NanorexMMPImportExportTest::endMolStructGroup(std::string const& name) +void NanorexMMPImportExportRagelTest::endMolStructGroup(std::string const& name) { - // comparing for errors should be done by parser application - // here we are only testing to see if the tokens are being recognized - cerr << lineNum << ": endgroup (" << name << ") " - << "[stack-top = " << groupNameStack.back() << ']' << endl; - currentGroupName = groupNameStack.back(); - groupNameStack.pop_back(); +// comparing for errors should be done by parser application +// here we are only testing to see if the tokens are being recognized +cerr << lineNum << ": endgroup (" << name << ") " +<< "[stack-top = " << groupNameStack.back() << ']' << endl; +currentGroupName = groupNameStack.back(); +groupNameStack.pop_back(); } #endif -void NanorexMMPImportExportTest::newClipboardGroup(void) +void NanorexMMPImportExportRagelTest::newClipboardGroup(void) { ++groupCount; CERR("group (Clipboard)"); @@ -821,44 +823,44 @@ void NanorexMMPImportExportTest::newClipboardGroup(void) #if 0 -void NanorexMMPImportExportTest::endClipboardGroup(void) +void NanorexMMPImportExportRagelTest::endClipboardGroup(void) { - cerr << lineNum << ": endgroup (Clipboard)" << endl; - currentGroupName = groupNameStack.back(); - groupNameStack.pop_back(); +cerr << lineNum << ": endgroup (Clipboard)" << endl; +currentGroupName = groupNameStack.back(); +groupNameStack.pop_back(); } #endif -void NanorexMMPImportExportTest::endGroup(string const& name) +void NanorexMMPImportExportRagelTest::endGroup(string const& name) { ++egroupCount; - // comparing for errors should be done by parser application - // here we are only testing to see if the tokens are being recognized +// comparing for errors should be done by parser application +// here we are only testing to see if the tokens are being recognized CERR("egroup (" + name + ") " + "[stack-top = " + groupNameStack.back() - + ']'); + + ']'); currentGroupName = groupNameStack.back(); groupNameStack.pop_back(); } void -NanorexMMPImportExportTest::newOpenGroupInfo(string const& key, - string const& value) +NanorexMMPImportExportRagelTest::newOpenGroupInfo(string const& key, + string const& value) { ++infoOpenGroupCount; CERR("info opengroup " + key + " = " + value); - /// @todo +/// @todo } -void NanorexMMPImportExportTest::end1(void) +void NanorexMMPImportExportRagelTest::end1(void) { CERR("end1"); } -void NanorexMMPImportExportTest::uncheckedParseTest(void) +void NanorexMMPImportExportRagelTest::uncheckedParseTest(void) { char const *testInput = NULL; @@ -900,22 +902,22 @@ void NanorexMMPImportExportTest::uncheckedParseTest(void) main := WHITESPACE* group_view_data_stmt_begin_line - @ { /*cerr << "*p=" << *p << endl;*/ fhold; fcall group_scanner; } - WHITESPACE* + @ { /*cerr << "*p=" << *p << endl;*/ fhold; fcall group_scanner; } + WHITESPACE* group_mol_struct_stmt_begin_line - @ { fhold; fcall group_scanner; } - WHITESPACE* + @ { fhold; fcall group_scanner; } + WHITESPACE* end1_line WHITESPACE* group_clipboard_stmt_begin_line - @ { fhold; fcall group_scanner; } - any* + @ { fhold; fcall group_scanner; } + any* ; }%% void -NanorexMMPImportExportTest::uncheckedParseTestHelper(char const *const testInput) +NanorexMMPImportExportRagelTest::uncheckedParseTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -932,7 +934,7 @@ NanorexMMPImportExportTest::uncheckedParseTestHelper(char const *const testInput /// Test the checked pattern matchers to see if local error actions introduced /// interfere with the regular functioning -void NanorexMMPImportExportTest::checkedParseTest(void) +void NanorexMMPImportExportRagelTest::checkedParseTest(void) { char const *testInput = NULL; @@ -978,10 +980,10 @@ main := WHITESPACE** fhold; fcall checked_group_scanner; } - WHITESPACE** + WHITESPACE** checked_group_mol_struct_stmt_begin_line @ { fhold; fcall checked_group_scanner; } - WHITESPACE** + WHITESPACE** checked_end1_line WHITESPACE** checked_group_clipboard_stmt_begin_line @@ -992,7 +994,7 @@ main := WHITESPACE** void -NanorexMMPImportExportTest::checkedParseTestHelper(char const *const testInput) +NanorexMMPImportExportRagelTest::checkedParseTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -1008,7 +1010,7 @@ NanorexMMPImportExportTest::checkedParseTestHelper(char const *const testInput) void -NanorexMMPImportExportTest:: +NanorexMMPImportExportRagelTest:: checkCounts(int atomCountRef, int molCountRef, int groupCountRef, int egroupCountRef, int bond1CountRef, int bond2CountRef, int bond3CountRef, @@ -1032,7 +1034,7 @@ checkCounts(int atomCountRef, int molCountRef, } -void NanorexMMPImportExportTest::charBufParseTest(void) +void NanorexMMPImportExportRagelTest::charBufParseTest(void) { charBufParseTestVanillin(); } @@ -1057,7 +1059,7 @@ void NanorexMMPImportExportTest::charBufParseTest(void) 'kelvin' nonNEWLINEspace+ whole_number % { kelvinTemp = intVal; } - nonNEWLINEspace* + nonNEWLINEspace* EOL; end_line = 'end' nonNEWLINEspace+; @@ -1071,15 +1073,15 @@ main := WHITESPACE* )? group_view_data_stmt_begin_line @ { /*cerr << "*p=" << *p << endl;*/ fhold; fcall group_scanner; } - WHITESPACE* + WHITESPACE* group_mol_struct_stmt_begin_line @ { fhold; fcall group_scanner; } - WHITESPACE* + WHITESPACE* end1_line WHITESPACE* group_clipboard_stmt_begin_line @ { fhold; fcall group_scanner; } - WHITESPACE* + WHITESPACE* end_line any* ; @@ -1087,7 +1089,7 @@ main := WHITESPACE* }%% -void NanorexMMPImportExportTest::charBufParseTestVanillin(void) +void NanorexMMPImportExportRagelTest::charBufParseTestVanillin(void) { char const *testInput = "mmpformat 050502 required; 050706 preferred\n" @@ -1162,7 +1164,7 @@ void NanorexMMPImportExportTest::charBufParseTestVanillin(void) } void -NanorexMMPImportExportTest::charBufParseTestHelper(char const *const testInput) +NanorexMMPImportExportRagelTest::charBufParseTestHelper(char const *const testInput) { char const *p = testInput; char const *pe = p + strlen(p); @@ -1177,7 +1179,7 @@ NanorexMMPImportExportTest::charBufParseTestHelper(char const *const testInput) } -void NanorexMMPImportExportTest::fileParseTest(void) +void NanorexMMPImportExportRagelTest::fileParseTest(void) { fileParseTestH2O(); fileParseTestHOOH(); @@ -1188,9 +1190,9 @@ void NanorexMMPImportExportTest::fileParseTest(void) -void NanorexMMPImportExportTest::fileParseTestH2O(void) +void NanorexMMPImportExportRagelTest::fileParseTestH2O(void) { - ifstream infile("H2O.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/H2O.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile); @@ -1204,9 +1206,9 @@ void NanorexMMPImportExportTest::fileParseTestH2O(void) } -void NanorexMMPImportExportTest::fileParseTestHOOH(void) +void NanorexMMPImportExportRagelTest::fileParseTestHOOH(void) { - ifstream infile("hydrogen_peroxide.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile); @@ -1220,9 +1222,9 @@ void NanorexMMPImportExportTest::fileParseTestHOOH(void) } -void NanorexMMPImportExportTest::fileParseTestChlorophyll(void) +void NanorexMMPImportExportRagelTest::fileParseTestChlorophyll(void) { - ifstream infile("chlorophyll.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/chlorophyll.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); @@ -1236,9 +1238,9 @@ void NanorexMMPImportExportTest::fileParseTestChlorophyll(void) } -void NanorexMMPImportExportTest::fileParseTestVanillin(void) +void NanorexMMPImportExportRagelTest::fileParseTestVanillin(void) { - ifstream infile("vanillin.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/vanillin.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); @@ -1253,9 +1255,9 @@ void NanorexMMPImportExportTest::fileParseTestVanillin(void) } -void NanorexMMPImportExportTest::fileParseTestNanocar(void) +void NanorexMMPImportExportRagelTest::fileParseTestNanocar(void) { - ifstream infile("nanocar.mmp", ios::in); + ifstream infile("../src/Testing/MMP_TestFiles/nanocar.mmp", ios::in); if(infile) { reset(); RagelIstreamPtr testInput(infile, 0, ios::beg); @@ -1271,7 +1273,7 @@ void NanorexMMPImportExportTest::fileParseTestNanocar(void) void -NanorexMMPImportExportTest:: +NanorexMMPImportExportRagelTest:: fileParseTestHelper(RagelIstreamPtr& p, RagelIstreamPtr& pe) { RagelIstreamPtr eof(p); diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.cpp b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.cpp index 0a151eca9..657e10297 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.cpp +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.cpp @@ -78,7 +78,8 @@ void NanorexMMPImportExportTest::HTest(void) NXMoleculeSet molSet; NXDataStoreInfo dataStoreInfo; - importer.importFromFile(&molSet, &dataStoreInfo, "H.mmp", 0, 0); + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/H.mmp", 0, 0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 1); @@ -94,7 +95,8 @@ void NanorexMMPImportExportTest::H2OTest(void) NXMoleculeSet molSet; NXDataStoreInfo dataStoreInfo; - importer.importFromFile(&molSet, &dataStoreInfo, "H2O.mmp", 0, 0); + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/H2O.mmp", 0, 0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 1); @@ -111,7 +113,8 @@ void NanorexMMPImportExportTest::H2O2Test(void) NXDataStoreInfo dataStoreInfo; importer.importFromFile(&molSet, &dataStoreInfo, - "hydrogen_peroxide.mmp", 0, 0); + "../src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp", + 0, 0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 1); @@ -127,7 +130,8 @@ void NanorexMMPImportExportTest::chlorophyllTest(void) NXMoleculeSet molSet; NXDataStoreInfo dataStoreInfo; - importer.importFromFile(&molSet, &dataStoreInfo, "chlorophyll.mmp", 0, 0); + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/chlorophyll.mmp",0,0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 1); @@ -143,7 +147,8 @@ void NanorexMMPImportExportTest::vanillinTest(void) NXMoleculeSet molSet; NXDataStoreInfo dataStoreInfo; - importer.importFromFile(&molSet, &dataStoreInfo, "vanillin.mmp", 0, 0); + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/vanillin.mmp", 0, 0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 1); @@ -159,7 +164,8 @@ void NanorexMMPImportExportTest::nanocarTest(void) NXMoleculeSet molSet; NXDataStoreInfo dataStoreInfo; - importer.importFromFile(&molSet, &dataStoreInfo, "nanocar.mmp", 0, 0); + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/nanocar.mmp", 0, 0); CPPUNIT_ASSERT(molSet.childCount() == 0); CPPUNIT_ASSERT(molSet.moleculeCount() == 5); @@ -188,4 +194,72 @@ void NanorexMMPImportExportTest::nanocarTest(void) NXMoleculeSet *clipboardGroup = dataStoreInfo.getClipboardStructure(); CPPUNIT_ASSERT(clipboardGroup->moleculeCount() == 4); CPPUNIT_ASSERT(clipboardGroup->childCount() == 0); + + /// @todo test clipboard members +} + + +void NanorexMMPImportExportTest::benzeneTest(void) +{ + NanorexMMPImportExport importer; + NXMoleculeSet molSet; + NXDataStoreInfo dataStoreInfo; + + importer.importFromFile(&molSet, &dataStoreInfo, + "../src/Testing/MMP_TestFiles/benzene.mmp", 0, 0); + + CPPUNIT_ASSERT(molSet.childCount() == 0); + CPPUNIT_ASSERT(molSet.moleculeCount() == 1); + + int atomCount = 0; + OBAtomIterator atomIter; + OBMol *benzeneMol = *molSet.moleculesBegin(); + OBAtom *atomPtr = NULL; + for(atomPtr = benzeneMol->BeginAtom(atomIter); + atomPtr != NULL; + atomPtr = benzeneMol->NextAtom(atomIter)) + { + ++atomCount; + int atomicNum = atomPtr->GetAtomicNum(); + CPPUNIT_ASSERT_MESSAGE(("Atomic num " + NXUtility::itos(atomicNum) + + " found in Benzene molecule").c_str(), + atomicNum == 1 || atomicNum == 6); + if(atomicNum == 1) { + int bondCount = 0; + OBBondIterator bondIter; + OBAtom *nbrAtomPtr = NULL; + for(nbrAtomPtr = atomPtr->BeginNbrAtom(bondIter); + nbrAtomPtr != NULL; + nbrAtomPtr = atomPtr->NextNbrAtom(bondIter)) + { + ++bondCount; + CPPUNIT_ASSERT(nbrAtomPtr->GetAtomicNum() == 6); + } + CPPUNIT_ASSERT(bondCount == 1); + } + + else /*(atomicNum == 6)*/ { + int HBondCount = 0, CBondCount = 0; + OBBondIterator bondIter; + OBAtom *nbrAtomPtr = NULL; + for(nbrAtomPtr = atomPtr->BeginNbrAtom(bondIter); + nbrAtomPtr != NULL; + nbrAtomPtr = atomPtr->NextNbrAtom(bondIter)) + { + int nbrAtomAtomicNum = nbrAtomPtr->GetAtomicNum(); + CPPUNIT_ASSERT(nbrAtomAtomicNum == 6 || + nbrAtomAtomicNum == 1); + if(nbrAtomAtomicNum == 1) + ++HBondCount; + else + ++CBondCount; + } + CPPUNIT_ASSERT_MESSAGE("CBondCount = " + NXUtility::itos(CBondCount), + CBondCount == 2); + CPPUNIT_ASSERT_MESSAGE("HBondCount = " + NXUtility::itos(HBondCount), + HBondCount == 1); + } + } + CPPUNIT_ASSERT_MESSAGE("Benzene: atomCount = " + NXUtility::itos(atomCount), + atomCount == 12); } diff --git a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.h b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.h index c5146f1b2..bb324310a 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.h +++ b/cad/plugins/NanoVision-1/src/Plugins/NanorexMMPImportExport/NanorexMMPImportExportTest.h @@ -16,13 +16,14 @@ class NanorexMMPImportExportTest: public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE(NanorexMMPImportExportTest); - CPPUNIT_TEST(atomHTest); - CPPUNIT_TEST(HTest); - CPPUNIT_TEST(H2OTest); - CPPUNIT_TEST(H2O2Test); - CPPUNIT_TEST(chlorophyllTest); - CPPUNIT_TEST(vanillinTest); - CPPUNIT_TEST(nanocarTest); +// CPPUNIT_TEST(atomHTest); +// CPPUNIT_TEST(HTest); +// CPPUNIT_TEST(H2OTest); +// CPPUNIT_TEST(H2O2Test); +// CPPUNIT_TEST(chlorophyllTest); +// CPPUNIT_TEST(vanillinTest); +// CPPUNIT_TEST(nanocarTest); + CPPUNIT_TEST(benzeneTest); CPPUNIT_TEST_SUITE_END(); public: @@ -36,6 +37,7 @@ private: void H2O2Test(void); void chlorophyllTest(void); void vanillinTest(void); + void benzeneTest(void); void nanocarTest(void); }; diff --git a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLCamera_sm.h b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLCamera_sm.h index 6510f3bac..bb2456024 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLCamera_sm.h +++ b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLCamera_sm.h @@ -3,7 +3,7 @@ #define SMC_USES_IOSTREAMS -#include <statemap.h> +#include "statemap.h" // Forward declarations. class Trackball; diff --git a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.cpp b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.cpp index 90a27b847..f83641254 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.cpp +++ b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/NXOpenGLRenderingEngine.cpp @@ -595,8 +595,10 @@ NXOpenGLRenderingEngine::createOpenGLSceneGraph(OBMol *const molPtr, // create scenegraph node and mark atom as rendered // NXAtomRenderData atomRenderData(atomPtr->GetAtomicNum()); // atomRenderData.addData(static_cast<void const *>(&defaultAtomMaterial)); + assert(atomPtr->HasData(NXAtomDataType)); NXAtomData *atomData = - dynamic_cast<NXAtomData*>(atomPtr->GetData(NXAtomDataType)); + static_cast<NXAtomData*>(atomPtr->GetData(NXAtomDataType)); + assert(atomData->GetDataType() == NXAtomDataType); assert(atomData != NULL); string const& atomRenderStyleCode = atomData->getRenderStyleCode(); atomData->addSupplementalData(static_cast<void const*>(&defaultAtomMaterial)); @@ -604,7 +606,7 @@ NXOpenGLRenderingEngine::createOpenGLSceneGraph(OBMol *const molPtr, // The following dynamic_cast is ok because plugins were type-checked at // initialization time NXOpenGLRendererPlugin *renderer = - dynamic_cast<NXOpenGLRendererPlugin*>(renderStyleMap[atomRenderStyleCode]); + static_cast<NXOpenGLRendererPlugin*>(renderStyleMap[atomRenderStyleCode]); if(renderer == (NXOpenGLRendererPlugin*) NULL) { SetResult(commandResult, NX_PLUGIN_CAUSED_ERROR, @@ -717,7 +719,6 @@ NXOpenGLRenderingEngine::createOpenGLSceneGraph(OBMol *const molPtr, } } - renderedAtoms.insert(atomPtr); return atomNode; } @@ -851,6 +852,12 @@ bool NXOpenGLRenderingEngine::initializePlugins(void) pluginIter != renderStyleMap.end(); ++pluginIter) { + // since default rendering style must also appear independently + // do not initialize + string const& renderStyleCode = pluginIter->first; + if(renderStyleCode == "def") + continue; + NXRendererPlugin *plugin = pluginIter->second; NXCommandResult const *const result = plugin->initialize(); diff --git a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/Renderers/NXBallAndStickOpenGLRenderer.cpp b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/Renderers/NXBallAndStickOpenGLRenderer.cpp index 025b903e7..2d6d97dc2 100644 --- a/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/Renderers/NXBallAndStickOpenGLRenderer.cpp +++ b/cad/plugins/NanoVision-1/src/Plugins/RenderingEngines/OpenGL/Renderers/NXBallAndStickOpenGLRenderer.cpp @@ -723,7 +723,7 @@ NXSGOpenGLNode* NXSGOpenGLScale *atomScaleNode; try { // Atoms of radius 0.25 Angstrom - atomScaleNode = new NXSGOpenGLScale(2.5e-10, 2.5e-10, 2.5e-10); + atomScaleNode = new NXSGOpenGLScale(2.5e-11, 2.5e-11, 2.5e-11); } catch (...) { SetError(commandResult, "Could not create node for rendering atom"); @@ -769,7 +769,7 @@ NXSGOpenGLNode* try { double const bondLength = info.getLength(); cerr << "bond-length = " << bondLength << endl; - bondScale = new NXSGOpenGLScale(1.0e-10,1.0e-10, bondLength); + bondScale = new NXSGOpenGLScale(1.0e-11,1.0e-11, bondLength); } catch(...) { SetError(commandResult, diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/CH4-mol-section.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/CH4-mol-section.mmp new file mode 100644 index 000000000..c9d354ada --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/CH4-mol-section.mmp @@ -0,0 +1,12 @@ +# Test incomplete valence satisfaction +# to test for OpenBabel OBAtom::GetHyb() segfault heisenbug +# bug 2610 sub-issue +# # segfault generated when contiguous atomID generation is not followed +mol (CH4) def +atom 2 (1) (3,3,3) def +atom 3 (1) (-3,-3,3) def +atom 4 (1) (-3,3,-3) def +atom 5 (1) (3,-3,-3) def +atom 1 (6) (0,0,0) def +bond1 2 3 4 5 + diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H.mmp new file mode 100755 index 000000000..393ee2ad0 --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H.mmp @@ -0,0 +1,16 @@ +mmpformat 050502 required; 050706 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (1.000000, 0.000000, 0.000000, 0.000000) (3.880744) (0.082000, 0.076500, 0.072500) (1.000000) +egroup (View Data) +group (Hydrogen atom) +mol (Hydrogen) def +atom 1 (1) (0, 0, 0) bas +egroup +end1 +group (Clipboard) +info opengroup open = False +egroup (Clipboard) +end diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H2O.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H2O.mmp new file mode 100755 index 000000000..1bb4d41db --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/H2O.mmp @@ -0,0 +1,21 @@ +mmpformat 050502 required; 050706 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (1.000000, 0.000000, 0.000000, 0.000000) (3.880744) (0.082000, 0.076500, 0.072500) (1.000000) +egroup (View Data) +group (H2O) +info opengroup open = True +mol (H2O.pdb) bas +atom 1 (8) (82, 207, 197) bas +atom 2 (1) (655, -360, -342) bas +bond1 1 +atom 3 (1) (-819, -54, -51) bas +bond1 1 +egroup (H2O) +end1 +group (Clipboard) +info opengroup open = False +egroup (Clipboard) +end molecular machine part H2O diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/benzene.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/benzene.mmp new file mode 100755 index 000000000..f2be9d4fa --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/benzene.mmp @@ -0,0 +1,45 @@ +mmpformat 050502 required; 050706 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (1.000000, 0.000000, 0.000000, 0.000000) (4.019122) (-0.004000, -0.048500, 0.054000) (1.000000) +egroup (View Data) +group (benzene) +info opengroup open = True +mol (benzene) def +atom 1 (6) (1199, 769, -24) def +info atom atomtype = sp2 +atom 2 (6) (1225, -627, -32) def +info atom atomtype = sp2 +bonda 1 +atom 3 (6) (29, -1348, -62) def +info atom atomtype = sp2 +bonda 2 +atom 4 (6) (-1192, -672, -85) def +info atom atomtype = sp2 +bonda 3 +atom 5 (6) (-1219, 724, -77) def +info atom atomtype = sp2 +bonda 4 +atom 6 (6) (-23, 1445, -48) def +info atom atomtype = sp2 +bonda 5 1 +atom 7 (1) (2128, 1329, -1) def +bond1 1 +atom 8 (1) (2175, -1151, -15) def +bond1 2 +atom 9 (1) (50, -2432, -67) def +bond1 3 +atom 10 (1) (-2121, -1232, -107) def +bond1 4 +atom 11 (1) (-2167, 1248, -95) def +bond1 5 +atom 12 (1) (-44, 2529, -42) def +bond1 6 +egroup (benzene) +end1 +group (Clipboard) +info opengroup open = False +egroup (Clipboard) +end molecular machine part benzene diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/chlorophyll.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/chlorophyll.mmp new file mode 100755 index 000000000..747e21ebb --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/chlorophyll.mmp @@ -0,0 +1,281 @@ +mmpformat 050502 required; 050706 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (0.588103, -0.511782, -0.475570, 0.407490) (11.565961) (-2.753000, 2.128000, 6.235000) (1.000000) +egroup (View Data) +group (chlorophyll) +info opengroup open = True +mol (chlorophyll) def +atom 1 (6) (4696, 223, 1602) def +atom 2 (6) (3348, 72, 1289) def +bond1 1 +atom 3 (6) (3294, -267, -65) def +bond1 2 +atom 4 (6) (2017, -531, -727) def +bond1 3 +atom 5 (6) (2003, -918, -2000) def +bond1 4 +atom 6 (6) (795, -1235, -2636) def +bond1 5 +atom 7 (6) (1123, -1626, -3930) def +bond1 6 +atom 8 (6) (2516, -1517, -4032) def +bond1 7 +atom 9 (6) (3133, -1796, -5177) def +bond1 8 +atom 10 (6) (4570, -1571, -5315) def +bond1 9 +atom 11 (6) (5217, -1747, -6543) def +bond1 10 +atom 12 (6) (6551, -1410, -6326) def +bond1 11 +atom 13 (6) (6658, -1061, -4972) def +bond1 12 +atom 14 (6) (7828, -711, -4441) def +bond1 13 +atom 15 (6) (7912, -428, -3008) def +bond1 14 +atom 16 (6) (9121, -136, -2367) def +bond1 15 +atom 17 (6) (10479, -63, -2928) def +bond1 16 +atom 18 (6) (10984, -979, -3765) def +bond1 17 +atom 19 (6) (8802, 128, -1037) def +bond1 16 +atom 20 (6) (7421, -49, -915) def +bond1 19 +atom 21 (6) (6730, 143, 359) def +bond1 20 +atom 22 (6) (5406, 8, 414) def +bond1 21 1 +atom 23 (6) (5193, 579, 2941) def +bond1 1 +atom 24 (6) (6224, -39, 3534) def +bond1 23 +atom 25 (7) (4551, -314, -623) def +bond1 3 22 +atom 26 (7) (3080, -1075, -2851) def +bond1 5 8 +atom 27 (7) (6857, -391, -2122) def +bond1 20 15 +atom 28 (7) (5436, -1147, -4335) def +bond1 13 10 +atom 29 (6) (2186, 198, 2228) def +bond1 2 +atom 30 (6) (-583, -1148, -2045) def +bond1 6 +atom 31 (6) (7657, -1418, -7340) def +bond1 12 +atom 32 (6) (9757, 488, 62) def +bond1 19 +atom 33 (6) (150, -2087, -5031) def +bond1 7 +atom 34 (6) (-1291, -2056, -4488) def +bond1 33 +atom 35 (6) (-2264, -2517, -5589) def +bond1 34 +atom 36 (8) (-1804, -2859, -6775) def +bond1 35 +atom 37 (8) (-3737, -2577, -5311) def +bond1 35 +atom 38 (6) (-4685, -3026, -6384) def +bond1 37 +atom 39 (1) (229, -1419, -5889) def +bond1 33 +atom 40 (1) (401, -3103, -5337) def +bond1 33 +atom 41 (1) (-1370, -2724, -3630) def +bond1 34 +atom 42 (1) (-1543, -1041, -4183) def +bond1 34 +atom 43 (1) (4655, 1359, 3505) def +bond1 23 +atom 44 (1) (6539, 239, 4553) def +bond1 24 +atom 45 (1) (6768, -862, 3044) def +bond1 24 +atom 46 (1) (7310, 448, 1241) def +bond1 21 +atom 47 (1) (9575, 1533, 399) def +bond1 32 +atom 48 (1) (10817, 407, -265) def +bond1 32 +atom 49 (1) (9630, -201, 927) def +bond1 32 +atom 50 (1) (11131, 765, -2602) def +bond1 17 +atom 51 (1) (12020, -898, -4134) def +bond1 18 +atom 52 (1) (10402, -1858, -4086) def +bond1 18 +atom 53 (1) (8733, -654, -5062) def +bond1 14 +atom 54 (1) (7286, -1612, -8370) def +bond1 31 +atom 55 (1) (8403, -2206, -7089) def +bond1 31 +atom 56 (1) (8167, -429, -7366) def +bond1 31 +atom 57 (6) (-3893, -3363, -7660) def +bond1 38 +atom 58 (1) (-5224, -3911, -6045) def +bond1 38 +atom 59 (1) (-5396, -2227, -6597) def +bond1 38 +atom 60 (6) (-4543, -3793, -8765) def +bond1 57 +atom 61 (6) (-3752, -4130, -10042) def +bond1 60 +atom 62 (6) (-6076, -3943, -8747) def +bond1 60 +atom 63 (1) (-2809, -3257, -7673) def +bond1 57 +atom 64 (6) (-2250, -3895, -9793) def +bond1 61 +atom 65 (6) (-1459, -4233, -11070) def +bond1 64 +atom 66 (6) (43, -3997, -10820) def +bond1 65 +atom 67 (1) (-752, -144, -1595) def +bond1 30 +atom 68 (1) (-713, -1927, -1260) def +bond1 30 +atom 69 (1) (-1380, -1289, -2806) def +bond1 30 +atom 70 (6) (2812, -2183, -6712) def +bond1 9 +atom 71 (1) (1100, -447, -159) def +bond1 4 +atom 72 (1) (1553, 1068, 1937) def +bond1 29 +atom 73 (1) (2512, 346, 3281) def +bond1 29 +atom 74 (1) (1565, -726, 2204) def +bond1 29 +atom 75 (12) (4975, -736, -2483) def +bond1 26 27 25 28 +atom 76 (1) (-6514, -3297, -9507) def +bond1 62 +atom 77 (1) (-6341, -4980, -8955) def +bond1 62 +atom 78 (1) (-6457, -3661, -7766) def +bond1 62 +atom 79 (6) (835, -4335, -12097) def +bond1 66 +atom 80 (6) (2336, -4099, -11847) def +bond1 79 +atom 81 (6) (3128, -4437, -13124) def +bond1 80 +atom 82 (6) (4629, -4202, -12875) def +bond1 81 +atom 83 (6) (5421, -4540, -14152) def +bond1 82 +atom 84 (6) (6922, -4304, -13902) def +bond1 83 +atom 85 (6) (7714, -4642, -15179) def +bond1 84 +atom 86 (6) (9215, -4406, -14929) def +bond1 85 +atom 87 (6) (9448, -2930, -14556) def +bond1 86 +atom 88 (6) (10007, -4744, -16206) def +bond1 86 +atom 89 (6) (4862, -2726, -12502) def +bond1 82 +atom 90 (6) (276, -2521, -10447) def +bond1 66 +atom 91 (1) (-3916, -5175, -10306) def +bond1 61 +atom 92 (1) (-4089, -3492, -10858) def +bond1 61 +atom 93 (1) (-1913, -4534, -8976) def +bond1 64 +atom 94 (1) (-2085, -2850, -9529) def +bond1 64 +atom 95 (1) (-1623, -5277, -11334) def +bond1 65 +atom 96 (1) (-1796, -3594, -11886) def +bond1 65 +atom 97 (1) (380, -4636, -10004) def +bond1 66 +atom 98 (1) (670, -5380, -12361) def +bond1 79 +atom 99 (1) (497, -3696, -12913) def +bond1 79 +atom 100 (1) (2673, -4738, -11031) def +bond1 80 +atom 101 (1) (2501, -3055, -11583) def +bond1 80 +atom 102 (1) (2963, -5482, -13388) def +bond1 81 +atom 103 (1) (2790, -3798, -13941) def +bond1 81 +atom 104 (1) (4966, -4840, -12058) def +bond1 82 +atom 105 (1) (5256, -5584, -14416) def +bond1 83 +atom 106 (1) (5083, -3901, -14968) def +bond1 83 +atom 107 (1) (7259, -4943, -13086) def +bond1 84 +atom 108 (1) (7087, -3259, -13638) def +bond1 84 +atom 109 (1) (7549, -5686, -15443) def +bond1 85 +atom 110 (1) (7376, -4003, -15995) def +bond1 85 +atom 111 (1) (9552, -5045, -14113) def +bond1 86 +atom 112 (1) (9111, -2292, -15373) def +bond1 87 +atom 113 (1) (8887, -2691, -13653) def +bond1 87 +atom 114 (1) (10510, -2764, -14380) def +bond1 87 +atom 115 (1) (9670, -4105, -17023) def +bond1 88 +atom 116 (1) (9842, -5789, -16470) def +bond1 88 +atom 117 (1) (11069, -4577, -16030) def +bond1 88 +atom 118 (1) (4525, -2087, -13318) def +bond1 89 +atom 119 (1) (5925, -2559, -12325) def +bond1 89 +atom 120 (1) (4302, -2487, -11598) def +bond1 89 +atom 121 (1) (-61, -1882, -11263) def +bond1 90 +atom 122 (1) (1338, -2354, -10270) def +bond1 90 +atom 123 (1) (-285, -2282, -9543) def +bond1 90 +atom 124 (6) (4096, -1239, -7575) def +bond1 11 70 +atom 125 (8) (4843, -1224, -8318) def +bond1 124 +atom 126 (6) (1928, -1407, -7706) def +bond1 70 +atom 127 (8) (618, -1535, -7660) def +bond1 126 +atom 128 (8) (2558, -506, -8725) def +bond1 126 +atom 129 (6) (1697, 250, -9694) def +bond1 128 +atom 130 (1) (2750, -3265, -6825) def +bond1 70 +atom 131 (1) (1115, -454, -10288) def +bond1 129 +atom 132 (1) (1022, 906, -9144) def +bond1 129 +atom 133 (1) (2328, 847, -10352) def +bond1 129 +egroup (chlorophyll) +end1 +group (Clipboard) +info opengroup open = False +egroup (Clipboard) +end molecular machine part chlorophyll diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp new file mode 100755 index 000000000..b775ce299 --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/hydrogen_peroxide.mmp @@ -0,0 +1,23 @@ +mmpformat 050502 required; 050706 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (-0.141949, 0.442441, -0.521174, 0.715873) (3.128059) (-0.947000, 0.291500, 3.566500) (1.000000) +egroup (View Data) +group (hydrogen_peroxide) +info opengroup open = True +mol (hydrogen_peroxide.pdb) def +atom 1 (8) (1059, -578, -4216) def +atom 2 (8) (832, -2, -2912) def +bond1 1 +atom 3 (1) (2009, -648, -4374) def +bond1 1 +atom 4 (1) (-116, 65, -2754) def +bond1 2 +egroup (hydrogen_peroxide) +end1 +group (Clipboard) +info opengroup open = False +egroup (Clipboard) +end molecular machine part hydrogen_peroxide diff --git a/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/nanocar.mmp b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/nanocar.mmp new file mode 100755 index 000000000..fa624628f --- /dev/null +++ b/cad/plugins/NanoVision-1/src/Testing/MMP_TestFiles/nanocar.mmp @@ -0,0 +1,1325 @@ +mmpformat 050920 required; 060421 preferred +kelvin 300 +group (View Data) +info opengroup open = True +csys (HomeView) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView) (0.356228, 0.816395, 0.396533, -0.222175) (30.339253) (-10.526067, 0.143466, -1.133044) (1.000000) +csys (HomeView1) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView1) (1.000000, 0.000000, 0.000000, 0.000000) (9.878460) (0.000000, 0.000000, 0.000000) (1.000000) +csys (HomeView2) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView2) (1.000000, 0.000000, 0.000000, 0.000000) (4.630813) (0.000000, 0.000000, 0.000000) (1.000000) +csys (HomeView3) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView3) (1.000000, 0.000000, 0.000000, 0.000000) (12.011135) (0.000000, 0.000000, 0.000000) (1.000000) +csys (HomeView4) (1.000000, 0.000000, 0.000000, 0.000000) (10.000000) (0.000000, 0.000000, 0.000000) (1.000000) +csys (LastView4) (1.000000, 0.000000, 0.000000, 0.000000) (21.135852) (0.000000, 0.000000, 0.000000) (1.000000) +egroup (View Data) +group (nanocar) +info opengroup open = True +mol (Chassis) def +atom 1 (6) (-9929, -730, -372) def +info atom atomtype = sp2 +atom 2 (6) (-9935, -2120, -379) def +info atom atomtype = sp2 +bonda 1 +atom 3 (6) (-11153, -2796, -406) def +info atom atomtype = sp2 +bonda 2 +atom 4 (6) (-12373, -2116, -427) def +info atom atomtype = sp2 +bonda 3 +atom 5 (6) (-12370, -720, -419) def +info atom atomtype = sp2 +bonda 4 +atom 6 (6) (-11146, -37, -391) def +info atom atomtype = sp2 +bonda 1 5 +atom 7 (1) (-13310, -170, -435) def +bond1 5 +atom 8 (1) (-8995, -2670, -364) def +bond1 2 +atom 9 (1) (-13310, -2668, -448) def +bond1 4 +atom 10 (6) (-11115, -4317, -412) def +info atom atomtype = sp +bond1 3 +atom 11 (6) (-11159, 1483, -379) def +info atom atomtype = sp +bond1 6 +atom 12 (6) (-11180, 2683, -354) def +info atom atomtype = sp +bond3 11 +atom 13 (6) (-11056, -5516, -410) def +info atom atomtype = sp +bond3 10 +atom 14 (6) (-10416, -9105, 643) def +info atom atomtype = sp2 +atom 15 (6) (-10420, -7711, 653) def +info atom atomtype = sp2 +bonda 14 +atom 16 (6) (-11031, -7033, -413) def +info atom atomtype = sp2 +bond1 13 +bonda 15 +atom 17 (6) (-11636, -7674, -1500) def +info atom atomtype = sp2 +bonda 16 +atom 18 (6) (-11635, -9052, -1517) def +info atom atomtype = sp2 +bonda 17 +atom 19 (6) (-11037, -9702, -455) def +info atom atomtype = sp2 +bonda 14 18 +atom 20 (1) (-12090, -9620, -2331) def +bond1 18 +atom 21 (1) (-9959, -9688, 1446) def +bond1 14 +atom 22 (1) (-9962, -7165, 1476) def +bond1 15 +atom 23 (1) (-12099, -7125, -2313) def +bond1 17 +atom 24 (6) (-12297, 4811, 314) def +info atom atomtype = sp2 +atom 25 (6) (-12363, 6190, 296) def +info atom atomtype = sp2 +bonda 24 +atom 26 (6) (-11369, 6858, -395) def +info atom atomtype = sp2 +bonda 25 +atom 27 (6) (-10283, 6291, -1060) def +info atom atomtype = sp2 +bonda 26 +atom 28 (6) (-10223, 4901, -1036) def +info atom atomtype = sp2 +bonda 27 +atom 29 (6) (-11232, 4201, -359) def +info atom atomtype = sp2 +bond1 12 +bonda 24 28 +atom 30 (1) (-9415, 4377, -1540) def +bond1 28 +atom 31 (1) (-13060, 4241, 835) def +bond1 24 +atom 32 (1) (-13164, 6739, 792) def +bond1 25 +atom 33 (1) (-9534, 6898, -1575) def +bond1 27 +atom 34 (6) (-11191, -11154, -706) def +info atom atomtype = sp +bond1 19 +atom 35 (6) (-11375, -12293, -996) def +info atom atomtype = sp +bond3 34 +atom 36 (6) (-11664, 8306, -335) def +info atom atomtype = sp +bond1 26 +atom 37 (6) (-12044, 9431, -306) def +info atom atomtype = sp +bond3 36 +atom 38 (6) (-8520, -106, -342) def +info atom atomtype = sp +bond1 1 +atom 39 (6) (-7322, 35, -320) def +info atom atomtype = sp +bond3 38 +atom 40 (6) (-5107, 1249, -268) def +info atom atomtype = sp2 +atom 41 (6) (-3710, 1274, -238) def +info atom atomtype = sp2 +bonda 40 +atom 42 (6) (-2995, 70, -231) def +info atom atomtype = sp2 +bonda 41 +atom 43 (6) (-3664, -1160, -255) def +info atom atomtype = sp2 +bonda 42 +atom 44 (6) (-5064, -1184, -284) def +info atom atomtype = sp2 +bonda 43 +atom 45 (6) (-5780, 24, -290) def +info atom atomtype = sp2 +bond1 39 +bonda 40 44 +atom 46 (1) (-5590, -2138, -302) def +bond1 44 +atom 47 (1) (-5671, 2180, -273) def +bond1 40 +atom 48 (1) (-3182, 2225, -221) def +bond1 41 +atom 49 (1) (-3097, -2091, -250) def +bond1 43 +atom 50 (6) (-1456, 107, -196) def +info atom atomtype = sp +bond1 42 +atom 51 (6) (-253, 144, -157) def +info atom atomtype = sp +bond3 50 +atom 52 (6) (1956, 1412, -117) def +info atom atomtype = sp2 +atom 53 (6) (3358, 1437, -104) def +info atom atomtype = sp2 +bonda 52 +atom 54 (6) (4075, 227, -110) def +info atom atomtype = sp2 +bonda 53 +atom 55 (6) (3398, -995, -119) def +info atom atomtype = sp2 +bonda 54 +atom 56 (6) (2001, -1020, -130) def +info atom atomtype = sp2 +bonda 55 +atom 57 (6) (1287, 182, -133) def +info atom atomtype = sp2 +bond1 51 +bonda 52 56 +atom 58 (1) (1475, -1973, -140) def +bond1 56 +atom 59 (1) (1388, 2343, -117) def +bond1 52 +atom 60 (1) (3884, 2392, -95) def +bond1 53 +atom 61 (1) (3961, -1925, -120) def +bond1 55 +atom 62 (6) (5621, 178, -125) def +info atom atomtype = sp +bond1 54 +atom 63 (6) (6822, 230, -234) def +info atom atomtype = sp +bond3 62 +atom 64 (6) (10732, 2122, -405) def +info atom atomtype = sp2 +atom 65 (6) (10703, 726, -388) def +info atom atomtype = sp2 +bonda 64 +atom 66 (6) (9469, 59, -341) def +info atom atomtype = sp2 +bonda 65 +atom 67 (6) (8262, 776, -308) def +info atom atomtype = sp2 +bond1 63 +bonda 66 +atom 68 (6) (8296, 2165, -333) def +info atom atomtype = sp2 +bonda 67 +atom 69 (6) (9523, 2816, -381) def +info atom atomtype = sp2 +bonda 64 68 +atom 70 (1) (7367, 2735, -313) def +bond1 68 +atom 71 (1) (11636, 166, -410) def +bond1 65 +atom 72 (6) (9501, -1470, -331) def +info atom atomtype = sp +bond1 66 +atom 73 (6) (9512, 4332, -398) def +info atom atomtype = sp +bond1 69 +atom 74 (6) (9480, 5531, -369) def +info atom atomtype = sp +bond3 73 +atom 75 (6) (9582, -2668, -376) def +info atom atomtype = sp +bond3 72 +atom 76 (6) (10244, -6269, 641) def +info atom atomtype = sp2 +atom 77 (6) (10230, -4875, 657) def +info atom atomtype = sp2 +bonda 76 +atom 78 (6) (9614, -4191, -405) def +info atom atomtype = sp2 +bond1 75 +bonda 77 +atom 79 (6) (9015, -4837, -1495) def +info atom atomtype = sp2 +bonda 78 +atom 80 (6) (9024, -6217, -1517) def +info atom atomtype = sp2 +bonda 79 +atom 81 (6) (9625, -6868, -457) def +info atom atomtype = sp2 +bonda 76 80 +atom 82 (1) (8573, -6786, -2332) def +bond1 80 +atom 83 (1) (10704, -6852, 1443) def +bond1 76 +atom 84 (1) (10686, -4331, 1480) def +bond1 77 +atom 85 (1) (8549, -4291, -2308) def +bond1 79 +atom 86 (6) (8358, 7645, 310) def +info atom atomtype = sp2 +atom 87 (6) (8291, 9024, 294) def +info atom atomtype = sp2 +bonda 86 +atom 88 (6) (9286, 9693, -398) def +info atom atomtype = sp2 +bonda 87 +atom 89 (6) (10372, 9128, -1064) def +info atom atomtype = sp2 +bonda 88 +atom 90 (6) (10433, 7738, -1041) def +info atom atomtype = sp2 +bonda 89 +atom 91 (6) (9422, 7040, -366) def +info atom atomtype = sp2 +bond1 74 +bonda 86 90 +atom 92 (1) (11241, 7212, -1546) def +bond1 90 +atom 93 (1) (7595, 7072, 827) def +bond1 86 +atom 94 (1) (7489, 9572, 790) def +bond1 87 +atom 95 (1) (11122, 9734, -1577) def +bond1 89 +atom 96 (6) (9479, -8321, -705) def +info atom atomtype = sp +bond1 81 +atom 97 (6) (9286, -9459, -992) def +info atom atomtype = sp +bond3 96 +atom 98 (6) (8989, 11139, -335) def +info atom atomtype = sp +bond1 88 +atom 99 (6) (8605, 12264, -308) def +info atom atomtype = sp +bond3 98 +atom 100 (1) (11675, 2660, -438) def +bond1 64 +mol (Wheel-1) def +atom 101 (6) (-8366, 15449, 2332) def +info atom atomtype = sp2 +atom 102 (6) (-10777, 14234, 3011) def +info atom atomtype = sp2 +atom 103 (6) (-12927, 14330, 1971) def +info atom atomtype = sp2 +atom 104 (6) (-7838, 16905, 461) def +info atom atomtype = sp2 +atom 105 (6) (-7550, 15785, 1247) def +info atom atomtype = sp2 +bondg 101 104 +atom 106 (6) (-8490, 14056, 2335) def +info atom atomtype = sp2 +bondg 101 +atom 107 (6) (-11882, 13556, 2487) def +info atom atomtype = sp2 +bondg 102 103 +atom 108 (6) (-13508, 13867, 788) def +info atom atomtype = sp2 +bondg 103 +atom 109 (6) (-7725, 16845, -931) def +info atom atomtype = sp2 +bondg 104 +atom 110 (6) (-9218, 13178, -3115) def +info atom atomtype = sp2 +atom 111 (6) (-9738, 12090, -2407) def +info atom atomtype = sp2 +bondg 110 +atom 112 (6) (-8080, 13847, -2651) def +info atom atomtype = sp2 +bondg 110 +atom 113 (6) (-11130, 12184, -2524) def +info atom atomtype = sp2 +bondg 111 +atom 114 (6) (-9195, 11508, -1251) def +info atom atomtype = sp2 +bondg 111 +atom 115 (6) (-9873, 10657, -146) def +bond1 114 +atom 116 (6) (-7554, 13399, -1435) def +info atom atomtype = sp2 +bondg 112 +atom 117 (6) (-8137, 12308, -784) def +info atom atomtype = sp2 +bondg 114 116 +atom 118 (6) (-11916, 11697, -1474) def +info atom atomtype = sp2 +bondg 113 +atom 119 (6) (-11499, 10792, -284) def +bond1 115 118 37 +atom 120 (6) (-8254, 12367, 616) def +info atom atomtype = sp2 +bondg 117 +atom 121 (6) (-9378, 11604, 974) def +info atom atomtype = sp2 +bond1 115 +bondg 120 +atom 122 (6) (-11407, 13318, -3294) def +info atom atomtype = sp2 +bondg 113 +atom 123 (6) (-10228, 13955, -3692) def +info atom atomtype = sp2 +bondg 110 122 +atom 124 (6) (-10099, 12274, 1976) def +info atom atomtype = sp2 +bondg 121 +atom 125 (6) (-7778, 13514, 1260) def +info atom atomtype = sp2 +bondg 106 120 +atom 126 (6) (-12101, 11783, 748) def +info atom atomtype = sp2 +bond1 119 +atom 127 (6) (-7064, 14537, -784) def +info atom atomtype = sp2 +bondg 116 +atom 128 (6) (-11493, 12365, 1865) def +info atom atomtype = sp2 +bondg 107 124 126 +atom 129 (6) (-7180, 14597, 607) def +info atom atomtype = sp2 +bondg 105 125 127 +atom 130 (6) (-10136, 15347, -3789) def +info atom atomtype = sp2 +bondg 123 +atom 131 (6) (-12516, 14123, -3015) def +info atom atomtype = sp2 +bondg 122 +atom 132 (6) (-12945, 12613, -1177) def +info atom atomtype = sp2 +bondg 118 +atom 133 (6) (-7950, 15237, -2739) def +info atom atomtype = sp2 +bondg 112 +atom 134 (6) (-8993, 15985, -3296) def +info atom atomtype = sp2 +bondg 130 133 +atom 135 (6) (-13285, 13758, -1905) def +info atom atomtype = sp2 +bondg 131 132 +atom 136 (6) (-13062, 12668, 220) def +info atom atomtype = sp2 +bondg 108 126 132 +atom 137 (6) (-7319, 15668, -1567) def +info atom atomtype = sp2 +bondg 109 127 133 +atom 138 (6) (-9692, 13421, 2665) def +info atom atomtype = sp2 +bondg 102 106 124 +atom 139 (6) (-9783, 17347, 1869) def +info atom atomtype = sp2 +atom 140 (6) (-11175, 17433, 1755) def +info atom atomtype = sp2 +bondg 139 +atom 141 (6) (-8965, 17671, 780) def +info atom atomtype = sp2 +bondg 104 139 +atom 142 (6) (-11744, 16373, 2468) def +info atom atomtype = sp2 +bondg 140 +atom 143 (6) (-11752, 17844, 548) def +info atom atomtype = sp2 +bondg 140 +atom 144 (6) (-12897, 17217, 43) def +info atom atomtype = sp2 +bondg 143 +atom 145 (6) (-9543, 18080, -425) def +info atom atomtype = sp2 +bondg 141 +atom 146 (6) (-10935, 18165, -539) def +info atom atomtype = sp2 +bondg 143 145 +atom 147 (6) (-12876, 15728, 1962) def +info atom atomtype = sp2 +bondg 103 142 +atom 148 (6) (-13451, 16151, 760) def +info atom atomtype = sp2 +bondg 144 147 +atom 149 (6) (-11567, 17747, -1714) def +info atom atomtype = sp2 +bondg 146 +atom 150 (6) (-12782, 17159, -1347) def +info atom atomtype = sp2 +bondg 144 149 +atom 151 (6) (-10690, 15629, 3011) def +info atom atomtype = sp2 +bondg 102 142 +atom 152 (6) (-9479, 16232, 2655) def +info atom atomtype = sp2 +bondg 101 139 151 +atom 153 (6) (-13219, 16033, -2053) def +info atom atomtype = sp2 +bondg 150 +atom 154 (6) (-10805, 17244, -2773) def +info atom atomtype = sp2 +bondg 149 +atom 155 (6) (-13852, 15010, 57) def +info atom atomtype = sp2 +bondg 108 148 +atom 156 (6) (-8781, 17576, -1484) def +info atom atomtype = sp2 +bondg 109 145 +atom 157 (6) (-13737, 14952, -1333) def +info atom atomtype = sp2 +bondg 135 153 155 +atom 158 (6) (-12459, 15517, -3109) def +info atom atomtype = sp2 +bondg 131 153 +atom 159 (6) (-9414, 17156, -2659) def +info atom atomtype = sp2 +bondg 134 154 156 +atom 160 (6) (-11257, 16125, -3482) def +info atom atomtype = sp2 +bondg 130 154 158 +atom 161 (1) (-9468, 9655, -62) def +bond1 115 +mol (Wheel-2) def +atom 162 (6) (-6804, -18169, 201) def +info atom atomtype = sp2 +atom 163 (6) (-7875, -17019, -2093) def +info atom atomtype = sp2 +atom 164 (6) (-10053, -17192, -3059) def +info atom atomtype = sp2 +atom 165 (6) (-7850, -19631, 1835) def +info atom atomtype = sp2 +atom 166 (6) (-7096, -18493, 1529) def +info atom atomtype = sp2 +bondg 162 165 +atom 167 (6) (-6921, -16779, 83) def +info atom atomtype = sp2 +bondg 162 +atom 168 (6) (-9008, -16379, -2606) def +info atom atomtype = sp2 +bondg 163 164 +atom 169 (6) (-11345, -16759, -2744) def +info atom atomtype = sp2 +bondg 164 +atom 170 (6) (-8841, -19584, 2820) def +info atom atomtype = sp2 +bondg 165 +atom 171 (6) (-11573, -15986, 3035) def +info atom atomtype = sp2 +atom 172 (6) (-11400, -14905, 2166) def +info atom atomtype = sp2 +bondg 171 +atom 173 (6) (-10467, -16616, 3614) def +info atom atomtype = sp2 +bondg 171 +atom 174 (6) (-12386, -15043, 1181) def +info atom atomtype = sp2 +bondg 172 +atom 175 (6) (-10185, -14293, 1823) def +info atom atomtype = sp2 +bondg 172 +atom 176 (6) (-9804, -13447, 577) def +bond1 175 +atom 177 (6) (-9212, -16139, 3221) def +info atom atomtype = sp2 +bondg 173 +atom 178 (6) (-9123, -15056, 2340) def +info atom atomtype = sp2 +bondg 175 177 +atom 179 (6) (-12106, -14565, -103) def +info atom atomtype = sp2 +bondg 174 +atom 180 (6) (-10956, -13633, -572) def +bond1 176 179 35 +atom 181 (6) (-8128, -15104, 1348) def +info atom atomtype = sp2 +bondg 178 +atom 182 (6) (-8602, -14368, 246) def +info atom atomtype = sp2 +bond1 176 +bondg 181 +atom 183 (6) (-13120, -16195, 1484) def +info atom atomtype = sp2 +bondg 174 +atom 184 (6) (-12644, -16801, 2652) def +info atom atomtype = sp2 +bondg 171 183 +atom 185 (6) (-8283, -15049, -938) def +info atom atomtype = sp2 +bondg 182 +atom 186 (6) (-7297, -16229, 1313) def +info atom atomtype = sp2 +bondg 167 181 +atom 187 (6) (-10527, -14633, -1679) def +info atom atomtype = sp2 +bond1 180 +atom 188 (6) (-8370, -17255, 3192) def +info atom atomtype = sp2 +bondg 177 +atom 189 (6) (-9265, -15184, -1927) def +info atom atomtype = sp2 +bondg 168 185 187 +atom 190 (6) (-7379, -17302, 2206) def +info atom atomtype = sp2 +bondg 166 186 188 +atom 191 (6) (-12620, -18191, 2806) def +info atom atomtype = sp2 +bondg 184 +atom 192 (6) (-13601, -17031, 472) def +info atom atomtype = sp2 +bondg 183 +atom 193 (6) (-12518, -15511, -1065) def +info atom atomtype = sp2 +bondg 179 +atom 194 (6) (-10412, -18003, 3792) def +info atom atomtype = sp2 +bondg 173 +atom 195 (6) (-11488, -18790, 3370) def +info atom atomtype = sp2 +bondg 191 194 +atom 196 (6) (-13260, -16674, -836) def +info atom atomtype = sp2 +bondg 192 193 +atom 197 (6) (-11524, -15555, -2057) def +info atom atomtype = sp2 +bondg 169 187 193 +atom 198 (6) (-9098, -18403, 3522) def +info atom atomtype = sp2 +bondg 170 188 194 +atom 199 (6) (-7463, -16177, -1055) def +info atom atomtype = sp2 +bondg 163 167 185 +atom 200 (6) (-8018, -20116, -550) def +info atom atomtype = sp2 +atom 201 (6) (-9001, -20244, -1536) def +info atom atomtype = sp2 +bondg 200 +atom 202 (6) (-8312, -20427, 782) def +info atom atomtype = sp2 +bondg 165 200 +atom 203 (6) (-8853, -19194, -2447) def +info atom atomtype = sp2 +bondg 201 +atom 204 (6) (-10283, -20686, -1190) def +info atom atomtype = sp2 +bondg 201 +atom 205 (6) (-11425, -20099, -1747) def +info atom atomtype = sp2 +bondg 204 +atom 206 (6) (-9594, -20866, 1127) def +info atom atomtype = sp2 +bondg 202 +atom 207 (6) (-10577, -20996, 140) def +info atom atomtype = sp2 +bondg 204 206 +atom 208 (6) (-9989, -18587, -2993) def +info atom atomtype = sp2 +bondg 164 203 +atom 209 (6) (-11266, -19041, -2647) def +info atom atomtype = sp2 +bondg 205 208 +atom 210 (6) (-11894, -20610, 411) def +info atom atomtype = sp2 +bondg 207 +atom 211 (6) (-12416, -20055, -759) def +info atom atomtype = sp2 +bondg 205 210 +atom 212 (6) (-7781, -18412, -2005) def +info atom atomtype = sp2 +bondg 163 203 +atom 213 (6) (-7252, -18983, -843) def +info atom atomtype = sp2 +bondg 162 200 212 +atom 214 (6) (-13267, -18951, -655) def +info atom atomtype = sp2 +bondg 211 +atom 215 (6) (-12225, -20096, 1669) def +info atom atomtype = sp2 +bondg 210 +atom 216 (6) (-12092, -17919, -2517) def +info atom atomtype = sp2 +bondg 169 209 +atom 217 (6) (-9925, -20352, 2385) def +info atom atomtype = sp2 +bondg 170 206 +atom 218 (6) (-13082, -17875, -1529) def +info atom atomtype = sp2 +bondg 196 214 216 +atom 219 (6) (-13597, -18424, 597) def +info atom atomtype = sp2 +bondg 192 214 +atom 220 (6) (-11242, -19967, 2654) def +info atom atomtype = sp2 +bondg 195 215 217 +atom 221 (6) (-13088, -19000, 1766) def +info atom atomtype = sp2 +bondg 191 215 219 +atom 222 (1) (-9509, -12431, 812) def +bond1 176 +mol (Wheel-3) def +atom 223 (6) (12289, 18276, 2329) def +info atom atomtype = sp2 +atom 224 (6) (9878, 17063, 3010) def +info atom atomtype = sp2 +atom 225 (6) (7728, 17162, 1970) def +info atom atomtype = sp2 +atom 226 (6) (12817, 19732, 457) def +info atom atomtype = sp2 +atom 227 (6) (13106, 18612, 1243) def +info atom atomtype = sp2 +bondg 223 226 +atom 228 (6) (12164, 16883, 2333) def +info atom atomtype = sp2 +bondg 223 +atom 229 (6) (8772, 16386, 2485) def +info atom atomtype = sp2 +bondg 224 225 +atom 230 (6) (7146, 16698, 784) def +info atom atomtype = sp2 +bondg 225 +atom 231 (6) (12932, 19673, -934) def +info atom atomtype = sp2 +bondg 226 +atom 232 (6) (11437, 16007, -3118) def +info atom atomtype = sp2 +atom 233 (6) (10915, 14919, -2410) def +info atom atomtype = sp2 +bondg 232 +atom 234 (6) (12575, 16674, -2654) def +info atom atomtype = sp2 +bondg 232 +atom 235 (6) (9522, 15014, -2527) def +info atom atomtype = sp2 +bondg 233 +atom 236 (6) (11457, 14337, -1254) def +info atom atomtype = sp2 +bondg 233 +atom 237 (6) (10777, 13486, -149) def +bond1 236 +atom 238 (6) (13100, 16227, -1437) def +info atom atomtype = sp2 +bondg 234 +atom 239 (6) (12515, 15135, -787) def +info atom atomtype = sp2 +bondg 236 238 +atom 240 (6) (8736, 14527, -1476) def +info atom atomtype = sp2 +bondg 235 +atom 241 (6) (9152, 13622, -287) def +bond1 237 240 99 +atom 242 (6) (12399, 15195, 613) def +info atom atomtype = sp2 +bondg 239 +atom 243 (6) (11273, 14434, 972) def +info atom atomtype = sp2 +bond1 237 +bondg 242 +atom 244 (6) (9247, 16148, -3297) def +info atom atomtype = sp2 +bondg 235 +atom 245 (6) (10427, 16784, -3695) def +info atom atomtype = sp2 +bondg 232 244 +atom 246 (6) (10553, 15103, 1973) def +info atom atomtype = sp2 +bondg 243 +atom 247 (6) (12876, 16341, 1256) def +info atom atomtype = sp2 +bondg 228 242 +atom 248 (6) (8551, 14614, 745) def +info atom atomtype = sp2 +bond1 241 +atom 249 (6) (13590, 17365, -787) def +info atom atomtype = sp2 +bondg 238 +atom 250 (6) (9160, 15194, 1863) def +info atom atomtype = sp2 +bondg 229 246 248 +atom 251 (6) (13475, 17424, 604) def +info atom atomtype = sp2 +bondg 227 247 249 +atom 252 (6) (10520, 18176, -3792) def +info atom atomtype = sp2 +bondg 245 +atom 253 (6) (8138, 16955, -3018) def +info atom atomtype = sp2 +bondg 244 +atom 254 (6) (7708, 15444, -1180) def +info atom atomtype = sp2 +bondg 240 +atom 255 (6) (12706, 18064, -2742) def +info atom atomtype = sp2 +bondg 234 +atom 256 (6) (11664, 18813, -3299) def +info atom atomtype = sp2 +bondg 252 255 +atom 257 (6) (7369, 16589, -1909) def +info atom atomtype = sp2 +bondg 253 254 +atom 258 (6) (7590, 15500, 215) def +info atom atomtype = sp2 +bondg 230 248 254 +atom 259 (6) (13337, 18496, -1571) def +info atom atomtype = sp2 +bondg 231 249 255 +atom 260 (6) (10962, 16250, 2662) def +info atom atomtype = sp2 +bondg 224 228 246 +atom 261 (6) (10874, 20176, 1866) def +info atom atomtype = sp2 +atom 262 (6) (9482, 20262, 1751) def +info atom atomtype = sp2 +bondg 261 +atom 263 (6) (11692, 20499, 778) def +info atom atomtype = sp2 +bondg 226 261 +atom 264 (6) (8912, 19203, 2466) def +info atom atomtype = sp2 +bondg 262 +atom 265 (6) (8905, 20673, 546) def +info atom atomtype = sp2 +bondg 262 +atom 266 (6) (7760, 20048, 40) def +info atom atomtype = sp2 +bondg 265 +atom 267 (6) (11114, 20909, -428) def +info atom atomtype = sp2 +bondg 263 +atom 268 (6) (9722, 20996, -542) def +info atom atomtype = sp2 +bondg 265 267 +atom 269 (6) (7779, 18558, 1959) def +info atom atomtype = sp2 +bondg 225 264 +atom 270 (6) (7205, 18982, 754) def +info atom atomtype = sp2 +bondg 266 269 +atom 271 (6) (9090, 20578, -1717) def +info atom atomtype = sp2 +bondg 268 +atom 272 (6) (7875, 19990, -1351) def +info atom atomtype = sp2 +bondg 266 271 +atom 273 (6) (9965, 18459, 3008) def +info atom atomtype = sp2 +bondg 224 264 +atom 274 (6) (11177, 19060, 2653) def +info atom atomtype = sp2 +bondg 223 261 273 +atom 275 (6) (7437, 18865, -2057) def +info atom atomtype = sp2 +bondg 272 +atom 276 (6) (9852, 20073, -2776) def +info atom atomtype = sp2 +bondg 271 +atom 277 (6) (6803, 17842, 54) def +info atom atomtype = sp2 +bondg 230 270 +atom 278 (6) (11876, 20404, -1487) def +info atom atomtype = sp2 +bondg 231 267 +atom 279 (6) (6918, 17784, -1337) def +info atom atomtype = sp2 +bondg 257 275 277 +atom 280 (6) (8196, 18348, -3112) def +info atom atomtype = sp2 +bondg 253 275 +atom 281 (6) (11243, 19985, -2662) def +info atom atomtype = sp2 +bondg 256 276 278 +atom 282 (6) (9400, 18955, -3485) def +info atom atomtype = sp2 +bondg 252 276 280 +atom 283 (1) (11177, 12484, -64) def +bond1 237 +mol (Wheel-4) def +atom 284 (6) (13852, -15336, 199) def +info atom atomtype = sp2 +atom 285 (6) (12780, -14186, -2097) def +info atom atomtype = sp2 +atom 286 (6) (10602, -14359, -3064) def +info atom atomtype = sp2 +atom 287 (6) (12805, -16797, 1833) def +info atom atomtype = sp2 +atom 288 (6) (13560, -15660, 1529) def +info atom atomtype = sp2 +bondg 284 287 +atom 289 (6) (13735, -13947, 80) def +info atom atomtype = sp2 +bondg 284 +atom 290 (6) (11647, -13548, -2610) def +info atom atomtype = sp2 +bondg 285 286 +atom 291 (6) (9309, -13927, -2749) def +info atom atomtype = sp2 +bondg 286 +atom 292 (6) (11815, -16750, 2820) def +info atom atomtype = sp2 +bondg 287 +atom 293 (6) (9081, -13156, 3036) def +info atom atomtype = sp2 +atom 294 (6) (9254, -12075, 2164) def +info atom atomtype = sp2 +bondg 293 +atom 295 (6) (10188, -13784, 3614) def +info atom atomtype = sp2 +bondg 293 +atom 296 (6) (8268, -12212, 1179) def +info atom atomtype = sp2 +bondg 294 +atom 297 (6) (10470, -11464, 1822) def +info atom atomtype = sp2 +bondg 294 +atom 298 (6) (10851, -10620, 575) def +bond1 297 +atom 299 (6) (11443, -13308, 3222) def +info atom atomtype = sp2 +bondg 295 +atom 300 (6) (11532, -12226, 2339) def +info atom atomtype = sp2 +bondg 297 299 +atom 301 (6) (8548, -11736, -105) def +info atom atomtype = sp2 +bondg 296 +atom 302 (6) (9699, -10804, -573) def +bond1 298 301 97 +atom 303 (6) (12527, -12273, 1346) def +info atom atomtype = sp2 +bondg 300 +atom 304 (6) (12054, -11540, 244) def +info atom atomtype = sp2 +bond1 298 +bondg 303 +atom 305 (6) (7534, -13363, 1483) def +info atom atomtype = sp2 +bondg 296 +atom 306 (6) (8010, -13968, 2651) def +info atom atomtype = sp2 +bondg 293 305 +atom 307 (6) (12371, -12219, -942) def +info atom atomtype = sp2 +bondg 304 +atom 308 (6) (13359, -13397, 1311) def +info atom atomtype = sp2 +bondg 289 303 +atom 309 (6) (10127, -11802, -1682) def +info atom atomtype = sp2 +bond1 302 +atom 310 (6) (12287, -14423, 3192) def +info atom atomtype = sp2 +bondg 299 +atom 311 (6) (11389, -12352, -1931) def +info atom atomtype = sp2 +bondg 290 307 309 +atom 312 (6) (13277, -14469, 2206) def +info atom atomtype = sp2 +bondg 288 308 310 +atom 313 (6) (8035, -15358, 2805) def +info atom atomtype = sp2 +bondg 306 +atom 314 (6) (7053, -14198, 470) def +info atom atomtype = sp2 +bondg 305 +atom 315 (6) (8135, -12680, -1068) def +info atom atomtype = sp2 +bondg 301 +atom 316 (6) (10244, -15170, 3791) def +info atom atomtype = sp2 +bondg 295 +atom 317 (6) (9167, -15956, 3368) def +info atom atomtype = sp2 +bondg 313 316 +atom 318 (6) (7393, -13843, -839) def +info atom atomtype = sp2 +bondg 314 315 +atom 319 (6) (9130, -12723, -2060) def +info atom atomtype = sp2 +bondg 291 309 315 +atom 320 (6) (11557, -15569, 3522) def +info atom atomtype = sp2 +bondg 292 310 316 +atom 321 (6) (13193, -13346, -1057) def +info atom atomtype = sp2 +bondg 285 289 307 +atom 322 (6) (12637, -17281, -552) def +info atom atomtype = sp2 +atom 323 (6) (11654, -17410, -1537) def +info atom atomtype = sp2 +bondg 322 +atom 324 (6) (12344, -17593, 778) def +info atom atomtype = sp2 +bondg 287 322 +atom 325 (6) (11802, -16360, -2449) def +info atom atomtype = sp2 +bondg 323 +atom 326 (6) (10372, -17852, -1193) def +info atom atomtype = sp2 +bondg 323 +atom 327 (6) (9230, -17267, -1750) def +info atom atomtype = sp2 +bondg 326 +atom 328 (6) (11062, -18033, 1124) def +info atom atomtype = sp2 +bondg 324 +atom 329 (6) (10078, -18162, 138) def +info atom atomtype = sp2 +bondg 326 328 +atom 330 (6) (10666, -15754, -2996) def +info atom atomtype = sp2 +bondg 286 325 +atom 331 (6) (9389, -16209, -2651) def +info atom atomtype = sp2 +bondg 327 330 +atom 332 (6) (8761, -17777, 409) def +info atom atomtype = sp2 +bondg 329 +atom 333 (6) (8240, -17221, -763) def +info atom atomtype = sp2 +bondg 327 332 +atom 334 (6) (12875, -15579, -2008) def +info atom atomtype = sp2 +bondg 285 325 +atom 335 (6) (13403, -16149, -845) def +info atom atomtype = sp2 +bondg 284 322 334 +atom 336 (6) (7387, -16116, -658) def +info atom atomtype = sp2 +bondg 333 +atom 337 (6) (8431, -17262, 1666) def +info atom atomtype = sp2 +bondg 332 +atom 338 (6) (8562, -15088, -2521) def +info atom atomtype = sp2 +bondg 291 331 +atom 339 (6) (10731, -17519, 2382) def +info atom atomtype = sp2 +bondg 292 328 +atom 340 (6) (7571, -15043, -1533) def +info atom atomtype = sp2 +bondg 318 336 338 +atom 341 (6) (7057, -15591, 594) def +info atom atomtype = sp2 +bondg 314 336 +atom 342 (6) (9414, -17133, 2653) def +info atom atomtype = sp2 +bondg 317 337 339 +atom 343 (6) (7567, -16166, 1763) def +info atom atomtype = sp2 +bondg 313 337 341 +atom 344 (1) (11147, -9606, 810) def +bond1 298 +csys (View-1) (0.356228, 0.816395, 0.396533, -0.222175) (30.339253) (-10.526067, 0.143466, -1.133044) (1.000000) +egroup (nanocar) +end1 +group (Clipboard) +info opengroup open = True +mol (Wheel) def +atom 345 (6) (3224, 1269, 177) def +info atom atomtype = sp2 +atom 346 (6) (1318, 3237, -236) def +info atom atomtype = sp2 +atom 347 (6) (-809, 3157, -1367) def +info atom atomtype = sp2 +atom 348 (6) (3262, -1041, -484) def +info atom atomtype = sp2 +atom 349 (6) (3427, -63, 480) def +info atom atomtype = sp2 +bondg 345 348 +atom 350 (6) (2618, 1883, 1264) def +info atom atomtype = sp2 +bondg 345 +atom 351 (6) (-34, 3520, -276) def +info atom atomtype = sp2 +bondg 346 347 +atom 352 (6) (-2069, 2613, -1181) def +info atom atomtype = sp2 +bondg 347 +atom 353 (6) (2609, -2218, -166) def +info atom atomtype = sp2 +bondg 348 +atom 354 (6) (-1115, -2109, 2423) def +info atom atomtype = sp2 +atom 355 (6) (-1602, -896, 2882) def +info atom atomtype = sp2 +bondg 354 +atom 356 (6) (245, -2368, 2451) def +info atom atomtype = sp2 +bondg 354 +atom 357 (6) (-2664, -522, 2075) def +info atom atomtype = sp2 +bondg 355 +atom 358 (6) (-726, 62, 3366) def +info atom atomtype = sp2 +bondg 355 +atom 359 (6) (-915, 1396, 3049) def +bond1 358 +atom 360 (6) (1120, -1409, 2931) def +info atom atomtype = sp2 +bondg 356 +atom 361 (6) (634, -193, 3382) def +info atom atomtype = sp2 +bondg 358 360 +atom 362 (6) (-2869, 812, 1759) def +info atom atomtype = sp2 +bondg 357 +atom 363 (6) (-2000, 1766, 2268) def +bond1 359 362 +atom 364 (6) (1288, 983, 3056) def +info atom atomtype = sp2 +bondg 361 +atom 365 (6) (335, 1966, 2852) def +info atom atomtype = sp2 +bond1 359 +bondg 364 +atom 366 (6) (-2828, -1504, 1111) def +info atom atomtype = sp2 +bondg 357 +atom 367 (6) (-1871, -2480, 1324) def +info atom atomtype = sp2 +bondg 354 366 +atom 368 (6) (540, 2919, 1866) def +info atom atomtype = sp2 +bondg 365 +atom 369 (6) (2429, 945, 2270) def +info atom atomtype = sp2 +bondg 350 364 +atom 370 (6) (-1831, 2734, 1302) def +info atom atomtype = sp2 +bond1 363 +atom 371 (6) (2264, -1450, 2154) def +info atom atomtype = sp2 +bondg 360 +atom 372 (6) (-521, 3325, 1085) def +info atom atomtype = sp2 +bondg 351 368 370 +atom 373 (6) (2915, -272, 1832) def +info atom atomtype = sp2 +bondg 349 369 371 +atom 374 (6) (-1267, -3105, 244) def +info atom atomtype = sp2 +bondg 367 +atom 375 (6) (-3189, -1156, -179) def +info atom atomtype = sp2 +bondg 366 +atom 376 (6) (-3251, 1164, 470) def +info atom atomtype = sp2 +bondg 362 +atom 377 (6) (849, -2999, 1379) def +info atom atomtype = sp2 +bondg 356 +atom 378 (6) (89, -3367, 283) def +info atom atomtype = sp2 +bondg 374 377 +atom 379 (6) (-3413, 174, -485) def +info atom atomtype = sp2 +bondg 375 376 +atom 380 (6) (-2624, 2355, 146) def +info atom atomtype = sp2 +bondg 352 370 376 +atom 381 (6) (2095, -2429, 1191) def +info atom atomtype = sp2 +bondg 353 371 377 +atom 382 (6) (1666, 2872, 1058) def +info atom atomtype = sp2 +bondg 346 350 368 +atom 383 (6) (2700, 655, -2082) def +info atom atomtype = sp2 +atom 384 (6) (1633, 1031, -2881) def +info atom atomtype = sp2 +bondg 383 +atom 385 (6) (2897, -680, -1769) def +info atom atomtype = sp2 +bondg 348 383 +atom 386 (6) (1147, 2241, -2414) def +info atom atomtype = sp2 +bondg 384 +atom 387 (6) (758, 71, -3365) def +info atom atomtype = sp2 +bondg 384 +atom 388 (6) (-602, 324, -3388) def +info atom atomtype = sp2 +bondg 387 +atom 389 (6) (2021, -1638, -2248) def +info atom atomtype = sp2 +bondg 385 +atom 390 (6) (949, -1260, -3042) def +info atom atomtype = sp2 +bondg 387 389 +atom 391 (6) (-213, 2508, -2441) def +info atom atomtype = sp2 +bondg 347 386 +atom 392 (6) (-1078, 1550, -2949) def +info atom atomtype = sp2 +bondg 388 391 +atom 393 (6) (-297, -1830, -2845) def +info atom atomtype = sp2 +bondg 390 +atom 394 (6) (-1257, -856, -3061) def +info atom atomtype = sp2 +bondg 388 393 +atom 395 (6) (1912, 2608, -1318) def +info atom atomtype = sp2 +bondg 346 386 +atom 396 (6) (2867, 1628, -1112) def +info atom atomtype = sp2 +bondg 345 383 395 +atom 397 (6) (-2404, -845, -2280) def +info atom atomtype = sp2 +bondg 394 +atom 398 (6) (-477, -2777, -1849) def +info atom atomtype = sp2 +bondg 393 +atom 399 (6) (-2233, 1591, -2199) def +info atom atomtype = sp2 +bondg 352 392 +atom 400 (6) (1846, -2589, -1259) def +info atom atomtype = sp2 +bondg 353 389 +atom 401 (6) (-2915, 358, -1844) def +info atom atomtype = sp2 +bondg 379 397 399 +atom 402 (6) (-2577, -1772, -1263) def +info atom atomtype = sp2 +bondg 375 397 +atom 403 (6) (599, -3156, -1068) def +info atom atomtype = sp2 +bondg 378 398 400 +atom 404 (6) (-1611, -2746, -1050) def +info atom atomtype = sp2 +bondg 374 398 402 +atom 405 (0) (-1237, 1758, 3649) def +bond1 359 +atom 406 (0) (-2302, 2062, 2913) def +bond1 363 +info chunk hotspot = 406 +mol (Rod) def +atom 407 (6) (-16, 65, 0) def +info atom atomtype = sp +atom 408 (0) (-676, 65, 0) def +bond1 407 +atom 409 (6) (1303, 65, 0) def +info atom atomtype = sp +bond3 407 +atom 410 (0) (2077, 65, 0) def +bond1 409 +info chunk hotspot = 408 +mol (Connector-copy1) def +atom 411 (6) (1218, 720, 30) def +info atom atomtype = sp2 +atom 412 (6) (1244, -675, 22) def +info atom atomtype = sp2 +bonda 411 +atom 413 (6) (48, -1396, -7) def +info atom atomtype = sp2 +bonda 412 +atom 414 (6) (-1172, -720, -30) def +info atom atomtype = sp2 +bonda 413 +atom 415 (6) (-1199, 675, -22) def +info atom atomtype = sp2 +bonda 414 +atom 416 (6) (-3, 1396, 6) def +info atom atomtype = sp2 +bonda 411 415 +atom 417 (0) (-1861, 1041, -34) def +bond1 415 +atom 418 (0) (-17, 2153, 10) def +bond1 416 +atom 419 (0) (1866, 1111, 46) def +bond1 411 +atom 420 (0) (1907, -1041, 34) def +bond1 412 +atom 421 (0) (63, -2153, -10) def +bond1 413 +atom 422 (0) (-1820, -1111, -45) def +bond1 414 +mol (rear axle) def +atom 423 (6) (1194, 748, 28) def +info atom atomtype = sp2 +atom 424 (6) (1220, -646, 20) def +info atom atomtype = sp2 +bonda 423 +atom 425 (6) (25, -1367, -8) def +info atom atomtype = sp2 +bonda 424 +atom 426 (6) (-1194, -691, -30) def +info atom atomtype = sp2 +bonda 425 +atom 427 (6) (-1221, 703, -23) def +info atom atomtype = sp2 +bonda 426 +atom 428 (6) (-25, 1424, 4) def +info atom atomtype = sp2 +bonda 423 427 +atom 429 (0) (-1883, 1069, -34) def +bond1 427 +atom 430 (0) (1883, -1012, 32) def +bond1 424 +atom 431 (0) (-1842, -1082, -45) def +bond1 426 +atom 432 (6) (53, -2783, -13) def +info atom atomtype = sp +bond1 425 +atom 433 (6) (-51, 2840, 11) def +info atom atomtype = sp +bond1 428 +atom 434 (6) (-75, 4159, 18) def +info atom atomtype = sp +bond3 433 +atom 435 (6) (80, -4159, -18) def +info atom atomtype = sp +bond3 432 +atom 436 (6) (749, -7774, 1022) def +info atom atomtype = sp2 +atom 437 (6) (719, -6380, 1027) def +info atom atomtype = sp2 +bonda 436 +atom 438 (6) (110, -5690, -24) def +info atom atomtype = sp2 +bond1 435 +bonda 437 +atom 439 (6) (-467, -6398, -1077) def +info atom atomtype = sp2 +bonda 438 +atom 440 (6) (-437, -7793, -1083) def +info atom atomtype = sp2 +bonda 439 +atom 441 (6) (169, -8482, -31) def +info atom atomtype = sp2 +bonda 436 440 +atom 442 (0) (-751, -8176, -1655) def +bond1 440 +atom 443 (0) (1079, -8148, 1592) def +bond1 436 +atom 444 (0) (1033, -5996, 1600) def +bond1 437 +atom 445 (0) (-796, -6024, -1648) def +bond1 439 +atom 446 (6) (-1126, 6366, 691) def +info atom atomtype = sp2 +atom 447 (6) (-1152, 7761, 698) def +info atom atomtype = sp2 +bonda 446 +atom 448 (6) (-151, 8482, 41) def +info atom atomtype = sp2 +bonda 447 +atom 449 (6) (871, 7805, -622) def +info atom atomtype = sp2 +bonda 448 +atom 450 (6) (898, 6410, -629) def +info atom atomtype = sp2 +bonda 449 +atom 451 (6) (-102, 5690, 25) def +info atom atomtype = sp2 +bond1 434 +bonda 446 450 +atom 452 (0) (1453, 6044, -989) def +bond1 450 +atom 453 (0) (-1668, 5975, 1047) def +bond1 446 +atom 454 (0) (-1708, 8127, 1058) def +bond1 447 +atom 455 (0) (1414, 8196, -977) def +bond1 449 +atom 456 (6) (198, -9898, -36) def +info atom atomtype = sp +bond1 441 +atom 457 (6) (226, -11217, -41) def +info atom atomtype = sp +bond3 456 +atom 458 (0) (243, -11991, -44) def +bond1 457 +atom 459 (6) (-177, 9898, 51) def +info atom atomtype = sp +bond1 448 +atom 460 (6) (-202, 11217, 60) def +info atom atomtype = sp +bond3 459 +atom 461 (0) (-216, 11991, 66) def +bond1 460 +atom 462 (0) (1914, 1101, 42) def +bond1 423 +info chunk hotspot = 431 +egroup (Clipboard) +end molecular machine part nanocar |