def showMolecules(self): tstep = self.animationSlider.value() self.animationTime.setText("Time: %7.2f fs" % (tstep * self.dt)) self.mol.clear() for geoms in self.geometries: geom_time = geoms[min(tstep, len(geoms)-1)] # atoms atoms = [] for (Z,pos) in geom_time: a = self.mol.addAtom() a.pos = np.array(pos, dtype=float) a.atomicNumber = Z atoms.append(a) # bond C = XYZ.connectivity_matrix(geom_time) Nat = len(geom_time) for i in range(0, Nat): for j in range(i+1,Nat): if C[i,j] == 1: bond = self.mol.addBond() bond.setBegin(atoms[i]) bond.setEnd(atoms[j]) bond.order = 1 self.glWidget.mol = self.mol self.glWidget.updateGeometry() Avogadro.toPyQt(self.glWidget).update()
def load(self, row): mol = self.molFile.molecule(row) self.objects.append(mol) glWidget = self.newGLWidget() glWidget.molecule = mol mdiWindow = self.ui.mdiArea.addSubWindow(Avogadro.toPyQt(glWidget)) print glWidget print Avogadro.toPyQt(glWidget) mdiWindow.setWindowTitle(self.molFile.titles[row]) mdiWindow.show()
def test_constructors(self): qlist = [] for i in range(10): atom = self.molecule.addAtom() self.list.append(atom) qlist.append(atom) self.assertEqual(self.list.size, 10) list2 = Avogadro.PrimitiveList(self.list) self.assertEqual(list2.size, 10) list3 = Avogadro.PrimitiveList(qlist) self.assertEqual(list3.size, 10)
def newGLWidget(self): glWidget = Avogadro.GLWidget() glWidget.loadDefaultEngines() glWidget.quality = 4 toolGroup = Avogadro.ToolGroup() tool = Avogadro.PluginManager.instance.tool('Navigate', None) toolGroup.append(tool) glWidget.toolGroup = toolGroup self.objects.append(glWidget) self.objects.append(toolGroup) self.objects.append(tool) return glWidget
def test_constructors(self): color0 = Avogadro.Color(1.0, 0.0, 0.0) self.assertNotEqual(color0, None) color1 = Avogadro.Color(1.0, 0.0, 0.0, 1.0) self.assertNotEqual(color1, None) molecule = Avogadro.molecules.addMolecule() atom = molecule.addAtom() atom.atomicNumber = 6 color2 = Avogadro.Color(atom) self.assertNotEqual(color2, None) color3 = Avogadro.Color() self.assertNotEqual(color3, None)
def selectBackbone(self, glwidget): mol = glwidget.molecule # create a PrimitiveList to call GLWidget.setSelected(PrimitiveList, bool) primitiveList = Avogadro.PrimitiveList() # find the backbone atoms for atom in mol.atoms: # get the atomId and strip of white spaces atomId = atom.residue.atomId(atom.id).strip() print atomId # add the atom to the list if the atomId matches N, CA, C, O or H if atomId == "N": primitiveList.append(atom) elif atomId == "CA": primitiveList.append(atom) elif atomId == "C": primitiveList.append(atom) elif atomId == "O": primitiveList.append(atom) elif atomId == "H": primitiveList.append(atom) # find all bonds between backbone atoms for bond in mol.bonds: beginAtom = bond.beginAtom endAtom = bond.endAtom if primitiveList.contains(beginAtom) and primitiveList.contains( endAtom): primitiveList.append(bond) # clear the current selection glwidget.clearSelected() # select the backbone atom glwidget.setSelected(primitiveList, True)
def test_engine(self): engines = Avogadro.PluginManager.instance.identifiers( Avogadro.PluginType.EngineType) engine = Avogadro.PluginManager.instance.engine( engines[0], Avogadro.toPyQt(self.glwidget)) self.assertNotEqual(engine, None) self.glwidget.addEngine(engine) self.glwidget.removeEngine(engine)
def setUp(self): # create the GLWidget and load the default engines self.glwidget = Avogadro.GLWidget() self.glwidget.loadDefaultEngines() self.molecule = Avogadro.molecules.addMolecule() self.molecule.addAtom() self.glwidget.molecule = self.molecule
def load(self, row): mol = self.molFile.molecule(row) self.objects.append(mol) glWidget = self.newGLWidget() glWidget.molecule = mol mdiWindow = self.ui.mdiArea.addSubWindow(Avogadro.toPyQt(glWidget)) mdiWindow.setWindowTitle(self.molFile.titles[row]) mdiWindow.show()
def __init__(self, ): super(Main, self).__init__() self.setupUi(self) self.canvases = [] self.trajdirs = [] self.trajSelection.itemSelectionChanged.connect(self.changeTrajectory) # load Trajectories dyndir = "./" if len(sys.argv) > 1: dyndir = sys.argv[1] self.dirBrowser.setText(dyndir) self.dirBrowser.returnPressed.connect(self.fetchURL) self.openButton.clicked.connect(self.openDirectory) # plots import matplotlib.pyplot as plt cmap = plt.get_cmap('gnuplot') self.colors = ['black', 'red', 'green', 'blue', 'k', 'm' ] + [cmap(f) for f in np.linspace(0.4, 1.0, 10)] self.energiesAxis = self.addTab(self.energiesLayout) self.coefficientsAxis = self.addTab(self.coefficientsLayout) self.couplingsAxis = self.addTab(self.couplingsLayout) self.currEnergyAxis = self.addTab(self.currEnergyLayout) self.currStateAxis = self.addTab(self.currStateLayout) self.populationsAxis = self.addTab(self.populationsLayout) self.axes = [ self.energiesAxis, self.coefficientsAxis, self.couplingsAxis, self.currEnergyAxis, self.currStateAxis ] self.objects = [] # Window with geometries self.glWidget = self.newGLWidget() self.mol = Avogadro.molecules.addMolecule() self.objects.append(self.mol) self.glWidget.molecule = self.mol self.viewerWidgetLayout.addWidget(Avogadro.toPyQt(self.glWidget)) # self.animationSlider.valueChanged.connect(self.showMolecules) self.loadTrajectories(dyndir) # self.pictureAorDiab = QtGui.QComboBox() self.pictureAorDiab.addItems(["adiabatic", "local diabatic"]) self.pictureAorDiab.setToolTip( "Choose whether energies and couplings should be shown in the adiabatic or the local diabatic picture." ) self.pictureAorDiab.currentIndexChanged.connect(self.switchPicture) self.picture = self.pictureAorDiab.currentText() self.gridLayout.addWidget(self.pictureAorDiab, 1, 0)
def performAction(self, action, glwidget): for i, engine in enumerate(glwidget.engines): if engine.name == "Surfaces": surfaceEngine = engine # This should work... print "Name", engine.name # Bug, it gives nothing intelligible print "Alias", engine.alias # Bug, same as before print "Primitives", engine.primitiveTypes # Gives Surface, 3, Atoms etc... print "index", i cube = glwidget.molecule.addCube() dim = array([5, 5, 5]) min = -array([10.0, 10.0, 10.0]) max = array([10.0, 10.0, 10.0]) cube.setLimits(min, max, dim) data = [] for i in range(125): data.append(sin(i / 5.0)) cube.setData(data) mesh = glwidget.molecule.addMesh() ID = mesh.id mesh.cube = cube.id iso = 1.0 mesh_gen = Avogadro.MeshGenerator() initialized = mesh_gen.initialize(cube, mesh, iso) mesh_gen.run() Avogadro.toPyQt(mesh_gen).wait() print "finished" #settings = QSettings("mesh1Id", ID) This doesn't set values!! settings = QSettings() settings.setValue("mesh1Id", ID) surfaceEngine.readSettings(settings) surfaceEngine.enabled = True glwidget.molecule.update()
def open(self): filename = str( QFileDialog.getOpenFileName( self, 'Open', QDir.currentPath(), 'Chemistry files (*.cml *.sdf *.mol *.xyz)')) self.molFile = Avogadro.OpenbabelWrapper.readFile( filename, '', '', False) self.connect(Avogadro.toPyQt(self.molFile), SIGNAL('ready()'), self, SLOT('readThreadFinnished()')) self.ui.statusbar.showMessage('Reading file...')
def performAction(self, action, glwidget): for i,engine in enumerate(glwidget.engines): if engine.name == "Surfaces": surfaceEngine = engine # This should work... print "Name",engine.name # Bug, it gives nothing intelligible print "Alias",engine.alias # Bug, same as before print "Primitives", engine.primitiveTypes # Gives Surface, 3, Atoms etc... print "index",i cube = glwidget.molecule.addCube() dim = array([5,5,5]) min = -array([10.0,10.0,10.0]) max = array([10.0,10.0,10.0]) cube.setLimits(min,max,dim) data = [] for i in range(125): data.append(sin(i/5.0)) cube.setData(data) mesh = glwidget.molecule.addMesh() ID = mesh.id mesh.cube = cube.id iso = 1.0 mesh_gen = Avogadro.MeshGenerator() initialized = mesh_gen.initialize(cube,mesh,iso) mesh_gen.run() Avogadro.toPyQt(mesh_gen).wait() print "finished" #settings = QSettings("mesh1Id", ID) This doesn't set values!! settings = QSettings() settings.setValue("mesh1Id", ID) surfaceEngine.readSettings(settings) surfaceEngine.enabled = True glwidget.molecule.update()
def test_set(self): molecule = Avogadro.molecules.addMolecule() atom = molecule.addAtom() atom.atomicNumber = 6 color = Avogadro.Color() color.setFromRgba(0.0, 1.0, 0.0) color.setFromRgba(0.0, 1.0, 0.0, 1.0) color.setFromPrimitive(atom) color.setFromGradient(0.7, 0.0, 0.5, 1.0) color.setFromIndex(0) color.alpha = 0.5
def test_primitives(self): molecule = Avogadro.molecules.addMolecule() for i in range(10): molecule.addAtom() list = Avogadro.PrimitiveList(molecule.atoms) for engine in self.engines: self.assertEqual(engine.primitives.size, 0) engine.primitives = list self.assertNotEqual(engine.primitives.size, 0) engine.clearPrimitives() self.assertEqual(engine.primitives.size, 0)
def test_performAction(self): glwidget = Avogadro.GLWidget() molecule = Avogadro.molecules.addMolecule() glwidget.molecule = molecule molecule.addAtom().atomicNumber = 6 for extension in self.extensions: if extension.name == "Hydrogens": extension.setMolecule(molecule) actions = extension.actions for action in actions: #print action.text(), " = ", extension.menuPath(action) if action.text() == "Add Hydrogens": command = extension.performAction(action, glwidget) command.redo() self.assertEqual(molecule.numAtoms, 5)
def selectBindingSite(self, glwidget): # returns (double, bool ok) as tuple result = QInputDialog.getDouble( None, "Create Binding Site Around Selection", "radius", 5.0, 2.0, 20.0, 1) if not result[1]: return r = result[0] r2 = r * r selectedAtoms = glwidget.selectedPrimitives.subList( Avogadro.PrimitiveType.AtomType) newSelection = Avogadro.PrimitiveList() atomIds = [] for residue in glwidget.molecule.residues: keepResidue = False # compute distance between residue atoms and selected atoms for atomId in residue.atoms: atom = glwidget.molecule.atomById(atomId) if not atom: continue for selectedAtom in selectedAtoms: ab = selectedAtom.pos - atom.pos dist2 = dot(ab, ab) if dist2 < r2: keepResidue = True break if keepResidue: break if keepResidue: for atomId in residue.atoms: atom = glwidget.molecule.atomById(atomId) newSelection.append(atom) atomIds.append(atom.id) # find all bonds between the atoms for bond in glwidget.molecule.bonds: beginAtom = bond.beginAtom endAtom = bond.endAtom if atomIds.count(beginAtom.id) and atomIds.count(endAtom.id): newSelection.append(bond) glwidget.setSelected(newSelection, True)
def test_namedSelections(self): l = Avogadro.PrimitiveList([self.molecule.atom(0)]) self.glwidget.addNamedSelection("test", l) self.assertNotEqual(len(self.glwidget.namedSelections), 0) self.assertEqual(self.glwidget.namedSelections[0], "test") self.glwidget.removeNamedSelection("test") self.assertEqual(len(self.glwidget.namedSelections), 0) self.glwidget.addNamedSelection("test", l) self.glwidget.removeNamedSelection(0) self.assertEqual(len(self.glwidget.namedSelections), 0) self.glwidget.addNamedSelection("test", l) self.glwidget.renameNamedSelection(0, "test2") self.assertEqual(self.glwidget.namedSelections[0], "test2") self.assertNotEqual(self.glwidget.namedSelectionPrimitives("test2"), None) self.assertNotEqual(self.glwidget.namedSelectionPrimitives(0), None)
def test_toolGroup(self): self.glwidget.toolGroup self.glwidget.toolGroup = Avogadro.ToolGroup() self.assertNotEqual(self.glwidget.toolGroup, None)
def open(self): filename = str(QFileDialog.getOpenFileName(self, 'Open', QDir.currentPath(), 'Chemistry files (*.cml *.sdf *.mol *.xyz)')) self.molFile = Avogadro.MoleculeFile.readFile(filename, '', '', False) self.connect(Avogadro.toPyQt(self.molFile), SIGNAL('ready()'), self, SLOT('readThreadFinnished()')) self.ui.statusbar.showMessage('Reading file...')
def test_colorMap(self): self.glwidget.colorMap self.glwidget.colorMap = Avogadro.Color() self.assertNotEqual(self.glwidget.colorMap, None)
def _test_constructors(self): self.qwidget = QWidget() self.glwidget2 = Avogadro.GLWidget(self.qwidget)
def setUp(self): self.toolGroup = Avogadro.ToolGroup()
def test_engine(self): engines = Avogadro.PluginManager.instance.identifiers(Avogadro.PluginType.EngineType) engine = Avogadro.PluginManager.instance.engine(engines[0], Avogadro.toPyQt(self.glwidget)) self.assertNotEqual(engine, None) self.glwidget.addEngine(engine) self.glwidget.removeEngine(engine)
def test_colorMap(self): color = Avogadro.Color() for engine in self.engines: self.assertEqual(engine.colorMap, None) engine.colorMap = color self.assertNotEqual(engine.colorMap, None)
def setUp(self): self.molecule = Avogadro.molecules.addMolecule() self.list = Avogadro.PrimitiveList()
#!/usr/bin/env python2 from __future__ import print_function import os.path import argparse parser = argparse.ArgumentParser() parser.add_argument("xyzfilename", nargs="+") args = parser.parse_args() import Avogadro # mol = Avogadro.molecules.addMolecule() for xyzfilename in args.xyzfilename: molfile = Avogadro.MoleculeFile.readFile(xyzfilename) mol = molfile.molecule(0) print(type(mol)) widget = Avogadro.GLWidget(mol) widget.setMolecule(mol) # Avogadro.GLWidget.setBackground("white")
def test_setToSelectionColor(self): color = Avogadro.Color() color.setToSelectionColor()
def test_getters(self): color = Avogadro.Color(0.1, 0.2, 0.3, 0.4) self.assertAlmostEqual(color.red, 0.1) self.assertAlmostEqual(color.green, 0.2) self.assertAlmostEqual(color.blue, 0.3) self.assertAlmostEqual(color.alpha, 0.4)
def _test_apply(self): color = Avogadro.Color() color.apply() color.applyAsMaterial() color.applyAsFlatMaterial()
def test_name(self): color = Avogadro.Color() color.name = "testing" self.assertEqual(color.name, "testing")
def test_engine(self): engine = Avogadro.PluginManager.instance.engine("Label", Avogadro.toPyQt(self.glwidget)) #engine = Avogadro.PluginManager.instance.engine("foo", N) self.assertNotEqual(engine, None) self.glwidget.addEngine(engine) self.glwidget.removeEngine(engine)