No project description provided
Project description
CeNTREX-trajectories
Code for simulating CeNTREX trajectories
Installation
Clone repo and install with pip
or directly install from GitHub with:
pip install git+https://github.com/ograsdijk/CeNTREX-trajectories
Sections
The beamline is split into sections specified with Section
, which can be used as follows:
sections = [
fourK = Section(
name = "4K shield",
objects = [CircularAperture(x=0, y=0, z=5e-3)],
start = 0,
stop = 10e-2,
save_collisions = False,
propagation_type=PropagationType.ballistic,
)
]
This defines a section called 4K shield
, which runs from z = 0 m -> 10e-2 m
. Collisions aren't
saved, the propagation_type
is ballistic and it contains a single circular aperture centered around
the z axis with a radius of 5 mm.
Collision objects
Currently two type of apertures are defined for collisions:
CircularAperture(x: float,y: float,r: float)
RectangularAperture(x: float,y: float,wx: float,wy: float)
Custom collision objects can be defined; apertures should inherit from Aperture
, and each custom
collision object should have two functions:
check_in_bounds(start: float, stop: float)
which returns a boolean specifying whether the object fully resides inside the sectionget_acceptance(coordinates: Coordinates)
which returns a boolean arrays specifiying which trajectories make it through the aperture
Propagation types
There is support for ballistic and ODE solver trajectories, which is specified on a per section basis through Section.propagation_type
PropagationType.ballistic
assumes a constant velocity and constant gravitational accelerationPropagationType.ode
needs a defined force function in the section and usesscipy.integrate.solve_ivp
to calculate the trajectory
Working example
import numpy as np
from centrex_trajectories import (
Coordinates,
Velocities,
Force,
PropagationType,
propagate_trajectories,
PropagationOptions,
)
from centrex_trajectories.beamline_objects import CircularAperture, Section
from centrex_trajectories.particles import TlF
in_to_m = 0.0254
fourK = Section(
name="4K shield",
objects=[CircularAperture(x=0, y=0, z=1.75 * in_to_m, r=1 / 2 * in_to_m)],
start=0,
stop=2 * in_to_m,
save_collisions=False,
propagation_type=PropagationType.ballistic,
)
fourtyK = Section(
name="40K shield",
objects=[
CircularAperture(x=0, y=0, z=fourK.stop + 1.25 * in_to_m, r=1 / 2 * in_to_m)
],
start=fourK.stop,
stop=fourK.stop + 1.5 * in_to_m,
save_collisions=False,
propagation_type=PropagationType.ballistic,
)
bbexit = Section(
name="Beamsource Exit",
objects=[CircularAperture(0, 0, fourtyK.stop + 2.5 * in_to_m, 2 * in_to_m)],
start=fourtyK.stop,
stop=fourtyK.stop + 3.25 * in_to_m,
save_collisions=False,
propagation_type=PropagationType.ballistic,
)
sections = [fourK, fourtyK, bbexit]
n_trajectories = 100_000
coordinates_init = Coordinates(
x=np.random.randn(n_trajectories) * 1.5e-3,
y=np.random.randn(n_trajectories) * 1.5e-3,
z=np.zeros(n_trajectories),
)
velocities_init = Velocities(
vx=np.random.randn(n_trajectories) * 39.4,
vy=np.random.randn(n_trajectories) * 39.4,
vz=np.random.randn(n_trajectories) * 16 + 184,
)
options = PropagationOptions(n_cores=6, verbose=False)
particle = TlF()
gravity = Force(0, -9.81*particle.mass, 0)
section_data, trajectories = propagate_trajectories(
sections,
coordinates_init,
velocities_init,
particle,
force=gravity,
options=options,
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for centrex-trajectories-0.3.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4a2452d65cc5ef5c2160fd5387938f6bcfe6f04eadd54eada9fe6a2078a4e729 |
|
MD5 | c93c073fbc1cd35d4be20926ba7c6804 |
|
BLAKE2b-256 | 8e0961525472ac990d9183749050b606ddc563cf82875391f131b8bef4e80304 |
Hashes for centrex_trajectories-0.3.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 31460c7c03a62d8c27282b74e9ab19cf3f73cb6269d3bb852501a82d97a25027 |
|
MD5 | 28c9edc602518f13c806b90f2f6b0048 |
|
BLAKE2b-256 | 36f7eb861e6a73db1102c8f99dd668bd82a2b6c6dfcbc1afd2fc79bccbb482c1 |