victorgabr / ApertureComplexity

Python 3.x port of the Eclipse ESAPI plug-in script used in the study : Predicting deliverability of volumetric-modulated arc therapy (VMAT) plans using aperture complexity analysis
GNU General Public License v3.0
24 stars 8 forks source link

MCS metric question #3

Closed gbaltz closed 2 years ago

gbaltz commented 2 years ago

First off thank you for making these scripts available. This is great work.

I was testing using the MCS module and I noticed my results are returning numbers around ~89, but the MCS metric is defined in the original paper as being from 0-1.0, with 1.0 being the MCS for a static open field. Am I to interpret that 89 is actually supposed to be 0.89, or is there something I am doing wrong?

victorgabr commented 2 years ago

Hey @gbaltz, you are probably not doing anything wrong.

it's been a while that I published this code and it's not fully tested.

The only metric I am sure of is the port of https://github.com/umro/Complexity, because I could cross-check against the ESAPI plugin results.

I tried to add more metrics but I am not sure MCS is right.

Can you provide a sample code example and files you are using?

then I can try to reproduce your results.

I appreciate your feedback.

gbaltz commented 2 years ago

Sure, I've attached the RT Plan I am using. RP_LUL_SBRT.zip

from complexity import PyComplexityMetric, dicomrt, misc

file = "RP_LUL_SBRT.dcm"

def main():
    # Getting planning data from DICOM file.
    plan_info = dicomrt.RTPlan(filename=file)
    plan_dict = plan_info.get_plan()

    modIndex = misc.ModulationIndexScore().CalculateForPlan(None, plan_dict)

    print(f'Modulation Index Score: {modIndex}')

if __name__ == '__main__':
    main()

Results: Modulation Index Score: (43.245294590697085, 81.87063376611182, 83.90295966456738)

victorgabr commented 2 years ago

Sure, I've attached the RT Plan I am using. RP_LUL_SBRT.zip

from complexity import PyComplexityMetric, dicomrt, misc

file = "RP_LUL_SBRT.dcm"

def main():
    # Getting planning data from DICOM file.
    plan_info = dicomrt.RTPlan(filename=file)
    plan_dict = plan_info.get_plan()

    modIndex = misc.ModulationIndexScore().CalculateForPlan(None, plan_dict)

    print(f'Modulation Index Score: {modIndex}')

if __name__ == '__main__':
    main()

Results: Modulation Index Score: (43.245294590697085, 81.87063376611182, 83.90295966456738)

The code you posted is not using MCS, but it is computing the MI.

The score computed by the class ModulationIndexScore is a tentative implementation of the methods:

https://iopscience.iop.org/article/10.1088/0031-9155/59/23/7315

I updated the documentation for it on the last commit.

https://github.com/victorgabr/ApertureComplexity/commit/c3ec16710fe53e3fe6ab357b018f24cae9d68708

Thanks.