mailr25926 - in /branches/frame_order_cleanup: specific_analyses/frame_order/uf.py user_functions/frame_order.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on September 19, 2014 - 18:26:
Author: bugman
Date: Fri Sep 19 18:26:26 2014
New Revision: 25926

URL: http://svn.gna.org/viewcvs/relax?rev=25926&view=rev
Log:
Spun out part of the frame_order.pdb_model user function into the new 
frame_order.simulate.

The new user function arguments required for properly creating the 
pseudo-Brownian dynamics
simulation would have made the frame_order.pdb_model user function too 
complicated.  Therefore this
part has been spun out into the new frame_order.simulate user function.  The 
frame_order.simulate
frontend fully describes the algorithm that will be used to simulate the 
dynamic content of the PCS
and RDC data, and warns that not all modes of motion are visible and present.


Modified:
    branches/frame_order_cleanup/specific_analyses/frame_order/uf.py
    branches/frame_order_cleanup/user_functions/frame_order.py

Modified: branches/frame_order_cleanup/specific_analyses/frame_order/uf.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/specific_analyses/frame_order/uf.py?rev=25926&r1=25925&r2=25926&view=diff
==============================================================================
--- branches/frame_order_cleanup/specific_analyses/frame_order/uf.py    
(original)
+++ branches/frame_order_cleanup/specific_analyses/frame_order/uf.py    Fri 
Sep 19 18:26:26 2014
@@ -43,7 +43,7 @@
 from specific_analyses.frame_order.variables import MODEL_ISO_CONE, 
MODEL_ISO_CONE_FREE_ROTOR, MODEL_ISO_CONE_TORSIONLESS, MODEL_LIST, 
MODEL_LIST_FREE_ROTORS, MODEL_LIST_ISO_CONE, MODEL_LIST_PSEUDO_ELLIPSE, 
MODEL_LIST_RESTRICTED_TORSION, MODEL_PSEUDO_ELLIPSE, 
MODEL_PSEUDO_ELLIPSE_TORSIONLESS, MODEL_RIGID
 
 
-def pdb_model(ave_pos="ave_pos", rep="frame_order", 
dist="domain_distribution", dir=None, compress_type=0, size=30.0, inc=36, 
model=1, force=False):
+def pdb_model(ave_pos="ave_pos", rep="frame_order", dir=None, 
compress_type=0, size=30.0, inc=36, model=1, force=False):
     """Create 3 different PDB files for representing the frame order 
dynamics of the system.
 
     @keyword ave_pos:       The file root for the average molecule structure.
@@ -85,10 +85,6 @@
     if rep:
         create_geometric_rep(file=rep, dir=dir, compress_type=compress_type, 
size=size, inc=inc, force=force)
 
-    # Create the distribution.
-    if dist:
-        create_distribution(file=dist, dir=dir, compress_type=compress_type, 
model=model, force=force)
-
 
 def permute_axes(permutation='A'):
     """Permute the axes of the motional eigenframe to switch between local 
minima.
@@ -367,6 +363,29 @@
     update_model()
 
 
