def test_subtitle(self): """Test of the lib.text.sectioning.subtitle() function.""" # Write out the subtitle. file = DummyFileObject() subtitle(file=file, text='Test subtitle') # Read the results. lines = file.readlines() print("Formatted subtitle lines: %s" % lines) # Check the title. real_lines = [ '\n', '-----------------\n', '- Test subtitle -\n', '-----------------\n', '\n', ] self.assertEqual(len(lines), len(real_lines)) for i in range(len(lines)): self.assertEqual(lines[i], real_lines[i])
def run(self): """Execute the auto-analysis.""" # Peak intensity error analysis. if MODEL_R2EFF in self.models: self.error_analysis() # R1 parameter fitting. if self.r1_fit: subtitle(file=sys.stdout, text="R1 parameter optimisation activation", prespace=3) self.interpreter.relax_disp.r1_fit(fit=self.r1_fit) else: # No print out. self.interpreter.relax_disp.r1_fit(fit=self.r1_fit) # Loop over the models. self.model_pipes = [] for model in self.models: # Printout. subtitle(file=sys.stdout, text="The '%s' model" % model, prespace=3) # The results directory path. model_path = model.replace(" ", "_") path = self.results_dir + sep + model_path # The name of the data pipe for the model. model_pipe = self.name_pipe(model) if self.is_model_for_selection(model): self.model_pipes.append(model_pipe) # Check that results do not already exist - i.e. a previous run was interrupted. path1 = path + sep + 'results' path2 = path1 + '.bz2' path3 = path1 + '.gz' if access(path1, F_OK) or access(path2, F_OK) or access( path2, F_OK): # Printout. print( "Detected the presence of results files for the '%s' model - loading these instead of performing optimisation for a second time." % model) # Create a data pipe and switch to it. self.interpreter.pipe.create(pipe_name=model_pipe, pipe_type='relax_disp', bundle=self.pipe_bundle) self.interpreter.pipe.switch(model_pipe) # Load the results. self.interpreter.results.read(file='results', dir=path) # Jump to the next model. continue # Create the data pipe by copying the base pipe, then switching to it. self.interpreter.pipe.copy(pipe_from=self.pipe_name, pipe_to=model_pipe, bundle_to=self.pipe_bundle) self.interpreter.pipe.switch(model_pipe) # Select the model. self.interpreter.relax_disp.select_model(model) # Copy the R2eff values from the R2eff model data pipe. if model != MODEL_R2EFF and MODEL_R2EFF in self.models: self.interpreter.value.copy( pipe_from=self.name_pipe(MODEL_R2EFF), pipe_to=model_pipe, param='r2eff') # Calculate the R2eff values for the fixed relaxation time period data types. if model == MODEL_R2EFF and not has_exponential_exp_type(): self.interpreter.minimise.calculate() # Optimise the model. else: self.optimise(model=model, model_path=model_path) # Write out the results. self.write_results(path=path, model=model) # The final model selection data pipe. if len(self.models) >= 2: # Printout. section(file=sys.stdout, text="Final results", prespace=2) # Perform model selection. self.interpreter.model_selection( method=self.modsel, modsel_pipe=self.name_pipe('final'), bundle=self.pipe_bundle, pipes=self.model_pipes) # Final Monte Carlo simulations only. if not self.mc_sim_all_models: self.interpreter.monte_carlo.setup(number=self.mc_sim_num) self.interpreter.monte_carlo.create_data() self.interpreter.monte_carlo.initial_values() self.interpreter.minimise.execute( 'simplex', func_tol=self.opt_func_tol, max_iter=self.opt_max_iterations, constraints=True) if self.eliminate: self.interpreter.eliminate() self.interpreter.monte_carlo.error_analysis() # Writing out the final results. self.write_results(path=self.results_dir + sep + 'final') # No model selection. else: warn( RelaxWarning( "Model selection in the dispersion auto-analysis has been skipped as only %s models have been optimised." % len(self.model_pipes))) # Finally save the program state. self.interpreter.state.save(state='final_state', dir=self.results_dir, force=True)
def run(self): """Execute the auto-analysis.""" # Peak intensity error analysis. if MODEL_R2EFF in self.models: self.error_analysis() # Loop over the models. self.model_pipes = [] for model in self.models: # Printout. subtitle(file=sys.stdout, text="The '%s' model" % model, prespace=3) # The results directory path. path = self.results_dir+sep+model # The name of the data pipe for the model. model_pipe = model if self.is_model_for_selection(model): self.model_pipes.append(model_pipe) # Check that results do not already exist - i.e. a previous run was interrupted. path1 = path + sep + 'results' path2 = path1 + '.bz2' path3 = path1 + '.gz' if access(path1, F_OK) or access(path2, F_OK) or access(path2, F_OK): # Printout. print("Detected the presence of results files for the '%s' model - loading these instead of performing optimisation for a second time." % model) # Create a data pipe and switch to it. self.interpreter.pipe.create(pipe_name=model_pipe, pipe_type='relax_disp', bundle=self.pipe_bundle) self.interpreter.pipe.switch(model_pipe) # Load the results. self.interpreter.results.read(file='results', dir=path) # Jump to the next model. continue # Create the data pipe by copying the base pipe, then switching to it. self.interpreter.pipe.copy(pipe_from=self.pipe_name, pipe_to=model_pipe, bundle_to=self.pipe_bundle) self.interpreter.pipe.switch(model_pipe) # Select the model. self.interpreter.relax_disp.select_model(model) # Copy the R2eff values from the R2eff model data pipe. if model != MODEL_R2EFF and MODEL_R2EFF in self.models: self.interpreter.value.copy(pipe_from=MODEL_R2EFF, pipe_to=model, param='r2eff') # Calculate the R2eff values for the fixed relaxation time period data types. if model == MODEL_R2EFF and not has_exponential_exp_type(): self.interpreter.calc() # Optimise the model. else: self.optimise(model=model) # Write out the results. self.write_results(path=path, model=model) # The final model selection data pipe. if len(self.models) >= 2: # Printout. section(file=sys.stdout, text="Final results", prespace=2) # Perform model selection. self.interpreter.model_selection(method=self.modsel, modsel_pipe='final', bundle=self.pipe_bundle, pipes=self.model_pipes) # Final Monte Carlo simulations only. if not self.mc_sim_all_models: self.interpreter.monte_carlo.setup(number=self.mc_sim_num) self.interpreter.monte_carlo.create_data() self.interpreter.monte_carlo.initial_values() self.interpreter.minimise('simplex', func_tol=self.opt_func_tol, max_iter=self.opt_max_iterations, constraints=True) if self.eliminate: self.interpreter.eliminate() self.interpreter.monte_carlo.error_analysis() # Writing out the final results. self.write_results(path=self.results_dir+sep+'final') # No model selection. else: warn(RelaxWarning("Model selection in the dispersion auto-analysis has been skipped as only %s models have been optimised." % len(self.model_pipes))) # Finally save the program state. self.interpreter.state.save(state='final_state', dir=self.results_dir, force=True)