Package user_functions :: Module n_state_model'
[hide private]
[frames] | no frames]

Source Code for Module user_functions.n_state_model'

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2008-2012 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax.                                     # 
  6  #                                                                             # 
  7  # relax is free software; you can redistribute it and/or modify               # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation; either version 2 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # relax is distributed in the hope that it will be useful,                    # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with relax; if not, write to the Free Software                        # 
 19  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   # 
 20  #                                                                             # 
 21  ############################################################################### 
 22   
 23  # Module docstring. 
 24  """The n_state_model user function definitions.""" 
 25   
 26  # Python module imports. 
 27  import wx 
 28   
 29  # relax module imports. 
 30  from graphics import WIZARD_IMAGE_PATH 
 31  from specific_fns.setup import n_state_model_obj 
 32  from user_functions.data import Uf_info; uf_info = Uf_info() 
 33  from user_functions.objects import Desc_container 
 34   
 35   
 36  # The user function class. 
 37  uf_class = uf_info.add_class('n_state_model') 
 38  uf_class.title = "Class for the N-state models." 
 39  uf_class.menu_text = "&n_state_model" 
 40  uf_class.gui_icon = "relax.n_state_model" 
 41   
 42   
 43  # The n_state_model.CoM user function. 
 44  uf = uf_info.add_uf('n_state_model.CoM') 
 45  uf.title = "The defunct centre of mass (CoM) analysis." 
 46  uf.title_short = "CoM analysis." 
 47  uf.add_keyarg( 
 48      name = "pivot_point", 
 49      default = [0.0, 0.0, 0.0], 
 50      py_type = "num_list", 
 51      dim = 3, 
 52      desc_short = "pivot point", 
 53      desc = "The pivot point of the motions between the two domains." 
 54  ) 
 55  uf.add_keyarg( 
 56      name = "centre", 
 57      py_type = "num_list", 
 58      dim = 3, 
 59      desc_short = "centre of mass", 
 60      desc = "Manually specify the CoM of the initial position prior to the N rotations to the positions of the N states.  This is optional.", 
 61      can_be_none = True 
 62  ) 
 63  # Description. 
 64  uf.desc.append(Desc_container()) 
 65  uf.desc[-1].add_paragraph("WARNING:  This analysis is now defunct!") 
 66  uf.desc[-1].add_paragraph("This is used for analysing the domain motion information content of the N states from the N-state model.  The states do not correspond to physical states, hence nothing can be extracted from the individual states.  This analysis involves the calculation of the pivot to centre of mass (pivot-CoM) order parameter and subsequent cone of motions.") 
 67  uf.desc[-1].add_paragraph("For the analysis, both the pivot point and centre of mass must be specified.  The supplied pivot point must be a vector of floating point numbers of length 3.  If the centre of mass is supplied, it must also be a vector of floating point numbers (of length 3).  If the centre of mass is not supplied, then the CoM will be calculated from the selected parts of a previously loaded structure.") 
 68  # Prompt examples. 
 69  uf.desc.append(Desc_container("Prompt examples")) 
 70  uf.desc[-1].add_paragraph("To perform an analysis where the pivot is at the origin and the CoM is set to the N-terminal domain of a previously loaded PDB file (the C-terminal domain has been deselected), type:") 
 71  uf.desc[-1].add_prompt("relax> n_state_model.CoM()") 
 72  uf.desc[-1].add_paragraph("To perform an analysis where the pivot is at the origin (because the real pivot has been shifted to this position) and the CoM is at the position [0, 0, 1], type one of:") 
 73  uf.desc[-1].add_prompt("relax> n_state_model.CoM(centre=[0, 0, 1])") 
 74  uf.desc[-1].add_prompt("relax> n_state_model.CoM(centre=[0.0, 0.0, 1.0])") 
 75  uf.desc[-1].add_prompt("relax> n_state_model.CoM(pivot_point=[0.0, 0.0, 0.0], centre=[0.0, 0.0, 1.0])") 
 76  uf.backend = n_state_model_obj._CoM 
 77  uf.menu_text = "Co&M" 
 78  uf.wizard_height_desc = 350 
 79  uf.wizard_size = (800, 600) 
 80  uf.wizard_apply_button = False 
 81  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
 82   
 83   
 84  # The n_state_model.cone_pdb user function. 
 85  uf = uf_info.add_uf('n_state_model.cone_pdb') 
 86  uf.title = "Create a PDB file representing the cone models from the centre of mass (CoM) analysis." 
 87  uf.title_short = "Cone PDB creation." 
 88  uf.add_keyarg( 
 89      name = "cone_type", 
 90      py_type = "str", 
 91      desc_short = "cone type", 
 92      desc = "The type of cone model to represent.", 
 93      wiz_element_type = "combo", 
 94      wiz_combo_choices = [ 
 95          'diff in cone', 
 96          'diff on cone' 
 97      ], 
 98      wiz_read_only = True 
 99  ) 
