This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Feb 25, 2026. It is now read-only.

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

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.

Requirements

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.

Running the Code

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 z

where 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 4

Figures

This 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".

Python Files

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.

src

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.

Dose.gridSearch

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages