[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2594] trunk/py/scripts/addons: script [#23566] Import: PDB Chemical Files
Campbell Barton
ideasman42 at gmail.com
Tue Nov 8 05:45:38 CET 2011
Revision: 2594
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2594
Author: campbellbarton
Date: 2011-11-08 04:45:37 +0000 (Tue, 08 Nov 2011)
Log Message:
-----------
script [#23566] Import: PDB Chemical Files
by Mariusz Maximus & Jong89
Added Paths:
-----------
trunk/py/scripts/addons/io_mesh_pdb/
trunk/py/scripts/addons/io_mesh_pdb/__init__.py
trunk/py/scripts/addons/io_mesh_pdb/import_pdb.py
Added: trunk/py/scripts/addons/io_mesh_pdb/__init__.py
===================================================================
--- trunk/py/scripts/addons/io_mesh_pdb/__init__.py (rev 0)
+++ trunk/py/scripts/addons/io_mesh_pdb/__init__.py 2011-11-08 04:45:37 UTC (rev 2594)
@@ -0,0 +1,130 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+bl_info = {
+ "name": "Import/Export: PDB format",
+ "author": "Mariusz Maximus & Jong89",
+ "version": (0, 9, 0),
+ "blender": (2, 6, 0),
+ "api": 35616,
+ "location": "File > Import/Export > PDB",
+ "description": "Import PDB files",
+ "warning": "",
+ "wiki_url": "http://blenderartists.org/forum/showthread.php?t=194336",
+ "tracker_url": "http://blenderartists.org/forum/showthread.php?t=194336",
+ "category": "Import-Export"}
+
+# @todo write the wiki page
+
+# To support reload properly, try to access a package var,
+# if it's there, reload everything
+if "bpy" in locals():
+ import imp
+ if "import_pdb" in locals():
+ imp.reload(import_pdb)
+
+
+import bpy
+from bpy.props import (StringProperty,
+ BoolProperty,
+ IntProperty,
+ FloatProperty,
+ )
+
+from bpy_extras.io_utils import ImportHelper
+
+class ImportPDB(bpy.types.Operator, ImportHelper):
+ """Import from PDB file format (.pdb)"""
+ bl_idname = 'import_scene.pdb'
+ bl_label = 'Import PDB'
+ bl_options= {'REGISTER', 'UNDO'}
+
+ filename_ext = ".pdb"
+ filter_glob = StringProperty(default="*.pdb", options={'HIDDEN'})
+
+ filepath = StringProperty(
+ name="File Path",
+ description="Filepath used for importing the PDB file",
+ maxlen= 1024,
+ )
+ multi_models = BoolProperty(
+ name="Import all models",
+ description="Import all alternative structures listed in file",
+ default=False,
+ )
+ multimers = BoolProperty(
+ name="Import Biomolecules",
+ description="Import all file-listed biomolecules and multimers, "
+ "disable to import default biomolecule with all chains",
+ default=False,
+ )
+ retain_alts = BoolProperty(
+ name="Retain Alternative Atoms",
+ description="Select to retain alternative atoms. "
+ "Some PDB files label coordinates of entries "
+ "in multiple models as alternates" ,
+ default=False,
+ )
+ atom_subdivisions = IntProperty(
+ name="Atom Subdivisions",
+ description="Number of icosphere subdivisions for the atoms",
+ min=1, max=6,
+ default=3,
+ )
+ atom_size = FloatProperty(
+ name="Atom Size",
+ description="Multiplier for the van der Waals radius of the atoms",
+ min=0, max=5,
+ default=1,
+ )
+ scene_scale = FloatProperty(
+ name="Scene Scale Factor",
+ description="Number of Blender units equivalent to 1 angstrom",
+ min=0, max=10,
+ default=1,
+ )
+
+ def execute(self, context):
+ from . import import_pdb
+ import_pdb.load_pdb(self.filepath, context,
+ self.atom_size,
+ self.scene_scale,
+ self.atom_subdivisions,
+ self.retain_alts,
+ self.multi_models,
+ self.multimers)
+ return {'FINISHED'}
+
+ def invoke(self, context, event):
+ wm = context.window_manager
+ wm.fileselect_add(self)
+ return {'RUNNING_MODAL'}
+
+def menu_func(self, context):
+ self.layout.operator(ImportPDB.bl_idname, text='Protein Databank (.pdb)')
+
+def register():
+ bpy.utils.register_module(__name__)
+ bpy.types.INFO_MT_file_import.append(menu_func)
+
+def unregister():
+ bpy.utils.unregister_module(__name__)
+ bpy.types.INFO_MT_file_import.remove(menu_func)
+
+if __name__ == '__main__':
+ register()
Added: trunk/py/scripts/addons/io_mesh_pdb/import_pdb.py
===================================================================
--- trunk/py/scripts/addons/io_mesh_pdb/import_pdb.py (rev 0)
+++ trunk/py/scripts/addons/io_mesh_pdb/import_pdb.py 2011-11-08 04:45:37 UTC (rev 2594)
@@ -0,0 +1,465 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+import bpy
+
+class Element:
+ '''Element class with properties ([R, G, B], cov_radius, vdw_radius, name)'''
+ def __init__(self, color, cov_radius, vdw_radius, name):
+ self.color = color
+ self.cov_radius = cov_radius
+ self.vdw_radius = vdw_radius
+ self.name = name
+
+class Atom:
+ '''Atom class with properties (serial, name, altloc, resname,chainid,
+ resseq, icode, x, y, z, occupancy, tempfactor, element, charge)'''
+
+ def __init__(self, serial, name, altloc, resname, chainid, resseq, icode,
+ x, y, z, occupancy, tempfactor, element, charge):
+ self.serial = serial
+ self.name = name
+ self.altloc = altloc
+ self.resname = resname
+ self.chainid = chainid
+ self.resseq = resseq
+ self.icode = icode
+ self.x = x
+ self.y = y
+ self.z = z
+ self.occupancy = occupancy
+ self.tempfactor = tempfactor
+ self.element = element
+ self.charge = charge
+
+#collection of biomolecules based on model
+#all chains in model stored here
+class Model:
+ '''Model class'''
+ def __init__(self, model_id):
+ self.model_id = model_id
+ self.atoms = {}
+ self.atom_count = 0
+ self.vert_list = []
+ #Dictionary of {vert index: [list of vertex groups it belongs to]}
+ #Now element only
+ self.vert_group_index = {}
+ #Dictionary of {vertex group: number of group members}
+ self.vert_group_counts = {}
+ self.chains = {}
+
+#new object level class
+class Biomolecule:
+ '''Biomolecule'''
+ def __init__(self, serial):
+ self.serial = serial
+ self.atom_count = 0
+ self.vert_list = []
+ self.vert_group_index = {}
+ self.vert_group_counts = {}
+ self.chain_transforms = {}
+
+#Atom collection
+class Chain:
+ '''Chain'''
+ def __init__(self, chain_id):
+ self.chain_id = chain_id
+ self.atoms = {}
+
+#Atomic data from http://www.ccdc.cam.ac.uk/products/csd/radii/
+#Color palatte adapted from Jmol
+#"Element symbol":[[Red, Green, Blue], Covalent radius, van der Waals radius,
+# Element name]
+#Atomic radii are in angstroms (100 pm)
+#Unknown covalent radii are assigned 1.5 A, unknown van der Waals radiii are
+#assigned 2 A,
+
+atom_data = {
+'H' : Element([1.00000, 1.00000, 1.00000], 0.23, 1.09, 'Hydrogen' ),
+'HE': Element([0.85098, 1.00000, 1.00000], 1.5 , 1.4 , 'Helium' ),
+'LI': Element([0.80000, 0.50196, 1.00000], 1.28, 1.82, 'Lithium' ),
+'BE': Element([0.76078, 1.00000, 0.00000], 0.96, 2 , 'Beryllium' ),
+'B' : Element([1.00000, 0.70980, 0.70980], 0.83, 2 , 'Boron' ),
+'C' : Element([0.56471, 0.56471, 0.56471], 0.68, 1.7 , 'Carbon' ),
+'N' : Element([0.18824, 0.31373, 0.97255], 0.68, 1.55, 'Nitrogen' ),
+'O' : Element([1.00000, 0.05098, 0.05098], 0.68, 1.52, 'Oxygen' ),
+'F' : Element([0.56471, 0.87843, 0.31373], 0.64, 1.47, 'Fluorine' ),
+'NE': Element([0.70196, 0.89020, 0.96078], 1.5 , 1.54, 'Neon' ),
+'NA': Element([0.67059, 0.36078, 0.94902], 1.66, 2.27, 'Sodium' ),
+'MG': Element([0.54118, 1.00000, 0.00000], 1.41, 1.73, 'Magnesium' ),
+'AL': Element([0.74902, 0.65098, 0.65098], 1.21, 2 , 'Aluminum' ),
+'SI': Element([0.94118, 0.78431, 0.62745], 1.2 , 2.1 , 'Silicon' ),
+'P' : Element([1.00000, 0.50196, 0.00000], 1.05, 1.8 , 'Phosphorus'),
+'S' : Element([1.00000, 1.00000, 0.18824], 1.02, 1.8 , 'Sulfur' ),
+'CL': Element([0.12157, 0.94118, 0.12157], 0.99, 1.75, 'Chlorine' ),
+'AR': Element([0.50196, 0.81961, 0.89020], 1.51, 1.88, 'Argon' ),
+'K' : Element([0.56078, 0.25098, 0.83137], 2.03, 2.75, 'Potassium' ),
+'CA': Element([0.23922, 1.00000, 0.00000], 1.76, 2 , 'Calcium' ),
+'SC': Element([0.90196, 0.90196, 0.90196], 1.7 , 2 , 'Scandium' ),
+'TI': Element([0.74902, 0.76078, 0.78039], 1.6 , 2 , 'Titanium' ),
+'V' : Element([0.65098, 0.65098, 0.67059], 1.53, 2 , 'Vanadium' ),
+'CR': Element([0.54118, 0.60000, 0.78039], 1.39, 2 , 'Chromium' ),
+'MN': Element([0.61176, 0.47843, 0.78039], 1.61, 2 , 'Manganese' ),
+'FE': Element([0.87843, 0.40000, 0.20000], 1.52, 2 , 'Iron' ),
+'CO': Element([0.94118, 0.56471, 0.62745], 1.26, 2 , 'Cobalt' ),
+'NI': Element([0.31373, 0.81569, 0.31373], 1.24, 1.63, 'Nickel' ),
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list