Skip to main content

No project description provided

Project description

Python versions on PyPI CeNTREX-TlF version on PyPI Code style: black

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 section
  • get_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 acceleration
  • PropagationType.ode needs a defined force function in the section and uses scipy.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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

centrex-trajectories-0.3.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

centrex_trajectories-0.3.0-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

Details for the file centrex-trajectories-0.3.0.tar.gz.

File metadata

  • Download URL: centrex-trajectories-0.3.0.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.1 CPython/3.9.7 Windows/10

File hashes

Hashes for centrex-trajectories-0.3.0.tar.gz
Algorithm Hash digest
SHA256 1b9c04d939431981542b7ce903cea2720afd7207f2d96e46aa32af3b28efdfe2
MD5 31b38c0b40499424af1d81347c095945
BLAKE2b-256 98a3eef6d7b0ffbe2a702b5202eced13e229508c8cbad72abde5179713fbe69f

See more details on using hashes here.

File details

Details for the file centrex_trajectories-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for centrex_trajectories-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 103a03330484b7dc341c1695c6418d2ce42d7f5494c16f63ecdf8dc968aca50b
MD5 d2d131f3f405f46ccd94f108592f3a6c
BLAKE2b-256 6bb00a9894c0147ebc5c45562849ed9839e8eed2012911d597006224427c870c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page