Author: bugman Date: Wed Jun 24 14:39:42 2015 New Revision: 27857 URL: http://svn.gna.org/viewcvs/relax?rev=27857&view=rev Log: Added simulation support for the RDC and PCS Q factors in the N-state model analysis. This is for both Monte Carlo and Bootstrap simulation. The simulation RDC and PCS values, as well as the simulation back calculated values are now stored via the minimise_bc_data() function of specific_analyses.n_state_model.optimisation in the respective spin or interatomic data containers. The analysis specific API methods now send the sim_index value into minimise_bc_data(), as well as the pipe_control.rdc.q_factors() and pipe_control.pcs.q_factors() functions. Modified: trunk/specific_analyses/n_state_model/api.py trunk/specific_analyses/n_state_model/optimisation.py Modified: trunk/specific_analyses/n_state_model/api.py URL: http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/n_state_model/api.py?rev=27857&r1=27856&r2=27857&view=diff ============================================================================== --- trunk/specific_analyses/n_state_model/api.py (original) +++ trunk/specific_analyses/n_state_model/api.py Wed Jun 24 14:39:42 2015 @@ -1,6 +1,6 @@ ############################################################################### # # -# Copyright (C) 2007-2014 Edward d'Auvergne # +# Copyright (C) 2007-2015 Edward d'Auvergne # # # # This file is part of the program relax (http://www.nmr-relax.com). # # # @@ -163,15 +163,15 @@ cdp.chi2 = chi2 # Store the back-calculated data. - minimise_bc_data(model) + minimise_bc_data(model, sim_index=sim_index) # Calculate the RDC Q factors. if 'rdc' in data_types: - rdc.q_factors() + rdc.q_factors(sim_index=sim_index, verbosity=verbosity) # Calculate the PCS Q factors. if 'pcs' in data_types: - pcs.q_factors() + pcs.q_factors(sim_index=sim_index, verbosity=verbosity) # NOE potential. if hasattr(cdp, 'noe_restraints'): @@ -579,17 +579,17 @@ cdp.warning = warning # Statistical analysis. - if sim_index == None and ('rdc' in data_types or 'pcs' in data_types): + if 'rdc' in data_types or 'pcs' in data_types: # Get the final back calculated data (for the Q factor and - minimise_bc_data(model) + minimise_bc_data(model, sim_index=sim_index) # Calculate the RDC Q factors. if 'rdc' in data_types: - rdc.q_factors() + rdc.q_factors(sim_index=sim_index, verbosity=verbosity) # Calculate the PCS Q factors. if 'pcs' in data_types: - pcs.q_factors() + pcs.q_factors(sim_index=sim_index, verbosity=verbosity) def model_statistics(self, model_info=None, spin_id=None, global_stats=None): Modified: trunk/specific_analyses/n_state_model/optimisation.py URL: http://svn.gna.org/viewcvs/relax/trunk/specific_analyses/n_state_model/optimisation.py?rev=27857&r1=27856&r2=27857&view=diff ============================================================================== --- trunk/specific_analyses/n_state_model/optimisation.py (original) +++ trunk/specific_analyses/n_state_model/optimisation.py Wed Jun 24 14:39:42 2015 @@ -1,6 +1,6 @@ ############################################################################### # # -# Copyright (C) 2007-2014 Edward d'Auvergne # +# Copyright (C) 2007-2015 Edward d'Auvergne # # # # This file is part of the program relax (http://www.nmr-relax.com). # # # @@ -40,16 +40,21 @@ from target_functions.n_state_model import N_state_opt -def minimise_bc_data(model): +def minimise_bc_data(model, sim_index=None): """Extract and unpack the back calculated data. - @param model: The instantiated class containing the target function. - @type model: class instance + @param model: The instantiated class containing the target function. + @type model: class instance + @keyword sim_index: The optional Monte Carlo simulation index. + @type sim_index: None or int """ # No alignment tensors, so nothing to do. if not hasattr(cdp, 'align_tensors'): return + + # Simulation flag. + sim_flag = (sim_index != None) # Loop over each alignment. align_index = 0 @@ -79,11 +84,20 @@ # Spins with PCS data. if pcs_flag and hasattr(spin, 'pcs'): # Initialise the data structure if necessary. - if not hasattr(spin, 'pcs_bc'): - spin.pcs_bc = {} + if sim_flag: + if not hasattr(spin, 'pcs_sim_bc'): + spin.pcs_sim_bc = {} + if align_id not in spin.pcs_sim_bc: + spin.pcs_sim_bc[align_id] = [None] * cdp.sim_number + else: + if not hasattr(spin, 'pcs_bc'): + spin.pcs_bc = {} # Add the back calculated PCS (in ppm). - spin.pcs_bc[align_id] = model.deltaij_theta[align_index, pcs_index] * 1e6 + if sim_flag: + spin.pcs_sim_bc[align_id][sim_index] = model.deltaij_theta[align_index, pcs_index] * 1e6 + else: + spin.pcs_bc[align_id] = model.deltaij_theta[align_index, pcs_index] * 1e6 # Increment the data index if the spin container has data. pcs_index = pcs_index + 1 @@ -102,11 +116,20 @@ # Containers with RDC data. if rdc_flag and hasattr(interatom, 'rdc'): # Initialise the data structure if necessary. - if not hasattr(interatom, 'rdc_bc'): - interatom.rdc_bc = {} + if sim_flag: + if not hasattr(interatom, 'rdc_sim_bc'): + interatom.rdc_sim_bc = {} + if align_id not in interatom.rdc_sim_bc: + interatom.rdc_sim_bc[align_id] = [0.0] * cdp.sim_number + else: + if not hasattr(interatom, 'rdc_bc'): + interatom.rdc_bc = {} # Append the back calculated PCS. - interatom.rdc_bc[align_id] = model.rdc_theta[align_index, rdc_index] + if sim_flag: + interatom.rdc_sim_bc[align_id][sim_index] = model.rdc_theta[align_index, rdc_index] + else: + interatom.rdc_bc[align_id] = model.rdc_theta[align_index, rdc_index] # Increment the data index if the interatom container has data. rdc_index = rdc_index + 1