Profile Class

class pymedphys.labs.paulking.profile.Profile(x=array([], dtype=float64), y=array([], dtype=float64), meta={})[source]

One-dimensional distribution of intensity vs position.

x

position, +/- in cm

Type:np.array
y

intensity in unspecified units

Type:np.array
meta

metadata

Type:dict, optional

Examples

profiler = Profile().from_profiler("C:\profiler.prs")

film = Profile().from_narrow_png("C:\image.png")

profiler.cross_calibrate(film).plot(marker='o')

Notes

Requires Python PIL.

__add__(other)[source]

shift right

__copy__()[source]

deep copy

__eq__(other)[source]

same data points

__iadd__(other)

shift right

__imul__(other)

scale y

__init__(x=array([], dtype=float64), y=array([], dtype=float64), meta={})[source]

create profile

Parameters:
  • x (np.array, optional) –
  • y (np.array, optional) –
  • meta (dict, optional) –

Notes

Normally created empty, then filled using a method, which returns a new Profile.

__isub__(other)

shift left

__len__()[source]

# data points

__mul__(other)[source]

scale y

__radd__(other)

shift right

__rmul__(other)

scale y

__rsub__(other)

shift left

__str__()[source]

Examples

Profile object: 83 pts | x (-16.4 cm -> 16.4 cm) | y (0.22 -> 45.54)

__sub__(other)[source]

shift left

__weakref__

list of weak references to the object (if defined)

align_to(other)[source]

shift self to align to other

Calculated using shift that produces greatest peak correlation between the curves. Flips the curve left-to-right, if this creates a better fit.

Parameters:other (Profile) – profile to be be shifted to
Returns:
Return type:Profile
cross_calibrate(reference, measured)[source]

density mapping, reference -> measured

Calculated by overlaying intensity curves and observing values at corresponding points. Note that the result is an unsmoothed, collection of points.

Parameters:
  • reference (string) –
  • measured (string) – file names with path
Returns:

Return type:

Profile

from_lists(x, y, meta={})[source]

import x and y lists

Parameters:
  • x (list) – List of float x values
  • y (list) – List of float y values
  • meta (dict, optional) –
Returns:

Return type:

Profile

Examples

profile = Profile().fron_lists(x_list,data_list)

from_narrow_png(file_name, step_size=0.1)[source]

import from png file

Source file is a full color PNG, sufficiently narrow that density is uniform along its short dimension. The image density along its long dimension is reflective of a dose distribution.

Parameters:
  • file_name (str) –
  • step-size (float, optional) –
Returns:

Return type:

Profile

Raises:
  • ValueError – if aspect ratio <= 5, i.e. not narrow
  • AssertionError – if step_size <= 12.7 over dpi, i.e. small
from_pulse(centre, width, domain, increment, meta={})[source]

create pulse of unit height

Parameters:
  • centre (float) –
  • width (float) –
  • domain (tuple) – (x_left, x_right)
  • increment (float) –
  • meta (dict, optional) –
Returns:

Return type:

Profile

from_snc_profiler(file_name, axis)[source]

import profile form SNC Profiler file

Parameters:
  • file_name (string) – file name with path, .prs
  • axis (string) – ‘tvs’ or ‘rad’
Returns:

Return type:

Profile

Raises:

TypeError – if axis invalid

from_tuples(list_of_tuples, meta={})[source]

import list of (x,y) tuples

Parameters:
  • list_of_tuples ([(float x, float y), ..]) –
  • meta (dict, optional) –
Returns:

Return type:

Profile

Examples

profile = Profile().fron_lists(list_of_tuples)

get_edges()[source]

x-values of profile edges (left, right)

Notes

Points of greatest positive and greatest negative gradient.

Returns:
Return type:tuple
get_flatness()[source]

dose range relative to mean

Calculated as the dose range normalized to mean dose.

Returns:
Return type:float
get_increment()[source]

minimum step-size increment

Returns:increment
Return type:float
get_symmetry()[source]

max point diff relative to mean

Calculated as the maximum difference between corresponding points on opposite sides of the profile center, relative to mean dose.

Returns:
Return type:float
get_x(y)[source]

tuple of x-values at intensity y

Return distance values based on interpolation of source data for a supplied y value.

Parameters:y (float) –
Returns:tuple
Return type:(x1, x2, ..)
get_y(x)[source]

y-value at distance x

Return a y value based on interpolation of source data for a supplied distance.

Parameters:x (float) –
Returns:
Return type:float
make_centered()[source]

shift to align edges

Created by shifting the profile based on edge locations.

Returns:
Return type:Profile
make_flipped()[source]

flip L -> R

Created by reversing the sequence of y values.

Returns:
Return type:Profile
make_normal_x()[source]

normalised to distance at edges

Source profile distances multiplied by scaling factor to yield unit distance at beam edges. [1] [2]

Returns:
Return type:Profile

References

[1]Milan & Bentley, BJR Feb-74, The Storage and manipulationof radiation dose data in a small digital computer
[2]Heintz, King, & Childs, May-95, User Manual, Prowess 3000 CT Treatment Planning
make_normal_y(x=0.0, y=1.0)[source]

normalised to dose at distance

Source profile values multiplied by scaling factor to yield the specified dose at the specified distance. If distance is not specified, the central axis value is used. If dose is not specified, then normalization is to unity. With neither specified, resulting curve is the conventional off-center-ratio.

Parameters:
  • x (float, optional) –
  • y (float, optional) –
Returns:

Return type:

Profile

make_symmetric()[source]

avg of corresponding points

Created by averaging over corresponding +/- distances, except at the endpoints.

Returns:
Return type:Profile
plot(marker='o-')[source]

profile plot

Parameters:marker (string, optional) –
Returns:
Return type:None
resample_x(step)[source]

resampled x-values at a given increment

Resulting profile has stepsize of the indicated step based on linear interpolation over the points of the source profile.

Parameters:step (float) – sampling increment
Returns:
Return type:Profile
resample_y(step)[source]

resampled y-values at a given increment

Resulting profile has nonuniform step-size, but each step represents and approximately equal step in dose.

Parameters:step (float) – sampling increment
Returns:
Return type:Profile
slice_penumbra()[source]

penumbra (20 -> 80%, 80 -> 20%)

Source dose profile sliced to include only the penumbral edges, where the dose transitions from 20% - 80% of the umbra dose, as precent at the umbra edge, to support wedged profiles.

Returns:(left penumbra Profile, right penumbra Profile)
Return type:tuple
slice_segment(start=-inf, stop=inf)[source]

slice between given end-points

Resulting profile is comprised of those points in the source profile whose distance values are not-less-than start and not-greater-than stop.

Parameters:
  • start (float, optional) –
  • stop (float, optional) –
Returns:

Return type:

Profile

slice_shoulders()[source]

shoulders (penumbra -> umbra, umbra -> penumbra)

Source dose profile sliced to include only the profile shoulders, outside the central 80% of of the profile but inside the region bounded by the 20-80% transition.

Returns:(left shoulder Profile, right shoulder Profile)
Return type:tuple
slice_tails()[source]

tails (-> penumbra, penumbra ->)

Source dose profile sliced to include only the profile tail, outside the beam penumbra.

Returns:(left tail Profile, right tail Profile)
Return type:tuple
slice_umbra()[source]

umbra central 80%

Source dose profile sliced to include only the central region between beam edges.

Returns:
Return type:Profile