DOROS

Data handling for turn-by-turn measurement files from the DOROS BPMs of the LHC (files in hdf5 format).

The file contains entries for METADATA, TIMESTAMPS_INDEX and TIMESTAMPS_TABLE, which we do not use and then the actual data per BPM.

These entries are as follows:

  • The timetamps in microseconds.

    • bstTimestamp: timestamp of the trigger

    • acqStamp: tiemstamp of the actual acquisition

  • Position/Orbit entries are the average position of the beam per turn, i.e. the turn-by-turn data averaged over all bunches, as DOROS cannot distinguish between the bunches.

    • nbOrbitSamplesRead: number of orbit samples read

    • horPositions: horizontal position of the beam per turn

    • verPositions: vertical position of the beam per turn

  • Oscillation entries are the frequencies of change in position.

  • nbOscillationSamplesRead: number of oscillation samples read

  • horOscillationData: horizontal oscillation data

  • verOscillationData: vertical oscillation data

class turn_by_turn.doros.DataKeys(default_value: float, n_samples: str, names: dict[str, str])[source]

Class to handle the different entry keys for oscillations and positions.

turn_by_turn.doros.read_tbt(file_path: str | Path, bunch_id: int = 0, data_type: str = 'oscillations') TbtData[source]

Reads turn-by-turn data from the DOROS’s SDDS format file.

Parameters:
  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

  • bunch_id (int, optional) -- the ID of the bunch in the file. Defaults to 0.

  • data_type (str) -- Datatype to load. Defaults to “oscillations”.

Returns:

A TbTData object with the loaded data.

turn_by_turn.doros.write_tbt(file_path: str | Path, tbt_data: TbtData, data_type: str = 'oscillations') None[source]

Writes turn-by-turn data to the DOROS’s SDDS format file.

Parameters:
  • tbt_data (TbtData) -- data to be written

  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

ESRF

Data handling for turn-by-turn measurement files from ESRF (files in matlab format). This module is untested and should be considered experimental at the moment.

turn_by_turn.esrf.load_esrf_mat_file(infile: str | Path) tuple[ndarray, ndarray][source]

Reads the ESRF TbT Matlab file, checks for nans and matrices duplicities from consecutive kicks.

Parameters:

infile (Union[str, Path]) -- path to the turn-by-turn measurement file.

Returns:

A 1D numpy array of BPM names and a 4D Numpy array [quantity, BPM, particle/bunch No., turn No.] quantities in order [x, y]

turn_by_turn.esrf.read_tbt(file_path: str | Path) TbtData[source]

Reads turn-by-turn data from the ESRF’s Matlab format file.

Parameters:

file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

Returns:

A TbTData object with the loaded data.

Iota

Data handling for turn-by-turn measurement files from Iota (files in hdf5 format).

turn_by_turn.iota.read_tbt(file_path: str | Path, hdf5_version: int = 2) TbtData[source]

Reads turn-by-turn data from IOITA’s hdf5 format file. As there are 2 possible versions of the HDF5 format, this will try them both successively.

Parameters:
  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

  • hdf5_version (int) -- the HDF5 format version to use when reading the written file. Defaults to the latest, a.k.a 2.

Returns:

A TbTData object with the loaded data.

LHC

Data handling for turn-by-turn measurement files from the LHC (files in SDDS format).

turn_by_turn.lhc.read_tbt(file_path: str | Path) TbtData[source]

Reads turn-by-turn data from the LHC’s SDDS format file. Will first determine if it is in ASCII format to figure out which reading method to use.

Parameters:

file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

Returns:

A TbTData object with the loaded data.

turn_by_turn.lhc.write_tbt(output_path: str | Path, tbt_data: TbtData) None[source]

Write a TbtData object’s data to file, in the LHC’s SDDS format.

Parameters:
  • output_path (Union[str, Path]) -- path to a the disk location where to write the data.

  • tbt_data (TbtData) -- the TbtData object to write to disk.

SPS

Data handling for turn-by-turn measurement files from the SPS (files in SDDS format).

turn_by_turn.sps.read_tbt(file_path: str | Path, remove_trailing_bpm_plane: bool = True) TbtData[source]

