'detailed_output': False } dm_parameters = { 'number_of_trials': 5, 'number_of_iterations': 2, 'averaging_start': 15, 'leash': 0.2, 'number_of_shrink_cycles': 2, } reconstructor = S2EReconstruction(parameters={ 'EMC_Parameters': emc_parameters, 'DM_Parameters': dm_parameters }, input_path='detector', output_path='recon.h5') # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run()
def testSimS2EWorkflowDirectories(self): """ Testing that a workflow akin to the simS2E example workflow works. Two sources, two diffraction patterns.""" # Setup directories. working_directory = 'SPI' source_dir = os.path.join(working_directory, 'FELsource') prop_dir = os.path.join(working_directory, 'prop') pmi_dir = os.path.join(working_directory, 'pmi') diffr_dir = os.path.join(working_directory, 'diffr') detector_dir = os.path.join(working_directory, 'detector') recon_dir = os.path.join(working_directory, 'recon') # Make directories. os.mkdir(working_directory) os.mkdir(source_dir) os.mkdir(prop_dir) os.mkdir(pmi_dir) os.mkdir(diffr_dir) os.mkdir(detector_dir) os.mkdir(recon_dir) # Ensure proper cleanup. self.__dirs_to_remove.append(working_directory) # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath('FELsource_out') # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path=source_dir) # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path=source_dir, output_path=prop_dir) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=prop_dir, output_path=pmi_dir, sample_path=TestUtilities.generateTestFilePath('sample.h5')) # Diffraction with parameters. diffraction_parameters = { 'uniform_rotation': True, 'calculate_Compton': False, 'slice_interval': 100, 'number_of_slices': 2, 'pmi_start_ID': 1, 'pmi_stop_ID': 2, 'number_of_diffraction_patterns': 2, 'beam_parameter_file': TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file': TestUtilities.generateTestFilePath('s2e.geom'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=pmi_dir, output_path=diffr_dir) # Reconstruction: EMC+DM emc_parameters = { 'initial_number_of_quaternions': 1, 'max_number_of_quaternions': 9, 'max_number_of_iterations': 3, 'min_error': 1.0e-8, 'beamstop': 1.0e-5, 'detailed_output': False } dm_parameters = { 'number_of_trials': 5, 'number_of_iterations': 2, 'averaging_start': 15, 'leash': 0.2, 'number_of_shrink_cycles': 2, } reconstructor = S2EReconstruction(parameters={ 'EMC_Parameters': emc_parameters, 'DM_Parameters': dm_parameters }, input_path=diffr_dir, output_path=recon_dir) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=None, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run()
def testSimS2EWorkflowSingleFile(self): """ Testing that a workflow akin to the simS2E example workflow works. Only one I/O file per calculator. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = [ 'pmi', 'diffr', ] expected_symlinks = ['detector'] expected_files = [ 'FELsource_out.h5', 'prop_out.h5', 'pmi/pmi_out_0000001.h5', 'diffr/diffr_out_0000001.h5', 'detector/diffr_out_0000001.h5', 'recon.h5', 'orient_out.h5', ] # Ensure proper cleanup. self.__files_to_remove = expected_files + expected_symlinks self.__files_to_remove.append('prepHDF5.py') self.__dirs_to_remove = expected_dirs # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath( 'FELsource_out/FELsource_out_0000001.h5') # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path='FELsource_out.h5') # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path='FELsource_out.h5', output_path='prop_out.h5') # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path='prop_out.h5', output_path='pmi', sample_path=TestUtilities.generateTestFilePath('sample.h5')) # Diffraction with parameters. diffraction_parameters = { 'uniform_rotation': True, 'calculate_Compton': False, 'slice_interval': 100, 'number_of_slices': 2, 'pmi_start_ID': 1, 'pmi_stop_ID': 1, 'number_of_diffraction_patterns': 1, 'beam_parameter_file': TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file': TestUtilities.generateTestFilePath('s2e.geom'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path='pmi', output_path='diffr') # Perfect detector. photon_detector = PerfectPhotonDetector(parameters=None, input_path='diffr', output_path='detector') # Reconstruction: EMC+DM emc_parameters = { 'initial_number_of_quaternions': 1, 'max_number_of_quaternions': 9, 'max_number_of_iterations': 3, 'min_error': 1.0e-8, 'beamstop': 1.0e-5, 'detailed_output': False } dm_parameters = { 'number_of_trials': 5, 'number_of_iterations': 2, 'averaging_start': 15, 'leash': 0.2, 'number_of_shrink_cycles': 2, } reconstructor = S2EReconstruction(parameters={ 'EMC_Parameters': emc_parameters, 'DM_Parameters': dm_parameters }, input_path='detector', output_path='recon.h5') # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check that all output files and directories are present. for directory in expected_dirs + expected_symlinks: self.assertTrue(os.path.isdir(directory)) for f in expected_files: print f self.assertTrue(os.path.isfile(f))
def testSimS2EWorkflowDefaultPaths(self): """ Testing that a workflow akin to the simS2E example workflow works. No IO paths specified. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = [ 'source_in', 'source', 'prop', 'pmi', 'diffr', 'analysis', ] expected_files = [ 'source/FELsource_out_0000000.h5', 'source/FELsource_out_0000001.h5', 'prop/prop_out_0000000.h5', 'prop/prop_out_0000001.h5', 'pmi/pmi_out_0000001.h5', 'pmi/pmi_out_0000002.h5', 'diffr/diffr_out_0000001.h5', 'analysis/orient_out.h5', 'analysis/phase_out.h5', ] # Ensure proper cleanup. self.__dirs_to_remove = expected_dirs self.__files_to_remove.append('diffr.h5') self.__files_to_remove.append('detector') # Get proper FEL source files to start from. shutil.copytree(TestUtilities.generateTestFilePath('FELsource_out'), 'source_in') # Photon source. photon_source = XFELPhotonSource(input_path='source_in') # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator() # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( sample_path=self.__sample_path) # Diffraction with parameters. diffraction_parameters = { 'uniform_rotation': True, 'calculate_Compton': False, 'slice_interval': 100, 'number_of_slices': 2, 'pmi_start_ID': 1, 'pmi_stop_ID': 2, 'number_of_diffraction_patterns': 1, 'beam_parameter_file': TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file': TestUtilities.generateTestFilePath('s2e.geom'), 'number_of_MPI_processes': 2 } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out')) photon_diffractor.parameters.cpus_per_task = 1 # Reconstruction: EMC+DM emc_parameters = { 'initial_number_of_quaternions': 1, 'max_number_of_quaternions': 2, 'max_number_of_iterations': 10, 'min_error': 1.0e-6, 'beamstop': True, 'detailed_output': False } dm_parameters = { 'number_of_trials': 5, 'number_of_iterations': 2, 'averaging_start': 15, 'leash': 0.2, 'number_of_shrink_cycles': 2, } reconstructor = S2EReconstruction(parameters={ 'EMC_Parameters': emc_parameters, 'DM_Parameters': dm_parameters }) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check that all output files and directories are present. for directory in expected_dirs: print(directory) self.assertTrue(os.path.isdir(directory)) for f in expected_files: print(f) self.assertTrue(os.path.isfile(f))
'max_number_of_quaternions' : 9, 'max_number_of_iterations' : 100, 'min_error' : 1.0e-8, 'beamstop' : 1.0e-5, 'detailed_output' : False } dm_parameters = {'number_of_trials' : 5, 'number_of_iterations' : 2, 'averaging_start' : 15, 'leash' : 0.2, 'number_of_shrink_cycles' : 2, } reconstructor = S2EReconstruction(parameters={'EMC_Parameters' : emc_parameters, 'DM_Parameters' : dm_parameters}, input_path='detector', output_path = 'recon.h5' ) # Setup the photon experiment. pxs = PhotonExperimentSimulation(photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run()
def testSimS2EWorkflowDefaultPaths(self): """ Testing that a workflow akin to the simS2E example workflow works. No IO paths specified. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = ["source_in", "source", "prop", "pmi", "diffr", "analysis"] expected_files = [ "source/FELsource_out_0000000.h5", "source/FELsource_out_0000001.h5", "prop/prop_out_0000000.h5", "prop/prop_out_0000001.h5", "pmi/pmi_out_0000001.h5", "pmi/pmi_out_0000002.h5", "diffr/diffr_out_0000001.h5", "diffr/diffr_out_0000002.h5", "diffr.h5", "detector", "analysis/orient_out.h5", "analysis/phase_out.h5", ] # Ensure proper cleanup. self.__dirs_to_remove = expected_dirs self.__files_to_remove.append("diffr.h5") self.__files_to_remove.append("detector") # Get proper FEL source files to start from. shutil.copytree(TestUtilities.generateTestFilePath("FELsource_out"), "source_in") # Photon source. photon_source = XFELPhotonSource(input_path="source_in") # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator() # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor(sample_path=self.__sample_path) # Diffraction with parameters. diffraction_parameters = { "uniform_rotation": True, "calculate_Compton": False, "slice_interval": 100, "number_of_slices": 2, "pmi_start_ID": 1, "pmi_stop_ID": 2, "number_of_diffraction_patterns": 1, "beam_parameter_file": TestUtilities.generateTestFilePath("s2e.beam"), "beam_geometry_file": TestUtilities.generateTestFilePath("s2e.geom"), "number_of_MPI_processes": 2, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath("pmi_out") ) # Reconstruction: EMC+DM emc_parameters = { "initial_number_of_quaternions": 1, "max_number_of_quaternions": 2, "max_number_of_iterations": 10, "min_error": 1.0e-6, "beamstop": True, "detailed_output": False, } dm_parameters = { "number_of_trials": 5, "number_of_iterations": 2, "averaging_start": 15, "leash": 0.2, "number_of_shrink_cycles": 2, } reconstructor = S2EReconstruction(parameters={"EMC_Parameters": emc_parameters, "DM_Parameters": dm_parameters}) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check that all output files and directories are present. for directory in expected_dirs: print directory self.assertTrue(os.path.isdir(directory)) for f in expected_files: print f self.assertTrue(os.path.isfile(f))
def testHistory(self): """ Testing that all generated output files contain the history """ # Setup directories. working_directory = 'SPI' self.__dirs_to_remove.append(working_directory) source_dir = os.path.join(working_directory, 'FELsource') prop_dir = os.path.join(working_directory, 'prop') pmi_dir = os.path.join(working_directory, 'pmi') diffr_dir = os.path.join(working_directory, 'diffr') detector_dir = os.path.join(working_directory, 'detector') recon_dir = os.path.join(working_directory, 'recon') # Make directories. os.mkdir(working_directory) os.mkdir(source_dir) os.mkdir(prop_dir) os.mkdir(pmi_dir) os.mkdir(diffr_dir) os.mkdir(detector_dir) os.mkdir(recon_dir) # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath('FELsource_out') # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path=source_dir) # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path=source_dir, output_path=prop_dir) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=prop_dir, output_path=pmi_dir, sample_path=self.__sample_path) # Diffraction with parameters. diffraction_parameters = self.diffractorParam_2 photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path=diffr_dir) # Reconstruction: EMC+DM emc_parameters = { 'initial_number_of_quaternions': 1, 'max_number_of_quaternions': 9, 'max_number_of_iterations': 3, 'min_error': 1.0e-8, 'beamstop': True, 'detailed_output': False } dm_parameters = { 'number_of_trials': 5, 'number_of_iterations': 2, 'averaging_start': 15, 'leash': 0.2, 'number_of_shrink_cycles': 2, } reconstructor = S2EReconstruction(parameters={ 'EMC_Parameters': emc_parameters, 'DM_Parameters': dm_parameters }, input_path=diffr_dir, output_path=recon_dir) # Perfect detector. photon_detector = IdealPhotonDetector(parameters=None, input_path='diffr', output_path='detector') # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check histories. # prop. with h5py.File(os.path.join(prop_dir, 'prop_out_0000000.h5'), 'r') as prop_h5: self.assertIn('history', list(prop_h5.keys())) self.assertIn('parent', list(prop_h5['history'].keys())) self.assertIn('detail', list(prop_h5['history/parent'].keys())) self.assertIn('parent', list(prop_h5['history/parent'].keys())) prop_h5.close() # pmi. with h5py.File(os.path.join(pmi_dir, 'pmi_out_0000001.h5'), 'r') as pmi_h5: self.assertIn('history', list(pmi_h5.keys())) self.assertIn('parent', list(pmi_h5['history'].keys())) self.assertIn('detail', list(pmi_h5['history/parent'].keys())) self.assertIn('parent', list(pmi_h5['history/parent'].keys())) self.assertIn('detail', list(pmi_h5['history/parent/parent'].keys())) self.assertIn('parent', list(pmi_h5['history/parent/parent'].keys())) pmi_h5.close() # diffr. with h5py.File(os.path.join(diffr_dir, 'diffr_out_0000001.h5'), 'r') as diffr_h5: tasks = list(diffr_h5['data'].keys()) for task in tasks: self.assertIn('history', list(diffr_h5["data"][task].keys())) self.assertIn('parent', list(diffr_h5["data"][task]['history'].keys())) self.assertIn( 'detail', list(diffr_h5["data"][task]['history/parent'].keys())) self.assertIn( 'parent', list(diffr_h5["data"][task]['history/parent'].keys())) self.assertIn( 'parent', list(diffr_h5["data"][task] ['history/parent/parent'].keys())) self.assertIn( 'detail', list(diffr_h5["data"][task] ['history/parent/parent'].keys())) self.assertIn( 'parent', list(diffr_h5["data"][task] ['history/parent/parent/parent'].keys())) self.assertIn( 'detail', list(diffr_h5["data"][task] ['history/parent/parent/parent'].keys())) diffr_h5.close() # phase. with h5py.File(os.path.join(recon_dir, 'phase_out.h5'), 'r') as dm_h5: self.assertIn('history', list(dm_h5.keys())) self.assertIn('error', list(dm_h5['history'].keys())) self.assertIn('object', list(dm_h5['history'].keys())) dm_h5.close()
def testSimS2EWorkflowSingleFile(self): """ Testing that a workflow akin to the simS2E example workflow works. Only one I/O file per calculator. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = ["pmi", "diffr"] expected_files = [ "FELsource_out.h5", "prop_out.h5", "pmi/pmi_out_0000001.h5", "diffr/diffr_out_0000001.h5", "orient_out.h5", "recon.h5", ] # Ensure proper cleanup. self.__files_to_remove = expected_files self.__dirs_to_remove = expected_dirs # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath("FELsource_out/FELsource_out_0000001.h5") # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path="FELsource_out.h5") # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator( parameters=None, input_path="FELsource_out.h5", output_path="prop_out.h5" ) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path="prop_out.h5", output_path="pmi", sample_path=self.__sample_path ) # Diffraction with parameters. diffraction_parameters = { "uniform_rotation": True, "calculate_Compton": False, "slice_interval": 100, "number_of_slices": 2, "pmi_start_ID": 1, "pmi_stop_ID": 1, "number_of_diffraction_patterns": 1, "beam_parameter_file": TestUtilities.generateTestFilePath("s2e.beam"), "beam_geometry_file": TestUtilities.generateTestFilePath("s2e.geom"), "number_of_MPI_processes": 2, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath("pmi_out"), output_path="diffr", ) # Reconstruction: EMC+DM emc_parameters = { "initial_number_of_quaternions": 1, "max_number_of_quaternions": 2, "max_number_of_iterations": 10, "min_error": 1.0e-6, "beamstop": True, "detailed_output": False, } dm_parameters = { "number_of_trials": 5, "number_of_iterations": 2, "averaging_start": 15, "leash": 0.2, "number_of_shrink_cycles": 2, } reconstructor = S2EReconstruction( parameters={"EMC_Parameters": emc_parameters, "DM_Parameters": dm_parameters}, input_path=TestUtilities.generateTestFilePath( "diffr" ), # Cheeting here to provide more realistic data for emc. output_path="recon.h5", ) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=None, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check that all output files and directories are present. for directory in expected_dirs: self.assertTrue(os.path.isdir(directory)) for f in expected_files: print f self.assertTrue(os.path.isfile(f))
def testSimS2EWorkflowDirectories(self): """ Testing that a workflow akin to the simS2E example workflow works. Two sources, two diffraction patterns.""" # Setup directories. working_directory = "SPI" self.__dirs_to_remove.append(working_directory) source_dir = os.path.join(working_directory, "FELsource") prop_dir = os.path.join(working_directory, "prop") pmi_dir = os.path.join(working_directory, "pmi") diffr_dir = os.path.join(working_directory, "diffr") detector_dir = os.path.join(working_directory, "detector") recon_dir = os.path.join(working_directory, "recon") # Make directories. os.mkdir(working_directory) os.mkdir(source_dir) os.mkdir(prop_dir) os.mkdir(pmi_dir) os.mkdir(diffr_dir) os.mkdir(detector_dir) os.mkdir(recon_dir) # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath("FELsource_out") # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path=source_dir) # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path=source_dir, output_path=prop_dir) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=prop_dir, output_path=pmi_dir, sample_path=self.__sample_path ) # Diffraction with parameters. diffraction_parameters = { "uniform_rotation": True, "calculate_Compton": False, "slice_interval": 100, "number_of_slices": 2, "pmi_start_ID": 1, "pmi_stop_ID": 2, "number_of_diffraction_patterns": 2, "beam_parameter_file": TestUtilities.generateTestFilePath("s2e.beam"), "beam_geometry_file": TestUtilities.generateTestFilePath("s2e.geom"), "number_of_MPI_processes": 2, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath("pmi_out"), output_path=diffr_dir, ) # Reconstruction: EMC+DM emc_parameters = { "initial_number_of_quaternions": 1, "max_number_of_quaternions": 9, "max_number_of_iterations": 3, "min_error": 1.0e-8, "beamstop": True, "detailed_output": False, } dm_parameters = { "number_of_trials": 5, "number_of_iterations": 2, "averaging_start": 15, "leash": 0.2, "number_of_shrink_cycles": 2, } reconstructor = S2EReconstruction( parameters={"EMC_Parameters": emc_parameters, "DM_Parameters": dm_parameters}, input_path=diffr_dir, output_path=recon_dir, ) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=None, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run()
def testHistory(self): """ Testing that all generated output files contain the history """ # Setup directories. working_directory = "SPI" self.__dirs_to_remove.append(working_directory) source_dir = os.path.join(working_directory, "FELsource") prop_dir = os.path.join(working_directory, "prop") pmi_dir = os.path.join(working_directory, "pmi") diffr_dir = os.path.join(working_directory, "diffr") detector_dir = os.path.join(working_directory, "detector") recon_dir = os.path.join(working_directory, "recon") # Make directories. os.mkdir(working_directory) os.mkdir(source_dir) os.mkdir(prop_dir) os.mkdir(pmi_dir) os.mkdir(diffr_dir) os.mkdir(detector_dir) os.mkdir(recon_dir) # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath("FELsource_out") # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path=source_dir) # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path=source_dir, output_path=prop_dir) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=prop_dir, output_path=pmi_dir, sample_path=self.__sample_path ) # Diffraction with parameters. diffraction_parameters = { "uniform_rotation": True, "calculate_Compton": False, "slice_interval": 100, "number_of_slices": 2, "pmi_start_ID": 1, "pmi_stop_ID": 2, "number_of_diffraction_patterns": 2, "beam_parameter_file": TestUtilities.generateTestFilePath("s2e.beam"), "beam_geometry_file": TestUtilities.generateTestFilePath("s2e.geom"), "number_of_MPI_processes": 2, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath("pmi_out"), output_path=diffr_dir, ) # Reconstruction: EMC+DM emc_parameters = { "initial_number_of_quaternions": 1, "max_number_of_quaternions": 9, "max_number_of_iterations": 3, "min_error": 1.0e-8, "beamstop": True, "detailed_output": False, } dm_parameters = { "number_of_trials": 5, "number_of_iterations": 2, "averaging_start": 15, "leash": 0.2, "number_of_shrink_cycles": 2, } reconstructor = S2EReconstruction( parameters={"EMC_Parameters": emc_parameters, "DM_Parameters": dm_parameters}, input_path=diffr_dir, output_path=recon_dir, ) # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=None, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check histories. # prop. with h5py.File(os.path.join(prop_dir, "prop_out_0000000.h5"), "r") as prop_h5: self.assertIn("history", prop_h5.keys()) self.assertIn("parent", prop_h5["history"].keys()) self.assertIn("detail", prop_h5["history/parent"].keys()) self.assertIn("parent", prop_h5["history/parent"].keys()) prop_h5.close() # pmi. with h5py.File(os.path.join(pmi_dir, "pmi_out_0000001.h5"), "r") as pmi_h5: self.assertIn("history", pmi_h5.keys()) self.assertIn("parent", pmi_h5["history"].keys()) self.assertIn("detail", pmi_h5["history/parent"].keys()) self.assertIn("parent", pmi_h5["history/parent"].keys()) self.assertIn("detail", pmi_h5["history/parent/parent"].keys()) self.assertIn("parent", pmi_h5["history/parent/parent"].keys()) pmi_h5.close() # diffr. with h5py.File(os.path.join(diffr_dir, "diffr_out_0000001.h5"), "r") as diffr_h5: self.assertIn("history", diffr_h5.keys()) self.assertIn("parent", diffr_h5["history"].keys()) self.assertIn("detail", diffr_h5["history/parent"].keys()) self.assertIn("parent", diffr_h5["history/parent"].keys()) self.assertIn("parent", diffr_h5["history/parent/parent"].keys()) self.assertIn("detail", diffr_h5["history/parent/parent"].keys()) self.assertIn("parent", diffr_h5["history/parent/parent/parent"].keys()) self.assertIn("detail", diffr_h5["history/parent/parent/parent"].keys()) diffr_h5.close() # phase. with h5py.File(os.path.join(recon_dir, "phase_out.h5"), "r") as dm_h5: self.assertIn("history", dm_h5.keys()) self.assertIn("error", dm_h5["history"].keys()) self.assertIn("object", dm_h5["history"].keys()) dm_h5.close()
def testSimS2EWorkflowSingleFile(self): """ Testing that a workflow akin to the simS2E example workflow works. Only one I/O file per calculator. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = [ 'pmi', 'diffr', ] expected_symlinks = ['detector'] expected_files = ['FELsource_out.h5', 'prop_out.h5', 'pmi/pmi_out_0000001.h5', 'diffr/diffr_out_0000001.h5', 'detector/diffr_out_0000001.h5', 'recon.h5', 'orient_out.h5', ] # Ensure proper cleanup. self.__files_to_remove = expected_files+expected_symlinks self.__files_to_remove.append('prepHDF5.py') self.__dirs_to_remove = expected_dirs # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath('FELsource_out/FELsource_out_0000001.h5') # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path='FELsource_out.h5') # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path='FELsource_out.h5', output_path='prop_out.h5') # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path='prop_out.h5', output_path='pmi', sample_path=TestUtilities.generateTestFilePath('sample.h5') ) # Diffraction with parameters. diffraction_parameters={ 'uniform_rotation': True, 'calculate_Compton' : False, 'slice_interval' : 100, 'number_of_slices' : 2, 'pmi_start_ID' : 1, 'pmi_stop_ID' : 1, 'number_of_diffraction_patterns' : 1, 'beam_parameter_file' : TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file' : TestUtilities.generateTestFilePath('s2e.geom'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path='pmi', output_path='diffr') # Perfect detector. photon_detector = PerfectPhotonDetector( parameters = None, input_path='diffr', output_path='detector') # Reconstruction: EMC+DM emc_parameters = {'initial_number_of_quaternions' : 1, 'max_number_of_quaternions' : 9, 'max_number_of_iterations' : 3, 'min_error' : 1.0e-8, 'beamstop' : 1.0e-5, 'detailed_output' : False } dm_parameters = {'number_of_trials' : 5, 'number_of_iterations' : 2, 'averaging_start' : 15, 'leash' : 0.2, 'number_of_shrink_cycles' : 2, } reconstructor = S2EReconstruction(parameters={'EMC_Parameters' : emc_parameters, 'DM_Parameters' : dm_parameters}, input_path='detector', output_path = 'recon.h5' ) # Setup the photon experiment. pxs = PhotonExperimentSimulation(photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run() # Check that all output files and directories are present. for directory in expected_dirs+expected_symlinks: self.assertTrue( os.path.isdir( directory ) ) for f in expected_files: print f self.assertTrue( os.path.isfile( f ) )
def testSimS2EWorkflowDirectories(self): """ Testing that a workflow akin to the simS2E example workflow works. Two sources, two diffraction patterns.""" # Setup directories. working_directory = 'SPI' source_dir = os.path.join( working_directory, 'FELsource' ) prop_dir = os.path.join( working_directory, 'prop' ) pmi_dir = os.path.join( working_directory, 'pmi' ) diffr_dir = os.path.join( working_directory, 'diffr' ) detector_dir = os.path.join( working_directory, 'detector' ) recon_dir = os.path.join( working_directory, 'recon' ) # Make directories. os.mkdir(working_directory) os.mkdir(source_dir) os.mkdir(prop_dir) os.mkdir(pmi_dir) os.mkdir(diffr_dir) os.mkdir(detector_dir) os.mkdir(recon_dir) # Ensure proper cleanup. self.__dirs_to_remove.append(working_directory) # Location of the FEL source file. source_input = TestUtilities.generateTestFilePath('FELsource_out') # Photon source. photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path=source_dir) # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator(parameters=None, input_path=source_dir, output_path=prop_dir) # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=prop_dir, output_path=pmi_dir, sample_path=TestUtilities.generateTestFilePath('sample.h5') ) # Diffraction with parameters. diffraction_parameters={ 'uniform_rotation': True, 'calculate_Compton' : False, 'slice_interval' : 100, 'number_of_slices' : 2, 'pmi_start_ID' : 1, 'pmi_stop_ID' : 2, 'number_of_diffraction_patterns' : 2, 'beam_parameter_file' : TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file' : TestUtilities.generateTestFilePath('s2e.geom'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=pmi_dir, output_path=diffr_dir) # Reconstruction: EMC+DM emc_parameters = {'initial_number_of_quaternions' : 1, 'max_number_of_quaternions' : 9, 'max_number_of_iterations' : 3, 'min_error' : 1.0e-8, 'beamstop' : 1.0e-5, 'detailed_output' : False } dm_parameters = {'number_of_trials' : 5, 'number_of_iterations' : 2, 'averaging_start' : 15, 'leash' : 0.2, 'number_of_shrink_cycles' : 2, } reconstructor = S2EReconstruction(parameters={'EMC_Parameters' : emc_parameters, 'DM_Parameters' : dm_parameters}, input_path=diffr_dir, output_path = recon_dir ) # Setup the photon experiment. pxs = PhotonExperimentSimulation(photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=None, photon_analyzer=reconstructor, ) # Run the experiment. pxs.run()