Beispiel #1
0
    def showZMat(self,s,sel):
        view=self.treeview
        s=Structure(s)
        s.setCarthesian()
        view.set_model(ZMatTreeModel(s,sel))
        for x in self.treeview.get_columns():
            view.remove_column(x)

        renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn("#", renderer, markup=0)
        view.append_column(column)

        renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn("distance", renderer, markup=1)
        view.append_column(column)

        renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn("angle", renderer, markup=2)
        view.append_column(column)

        renderer = gtk.CellRendererText()
        column = gtk.TreeViewColumn("dihedral", renderer, markup=3)
        view.append_column(column)

        view.show()
Beispiel #2
0
def makeArmchair(nn,
                 aCC=1.419398,
                 r=None,
                 x_shift=0.0,
                 y_shift=0.0,
                 z_shift=0.0):
    s = Structure()
    s.setCartesian()

    s.comment = "armchair (%d,%d), aCC=%f" % (nn, nn, aCC)

    shift = 0.0

    fi = 2 * pi / nn
    al = 2 * atan(2 * sin(fi / 4) / (1 + 2 * cos(fi / 4)))
    be = fi / 2 - al

    if r is None:
        r = aCC / 2 / sin(al / 2)

    for i in range(0, nn):
        ffi = fi * i
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    for i in range(0, nn):
        ffi = al + fi * i
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    shift = shift + aCC * sqrt(3.0) / 2

    for i in range(0, nn):
        ffi = al + be + fi * (i)
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    for i in range(0, nn):
        ffi = 2 * al + be + fi * (i)
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    shift = shift + aCC * sqrt(3.0) / 2

    s.basis[0][0] = 2 * r + 7
    s.basis[1][1] = 2 * r + 7
    s.basis[2][2] = shift
    s.R = r
    return s
Beispiel #3
0
    def updateCreation(self):
        s = getCurrentSystemPM()
        self.creation = SetupPM(s)
        name = self.nameentry.get_text()
        self.creation.INCAR["SYSTEM"] = name
        if self.import_button.get_active():
            self.creation = SetupPM(s)
            name = self.nameentry.get_text()
            self.creation.INCAR["SYSTEM"] = name
            self.updateImportDescription()
            #      print "updateCreation",self.creation.NAME
            se = strip(self.step_entry.get_text())
            buff = self.description_textview.get_buffer()
            start = buff.get_start_iter()
            end = buff.get_end_iter()
            self.creation.DESCRIPTION = str(buff.get_text(start, end))
            try:
                n = int(se)
                try:
                    struct = s.STRUCTURE_SEQUENCE_L[n]
                    if n is not None:
                        self.creation.INITIAL_STRUCTURE.setStructure(struct)
                except:
                    msg().exception()
                    self.creation.INITIAL_STRUCTURE = Structure()
            except:
                if len(se):
                    if upper(se[0]) == "I":
                        if s.INITIAL_STRUCTURE is not None:
                            self.creation.INITIAL_STRUCTURE.setStructure(
                                s.INITIAL_STRUCTURE)
                        else:
                            self.creation.INITIAL_STRUCTURE = Structure()

                    elif upper(se[0]) == "F":
                        if s.FINAL_STRUCTURE is not None:
                            self.creation.INITIAL_STRUCTURE.setStructure(
                                s.FINAL_STRUCTURE)
                        else:
                            self.creation.INITIAL_STRUCTURE = Structure()
        else:
            self.creation = SetupPM()
            name = self.nameentry.get_text()
            self.creation.INCAR["SYSTEM"] = name
Beispiel #4
0
def makeZigzag(nn,
               aCC=1.419398,
               r=None,
               x_shift=0.0,
               y_shift=0.0,
               z_shift=0.0):
    s = Structure()
    s.setCartesian()
    s.comment = "zigzag (%d,0), aCC=%f" % (nn, aCC)

    shift = 0.0
    fi = 2 * pi / nn
    if r is None:
        r = aCC * sqrt(3.0) / 4 / sin(fi / 4)

    for i in range(0, nn):
        ffi = fi * i
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    shift = shift + aCC / 2
    for i in range(0, nn):
        ffi = fi * (i + 0.5)
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    shift = shift + aCC
    for i in range(0, nn):
        ffi = fi * (i + 0.5)
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    shift = shift + aCC / 2
    for i in range(0, nn):
        ffi = fi * (i)
        s.appendAtom(
            0,
            Vector(x_shift + r * cos(ffi), y_shift + r * sin(ffi),
                   z_shift + shift))

    s.basis[0][0] = 2 * r + 7
    s.basis[1][1] = 2 * r + 7
    s.basis[2][2] = shift
    s.R = r
    return s
