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.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b9c04d939431981542b7ce903cea2720afd7207f2d96e46aa32af3b28efdfe2 |
|
MD5 | 31b38c0b40499424af1d81347c095945 |
|
BLAKE2b-256 | 98a3eef6d7b0ffbe2a702b5202eced13e229508c8cbad72abde5179713fbe69f |
Hashes for centrex_trajectories-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 103a03330484b7dc341c1695c6418d2ce42d7f5494c16f63ecdf8dc968aca50b |
|
MD5 | d2d131f3f405f46ccd94f108592f3a6c |
|
BLAKE2b-256 | 6bb00a9894c0147ebc5c45562849ed9839e8eed2012911d597006224427c870c |