24小时热门版块排行榜    

查看: 788  |  回复: 2

zyj8119

木虫 (著名写手)

[交流] 【原创】MAPS中构筑超晶胞的python程序 已有2人参与

CODE:
#!/usr/bin/python
###########################################################################
#                   buildCluster.py  -  description
#                   -------------------------------
#   begin                : Fri Dec 15 16:11:04 CET 2006
#   copyright            : (C) 2006 by Scienomics
#   email                : Joerg-Ruediger.Hill@scienomics.com
###########################################################################
#
###########################################################################
#                                                                         #
#   This program and all subroutines,  data, and  files used by it are    #
#   protected by copyright and hence may not be used, copied, modified    #
#   transmitted, inspected, or executed by any means including the use    #
#   of electronic data processing equipment,  xerography, or any other    #
#   methods  without the express  written permission  of the copyright    #
#   holder.                                                               #
#                                                                         #
#   Copyright (C) 2006 Scienomics S. A.                                   #
#                                                                         #
###########################################################################
#
# $Id: buildCluster.py,v 1.10 2010/03/29 15:15:56 jrh Exp $
# $Log: buildCluster.py,v $
# Revision 1.10  2010/03/29 15:15:56  jrh
# Moved to new way of retrieving plugin objects
#
# Revision 1.9  2008/10/20 09:25:06  lperi
# Clear undo stack (bug 2562).
#
# Revision 1.8  2008/10/14 15:21:17  jrh
# Fixed bug 2520
#
# Revision 1.7  2008/01/16 12:21:18  jrh
# Moved to Qt4
#
# Revision 1.6  2007/01/16 10:28:26  jrh
# Removed automatic creation of cell since this might crash
#
# Revision 1.5  2006/12/15 16:07:31  jrh
# Added header and documentation
#
#

import Maps
import MapsChemistryDataModel
import MapsViewer
from PyQt4 import *

class ClusterBuilder:
  """ This class implements a cluster generating algorithm
      by cutting atoms from a periodic system based on a
      distance criterion. The class takes either the active
      molecule or asks the user to load a molecule if no
      active molecule is found, puts a molecule into a box
      at density 1.0 if the system is not periodic already,
      and builds a cluster by copying all atoms which are
      within 5 Ang from the central atom to a new model.
  """

  app=Maps.MapsApp.getContainer()
  cdm=MapsChemistryDataModel.ChemistryDataModel.get()
  viewerPlugin=MapsViewer.ViewerPlugin.get()
  project=None
  molecule=None

  def loadMolecule(self):
    activeViewer=self.viewerPlugin.getActiveViewer()
    if activeViewer != None:
      self.molecule=activeViewer.getMolecule()
      projectName=self.cdm.findProjectNameForMolecule(self.molecule)
      self.project=self.cdm.findProjectByName(projectName)
      QtGui.qApp.processEvents()
      return(0)
    else:
      QtGui.QMessageBox.information(self.app, "Note", "Please load a molecule from the\nfollowing dialog.")
      # Load a molecule from an existing file
      dialog=self.app.fileDialog
      dialog.setFileMode(QtGui.QFileDialog.ExistingFile)
      dialog.setWindowTitle("Open file")
      filters=QtCore.QStringList()
      filters.append("All files (*)")
      dialog.setFilters(filters)
      dialog.selectFile("")
      if dialog.exec_(Maps.FileDialog.DATA) == QtGui.QDialog.Accepted:
        fileName=str(dialog.selectedFiles()[0])
        self.app.openDocumentFile(fileName, None, "")
        projects=self.cdm.getProjects()
        self.project=projects[0]
        molecules=self.project.getMolecules()
        self.molecule=molecules[0]
        self.viewerPlugin.start(self.molecule)
        QtGui.qApp.processEvents()
        return(0)
      else:
        return(1)

  def createSuperCell(self):
    # Create a 3 x 3 x 3 super cell. If the system is not periodic tell
    # the user and exit
    if not self.molecule.isPeriodic():
      QtGui.QMessageBox.information(self.app, "Note", "Please use a periodic system with this script.")
      return(0);
    else:
      cell=self.molecule.getActiveConformation().getUnitcell()
    cell.setDuplicate(3, 3, 3, 1)
    cell.makeSuperCell(1)
    QtGui.qApp.processEvents()
    return(1)

  def cutCluster(self):
    # Cut a cluster by finding the atom closest to the center of the
    # super cell and including all atoms at a distance of up to
    # 5.0 Ang from this atom
    center=self.molecule.calculateCenterOfGravity(self.molecule.atoms)
    min=100.0
    centerAtom=None
    for atom in self.molecule.atoms:
      pos=atom.getCoordinates()
      diff=pos-center
      if diff.abs() < min:
        min=diff.abs()
        centerAtom=atom
    viewer=self.viewerPlugin.getActiveViewer()
    # Clear the undo stack to prevent a discontinuity
    # in the recorded editing actions which could
    # cause a crash
    viewer.clearUndoStack()
    viewer.setSelectionMode(MapsViewer.Viewer.DISTANCE, 5.0)
    viewer.selectAtoms(centerAtom, 1)
    viewer.copy()
    # Create a new model in the same project and paste the cluster
    # in there
    cluster=MapsChemistryDataModel.Molecule(self.cdm)
    cluster.setName("Cluster")
    self.project.addMolecule(cluster)
    self.viewerPlugin.start(cluster)
    clusterViewer=self.viewerPlugin.getActiveViewer()
    clusterViewer.paste()
    clusterViewer.centerMolecule()
    clusterViewer.getMoleculeRenderer().setSelection(cluster.atoms, 0)
    QtGui.qApp.processEvents()

  def run(self):
    if not self.loadMolecule():
      if self.createSuperCell():
        self.cutCluster()

