diff --git a/km3buu/propagation.py b/km3buu/propagation.py index 6a0564c3ade29872ff8c0168f04e891f1ffd0304..c7f8fcd9f2eb1af0dd115ca78951d49a18193ecf 100644 --- a/km3buu/propagation.py +++ b/km3buu/propagation.py @@ -36,23 +36,33 @@ PROPOSAL_LEPTON_DEFINITIONS = { -16: pp.particle.NuTauBarDef } +PROPOSAL_TARGET = pp.medium.AntaresWater() + + +def _setup_propagator(max_distance, particle_definition): + pp.InterpolationSettings.tables_path = Config().proposal_itp_tables + + crosssection = pp.crosssection.make_std_crosssection( + particle_def=particle_definition, + target=PROPOSAL_TARGET, + interpolate=True, + cuts=pp.EnergyCutSettings(np.inf, 0.05, False)) + collection = pp.PropagationUtilityCollection() + collection.displacement = pp.make_displacement(crosssection, True) + collection.interaction = pp.make_interaction(crosssection, True) + collection.decay = pp.make_decay(crosssection, True) + collection.time = pp.make_time(crosssection, True) + + utility = pp.PropagationUtility(collection=collection) -def _setup_propagator(max_distance, lepton_definition): - sector = pp.SectorDefinition() - sector.medium = pp.medium.AntaresWater(1.0) geometry = pp.geometry.Sphere(pp.Vector3D(), max_distance, 0) - sector.geometry = geometry - sector.scattering_model = pp.scattering.ScatteringModel.Highland + density_distr = pp.density_distribution.density_homogeneous( + PROPOSAL_TARGET.mass_density) - cfg = Config() - interpolation = pp.InterpolationDef() - interpolation.path_to_tables = cfg.proposal_itp_tables - interpolation.path_to_tables_readonly = cfg.proposal_itp_tables + propagator = pp.Propagator(particle_definition, + [(geometry, utility, density_distr)]) - return pp.Propagator(sector_defs=[sector], - particle_def=lepton_definition, - detector=geometry, - interpolation_def=interpolation) + return propagator def propagate_lepton(lepout_data, pdgid): @@ -76,28 +86,30 @@ def propagate_lepton(lepout_data, pdgid): lepout_data.lepOut_E) / lepton_info.mass #[cm] lepton_def = PROPOSAL_LEPTON_DEFINITIONS[pdgid]() - lepton = pp.particle.DynamicData(lepton_def.particle_type) - propagated_data = defaultdict(list) propagator = _setup_propagator(10 * prop_range, lepton_def) + propagated_data = defaultdict(list) + for entry in lepout_data: - lepton.energy = entry.lepOut_E * 1e3 - lepton.position = pp.Vector3D(0, 0, 0) - lepton.direction = pp.Vector3D(entry.lepOut_Px, entry.lepOut_Py, - entry.lepOut_Pz) - lepton.direction.normalize() - secondaries = propagator.propagate(lepton, 5 * prop_range) - - E = np.array(secondaries.energy) / 1e3 - pdgid = [p.type for p in secondaries.particles] - Px = [p.direction.x * p.momentum / 1e3 for p in secondaries.particles] - Py = [p.direction.y * p.momentum / 1e3 for p in secondaries.particles] - Pz = [p.direction.z * p.momentum / 1e3 for p in secondaries.particles] - x = [p.position.x / 100 for p in secondaries.particles] - y = [p.position.y / 100 for p in secondaries.particles] - z = [p.position.z / 100 for p in secondaries.particles] - dt = [p.time for p in secondaries.particles] + init_state = pp.particle.ParticleState() + init_state.energy = entry.lepOut_E * 1e3 + init_state.position = pp.Cartesian3D(0, 0, 0) + init_state.direction = pp.Cartesian3D(entry.lepOut_Px, entry.lepOut_Py, + entry.lepOut_Pz) + init_state.direction.normalize() + track = propagator.propagate(init_state, 5 * prop_range) + secondaries = track.decay_products() + + E = [s.energy / 1e3 for s in secondaries] + pdgid = [p.type for p in secondaries] + Px = [p.direction.x * p.momentum / 1e3 for p in secondaries] + Py = [p.direction.y * p.momentum / 1e3 for p in secondaries] + Pz = [p.direction.z * p.momentum / 1e3 for p in secondaries] + x = [p.position.x / 100 for p in secondaries] + y = [p.position.y / 100 for p in secondaries] + z = [p.position.z / 100 for p in secondaries] + dt = [p.time for p in secondaries] propagated_data["E"].append(E) propagated_data["Px"].append(Px)