【发布时间】:2021-12-21 16:36:31
【问题描述】:
我有一个可以正常运行的 Python 脚本。但我需要将此脚本实现为 C++ 中的根宏。由于我对python语法不是很熟悉,所以我很难。
ATOMIC_MASS = 931.4940954e6
class ReducedMomentum:
def __init__(self, mass):
self.mass = mass
def __call__(self, kinetic_energy):
return math.sqrt(kinetic_energy * (kinetic_energy + 2 * self.mass)) / self.mass
class MassFraction:
def __init__(self, tritium_mass, electron_mass):
self.tritium_mass = tritium_mass
self.electron_mass = electron_mass
def __call__(self, spectator_mass):
return spectator_mass / (spectator_mass + self.tritium_mass + 2 * self.electron_mass)
class Ktilde:
def __init__(self, alpha_1, tritium_mass, electron_mass_eV):
self.alpha_1 = alpha_1
self.mass_fraction = MassFraction(tritium_mass, electron_mass_eV / ATOMIC_MASS)
self.reduced_momentum = ReducedMomentum(electron_mass_eV)
def __call__(self, spectator_mass, electron_kinetic_energy):
return self.alpha_1 * self.mass_fraction(spectator_mass) * self.reduced_momentum(electron_kinetic_energy)
我已经理解了前几行,但主要问题是以下部分:
self.mass_fraction = MassFraction(tritium_mass, electron_mass_eV / ATOMIC_MASS)
在此下方的行。如何将这些行转换为 C++?它们在数学上究竟是什么意思?
熟悉的台词又出现了几次:
ktilde = Ktilde(alpha_1, spectator_masses, electron_mass)
mass_spectator = parse_spectator_mass(args, parser)
ktilde_value = ktilde(mass_spectator, args.energy)
print('{:.4f}'.format(ktilde_value))
这可能很简单,但我在 Google 上找不到任何解决方案。非常感谢!
【问题讨论】:
-
在我看来,python 编写器过度使用了 __call__ (而且确实缺少参数的文档字符串),但希望您至少对类机制有更好的了解。转换实际上应该是一对一的,只需正确输入参数(我认为它们都是浮点数或双精度数)。