Skip to main content

Reusable code developed during my PhD in the Medical Applications of Particle Physics group at the University of Bern.

Project description

mapp-tricks package

Reusable code developed during my PhD in the Medical Applications of Particle Physics (MAPP) group at the University of Bern. It has several modules, some of which are explained below. The other modules I figured are too specific and probably not useful for others, but feel free to explore them.

Use at your own risk!

  • Lars Eggimann

Usage of HPGeCalibration

Importing:

from mapp_tricks.spectrometer_calibrations import HPGeCalibration

Basic usage for directly getting the activity at the end of the beam:

calibration = HPGeCalibration(level=1, with_aluminum_foil=True)

A_EoB = calibration.get_activity_for_peak_at_end_of_beam(
    peak_area=...,
    peak_energy=...,
    life_time=...,
    real_time=...,
    cooling_time=...,
    branching_ratio=...,
    half_life=...,
)

print(f"Activity at end of beam: {A_EoB:.3f} Bq")

Or just the efficiency:

efficiency = calibration.evaluate_efficiency_at_energy(
    energy=...
)

print(f"Efficiency: {efficiency:.3f}")

You can also ask for activity of peak at the start of spectra measurement:

A_SoM = calibration.get_activity_for_peak_at_start_of_measurement(
    peak_area=...,
    peak_energy=...,
    life_time=...,
    real_time=...,
    branching_ratio=...,
    half_life=...,
)

print(f"Activity at start of measurement: {A_SoM:.3f} Bq")

You can also show the fit to visually verify the calibration:

calibration.plot_fit()

Usage of X-ray Spectrometer Efficiency Calibration

This module was developed by Samuel Dominique Juillerat.

Usage Orbitos Utils

ORBITOS is a custom software developed to control and acquire data from various beam shaping and monitoring devices.

ElectrometerDataAnalyzer

The orbitos_utils module provides a convenient tool to plot and analyze data from the electrometer in its most simple use case. For more advanced analysis one can still use the util to easily extract the raw data and perform custom analysis.

from mapp_tricks.orbitos_utils import ElectrometerDataAnalyzer

eda = ElectrometerDataAnalyzer(path_to_csv="data/electrometer_data.csv")
electrometer_data = eda.analyze_beam_data()

The electrometer_data is a python object that contains the following attributes:

class BeamData:
    start_of_beam: datetime
    end_of_beam: datetime
    t_irradiation: float
    integrated_charge: ufloat
    plot: go.Figure

i.e. to get the integrated charge (which is a ufloat):

integrated_charge = electrometer_data.integrated_charge
print(f"Integrated charge: {integrated_charge:.3f} C")

To get only the raw data:

eda = ElectrometerDataAnalyzer(path_to_csv="data/electrometer_data.csv")

raw_data = eda.df

The raw data is a pandas dataframe which looks like this

      timestamp       current                   datetime
0  1.756286e+09  1.500000e-12 2025-08-27 11:05:49.924095
1  1.756286e+09 -1.000000e-12 2025-08-27 11:05:50.227460
2  1.756286e+09 -5.000000e-13 2025-08-27 11:05:50.530236
3  1.756286e+09 -8.000000e-13 2025-08-27 11:05:50.834038
4  1.756286e+09 -5.000000e-13 2025-08-27 11:05:51.140312
...

Integrated Correction Factor

It also calculates the integrated correction factor accounting for the decay of a isotope produced during irradiation. It accounts for irregular beam-shape and accurately integrates the needed correction factor to effectively determine i.e. the cross section of a reaction. It is implemented according to the following equation: $$ f(t) = \frac{\int_0^t P(t'),dt'}{e^{-\lambda t}\int_0^t e^{\lambda t'} P(t'),dt'} $$ , where $P(t)$ is the production rate (which is proportional to the beam current for all times $t'$) and $\lambda$ is the decay constant of the isotope. For constant $P(t) = P$ this yields: $$ f(t) = \frac{\lambda t}{1 - e^{-\lambda t}} $$ , which is the well known correction factor we use for i.e. the cross section calculation.

To get the integrated correction factor one can use the following example for a Tc101 peak:

eda = ElectrometerDataAnalyzer(path_to_csv="data/messy_beam_electrometer_data.csv")

electrometer_data = eda.analyze_beam_data()
integrated_correction_factor = eda.get_integrated_correction_factor(
    half_life=14.12 * 60
)

print(f"Integrated correction factor: {integrated_correction_factor:.3f}")

Usage of Film Analyzer

The film_analyzer module provides tools to analyze scanned images of gafchromic films. It can read the image, extract the RGB channels, and convert the pixel values to dose using a calibration curve defined in a bundled JSON file.

Basic Usage

from mapp_tricks.film_analyzer.film_analyzer import  FilmAnalyzer

fa = FilmAnalyzer(
    folder='./data/film_reader_test_data/',
    dpi=1200,
    calibration_key='EBT3_new_METAS_ImageJwRGB',
    plot_downsample=0.5
)

In order to analyze films we need information about the center positiona and ROI shape and size. This is done via a config file that can be generated as a template and then has to be edited manually, using the film analyzer is a iterative process. To generate a template config file and save it:

config = fa.generate_default_config(
    default_shape='circular',
    default_max_dose=10.0,
)
fa.save_config(config, fa.folder / 'config.json')

Now run the analysis:

fa.load_config(fa.folder / 'config.json')
fa.process_all(config)

This will create a subfolder results/ in the folder where the images are located. In this folder you will find dose maps and profiles for each film analyzed and also a summary file summary.csv that contains the mean dose and standard deviation and other information in the ROI for each film.

Now use the generated html plots to optimize the config file and re-run the analysis until satisfied. Make sure to not overwrite the config file with the generated one each time you run the analysis -> remove the saving and generating part after the first time.

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

mapp_tricks-0.1.8.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mapp_tricks-0.1.8-py3-none-any.whl (41.8 kB view details)

Uploaded Python 3

File details

Details for the file mapp_tricks-0.1.8.tar.gz.

File metadata

  • Download URL: mapp_tricks-0.1.8.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for mapp_tricks-0.1.8.tar.gz
Algorithm Hash digest
SHA256 2d7768ddf256981d08541d45626ec29d7a9ed41e096dec44d8e930eb4dbe6429
MD5 dc106bb2f0962194a3b945f15cee38d6
BLAKE2b-256 c3c06ee3d529b4dd771ed534edb6ad2fa3e37c4d5fc5f1449579da59b08a4fa6

See more details on using hashes here.

File details

Details for the file mapp_tricks-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: mapp_tricks-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 41.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for mapp_tricks-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 e49ea7b5409dff5da92c10bf9a55c1965a425d18e005b7c2c319fcbdf72428b1
MD5 6cb3aecfa192f2f959db0f6e965a6b09
BLAKE2b-256 0e4eec046d6c13dd107df79d03676d574a1b42a718a65a8c87af0744b8a9acc5

See more details on using hashes here.

Supported by

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