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