beam_diameter_fwhm=226.0e-9 * meter, #sqrt(250*160/pi)*2 pulse_energy=4.0e-3 * joule, ) diffraction_parameters = SingFELPhotonDiffractorParameters( uniform_rotation=True, calculate_Compton=False, number_of_diffraction_patterns=36, detector_geometry=detector_geometry, beam_parameters=beam, forced_mpi_command='mpirun -np 36') out_path = "diffr" cleanUp(out_path) diffractor = SingFELPhotonDiffractor(parameters=diffraction_parameters, input_path='./4V7V.pdb', output_path=out_path) from timeit import default_timer as timer start = timer() diffractor.backengine() end = timer() print(end - start, 's') # Time in seconds # Link the .h5 output generated from mpirun together diffractor.saveH5()
geom = "s2e.geom" # e.g. s2e.geom parameters = SingFELPhotonDiffractorParameters( uniform_rotation=True, # Uniform sampling of rotation space. calculate_Compton=False, # Do not calculate Compton scattering slice_interval=100, # Take interval of 100 pmi snapshots number_of_slices=2, # Take two snapshots from this interval pmi_start_ID=1, # Start with this pmi file ID. pmi_stop_ID=1, # Stop after this pmi file ID. number_of_diffraction_patterns= 100, # Calculate 100 patterns from each trajectory. beam_parameter_file=beam, # Beam file. beam_geometry_file=geom, # Geometry file (detector). cpus_per_task= 1, # Use one CPU per MPI process. Number of processes is guessed from machine parameters. ) # Construct the object. diffractor = SingFELPhotonDiffractor(parameters=parameters, input_path=pmi_path, output_path='diffr') # Call backengine. status = diffractor.backengine() if status != 0: print("Diffraction calculation failed, check output.") sys.exit() print("Diffraction calculation succeeded.")
output_path='pmi') # Diffraction with parameters. diffraction_parameters={ 'uniform_rotation': 1, 'calculate_Compton' : False, 'slice_interval' : 100, 'number_of_slices' : 2, 'pmi_start_ID' : 1, 'pmi_stop_ID' : 1, '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', 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' : 100, 'min_error' : 1.0e-8, 'beamstop' : 1.0e-5, 'detailed_output' : False
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 = SingFELPhotonDiffractorParameters( 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'), detector_geometry=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') photon_detector = IdealPhotonDetector(parameters=None, input_path='diffr', output_path='detector') # Setup the photon experiment. pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=None, 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: 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))
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 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_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) 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()
def testSimS2EWorkflowTwoDiffractionPatterns(self): """ Testing that a workflow akin to the simS2E example workflow works. """ # These directories and files are expected to be present after a successfull calculation. expected_dirs = [ 'pmi', 'diffr', ] expected_symlinks = ['detector'] expected_files = [ 'FELsource_out_0000001.h5', 'prop_out_0000001.h5', 'pmi/pmi_out_0000001.h5', 'diffr/diffr_out_0000001.h5', 'detector/diffr_out_0000001.h5', 'orient_out.h5', ] # Ensure proper cleanup. self.__files_to_remove = expected_files + expected_symlinks + [ 'recon.h5' ] 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_0000001.h5') # Photon propagator, default parameters. photon_propagator = XFELPhotonPropagator( parameters=None, input_path='FELsource_out_0000001.h5', output_path='prop_out_0000001.h5') # Photon interactor with default parameters. photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path='prop_out_0000001.h5', output_path='pmi', sample_path=self.__sample_path) # Diffraction with parameters. diffraction_parameters = self.diffractorParam_1 photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr') # Perfect detector. photon_detector = IdealPhotonDetector(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': 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='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 testConstructionExceptions(self): """ Test that the appropriate exceptions are thrown if the object is constructed incorrectly. """ # Setup a minimal experiment simulation. source_input = TestUtilities.generateTestFilePath('FELsource_out.h5') diffr_input = TestUtilities.generateTestFilePath('pmi_out_0000001.h5') pmi_input = TestUtilities.generateTestFilePath('prop_out.h5') photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path='FELsource_out.h5') photon_propagator = XFELPhotonPropagator(parameters=None, input_path='FELsource_out.h5', output_path='prop_out.h5') photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=pmi_input, output_path='pmi_out.h5', sample_path=self.__sample_path) diffraction_parameters = self.diffractorParam_1 photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=diffr_input, output_path='diffr_out.h5') photon_detector = IdealPhotonDetector(parameters=None, input_path='diffr_out.h5', output_path='detector_out.h5') photon_analyzer = S2EReconstruction(parameters=None, input_path='detector_out.h5', output_path='analyzer_out.h5') # Check wrong source. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=None, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_propagator, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong propagator. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=None, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_source, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong interactor. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=None, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_source, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong diffractor. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=None, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_source, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong analyzer. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=None, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_diffractor, )
def testConstructionExceptions(self): """ Test that the appropriate exceptions are thrown if the object is constructed incorrectly. """ # Setup a minimal experiment simulation. source_input = TestUtilities.generateTestFilePath('FELsource_out.h5') diffr_input = TestUtilities.generateTestFilePath('pmi_out_0000001.h5') pmi_input = TestUtilities.generateTestFilePath('prop_out.h5') photon_source = XFELPhotonSource(parameters=None, input_path=source_input, output_path='FELsource_out.h5') photon_propagator = XFELPhotonPropagator(parameters=None, input_path='FELsource_out.h5', output_path='prop_out.h5') photon_interactor = XMDYNDemoPhotonMatterInteractor( parameters=None, input_path=pmi_input, output_path='pmi_out.h5', sample_path=self.__sample_path) 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': 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=diffr_input, output_path='diffr_out.h5') photon_detector = IdealPhotonDetector(parameters=None, input_path='diffr_out.h5', output_path='detector_out.h5') photon_analyzer = S2EReconstruction(parameters=None, input_path='detector_out.h5', output_path='analyzer_out.h5') # Check wrong source. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=None, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_propagator, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong propagator. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=None, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_source, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong interactor. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=None, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_source, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong diffractor. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=None, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_source, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check wrong analyzer. self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=None, ) self.assertRaises( TypeError, PhotonExperimentSimulation, photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_diffractor, )
def plot_diffr_vs_detector(self): """ Compare patterns before and after detector sim. """ # Cleanup. #self.__files_to_remove.append('6r43.pdb') #self.__files_to_remove.append('diffr.h5') #self.__dirs_to_remove.append('diffr') # Avoid crash due to multiple instances of G4RunManager del self._detector # Setup detector geometry. detector_panel = DetectorPanel( ranges={'fast_scan_min' : 0, 'fast_scan_max' : 511, 'slow_scan_min' : 0, 'slow_scan_max' : 511}, pixel_size=2.2e-4*Units.meter, photon_response=1.0, distance_from_interaction_plane=0.13*Units.meter, corners={'x': -256, 'y' : -256}, ) detector_geometry = DetectorGeometry(panels=[detector_panel]) # Setup photon beam. beam = PhotonBeamParameters( photon_energy=4.96e3*Units.electronvolt, beam_diameter_fwhm=1.0e-6*Units.meter, pulse_energy=1.0e-3*Units.joule, photon_energy_relative_bandwidth=0.001, divergence=1e-3*Units.radian, photon_energy_spectrum_type="SASE", ) # Setup and run the diffraction sim. diffraction_parameters=SingFELPhotonDiffractorParameters( uniform_rotation=None, calculate_Compton=False, number_of_diffraction_patterns=1, detector_geometry=detector_geometry, beam_parameters=beam, sample="6r43.pdb", forced_mpi_command='mpirun -np 1', ) photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, output_path='diffr', ) photon_diffractor.backengine() photon_diffractor.saveH5() analysis1 = DiffractionAnalysis(photon_diffractor.output_path, pattern_indices=[1], poissonize=True) analysis1.plotPattern(operation=None, logscale=False, ) parameters = XCSITPhotonDetectorParameters( detector_type="AGIPDSPB", patterns=[0], ) detector = XCSITPhotonDetector( parameters=parameters, input_path="diffr.h5", output_path="detector_out.h5", ) detector._readH5() detector.backengine() detector.saveH5() # Weak test Check we have photons in the signal. pattern = h5py.File("detector_out.h5", 'r')['data/0000001/data'].value analysis2 = DiffractionAnalysis(detector.output_path, pattern_indices=[1], poissonize=True) analysis2.plotPattern(operation=None, logscale=False, ) mpl.pyplot.show()
def testConstructionExceptions(self): """ Check that proper exceptions are thrown if object is constructed incorrectly. """ # Parameter not a dict. self.assertRaises(TypeError, SingFELPhotonDiffractor, 1, self.input_h5, 'diffr.h5') # Setup parameters that are ok 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': 2, 'beam_parameters': self.beam, 'detector_geometry': self.detector_geometry, } # Check construction with sane parameters. singfel = SingFELPhotonDiffractor(parameters, self.input_h5, 'diffr.h5') self.assertIsInstance(singfel, SingFELPhotonDiffractor) # uniform_rotation not a bool. parameters['uniform_rotation'] = 1 self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['uniform_rotation'] = True # calculate_Compton not a bool. parameters['calculate_Compton'] = 1 self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['calculate_Compton'] = False # slice_interval not positive integer. parameters['slice_interval'] = -1 self.assertRaises(ValueError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # slice_interval not a number parameters['slice_interval'] = 'one' self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['slice_interval'] = 1 # number_of_slices not positive integer. parameters['number_of_slices'] = -1 self.assertRaises(ValueError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # number_of_slices not a number parameters['number_of_slices'] = 'one' self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['number_of_slices'] = 2 # number_of_diffraction_patterns not positive integer. parameters['number_of_diffraction_patterns'] = -1 self.assertRaises(ValueError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # number_of_diffraction_patterns not a number parameters['number_of_diffraction_patterns'] = 'one' self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['number_of_diffraction_patterns'] = 2 # pmi_start_ID not positive integer. parameters['pmi_start_ID'] = -1 self.assertRaises(ValueError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # pmi_start_ID not a number parameters['pmi_start_ID'] = 'one' self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['pmi_start_ID'] = 1 # pmi_stop_ID not positive integer. parameters['pmi_stop_ID'] = -1 self.assertRaises(ValueError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # pmi_stop_ID not a number parameters['pmi_stop_ID'] = 'one' self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # Reset. parameters['pmi_stop_ID'] = 1 # beam_parameters not a string. parameters['beam_parameters'] = 1 self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # beam_parameters not a file. parameters['beam_parameters'] = 'xyz.beam' self.assertRaises(IOError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') parameters['beam_parameters'] = self.beam # detector_geometry not a string. parameters['detector_geometry'] = 1 self.assertRaises(TypeError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') # detector_geometry not a file. parameters['detector_geometry'] = 'xyz.geom' self.assertRaises(IOError, SingFELPhotonDiffractor, parameters, self.input_h5, 'diffr.h5') parameters['detector_geometry'] = self.detector_geometry