#-------------------------
if __name__ == '__main__':
  builder=ClusterBuilder()
  builder.run()

回复此楼
好好学习,天天向上。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
送鲜花一朵
2楼2012-03-22 16:11:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

juwendy

铁虫 (正式写手)

顶一个,支持楼主。
3楼2012-03-22 21:09:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zyj8119 的主题更新
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +3 uKOSCocCb6Fm 2026-11-12 8/400 2026-11-15 02:26 by xSrQNSSjcgoX
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +6 FChKX8meu1ds 2026-11-09 8/400 2026-11-15 00:35 by Equinoxhua
[考研] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 G2rhSvqvhNzl 2026-11-10 7/350 2026-11-14 21:58 by Equinoxhua
[考博] 27博士 +6 锦鲤送福至 2026-11-10 6/300 2026-11-14 21:23 by xupeii
[基金申请] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +3 TZqyNTBa07NP 2026-11-13 3/150 2026-11-14 20:11 by KXypaGgBBlw7
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +8 zSbvVX9JFl9J 2026-11-09 9/450 2026-11-13 11:11 by Equinoxhua
[考研] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +5 C6CRn66RYYXS 2026-11-10 6/300 2026-11-13 11:04 by Equinoxhua
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +3 TgvkbZZl9tqB 2026-11-11 4/200 2026-11-12 12:48 by ECLTXnJnRSXf
[考研] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +7 czAiolzR0IJC 2026-11-10 9/450 2026-11-12 11:00 by HajghKOMynmz
[考研] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 G2rhSvqvhNzl 2026-11-10 7/350 2026-11-12 10:49 by HajghKOMynmz
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +5 C6CRn66RYYXS 2026-11-10 7/350 2026-11-12 10:16 by HajghKOMynmz
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 C6CRn66RYYXS 2026-11-10 8/400 2026-11-12 10:16 by HajghKOMynmz
[公派出国] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +7 FChKX8meu1ds 2026-11-09 9/450 2026-11-12 10:03 by HajghKOMynmz
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +8 cqv1zKnzd7hr 2026-11-09 12/600 2026-11-12 09:32 by HajghKOMynmz
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 czAiolzR0IJC 2026-11-10 5/250 2026-11-12 06:25 by 9fOTqj074tIg
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +5 FChKX8meu1ds 2026-11-09 10/500 2026-11-12 05:19 by 9fOTqj074tIg
[教师之家] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 FChKX8meu1ds 2026-11-09 7/350 2026-11-12 05:19 by 9fOTqj074tIg
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +6 0TEMgxdT1eIw 2026-11-09 8/400 2026-11-12 05:00 by 9fOTqj074tIg
[教师之家] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +6 cqv1zKnzd7hr 2026-11-09 7/350 2026-11-12 00:44 by 9fOTqj074tIg
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 FChKX8meu1ds 2026-11-09 6/300 2026-11-11 17:03 by TgvkbZZl9tqB
信息提示
请填处理意见