Direct vs indirect effects of radiotherapy: Opposing impact of tumor proliferation saturation on minimum dose for tumor control
This file contains a brief description of each of the code files used to simulate the various conditions required for DVR (Direct Volume Reduction) and CCR (Tumor Carrying Capacity Reduction) for radiotherapy simulations at a localized tumor region. Each of the files have been organized into various folders to aid in quick accessibility. This does not require any specific environments to run as long as the requirements below are met.
Ensure you have the following (or better) installed on your machine:
- Java 8 or higher
- Python 3, including the following external libraries: numpy, pandas, matplotlib
If you have any questions, please feel free to contact Achyudhan Kutuva at akutuva@ufl.edu.
To run the code, simply execute the "run_pipeline.sh" file using a terminal of your choice along with numbers separated by spaces indicating which figures you would like to be generated. For Windows, this may be a Bash emulator (Git Bash, Cygwin) or the Windows Subsystem for Linux (WSL). On Unix-based systems, this may be directly run within the terminal. This will compile and run the Java files, then the Python files. The output will be generated in the "Figures" folder. The "run_pipeline.sh" file can be executed by running the following command in the terminal:
./run_pipeline.sh x y zwhere x, y, and z are numbers corresponding to the figures you would like to generate. For instance, to generate Figures 2, 3, and 4, you would run the following command:
./run_pipeline.sh 2 3 4This folder contains the figures generated by the Python files after the above command is run. The figures are named according to the figure number. For instance, Figure 2 is named "Figure_2.png".
This contains all the files needed for generating the respective figures. "Sample_Graphing.py" corresponds to Figure 2. "Death_Sweep.py" corresponds to Figure 3. "Lambda_Sweep.py" corresponds to Figure 4. Finally, "PSI_Death_Doselines.py" corresponds to Figure 5.
This folder contains a collection of various .java files that contain the data generation features. 'Dose.java' is a file containing a collection of functions related to generating in-silico patients with customizable dose, time, and other restrictions. 'ModelComparison.java' is the primary driver file that contains all the various settings currently available, but the generation of each figure is split into separate Java files to aid in easy customization.
- 'ModelIntroduction.java' generates the contents of Figure 2. Panel A contains a graph of the logistic growth function, while Panel B contains a graph of the logistic growth function with the addition of either DVR or CCR to simulate RT response.
- 'DeathParamSweep.java' generates the contents of Figure 3. Panel A contains a parameter sweep and the corresponding volume projections under DVR, while B contains the same for CCR. Here, the growth rate λ is set constant while the death rates, α and δ, are varied.
- 'LambdaSweep.java' generates the contents of Figure 4. Panel A contains a parameter sweep and the corresponding volume projections under DVR, while B contains the same for CCR. Here, the death rates α and δ are set constant while the growth rate λ is varied.
- 'DVR_CCR_Scatter.java' generates the contents of Figure 5. Panel B contains a scatter plot showing the relationship between the death parameter α and PSI to project the minimum dose required for DVR. Panel A highlights a few sample volume projections at quadrants of the scatter plot. Panel C shows the relationship between α and the Cumulative Dose (D) required at varying PSI values. Panel D shows the relationship between PSI and D required at varying α values. Panels E-H are the same as Panels A-D, but for CCR instead of DVR.
'Patient.java' contains the parameters for the Patient object, which contains patient-specific values along with the corresponding fractionation values.
This is the main function within Dose.java that is used to conduct a grid search over the given ranges of alpha, delta, lambda, psi, and fraction size based on the received inputs from "ModelComparison.extracted". This function is able to selectively employ its various for-loops based on whether a range of values is provided for each parameter, specifically alpha, delta, PSI, lambda, and fraction size. Based on these values, the function will pass the corresponding values to the doseHelper function to determine the dose required to achieve LRC, given that "lrc_filter" is enabled. If "lrc_filter" is disabled, the function will pass the corresponding values to the doseHelper function to instead forecast projected tumor volumes over a given course of treatment. The function also supports boolean restrictions based on dose (dose_filter) and time (time_filter) to aid in forecasting purposes as seen in Figures 2-4, as well as "psi-check" to test whether volume is ever projected to surpass carrying capacity.