def testBackengine(self): """ Check that the backengine method works correctly. """ # Get test instance. pmi_parameters = {'number_of_trajectories' : 10} test_interactor = FakePhotonMatterInteractor(parameters=pmi_parameters, input_path=self.input_h5, output_path='pmi') # Call backengine status = test_interactor.backengine() # Check that the backengine returned zero. self.assertEqual(status, 0) # Check that output was written to the given directory. self.assertTrue( os.path.isdir( test_interactor.output_path ) ) self.assertEqual( len( os.listdir( test_interactor.output_path ) ), test_interactor.parameters['number_of_trajectories'] ) # Call backengine again, so see that it works if directory already exists. status = test_interactor.backengine() # Check that the backengine returned zero. self.assertEqual(status, 0) # Test that exception raises if output_path is a file that already exists. shutil.copyfile( os.path.join( test_interactor.output_path, 'pmi_out_0000001.h5' ), 'pmi_out_0000001.h5' ) shutil.rmtree(test_interactor.output_path) fake = FakePhotonMatterInteractor( parameters=pmi_parameters, input_path=self.input_h5, output_path=TestUtilities.generateTestFilePath( 'pmi_out_0000001.h5' ) ) self.assertEqual( fake.backengine(), 1 ) # Clean up. self.__paths_to_remove.append('pmi') self.__files_to_remove.append('pmi_out_0000001.h5')
def testConstruction(self): """ Testing the default construction of the class. """ # Construct the object. diffractor = FakePhotonMatterInteractor(parameters=None, input_path=self.input_h5, output_path='pmi') self.assertIsInstance(diffractor, FakePhotonMatterInteractor)
def testCalculatorQueries(self): """ Test that the calculator queries return the correct calculators. """ # Setup a minimal experiment simulation. source_input = TestUtilities.generateTestFilePath('FELsource_out.h5') diffr_input = TestUtilities.generateTestFilePath('pmi_out.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 = FakePhotonMatterInteractor( parameters=None, input_path=pmi_input, output_path='pmi_out.h5') 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'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=diffr_input, output_path='diffr_out.h5') photon_detector = PerfectPhotonDetector(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') pxs = PhotonExperimentSimulation( photon_source=photon_source, photon_propagator=photon_propagator, photon_interactor=photon_interactor, photon_diffractor=photon_diffractor, photon_detector=photon_detector, photon_analyzer=photon_analyzer, ) # Check queries. self.assertIs(pxs.photon_source, photon_source) self.assertIs(pxs.photon_propagator, photon_propagator) self.assertIs(pxs.photon_interactor, photon_interactor) self.assertIs(pxs.photon_diffractor, photon_diffractor) self.assertIs(pxs.photon_detector, photon_detector) self.assertIs(pxs.photon_analyzer, photon_analyzer)
def testDataInterfaceQueries(self): """ Check that the data interface queries work. """ # Get test instance. test_interactor = FakePhotonMatterInteractor(parameters=None, input_path=self.input_h5, output_path='pmi_out.h5') # Get expected and provided data descriptors. expected_data = test_interactor.expectedData() provided_data = test_interactor.providedData() # Check types are correct. self.assertIsInstance(expected_data, list) self.assertIsInstance(provided_data, list) for d in expected_data: self.assertIsInstance(d, str) self.assertEqual(d[0], '/') for d in provided_data: self.assertIsInstance(d, str) self.assertEqual(d[0], '/')
def testBackengine(self): """ Check that the backengine method works correctly. """ # Get test instance. pmi_parameters = {'number_of_trajectories': 10} test_interactor = FakePhotonMatterInteractor(parameters=pmi_parameters, input_path=self.input_h5, output_path='pmi') # Call backengine status = test_interactor.backengine() # Check that the backengine returned zero. self.assertEqual(status, 0) # Check that output was written to the given directory. self.assertTrue(os.path.isdir(test_interactor.output_path)) self.assertEqual(len(os.listdir(test_interactor.output_path)), test_interactor.parameters['number_of_trajectories']) # Call backengine again, so see that it works if directory already exists. status = test_interactor.backengine() # Check that the backengine returned zero. self.assertEqual(status, 0) # Test that exception raises if output_path is a file that already exists. shutil.copyfile( os.path.join(test_interactor.output_path, 'pmi_out_0000001.h5'), 'pmi_out_0000001.h5') shutil.rmtree(test_interactor.output_path) fake = FakePhotonMatterInteractor( parameters=pmi_parameters, input_path=self.input_h5, output_path=TestUtilities.generateTestFilePath( 'pmi_out_0000001.h5')) self.assertEqual(fake.backengine(), 1) # Clean up. self.__paths_to_remove.append('pmi') self.__files_to_remove.append('pmi_out_0000001.h5')
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.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 = FakePhotonMatterInteractor( parameters=None, input_path=pmi_input, output_path='pmi_out.h5') 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'), } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=diffr_input, output_path='diffr_out.h5') photon_detector = PerfectPhotonDetector(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, )