PicketFence on Elekta Agility MLC #471
Replies: 6 comments 1 reply
-
"First of all, what is the absolute median error?" It's the median value of all the absolute distances between each MLC kiss and the idealized picket. A perfect delivery would have 0 median error. "Why is it so small (less than 0.1mm)?" On Varian machines this is pretty typical. IDK about Elekta. "With the EPID image resolution being 0.25mm/pixel, how is it possible to achieve that high sub-pixel precision?" Interpolation. "Now the median error is 0.628mm, which seems to be a reasonable estimate, but it is about 20 times larger than the median error from Snippet 1. Why is the difference so drastic? “Max Error” came out quite different as well, and it is pointing at a different MLC leaf in a different picket now." These are doing completely separate analyses. See this section of the docs. As it says there "The gap value is the combined values of the planned gap, MLC DLG, and EPID scatter effects. This is required since the expected position is no longer at the center of the MLC kiss, but offset to the side and depends on the above effects. You will likely have to determine this for yourself given the different MLCs and EPID combinations make a dynamic computation difficult." If you look at the image closely, there is likely a systematic offset of the expected positions vs the measured positions, either consistently too far in or out. This indicates the nominal gap parameter needs tweaking. I can't tell you the ideal |
Beta Was this translation helpful? Give feedback.
-
My understanding, and please correct me if I am wrong, is that the picket fence test is to quantify the discrepancies between the estimated position of an MLC leaf and the expected position of the same MLC leaf. My emphasis here is that the term “an estimated/expected position” is defined with respect to an MLC leaf tip which is the object of interest, so to speak. When you say “the expected position is no longer at the center of the MLC kiss but offset to the side", you apparently define the expected (reference) position with respect to something else than an MLC leaf tip. It is “the center of the MLC kiss” for the combined analysis and “an offset to the side” for the individual leaf analysis. Why not to use the expected position of the very leaf tip as the reference position? Also what confuses me is that you suggest that I have to tweak “the offset” to get good looking results where the MLC errors would be, for example, centered around zero. Perhaps, there are some other criteria for “tweaking” There is another issue I'd like to discuss. Since these two different types of analysis have two different definitions of the expected (reference) position, the combined and individual tests produce different sets of MLC positional errors. I would expect them (the test results) to be strongly correlated when performed on the same image. I got correlation coefficients of 0.57 for the combined analysis MLC errors versus the individual Side A errors, and 0.43 for the combined MLC errors versus the individual Side B errors. I don't see much correlation between the results. |
Beta Was this translation helpful? Give feedback.
-
"When you say “the expected position is no longer at the center of the MLC kiss but offset to the side", you apparently define the expected (reference) position with respect to something else than an MLC leaf tip." It's the position of the center of the MLC kiss +/- half the nominal gap. So if the center is at -50mm and a 10mm gap, the expected positions will be at -45 and -55mm. "Why not to use the expected position of the very leaf tip as the reference position?" Because I don't have that information. People do 10 pickets, 5 pickets, 15 pickets. They can be 1mm wide, 50mm wide. They can be offset; you never know. It would certainly be possible to have an analysis where the expected offsets are passed in and the MLC positions are compared to an absolute line in space. However, in my experience, there's often small twists in the EPID or head that cause the angle to not be exactly 0. Finally, I come from Varian, and as I said multiple times, the rounded leaf tips of Varian means that the leaf tip position is not the same as the effective radiation field edge since there is some penetration through the very edge of the leaf. This is referred to as the dosimetric leaf gap. The implicit assumption with picket fence is that most leaves are accurate, or at least the error is randomly distributed about the ideal position. If they are, then the fit through the centers of all the leaf kisses is a valid approach. If the leaves have a consistent offset (e.g. they are all 3mm to the right) this could be detected via the offset from CAX, which is reported for each picket. If there is indeed a skew to the MLCs, this is also reported as the angle of the fitted picket vs a vertical/horizontal line. This itself can be a valuable check. So, it's not that I don't want to use the leaf tip but that it's far more generalizable to use the center of the MLC kiss. I'll have to consider what an absolute offset looks like, as there is angle and orientation to worry about. "Perhaps, there are some other criteria for “tweaking” nominal_gap_mm ?" That's exactly what I tried to cover here. I don't have better answers for you. "I don't see much correlation between the results." I wouldn't expect there to be. As I describe in the difference between the analyses, it's very possible to have very different error values. Specifically, see the "both leaves offset" error. In such a case, the combined analysis reports 0 while the individual error is very large. |
Beta Was this translation helpful? Give feedback.
-
For what it's worth, I found it useful to create a picket fence with known errors to test and validate the picket fence leaf pair analysis. I am satisfied with its results and its ability to pick up errors above our tolerance value. |
Beta Was this translation helpful? Give feedback.
-
Now I have a purely technical question about the following code: picketfence.py Line 1242 What does It seems unnecessary since What's interesting is that images acquired on the Truebeam in my institution have SID=SAD=1000mm which makes |
Beta Was this translation helpful? Give feedback.
-
Here are a couple of findings I came across when testing the code on real-world EPID images. What I found may seem obvious to the author, but I could not find any mention of it in the documentation which is, by the way, comprehensive, detailed and overall excellent. I appreciate it.
The combined analysis error for an MLC leaf relates to the individual MLC leaf error as follows:
The following code illustrates the first equation.
My understanding is that
I just don't agree with the sentiment about “the chance being extraordinary rare” in the latter sentence. The very first PicketFence image from one of our linacs showed the following result: The individual errors for the rightmost MLC leafs seem much more pronounced in comparison to their combined counterparts. Also for some reason, the positional errors show some degree of nonlinearity. It could be due to some effect of the imager calibration or the MLC banks themselves were not linearly aligned. In any case, the currently employed linear model does not take into account the non-linearity, thus introducing a bias into the estimated errors. I was not buying the PicketFence results reported with a 0.01mm accuracy, and now I am convinced that tight accuracy is false. I say this just to point out that the current PicketFence code does not quantify any uncertainty associated with the results. My other case is rather simple. Two pickets on the EPID image unexpectedly came out a little wider than the other ones. I am not sure why. It could be the Elekta imager software that unevenly combined the separate picket images. The combined analysis was not able to catch the two deviated pickets, apparently because it looked for the mid-point of each MLC kiss. This is likely going to be my last post in this discussion. I got what I wanted to know about the internals of this test. I greatly appreciate what James has been doing for this excellent project. Thank you much! |
Beta Was this translation helpful? Give feedback.
-
I am having troubles trying to interpret the following results produced by the PicketFence module.
The code in Snippet 1 is to perform the combined analysis on a PicketFence pattern
from pylinac.picketfence import PicketFence, MLC
pf_img = r"data/23321312323213.PicketFence.dcm"
pf = PicketFence(pf_img, mlc = MLC.AGILITY)
pf.analyze(tolerance=1.5, action_tolerance=1.0)
pf.plot_analyzed_image()
print(pf.results())
Here is the result:
Picket Fence Results:
Gantry Angle (°): 0.0
Collimator Angle (°): 0.0
Tolerance (mm): 1.5
Leaves passing (%): 100.0
Absolute median error (mm): 0.028mm
Mean picket spacing (mm): 29.8mmn
Picket offsets from CAX (mm): 88.9 59.3 29.4 -0.4 -30.1 -59.9 -89.7
Max Error: 0.134mm on Picket: 5, Leaf: 60
First of all, what is the absolute median error? Why is it so small (less than 0.1mm) ? With the EPID image resolution being 0.25mm/pixel, how is it possible to achieve that high sub-pixel precision?
In the second snippet, the code performs the individual leaf detection/analysis on the same EPID image
from pylinac.picketfence import PicketFence, MLC
pf_img = r"data/23321312323213.PicketFence.dcm"
pf = PicketFence(pf_img, mlc = MLC.AGILITY)
pf.analyze(tolerance=1.5, action_tolerance=1.0, separate_leaves=True, nominal_gap_mm=3.0)
pf.plot_analyzed_image()
print(pf.results())
Picket Fence Results:
Gantry Angle (°): 0.0
Collimator Angle (°): 0.0
Tolerance (mm): 1.5
Leaves passing (%): 100.0
Absolute median error (mm): 0.628mm
Mean picket spacing (mm): 29.8mmn
Picket offsets from CAX (mm): 88.9 59.3 29.4 -0.4 -30.1 -59.9 -89.7
Max Error: 1.310mm on Picket: 3, Leaf: A29
Now the median error is 0.628mm, which seems to be a reasonable estimate, but it is about 20 times larger than the median error from Snippet 1. Why is the difference so drastic? “Max Error” came out quite different as well, and it is pointing at a different MLC leaf in a different picket now.
Beta Was this translation helpful? Give feedback.
All reactions