Reads turn-by-turn data from the SPS’s SDDS format file. Will first determine if it is in ASCII format to figure out which reading method to use.

Parameters:
  • file_path (str | Path) -- path to the turn-by-turn measurement file.

  • remove_trailing_bpm_plane (bool, optional) -- if True, will remove the trailing BPM plane (‘.H’, ‘.V’) from the BPM-names. This makes the measurement data compatible with the madx-models. Defaults to True.

Returns:

A TbTData object with the loaded data.

turn_by_turn.sps.write_tbt(output_path: str | Path, tbt_data: TbtData, add_trailing_bpm_plane: bool = True) None[source]

Write a TbtData object’s data to file, in a SPS’s SDDS format. The format is reduced to the minimum parameters used by the reader.

WARNING: This writer uses 0 for horizontal and 1 for vertical BPMs

in the MonPlanes array, i.e. the pre-2025 format.

Parameters:
  • output_path (str | Path) -- path to a the disk location where to write the data.

  • tbt_data (TbtData) -- the TbtData object to write to disk.

  • add_trailing_bpm_plane (bool, optional) -- if True, will add the trailing BPM plane (‘.H’, ‘.V’) to the BPM-names. This assures that all BPM-names are unique, and that the measurement data is compatible with the sdds files from the FESA-class. WARNING: If present, these will be used to determine the plane of the BPMs, otherwise the MonPlanes array will be used. Defaults to True.

PTC

Data handling for turn-by-turn measurement files from the PTC code, which can be obtained by performing particle tracking of your machine through the MAD-X PTC interface. The files are very close in structure to TFS files, with the difference that the data part is split into “segments” relating containing data for a given observation point.

class turn_by_turn.ptc.Segment(number, turns, particles, element, name)
element

Alias for field number 3

name

Alias for field number 4

number

Alias for field number 0

particles

Alias for field number 2

turns

Alias for field number 1

turn_by_turn.ptc.read_tbt(file_path: str | Path) TbtData[source]

Reads turn-by-turn data from the PTC trackone format file.

Parameters:

file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

Returns:

A TbTData object with the loaded data.

Trackone

Data handling for turn-by-turn measurement files from the MAD-X code, which can be obtained by performing particle tracking of your machine through in MAD-X. The files are very close in structure to TFS files, with the difference that the data part is split into “segments” relating containing data for a given observation point.

turn_by_turn.trackone.get_structure_from_trackone(nturns: int = 0, npart: int = 0, file_path: str | Path = 'trackone') tuple[ndarray, ndarray][source]

Extracts BPM names and particle coordinates in the trackone file produced by MAD-X.

Parameters:
  • nturns (int) -- Number of turns tracked in the trackone, i.e. obtained from get_trackone_stats().

  • npart (int) -- Number of particles tracked in the trackone, i.e. obtained from get_trackone_stats().

  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

Returns:

A numpy array of BPM names and a 4D Numpy array [quantity, BPM, particle/bunch No., turn No.] quantities in order [x, px, y, py, t, pt, s, E].

turn_by_turn.trackone.get_trackone_stats(file_path: str | Path, write_out: bool = False) tuple[int, int][source]

Determines the number of particles and turns in the matrices from the provided MAD-X trackone file.

Parameters:
  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

  • write_out (bool) -- if True, write out the determined stats to a stats.txt file.

Returns:

A tuple with the number of turns and particles.

turn_by_turn.trackone.read_tbt(file_path: str | Path, is_tracking_data: bool = False) TbtData[source]

Reads turn-by-turn data from the MAD-X trackone format file.

Parameters:
  • file_path (Union[str, Path]) -- path to the turn-by-turn measurement file.

  • is_tracking_data (bool) -- if True, all (X, PX, Y, PY, T, PT, S, E) fields are expected in the file as it is considered a full tracking simulation output. Those are then read into TrackingData objects. Defaults to False.

Returns:

A TbTData object with the loaded data.

MAD-NG

This module provides functions to read and write turn-by-turn measurement data produced by the MAD-NG code. MAD-NG stores its tracking data in the TFS (Table File System) file format.

Data is loaded into the standardized TbtData structure used by turn_by_turn, allowing easy post-processing and conversion between formats.

