def _get_cross_section(self, protons_number=None, nucleons_number=None): """ Calculates cross section for the given element. :param protons_number: number of protons in the given type fo atom :param nucleons_number: number of nucleons in the given type of atom :returns: cross section for that element """ if nucleons_number is not None: try: atom = Atom(a_number=nucleons_number, z_number=protons_number) # isotopes are not implemented for all elements so use different constructor in that cases except RuntimeError: atom = Atom(z_number=protons_number) else: atom = Atom(z_number=protons_number) cross_section = None if self._scale_by_cross_section == 'Incoherent': cross_section = atom.neutron()["inc_scatt_xs"] elif self._scale_by_cross_section == 'Coherent': cross_section = atom.neutron()["coh_scatt_xs"] elif self._scale_by_cross_section == 'Total': cross_section = atom.neutron()["tot_scatt_xs"] return cross_section
def get_cross_section(scattering: str = 'Total', nucleons_number: Optional[int] = None, *, protons_number: int) -> float: """ Calculates cross section for the given element. :param scattering: Type of cross-section: 'Incoherent', 'Coherent' or 'Total' :param protons_number: number of protons in the given type fo atom :param nucleons_number: number of nucleons in the given type of atom :returns: cross section for that element """ if nucleons_number is not None: try: atom = Atom(a_number=nucleons_number, z_number=protons_number) # isotopes are not implemented for all elements so use different constructor in that cases except RuntimeError: logger.warning( f"Could not find data for isotope {nucleons_number}, " f"using default values for {protons_number} protons.") atom = Atom(z_number=protons_number) else: atom = Atom(z_number=protons_number) scattering_keys = { 'Incoherent': 'inc_scatt_xs', 'Coherent': 'coh_scatt_xs', 'Total': 'tot_scatt_xs' } return atom.neutron()[scattering_keys[scattering]]