def testH5Output(self): """ Test that data, params and misc are present in hdf5 output file. """ # Ensure proper cleanup. sample_file = TestUtilities.generateTestFilePath('2nip.pdb') self.__dirs_to_remove.append(os.path.abspath('diffr')) self.__files_to_remove.append(os.path.abspath('diffr.h5')) # Set up parameters. parameters = SingFELPhotonDiffractorParameters( sample=sample_file, uniform_rotation=False, calculate_Compton=False, slice_interval=100, number_of_slices=3, pmi_start_ID=1, pmi_stop_ID=1, number_of_diffraction_patterns=2, beam_parameters=self.beam, detector_geometry=self.detector_geometry, forced_mpi_command='mpirun -np 2', ) # Construct the object. diffractor = SingFELPhotonDiffractor(parameters=parameters) # Run and save. diffractor.backengine() diffractor.saveH5() # Examine content of results hdf. with h5py.File(diffractor.output_path, 'r') as h5: # Datagroups in /" self.assertIn("data", h5.keys()) self.assertIn("params", h5.keys()) self.assertIn("misc", h5.keys()) # Data. data = h5["data"] self.assertIn("0000001", data.keys()) # Parameters params = h5["params"] self.assertIn("beam", params.keys()) self.assertIn("geom", params.keys()) # Beam beam = h5["params/beam"] self.assertIn("focusArea", beam.keys()) self.assertIn("photonEnergy", beam.keys()) # Geometry geom = h5["params/geom"] self.assertIn("detectorDist", geom.keys()) self.assertIn("mask", geom.keys()) self.assertIn("pixelHeight", geom.keys()) self.assertIn("pixelWidth", geom.keys())
def testNoRotation(self): """ Test that we can run singfel with no-rotation option.""" diffraction_parameters = SingFELPhotonDiffractorParameters( uniform_rotation=None, calculate_Compton=False, slice_interval=100, number_of_slices=3, pmi_start_ID=1, pmi_stop_ID=1, number_of_diffraction_patterns=2, detector_geometry=self.detector_geometry, forced_mpi_command='mpirun -np 2', ) photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr_newstyle') # Cleanup. #self.__dirs_to_remove.append(photon_diffractor.output_path) # Run backengine and convert files. # Ensure removal of directory. self.__dirs_to_remove.append(photon_diffractor.output_path) photon_diffractor.backengine() photon_diffractor.saveH5() # Cleanup new style files. # Ensure removal of linked hdf. self.__files_to_remove.append(photon_diffractor.output_path) with h5py.File(photon_diffractor.output_path) as handle: pattern = handle['data/0000001/diffr'].value # 2nd run. photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr_newstyle') # Run backengine and convert files. photon_diffractor.backengine() photon_diffractor.saveH5() with h5py.File(photon_diffractor.output_path) as handle: new_pattern = handle['data/0000001/diffr'].value self.assertAlmostEqual(numpy.linalg.norm(pattern - new_pattern), 0.0, 5)
def testSingleFile(self): """ Test that saveH5() generates only one linked hdf. """ parameters = SingFELPhotonDiffractorParameters( sample=None, uniform_rotation=False, calculate_Compton=False, slice_interval=100, number_of_slices=3, pmi_start_ID=1, pmi_stop_ID=1, number_of_diffraction_patterns=8, beam_parameters=self.beam, detector_geometry=self.detector_geometry, forced_mpi_command='mpirun -np 8', ) photon_diffractor = SingFELPhotonDiffractor( parameters=parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr_newstyle') # Cleanup. self.__dirs_to_remove.append(photon_diffractor.output_path) # Run backengine and convert files. photon_diffractor.backengine() photon_diffractor.saveH5() linked_h5 = photon_diffractor.output_path + '.h5' # Cleanup new style files. self.__files_to_remove.append(linked_h5) # Check that only one file was generated. self.assertTrue(os.path.isfile(linked_h5)) # Open the file for reading. h5_filehandle = h5py.File(linked_h5, 'r') # Count groups under /data. number_of_patterns = len(list(h5_filehandle['data'].keys())) self.assertEqual(number_of_patterns, 8) # Assert global metadata is present. self.assertIn("params", list(h5_filehandle.keys())) self.assertIn("version", list(h5_filehandle.keys())) self.assertIn("info", list(h5_filehandle.keys()))
def testSingleFile(self): """ Test that saveH5() generates only one linked hdf. """ diffraction_parameters={ 'uniform_rotation': True, 'calculate_Compton' : True, 'slice_interval' : 100, 'number_of_slices' : 2, 'pmi_start_ID' : 1, 'pmi_stop_ID' : 4, 'number_of_diffraction_patterns' : 2, 'beam_parameter_file': TestUtilities.generateTestFilePath('s2e.beam'), 'beam_geometry_file' : TestUtilities.generateTestFilePath('s2e.geom'), 'number_of_MPI_processes' : 8, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr_newstyle') # Cleanup. self.__dirs_to_remove.append(photon_diffractor.output_path) # Run backengine and convert files. photon_diffractor.backengine() photon_diffractor.saveH5() # Cleanup new style files. self.__files_to_remove.append(photon_diffractor.output_path) # Check that only one file was generated. self.assertTrue( os.path.isfile( photon_diffractor.output_path )) # Open the file for reading. h5_filehandle = h5py.File( photon_diffractor.output_path, 'r') # Count groups under /data. number_of_patterns = len(h5_filehandle.keys()) - 3 self.assertEqual( number_of_patterns, 8 ) # Assert global metadata is present. self.assertIn("params", h5_filehandle.keys() ) self.assertIn("version", h5_filehandle.keys() ) self.assertIn("info", h5_filehandle.keys() ) self.assertIn("geom", h5_filehandle["params"].keys() )
def testSingleFile(self): """ Test that saveH5() generates only one linked hdf. """ diffraction_parameters = { 'uniform_rotation': True, 'calculate_Compton': True, 'slice_interval': 100, 'number_of_slices': 2, 'pmi_start_ID': 1, 'pmi_stop_ID': 4, 'number_of_diffraction_patterns': 2, 'beam_parameters': None, 'detector_geometry': self.detector_geometry, 'number_of_MPI_processes': 8, } photon_diffractor = SingFELPhotonDiffractor( parameters=diffraction_parameters, input_path=TestUtilities.generateTestFilePath('pmi_out'), output_path='diffr_newstyle') # Cleanup. self.__dirs_to_remove.append(photon_diffractor.output_path) # Run backengine and convert files. photon_diffractor.backengine() photon_diffractor.saveH5() # Cleanup new style files. self.__files_to_remove.append(photon_diffractor.output_path) # Check that only one file was generated. self.assertTrue(os.path.isfile(photon_diffractor.output_path)) # Open the file for reading. h5_filehandle = h5py.File(photon_diffractor.output_path, 'r') # Count groups under /data. number_of_patterns = len(h5_filehandle['data'].keys()) self.assertEqual(number_of_patterns, 8) # Assert global metadata is present. self.assertIn("params", h5_filehandle.keys()) self.assertIn("version", h5_filehandle.keys()) self.assertIn("info", h5_filehandle.keys())
def testH5OutputThrice(self): """ Test whether the backengine behaves normally after multiple calculation""" # Ensure proper cleanup. sample_file = TestUtilities.generateTestFilePath('2nip.pdb') # Set up parameters. parameters = SingFELPhotonDiffractorParameters( sample=sample_file, uniform_rotation=False, calculate_Compton=False, slice_interval=100, number_of_slices=3, pmi_start_ID=1, pmi_stop_ID=1, number_of_diffraction_patterns=2, beam_parameters=self.beam, detector_geometry=self.detector_geometry, forced_mpi_command='mpirun -np 2', ) # Construct the object. diffractor = SingFELPhotonDiffractor(parameters=parameters, output_path='tmp/diffr') # Run and save. diffractor.backengine() diffractor.saveH5() self.__dirs_to_remove.append(os.path.abspath('tmp')) self.__files_to_remove.append( os.path.abspath(diffractor.output_path + '.h5')) os.remove('tmp/diffr.h5') shutil.rmtree('tmp/diffr') diffractor.backengine() diffractor.saveH5() try: os.remove('tmp/diffr.h5') shutil.rmtree('tmp/diffr') except IsADirectoryError: shutil.rmtree('tmp') print(sys.exc_info()[0]) raise diffractor.backengine() diffractor.saveH5()
def plot_diffr_vs_detector(self): """ Compare patterns before and after detector sim. """ # Cleanup. #self.__files_to_remove.append('5mzd.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="5mzd.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()
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()