Dependencies:
  • Requires the tfs-pandas >= 4.0.0 package for compatibility with MAD-NG features. Earlier versions does not support MAD-NG TFS files.

turn_by_turn.madng.convert_to_tbt(df: pd.DataFrame | tfs.TfsDataFrame) TbtData[source]

Convert a TFS or pandas DataFrame to a TbtData object.

This function parses the required turn-by-turn columns, reconstructs the particle-by-particle tracking data, and returns a TbtData instance that can be written or converted to other formats.

Parameters:

df (pd.DataFrame | TfsDataFrame) -- DataFrame containing MAD-NG turn-by-turn tracking data.

Returns:

The extracted and structured turn-by-turn data.

Return type:

TbtData

Raises:
  • TypeError -- If the input is not a recognized DataFrame type.

  • ValueError -- If the data structure is inconsistent (e.g., lost particles).

turn_by_turn.madng.read_tbt(file_path: str | Path) TbtData[source]

Read turn-by-turn data from a MAD-NG TFS file.

Loads the TFS file using tfs-pandas and converts its contents into a TbtData object for use with the turn_by_turn toolkit.

Parameters:

file_path (str | Path) -- Path to the MAD-NG TFS measurement file.

Returns:

The loaded turn-by-turn data.

Return type:

TbtData

Raises:

ImportError -- If the tfs-pandas package is not installed.

turn_by_turn.madng.write_tbt(output_path: str | Path, tbt_data: TbtData) None[source]

Write turn-by-turn data to a MAD-NG TFS file.

Takes a TbtData object and writes its contents to disk in the standard TFS format used by MAD-NG, including relevant headers (date, time, origin).

Parameters:
  • output_path (str | Path) -- Destination file path for the TFS file.

  • tbt_data (TbtData) -- The turn-by-turn data to write.

Raises:

ImportError -- If the tfs-pandas package is not installed.

XTRACK_LINE

This module provides functions to convert tracking results from an xtrack.Line into the standardized TbtData format used by turn_by_turn.

Prerequisites for using convert_to_tbt:

  1. The input Line must contain one or more ParticlesMonitor elements positioned at each location where turn-by-turn data is required (e.g., all BPMs).

    A valid monitor setup involves:

    • Placing a xt.ParticlesMonitor instance in the line’s element sequence at all the places you would like to observe.

    • Configuring each monitor with identical settings:

      • start_at_turn (first turn to record, usually 0)

      • stop_at_turn (The total number of turns to record, e.g., 100)

      • num_particles (number of tracked particles)

    If any monitor is configured with different parameters, convert_to_tbt will either find no data or raise an inconsistency error.

    Also, if you specify more turns than were actually tracked, the resulting TBT data will include all turns up to the monitor’s configured limit. This may result in extra rows filled with zeros for turns where no real data was recorded, which might not be desirable for your analysis.

  2. Before conversion, you must:

    • Build particles with the desired initial coordinates (using line.build_particles(...)).

    • Track those particles through the line for the intended number of turns (using line.track(..., num_turns=num_turns)).

Once these conditions are met, pass the tracked Line to convert_to_tbt to extract the data from each particle monitor into a TbtData object.

turn_by_turn.xtrack_line.convert_to_tbt(xline: xt.Line) TbtData[source]

Convert tracking results from an xtrack Line into a TbtData object.

This function extracts all ParticlesMonitor elements found in the Line, verifies they contain consistent turn-by-turn data, and assembles the results into the standard TbtData format. One TransverseData matrix is created per tracked particle.

Parameters:

xline (Line) -- An xtrack.Line containing at least one ParticlesMonitor.

Returns:

The extracted turn-by-turn data for all particles and monitors.

Return type:

TbtData

Raises:
  • ImportError -- If the xtrack library is not installed.

  • TypeError -- If the input is not a valid xtrack.Line.

  • ValueError -- If no monitors are found or data is inconsistent.

turn_by_turn.xtrack_line.read_tbt(path: str | Path) None[source]

Not implemented.

Reading TBT data directly from files is not supported for xtrack. Use convert_to_tbt to convert an in-memory xtrack.Line instead.