+def simulate(file="simulation.pdb.bz2", dir=None, step_size=2.0, 
snapshot=10, total=1000, model=1, force=True):
+    """Pseudo-Brownian dynamics simulation of the frame order motions.
+
+    @keyword file:      The PDB file for storing the frame order 
pseudo-Brownian dynamics simulation.  The compression is determined 
automatically by the file extensions '*.pdb', '*.pdb.gz', and '*.pdb.bz2'.
+    @type file:         str
+    @keyword dir:       The directory name to place the file into.
+    @type dir:          str or None
+    @keyword step_size: The rotation will be of a random direction but with 
this fixed angle.  The value is in degrees.
+    @type step_size:    float
+    @keyword snapshot:  The number of steps in the simulation when snapshots 
will be taken.
+    @type snapshot:     int
+    @keyword total:     The total number of snapshots to take before 
stopping the simulation.
+    @type total:        int
+    @keyword model:     Only one model from an analysed ensemble of 
structures can be used for the pseudo-Brownian simulation, as the simulation 
and corresponding PDB file consists of one model per simulation.
+    @type model:        int
+    @keyword force:     A flag which, if set to True, will overwrite the any 
pre-existing file.
+    @type force:        bool
+    """
+
+    # Create the distribution.
+    create_distribution(file=dist, dir=dir, model=model, force=force)
+
+
 def sobol_setup(max_num=200, oversample=100):
     """Oversampling setup for the quasi-random Sobol' sequence used for 
numerical PCS integration.
 

Modified: branches/frame_order_cleanup/user_functions/frame_order.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/user_functions/frame_order.py?rev=25926&r1=25925&r2=25926&view=diff
==============================================================================
--- branches/frame_order_cleanup/user_functions/frame_order.py  (original)
+++ branches/frame_order_cleanup/user_functions/frame_order.py  Fri Sep 19 
18:26:26 2014
@@ -22,14 +22,23 @@
 # Module docstring.
 """The frame_order user function definitions."""
 
+# Python module imports.
+import dep_check
+if dep_check.wx_module:
+    from wx import FD_OPEN, FD_SAVE
+else:
+    FD_OPEN = -1
+    FD_SAVE = -1
+
 # relax module imports.
 from graphics import WIZARD_IMAGE_PATH
 from specific_analyses.frame_order.optimisation import count_sobol_points
-from specific_analyses.frame_order.uf import sobol_setup, pdb_model, 
permute_axes, pivot, ref_domain, select_model
+from specific_analyses.frame_order.uf import sobol_setup, pdb_model, 
permute_axes, pivot, ref_domain, select_model, simulate
 from specific_analyses.frame_order.variables import MODEL_DOUBLE_ROTOR, 
MODEL_FREE_ROTOR, MODEL_ISO_CONE, MODEL_ISO_CONE_FREE_ROTOR, 
MODEL_ISO_CONE_TORSIONLESS, MODEL_PSEUDO_ELLIPSE, 
MODEL_PSEUDO_ELLIPSE_FREE_ROTOR, MODEL_PSEUDO_ELLIPSE_TORSIONLESS, 
MODEL_RIGID, MODEL_ROTOR
 from user_functions.data import Uf_info; uf_info = Uf_info()
 from user_functions.data import Uf_tables; uf_tables = Uf_tables()
 from user_functions.objects import Desc_container
+from user_functions.wildcards import WILDCARD_RELAX_SAVE
 
 
 # The user function class.
@@ -73,15 +82,6 @@
     arg_type = "str",
     desc_short = "PDB representation file root",
     desc = "The file root of the PDB file for the geometric object 
representation of the frame order dynamics.",
-    can_be_none = True
-)
-uf.add_keyarg(
-    name = "dist",
-    default = "domain_distribution",
-    py_type = "str",
-    arg_type = "str",
-    desc_short = "distribution file root",
-    desc = "The file root of the file which will contain multiple models 
spanning the full dynamics distribution of the frame order model.",
     can_be_none = True
 )
 uf.add_keyarg(
@@ -132,7 +132,7 @@
     min = 1,
     py_type = "int",
     desc_short = "structural model",
-    desc = "Only one model from an analysed ensemble can be used for the PDB 
representation of the Monte Carlo simulations of the average domain position, 
as these consists of one model per simulation, and also for the distribution 
of structures.",
+    desc = "Only one model from an analysed ensemble can be used for the PDB 
representation of the Monte Carlo simulations of the average domain position, 
as these consists of one model per simulation.",
     wiz_element_type = "spin"
 )
 uf.add_keyarg(
@@ -144,15 +144,15 @@
 )
 # Description.
 uf.desc.append(Desc_container())
-uf.desc[-1].add_paragraph("This function creates a set of PDB files for 
representing the frame order cone models.  This includes a file for the 
average position of the molecule, a file containing a geometric 
representation of the frame order motions, and a file containing a 
distribution of structures which sample the motional modes.")
+uf.desc[-1].add_paragraph("This function creates a set of PDB files for 
representing the frame order cone models.  This includes a file for the 
average position of the molecule and a file containing a geometric 
representation of the frame order motions.")
 uf.desc[-1].add_paragraph("The three files are specified via the file root 
whereby the extensions '.pdb', '.pdb.gz', etc. should not be provided.  This 
is important for the geometric representation whereby different files are 
created for the positive and negative representations (due to symmetry in the 
NMR data, these cannot be differentiated), and for the Monte Carlo 
simulations.  For example if the file root is 'frame_order', the positive and 
negative representations will be placed in the 'frame_order_pos.pdb.gz' and 
'frame_order_neg.pdb.gz' files and the Monte Carlo simulations in the 
'frame_order_sim_pos.pdb.gz' and 'frame_order_sim_neg.pdb.gz' files.  For 
models where there is no difference in representation between the positive 
and negative directions, the files 'frame_order.pdb.gz' and 
'frame_order_sim.pdb.gz' will be produced.")
 uf.desc[-1].add_paragraph("There are four different types of residue within 
the PDB.  The pivot point is represented as as a single carbon atom of the 
residue 'PIV'.  The cone consists of numerous H atoms of the residue 'CON'.  
The cone axis vector is presented as the residue 'AXE' with one carbon atom 
positioned at the pivot and the other x Angstroms away on the cone axis (set 
by the geometric object size).  Finally, if Monte Carlo have been performed, 
there will be multiple 'MCC' residues representing the cone for each 
simulation, and multiple 'MCA' residues representing the multiple cone axes.")
 uf.desc[-1].add_paragraph("To create the diffusion in a cone PDB 
representation, a uniform distribution of vectors on a sphere is generated 
using spherical coordinates with the polar angle defined by the cone axis.  
By incrementing the polar angle using an arccos distribution, a radial array 
of vectors representing latitude are created while incrementing the azimuthal 
angle evenly creates the longitudinal vectors.  These are all placed into the 
PDB file as H atoms and are all connected using PDB CONECT records.  Each H 
atom is connected to its two neighbours on the both the longitude and 
latitude.  This creates a geometric PDB object with longitudinal and 
latitudinal lines representing the filled cone.")
-uf.desc[-1].add_paragraph("The PDB representation of the Monte Carlo 
simulations consists of one model per simulation.  And the distribution of 
structures consists of one model per motional simulation step.  Therefore if 
an ensemble of structures has been analysed ,only one model from the ensemble 
can be used for either representation.  This defaults to model number 1, but 
this can be changed.")
+uf.desc[-1].add_paragraph("The PDB representation of the Monte Carlo 
simulations consists of one model per simulation.  Therefore if an ensemble 
of structures has been analysed, only one model from the ensemble can be used 
for the representation.  This defaults to model number 1, but this can be 
changed.")
 uf.backend = pdb_model
 uf.menu_text = "pdb_&model"
 uf.gui_icon = "oxygen.actions.document-save"
-uf.wizard_height_desc = 370
+uf.wizard_height_desc = 400
 uf.wizard_size = (1000, 750)
 uf.wizard_image = WIZARD_IMAGE_PATH + 'frame_order.png'
 
@@ -333,6 +333,94 @@
 uf.wizard_image = WIZARD_IMAGE_PATH + 'frame_order.png'
 
 
+# The frame_order.simulate user function.
+uf = uf_info.add_uf('frame_order.simulate')
+uf.title = "Pseudo-Brownian dynamics simulation of the frame order motions."
+uf.title_short = "Frame order pseudo-Brownian dynamics simulation."
+uf.add_keyarg(
+    name = "file",
+    default = "simulation.pdb.bz2",
+    py_type = "str",
+    arg_type = "file sel",
+    desc_short = "simulation file",
+    desc = "The PDB file for storing the frame order pseudo-Brownian 
dynamics simulation.  The compression is determined automatically by the file 
extensions '*.pdb', '*.pdb.gz', and '*.pdb.bz2'.",
+    wiz_filesel_wildcard = WILDCARD_RELAX_SAVE,
+    wiz_filesel_style = FD_OPEN,
+    wiz_filesel_preview = False
+)
+uf.add_keyarg(
+    name = "dir",
+    py_type = "str",
+    arg_type = "dir",
+    desc_short = "directory name",
+    desc = "The directory where the files are to be located.",
+    can_be_none = True
+)
+uf.add_keyarg(
+    name = "step_size",
+    default = 2.0,
+    py_type = "float",
+    desc_short = "angle of rotation",
+    desc = "The rotation will be of a random direction but with this fixed 
angle.  The value is in degrees."
+)
+uf.add_keyarg(
+    name = "snapshot",
+    default = 10,
+    min = 1,
+    max = 1000000,
+    py_type = "int",
+    desc_short = "number of steps per snapshot",
+    desc = "The number of steps in the simulation when snapshots will be 
taken."
+)
+uf.add_keyarg(
+    name = "total",
+    default = 1000,
+    min = 1,
+    max = 1000000,
+    py_type = "int",
+    desc_short = "total number of snapshots",
+    desc = "The total number of snapshots to take before stopping the 
simulation.",
+    wiz_element_type = "spin"
+)
+uf.add_keyarg(
+    name = "model",
+    default = 1,
+    min = 1,
+    py_type = "int",
+    desc_short = "original structural model",
+    desc = "Only one model from an analysed ensemble of structures can be 
used for the pseudo-Brownian simulation, as the simulation and corresponding 
PDB file consists of one model per simulation.",
+    wiz_element_type = "spin"
+)
+uf.add_keyarg(
+    name = "force",
+    default = False,
+    py_type = "bool",
+    desc_short = "force flag",
+    desc = "A flag which, if set to True, will overwrite the any 
pre-existing file."
+)
+# Description.
+uf.desc.append(Desc_container())
+uf.desc[-1].add_paragraph("To visualise the frame order motions, this user 
function performs a type of simulation whereby structures are randomly 
rotated by a fixed angle within the bounds of the uniform distribution of the 
frame order model.  This can be thought of as a pseudo-Brownian dynamics 
simulation.  It is in no way a real molecular or Brownian dynamics 
simulation.")
+uf.desc[-1].add_paragraph("Note that the RDC and PCS data does not contain 
information about all parts of the real distribution of structures.  
Therefore the snapshots in this simulation only represent the components of 
the distribution present in the data, as modelled by the frame order models.")
+uf.desc[-1].add_paragraph("The simulation algorithm is as follows.  The 
current state is initially defined as the identity matrix I.  The maximum 
opening angle theta or the torsion angle sigma are defined by the parameter 
values of the frame order model.  The algorithm for one step of the 
simulation is:")
+uf.desc[-1].add_item_list_element("1", "Generate a random vector in 3D.")
+uf.desc[-1].add_item_list_element("2", "Construct a rotation matrix from the 
random vector and the fixed rotation angle.")
+uf.desc[-1].add_item_list_element("3", "Pre-multiply the current state by 
the rotation matrix.")
+uf.desc[-1].add_item_list_element("4", "Decompose the new state into the 
torsion-tilt angles.")
+uf.desc[-1].add_item_list_element("5", "If theta or sigma are greater than 
model parameter values, set them to these maximum values.")
+uf.desc[-1].add_item_list_element("6", "Back convert the modified 
torsion-tilt angles to a rotation matrix - this is the current state.")
+uf.desc[-1].add_item_list_element("7", "Store a snapshot if the correct 
number of iterations has been reached.  This consists of rotating a new model 
about the pivot(s), as defined by the frame order model.")
+uf.desc[-1].add_item_list_element("8", "Terminate the loop if the maximum 
number of snapshots has been reached.")
+uf.desc[-1].add_paragraph("The setting of the steps outside of the 
distribution to the maximum parameter values is specifically to allow for 
models with parameter values close to zero.  Without this, the simulation 
would take a huge amount of time to complete.")
+uf.desc[-1].add_paragraph("As the simulation consists of one model per 
snapshot, if an ensemble of structures has been analysed, only one model from 
the ensemble can be used for the representation.  This defaults to model 
number 1, but this can be changed.")
+uf.backend = simulate
+uf.menu_text = "simula&te"
+uf.gui_icon = "oxygen.actions.document-save"
+uf.wizard_height_desc = 420
+uf.wizard_size = (1000, 750)
+uf.wizard_image = WIZARD_IMAGE_PATH + 'frame_order.png'
+
+
 # The frame_order.sobol_setup user function.
 uf = uf_info.add_uf('frame_order.sobol_setup')
 uf.title = "Set up the quasi-random Sobol' sequence points for numerical PCS 
integration."




Related Messages


Powered by MHonArc, Updated Fri Sep 19 18:40:02 2014