diff --git a/km3buu/physics.py b/km3buu/physics.py index 0aaaf534719611c42e51ef9f90f3897c06c0b5cb..52d931f8787989d246834deb2e8ea628755acafa 100644 --- a/km3buu/physics.py +++ b/km3buu/physics.py @@ -279,25 +279,27 @@ def muon_range_seawater(start_energy, stop_energy): muon_mass = Particle.from_string("mu").mass / 1e3 if start_energy <= muon_mass: return 0 + elif start_energy < stop_energy: + raise ValueError("Final energy must be smaller than initial energy.") etmp = start_energy dx = 0.0 - params = np.array( - [(0., 2.3e-1 * DENSITY_SEA_WATER, 15.5e-4 * DENSITY_SEA_WATER), - (30., 2.67e-1 * DENSITY_SEA_WATER, 3.4e-4 * DENSITY_SEA_WATER), - (35.3e3, -6.5e-1 * DENSITY_SEA_WATER, 3.66e-4 * DENSITY_SEA_WATER)], - dtype=[("energy", "f8"), ("a", "f8"), ("b", "f8")]) - - mask_stages = (params["energy"] < stop_energy) & (np.append( - params["energy"][1:], np.inf) > start_energy) - - energy_steps = np.append(params["energy"][mask_stages], stop_energy) - energy_steps[0] = start_energy - - for i in np.where(mask_stages)[0]: - dx += muon_range(energy_steps[i], energy_steps[i + 1], params["a"][i], - params["b"][i]) + params = np.array([ + (35.3e3, -6.5e-1 * DENSITY_SEA_WATER, 3.66e-4 * DENSITY_SEA_WATER), + (30., 2.67e-1 * DENSITY_SEA_WATER, 3.4e-4 * DENSITY_SEA_WATER), + (0., 2.3e-1 * DENSITY_SEA_WATER, 15.5e-4 * DENSITY_SEA_WATER), + ], + dtype=[("energy", "f8"), ("a", "f8"), ("b", "f8")]) + + mask_stages = (params["energy"] < start_energy) & (np.append( + np.inf, params["energy"][:-1]) > stop_energy) + energy_steps = np.append(start_energy, params["energy"][mask_stages]) + energy_steps[-1] = stop_energy + + for i, stage in enumerate(np.where(mask_stages)[0]): + dx += muon_range(energy_steps[i], energy_steps[i + 1], + params["a"][stage], params["b"][stage]) return dx