Author: bugman Date: Fri Sep 12 15:05:07 2014 New Revision: 25790 URL: http://svn.gna.org/viewcvs/relax?rev=25790&view=rev Log: Added support for the model argument for the frame_order.pdb_model user function. This argument is used to specify which of the models in an ensemble will be used to represent the average domain position Monte Carlo simulations, as each simulation is encoded as a model, as well as for the distribution of structures simulating the motion of the system. The argument is therefore passed into the create_ave_pos() and create_distribution() functions of the specific_analyses.frame_order.geometric module. To handle all models being used in the non Monte Carlo simulation PDB file and only one in this file, the internal structural object is copied twice. The second copy for the MC sims has all but the chosen model deleted out of it. Modified: branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py 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/geometric.py URL: http://svn.gna.org/viewcvs/relax/branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py?rev=25790&r1=25789&r2=25790&view=diff ============================================================================== --- branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py (original) +++ branches/frame_order_cleanup/specific_analyses/frame_order/geometric.py Fri Sep 12 15:05:07 2014 @@ -545,7 +545,7 @@ rotor(structure=structure, rotor_angle=rotor_angle[i], axis=dot(T, axis[i]), axis_pt=pivot[i], label=label[i], centre=com[i], span=span[i], blade_length=5e-10, model_num=models[i], staggered=staggered[i], half_rotor=half_rotor) -def create_ave_pos(format='PDB', file=None, dir=None, compress_type=0, force=False): +def create_ave_pos(format='PDB', file=None, dir=None, compress_type=0, model=1, force=False): """Create a PDB file of the molecule with the moving domains shifted to the average position. @keyword format: The format for outputting the geometric representation. Currently only the 'PDB' format is supported. @@ -556,6 +556,8 @@ @type dir: str @keyword compress_type: The compression type. The integer values correspond to the compression type: 0, no compression; 1, Bzip2 compression; 2, Gzip compression. @type compress_type: int + @keyword model: Only one model from an analysed ensemble can be used for the PDB representation of the Monte Carlo simulations, as these consists of one model per simulation. + @type model: int @keyword force: Flag which if set to True will cause any pre-existing file to be overwritten. @type force: bool """ @@ -568,6 +570,7 @@ sims = [] file_root = [] models = [] + structures = [] # The real average position. titles.append("real average position") @@ -582,21 +585,36 @@ file_root.append("%s_sim" % file) models.append([i+1 for i in range(cdp.sim_number)]) + # Make a copy of the structural object (so as to preserve the original structure). + structures.append(deepcopy(cdp.structure)) + if hasattr(cdp, 'sim_number'): + structures.append(deepcopy(cdp.structure)) + + # Delete all but the chosen model for the simulations. + if hasattr(cdp, 'sim_number'): + # Determine the models to delete. + to_delete = [] + for model_cont in structures[-1].model_loop(): + if model_cont.num != model: + to_delete.append(model_cont.num) + to_delete.reverse() + + # Delete them. + for num in to_delete: + structures[-1].structural_data.delete_model(model_num=num) + # Loop over each representation and add the contents. for i in range(len(titles)): # Printout. subsubsection(file=sys.stdout, text="Creating the %s." % titles[i]) - # Make a copy of the structural object (so as to preserve the original structure). - structure = deepcopy(cdp.structure) - # Loop over each model. for j in range(len(models[i])): # Create or set the models, if needed. if models[i][j] == 1: - structure.set_model(model_new=1) + structures[i].set_model(model_new=1) elif models[i][j] != None: - structure.add_model(model=models[i][j]) + structures[i].add_model(model=models[i][j]) # Loop over each model. for j in range(len(models[i])): @@ -613,23 +631,23 @@ else: euler_to_R_zyz(0.0, cdp.ave_pos_beta, cdp.ave_pos_gamma, R) origin = pipe_centre_of_mass(atom_id=domain_moving(), verbosity=0) - structure.rotate(R=R, origin=origin, model=models[i][j], atom_id=domain_moving()) + structures[i].rotate(R=R, origin=origin, model=models[i][j], atom_id=domain_moving()) # Then translate the moving domain. if sims[i]: T = [cdp.ave_pos_x_sim[j], cdp.ave_pos_y_sim[j], cdp.ave_pos_z_sim[j]] else: T = [cdp.ave_pos_x, cdp.ave_pos_y, cdp.ave_pos_z] - structure.translate(T=T, model=models[i][j], atom_id=domain_moving()) + structures[i].translate(T=T, model=models[i][j], atom_id=domain_moving()) # Output to PDB format. if format == 'PDB': pdb_file = open_write_file(file_name=file_root[i]+'.pdb', dir=dir, compress_type=compress_type, force=force) - structure.write_pdb(file=pdb_file) + structures[i].write_pdb(file=pdb_file) pdb_file.close() -def create_distribution(format='PDB', file=None, dir=None, compress_type=0, force=False): +def create_distribution(format='PDB', file=None, dir=None, compress_type=0, model=1, force=False): """Create a PDB file of a distribution of positions coving the full dynamics of the moving domain. @keyword format: The format for outputting the geometric representation. Currently only the 'PDB' format is supported. @@ -640,6 +658,8 @@ @type dir: str @keyword compress_type: The compression type. The integer values correspond to the compression type: 0, no compression; 1, Bzip2 compression; 2, Gzip compression. @type compress_type: int + @keyword model: Only one model from an analysed ensemble can be used for the PDB representation of the Monte Carlo simulations, as these consists of one model per simulation. + @type model: int @keyword force: Flag which if set to True will cause any pre-existing file to be overwritten. @type force: bool """ 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=25790&r1=25789&r2=25790&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 12 15:05:07 2014 @@ -60,7 +60,7 @@ cdp.num_int_pts = num -def pdb_model(ave_pos="ave_pos", rep="frame_order", dist="domain_distribution", dir=None, compress_type=0, size=30.0, inc=36, force=False): +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): """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. @@ -77,6 +77,8 @@ @type size: float @keyword inc: The number of increments for the filling of the cone objects. @type inc: int + @keyword model: Only one model from an analysed ensemble can be used for the PDB representation of the Monte Carlo simulations, as these consists of one model per simulation. + @type model: int @keyword force: Flag which if set to True will cause any pre-existing file to be overwritten. @type force: bool """ @@ -90,7 +92,7 @@ # Create the average position structure. if ave_pos: - create_ave_pos(file=ave_pos, dir=dir, compress_type=compress_type, force=force) + create_ave_pos(file=ave_pos, dir=dir, compress_type=compress_type, model=model, force=force) # Nothing more to do for the rigid model. if cdp.model == MODEL_RIGID: @@ -102,7 +104,7 @@ # Create the distribution. if dist: - create_distribution(file=dist, dir=dir, compress_type=compress_type, force=force) + create_distribution(file=dist, dir=dir, compress_type=compress_type, model=model, force=force) def permute_axes(permutation='A'): 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=25790&r1=25789&r2=25790&view=diff ============================================================================== --- branches/frame_order_cleanup/user_functions/frame_order.py (original) +++ branches/frame_order_cleanup/user_functions/frame_order.py Fri Sep 12 15:05:07 2014 @@ -112,6 +112,15 @@ wiz_element_type = "spin" ) uf.add_keyarg( + name = "model", + default = 1, + 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.", + wiz_element_type = "spin" +) +uf.add_keyarg( name = "force", default = False, py_type = "bool", @@ -124,10 +133,11 @@ 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.backend = pdb_model uf.menu_text = "pdb_&model" uf.gui_icon = "oxygen.actions.document-save" -uf.wizard_height_desc = 400 +uf.wizard_height_desc = 370 uf.wizard_size = (1000, 750) uf.wizard_image = WIZARD_IMAGE_PATH + 'frame_order.png'