100   
101  uf.add_keyarg( 
102      name = "scale", 
103      default = 1.0, 
104      py_type = "num", 
105      desc_short = "scaling factor", 
106      desc = "Value for scaling the pivot-CoM distance which the size of the cone defaults to." 
107  ) 
108   
109  uf.add_keyarg( 
110      name = "file", 
111      default = "cone.pdb", 
112      py_type = "str", 
113      arg_type = "file sel", 
114      desc_short = "file name", 
115      desc = "The name of the PDB file.", 
116      wiz_filesel_wildcard = "PDB files (*.pdb)|*.pdb;*.PDB", 
117      wiz_filesel_style = wx.FD_SAVE 
118  ) 
119   
120  uf.add_keyarg( 
121      name = "dir", 
122      py_type = "str", 
123      arg_type = "dir", 
124      desc_short = "directory name", 
125      desc = "The directory where the file is located.", 
126      can_be_none = True 
127  ) 
128   
129  uf.add_keyarg( 
130      name = "force", 
131      default = False, 
132      py_type = "bool", 
133      desc_short = "force flag", 
134      desc = "A flag which, if set to True, will overwrite the any pre-existing file." 
135  ) 
136  # Description. 
137  uf.desc.append(Desc_container()) 
138  uf.desc[-1].add_paragraph("WARNING:  This analysis is now defunct!") 
139  uf.desc[-1].add_paragraph("This creates a PDB file containing an artificial geometric structure to represent the various cone models.  These models include:") 
140  uf.desc[-1].add_list_element("'diff in cone'") 
141  uf.desc[-1].add_list_element("'diff on cone'") 
142  uf.desc[-1].add_paragraph("The model can be selected by setting the cone type to one of these values.  The cone is represented as an isotropic cone with its axis parallel to the average pivot-CoM vector, the vertex placed at the pivot point of the domain motions, and the length of the edge of the cone equal to the pivot-CoM distance multiplied by the scaling factor.  The resultant PDB file can subsequently read into any molecular viewer.") 
143  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 average pivot-CoM vector is presented as the residue 'AVE' with one carbon atom positioned at the pivot and the other at the head of the vector (after scaling by the scaling factor).  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 varying average pivot-CoM vector for each simulation.") 
144  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 from the average pivot-CoM vector.  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.") 
145  uf.backend = n_state_model_obj._cone_pdb 
146  uf.menu_text = "&cone_pdb" 
147  uf.wizard_height_desc = 480 
148  uf.wizard_size = (1000, 750) 
149  uf.wizard_apply_button = False 
150  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
151   
152   
153  # The n_state_model.elim_no_prob user function. 
154  uf = uf_info.add_uf('n_state_model.elim_no_prob') 
155  uf.title = "Eliminate the structures or states with no probability." 
156  uf.title_short = "Insignificant state elimination." 
157  # Description. 
158  uf.desc.append(Desc_container()) 
159  uf.desc[-1].add_paragraph("This will simply remove the structures from the N-state analysis which have an optimised probability of zero.") 
160  # Prompt examples. 
161  uf.desc.append(Desc_container("Prompt examples")) 
162  uf.desc[-1].add_paragraph("Simply type:") 
163  uf.desc[-1].add_prompt("relax> n_state_model.elim_no_prob(N=8)") 
164  uf.backend = n_state_model_obj._elim_no_prob 
165  uf.menu_text = "&elim_no_prob" 
166  uf.gui_icon = "oxygen.actions.list-remove" 
167  uf.wizard_size = (700, 400) 
168  uf.wizard_apply_button = False 
169  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
170   
171   
172  # The n_state_model.number_of_states user function. 
173  uf = uf_info.add_uf('n_state_model.number_of_states') 
174  uf.title = "Set the number of states in the N-state model." 
175  uf.title_short = "Number of states." 
176  uf.add_keyarg( 
177      name = "N", 
178      default = 1, 
179      py_type = "int", 
180      desc_short = "number of states N", 
181      desc = "The number of states." 
182  ) 
183  # Description. 
184  uf.desc.append(Desc_container()) 
185  uf.desc[-1].add_paragraph("Prior to optimisation, the number of states in the N-state model can be specified.  If the number of states is not set, then this parameter will be equal to the number of loaded structures - the ensemble size.") 
186  # Prompt examples. 
187  uf.desc.append(Desc_container("Prompt examples")) 
188  uf.desc[-1].add_paragraph("To set up an 8-state model, type:") 
189  uf.desc[-1].add_prompt("relax> n_state_model.number_of_states(N=8)") 
190  uf.backend = n_state_model_obj._number_of_states 
191  uf.menu_text = "&number_of_states" 
192  uf.gui_icon = "oxygen.actions.edit-rename" 
193  uf.wizard_apply_button = False 
194  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
195   
196   
197  # The n_state_model.ref_domain user function. 
198  uf = uf_info.add_uf('n_state_model.ref_domain') 
199  uf.title = "Set the reference domain for the '2-domain' N-state model." 
200  uf.title_short = "Reference domain identification." 
201  uf.add_keyarg( 
202      name = "ref", 
203      py_type = "str", 
204      desc_short = "reference frame", 
205      desc = "The domain which will act as the frame of reference.  This is only valid for the '2-domain' N-state model." 
206  ) 
207  # Description. 
208  uf.desc.append(Desc_container()) 
209  uf.desc[-1].add_paragraph("Prior to optimisation of the '2-domain' N-state model, which of the two domains will act as the frame of reference must be specified.  The N-states will be rotations of the other domain, so to switch the frame of reference to the other domain simply transpose the rotation matrices.") 
210  # Prompt examples. 
211  uf.desc.append(Desc_container("Prompt examples")) 
212  uf.desc[-1].add_paragraph("To set up a 5-state model with 'C' domain being the frame of reference, type:") 
213  uf.desc[-1].add_prompt("relax> n_state_model.ref_domain(ref='C')") 
214  uf.backend = n_state_model_obj._ref_domain 
215  uf.menu_text = "&ref_domain" 
216  uf.gui_icon = "oxygen.actions.edit-rename" 
217  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
218   
219   
220  # The n_state_model.select_model user function. 
221  uf = uf_info.add_uf('n_state_model.select_model') 
222  uf.title = "Select the N-state model type and set up the model." 
223  uf.title_short = "N-state model choice." 
224  uf.add_keyarg( 
225      name = "model", 
226      default = "population", 
227      py_type = "str", 
228      desc_short = "model", 
229      desc = "The name of the preset N-state model.", 
230      wiz_element_type = "combo", 
231      wiz_combo_choices = ["population", "fixed", "2-domain"], 
232      wiz_read_only = True 
233  ) 
234  # Description. 
235  uf.desc.append(Desc_container()) 
236  uf.desc[-1].add_paragraph("Prior to optimisation, the N-state model type should be selected.  The preset models are:") 
237  uf.desc[-1].add_item_list_element("'population'", "The N-state model whereby only populations are optimised.  The structures loaded into relax are assumed to be fixed, i.e. the orientations are not optimised, or if two domains are present the Euler angles for each state are fixed.  The parameters of the model include the weight or probability for each state and the alignment tensors - {p0, p1, ..., pN, Axx, Ayy, Axy, Axz, Ayz, ...}.") 
238  uf.desc[-1].add_item_list_element("'fixed'", "The N-state model whereby all motions are fixed and all populations are fixed to the set probabilities.  The parameters of the model are simply the parameters of each alignment tensor {Axx, Ayy, Axy, Axz, Ayz, ...}.") 
239  uf.desc[-1].add_item_list_element("'2-domain'", "The N-state model for a system of two domains, where one domain experiences a reduced tensor.") 
240  # Prompt examples. 
241  uf.desc.append(Desc_container("Prompt examples")) 
242  uf.desc[-1].add_paragraph("To analyse populations of states, type:") 
243  uf.desc[-1].add_prompt("relax> n_state_model.select_model(model='populations')") 
244  uf.backend = n_state_model_obj._select_model 
245  uf.menu_text = "&select_model" 
246  uf.gui_icon = "oxygen.actions.list-add" 
247  uf.wizard_height_desc = 400 
248  uf.wizard_size = (800, 600) 
249  uf.wizard_image = WIZARD_IMAGE_PATH + 'n_state_model.png' 
250