Beispiel #5
0
 def showDistances(self,s,sel):
     view=self.treeview
     s=Structure(s)
     s.setCarthesian()
     view.set_model(DistanceTreeModel(s,sel))
     for x in self.treeview.get_columns():
         view.remove_column(x)
     renderer = gtk.CellRendererText()
     column = gtk.TreeViewColumn("#", renderer, markup=0)
     view.append_column(column)
     renderer = gtk.CellRendererText()
     for i in range(len(sel)):
         n,nx,ny,nz=sel[i]
         column = gtk.TreeViewColumn("%d (%d %d %d)"%(n+1,nx,ny,nz), renderer, markup=i+1)
         view.append_column(column)
     view.show()
Beispiel #6
0
    def textview2struct(self):
        #    print "before tv2s",len(self.getCurrentStructure())
        try:
            b = self.textview.get_buffer()
            t = b.get_text(b.get_start_iter(), b.get_end_iter(), True)
            s = Structure()
            s.parse(t)
            self.getCurrentStructure().setStructure(s)

            self.no_coord_upd = 1
            if s.isCarthesian():
                self.carthesian_button.set_active(True)
            else:
                self.direct_button.set_active(True)
#      systemlist().notifySystemChanged()
        except ParseException:
            msg().error(str(sys.exc_info()[1]))
        except:
            msg().exception()
        else:
            msg().status("OK")
        self.no_coord_upd = 0
Beispiel #7
0
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

######################################################################
# DESCRIPTION:                                                       #
######################################################################
# Removes the selective dynamics from the inputfile                  #
######################################################################

from p4vasp.Structure import *
from p4vasp.sellang import *
from p4vasp.SystemPM import *
from sys import *

# Read the structure.

p=Structure(argv[1])
p.setSelective(0)                       # Selective mode.
p.write("%s.notselective"%argv[1])      # Write the output.
Beispiel #8
0
######################################################################
# This is a selection script example.                                #
# The purpose of this script is to select (in the sense of the       #
# "Selective dynamics") certain atom group.                          #
#                                                                    #
# It is very simple and it is easier to modify this source           #
# to do what you want, than to write a sophisticated user interface. #
# (see the comments)                                                 #
######################################################################

from p4vasp.Structure import *
from p4vasp.sellang import *
from p4vasp.SystemPM import *

# Read the structure.

p=Structure("POSCAR")

# Alternative:
#p=XMLSystemPM("vasprun.xml").FINAL_STRUCTURE

l=decode("#4",p)                # Select the 4th specie
p.setSelective()                # Selective mode.
for i in range(len(p)):
    if i in l:
        p.selective[i]=(1,1,1)
    else:
        p.selective[i]=(0,0,0)

p.write("POSCAR.selected")      # Write the output.
Beispiel #9
0
 def __init__(self, a):
     '''constructor for the model.'''
     gtk.GenericTreeModel.__init__(self)
     self.a = a
     self.struct = Structure()
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

from p4vasp.Structure import *
from p4vasp.sellang import *
#from p4vasp.SystemPM import *
#s=XMLSystemPM('vasprun.xml')
#p=s.INITIAL_STRUCTURE

p=Structure("CONTCAR")
p.setCarthesian()
l1=decode("-160",p)
l2=decode("161-",p)
print "Group 1 has %3d elements."%len(l1)
print "Group 2 has %3d elements."%len(l2)

d=[]
for i in l1:
  for j in l2:
    if i==j:
      print "Substructures have a common atom %d."%(i+1)
    else:
      d.append((p.mindistCartVectors(p[i],p[j]),i,j))

m,i,j=min(d)
Beispiel #11
0
 def clone(self):
     return Structure(pointer=_cp4vasp.Structure_clone(self.this))