def test_read_erd_data_returns_expected_data(self): get_espe = GetEspe(**self.default_kwargs) self.assertEqual(get_espe.erd_file, _ERD_FILE) erd_data = list(get_espe.read_erd_files()) self.assertEqual(20, len(erd_data)) for line in erd_data: self.assertIsInstance(line, str)
def test_get_espe_run_returns_expected_spectrum(self): get_espe = GetEspe(**self.default_kwargs) res = get_espe.run(verbose=False) self.assertEqual( GetEspe.read_espe_file(_EXPECTED_SPECTRUM_FILE), res )
def setUp(self): beam = mo.get_beam() det = mo.get_detector() self.rec_file = Path(tempfile.gettempdir(), "rec") self.erd_file = Path(tempfile.gettempdir(), "erd") self.espe = GetEspe( beam.ion.get_prefix(), beam.energy, det.detector_theta, mo.get_target().target_theta, det.calculate_tof_length(), det.calculate_solid(), self.rec_file, self.erd_file)
def test_calculate_simulated_spectrum(self): get_espe = GetEspe(**self.default_kwargs) self.assertEqual( GetEspe.calculate_simulated_spectrum( beam=self.beam, target=self.target, detector=self.detector, recoil_file=_RECOIL_FILE, erd_file=_ERD_FILE, reference_density=self.default_kwargs["reference_density"], verbose=False ), get_espe.run(verbose=False) )
def test_shell_injection(self): with tempfile.TemporaryDirectory() as tmp_dir: injected_file = Path(tmp_dir, "foo.bar") injected_str = str(injected_file).replace("\\", "/") recoil_file = str(_RECOIL_FILE).replace("\\", "/") injected_ch = f"0.025 -dist {recoil_file} && touch " \ f"{injected_str} &&" kwargs = dict(self.default_kwargs) kwargs["ch"] = injected_ch get_espe = GetEspe(**kwargs) get_espe.run(verbose=False) time.sleep(0.1) self.assertEqual(24, len(get_espe.get_command())) self.assertFalse(injected_file.exists())
class TestGetCommand(unittest.TestCase): def setUp(self): beam = mo.get_beam() det = mo.get_detector() self.rec_file = Path(tempfile.gettempdir(), "rec") self.erd_file = Path(tempfile.gettempdir(), "erd") self.espe = GetEspe( beam.ion.get_prefix(), beam.energy, det.detector_theta, mo.get_target().target_theta, det.calculate_tof_length(), det.calculate_solid(), self.rec_file, self.erd_file) def test_get_command(self): with PlatformSwitcher("Windows"): cmd = self.espe.get_command() self.assertEqual(str(gf.get_bin_dir() / "get_espe.exe"), cmd[0]) self.assertEqual(str(self.rec_file), cmd[-1]) self.assertEqual(24, len(cmd)) with PlatformSwitcher("Darwin"): cmd = self.espe.get_command() self.assertEqual("./get_espe", cmd[0]) self.assertEqual(str(self.rec_file), cmd[-1]) self.assertEqual(24, len(cmd))
def test_get_espe_writes_results_to_given_spectrum_file(self): with tempfile.TemporaryDirectory() as tmp_dir: output_file = Path(tmp_dir, "C-Default.simu") get_espe = GetEspe(**self.default_kwargs) get_espe.run(output_file=output_file, verbose=False) self.assertEqual( GetEspe.read_espe_file(_EXPECTED_SPECTRUM_FILE), GetEspe.read_espe_file(output_file) )
def test_read_espe_from_non_existing_file_return_empty_list(self): spectrum = GetEspe.read_espe_file(Path.cwd() / "foo.bar.baz") self.assertEqual([], spectrum)
def test_read_espe_file_returns_expected_data(self): spectrum = GetEspe.read_espe_file(_EXPECTED_SPECTRUM_FILE) self.assertEqual(96, len(spectrum)) for fst, snd in zip(spectrum[:-1], spectrum[1:]): # x values are in ascending order self.assertLess(fst[0], snd[0])
def test_read_erd_data_returns_nothing_if_no_erd_files(self): get_espe = GetEspe(**self.default_kwargs) get_espe.erd_file = Path.cwd() / "foo.bar.baz" erd_data = list(get_espe.read_erd_files()) self.assertEqual([], erd_data)
def __init__(self, parent: BaseTab, spectrum_type: str = MEASUREMENT, use_cuts=None, bin_width=0.025, use_efficiency=False, save_file_int=0, statusbar=None, spectra_changed=None): """Inits widget. Args: parent: A TabWidget. use_cuts: A string list representing Cut files. bin_width: A float representing Energy Spectrum histogram's bin width. use_efficiency: whether efficiency is taken into account when measured spectra is calculated save_file_int: n integer to have unique save file names for simulation energy spectra combinations. spectra_changed: pyqtSignal that indicates a change in energy spectra. """ sbh = None super().__init__() uic.loadUi(gutils.get_ui_dir() / "ui_energy_spectrum.ui", self) try: self.parent = parent self.icon_manager = parent.icon_manager self.progress_bar = None if use_cuts is None: use_cuts = [] self.use_cuts = use_cuts self.bin_width = bin_width self.energy_spectrum_data = {} self.spectrum_type = spectrum_type rbs_list = {} title = f"{self.windowTitle()} - Bin Width: {bin_width}" self.setWindowTitle(title) if isinstance(self.parent.obj, Measurement): self.measurement = self.parent.obj # Removal is done in the finally block so autoremove # is set to False sbh = StatusBarHandler(statusbar, autoremove=False) # Do energy spectrum stuff on this self.energy_spectrum_data = \ EnergySpectrum.calculate_measured_spectra( self.measurement, use_cuts, bin_width, progress=sbh.reporter, use_efficiency=use_efficiency ) # Check for RBS selections. rbs_list = cut_file.get_rbs_selections(self.use_cuts) else: self.simulation = self.parent.obj self.save_file_int = save_file_int self.save_file = f"widget_energy_spectrum_{save_file_int}.save" for file in use_cuts: self.energy_spectrum_data[file] = GetEspe.read_espe_file( file) # Graph in matplotlib widget and add to window self.matplotlib = MatplotlibEnergySpectrumWidget( self, self.energy_spectrum_data, rbs_list, spectrum_type, spectra_changed=spectra_changed, channel_width=bin_width) except (PermissionError, IsADirectoryError, FileNotFoundError) as e: # If the file path points to directory, this will either raise # PermissionError (Windows) or IsADirectoryError (Mac) msg = f"Could not create Energy Spectrum graph: {e}" self.parent.obj.log_error(msg) if hasattr(self, "matplotlib"): self.matplotlib.delete() self.matplotlib = None finally: if sbh is not None: sbh.remove_progress_bar()