Ejemplo n.º 1
0
    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()
Ejemplo n.º 2
0
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.")
Ejemplo n.º 3
0
                                                     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
Ejemplo n.º 4
0
    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))
Ejemplo n.º 5
0
    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))
Ejemplo n.º 6
0
    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()
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
    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))
Ejemplo n.º 9
0
    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,
        )
Ejemplo n.º 10
0
    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,
        )
Ejemplo n.º 11
0
    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()
Ejemplo n.º 12
0
    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