Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed Images/Collaborators/SLAC_logo.png
Binary file not shown.
Binary file removed Images/Index/CT.png
Binary file not shown.
Binary file removed Images/Index/EyeModel.png
Binary file not shown.
Binary file removed Images/Index/LINAC.png
Binary file not shown.
Binary file removed Images/Index/LogoWhite.png
Binary file not shown.
Binary file removed Images/Index/titlebackground.png
Binary file not shown.
Binary file removed Images/OpenTOPASatRRS.png
Binary file not shown.
Binary file removed Images/UserMeetingFlyerAAPM.png
Binary file not shown.
8 changes: 8 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Copyright 2025 The TOPAS Collaboration
Copyright 2022 The TOPAS Collaboration

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
174 changes: 174 additions & 0 deletions about.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>About | Open TOPAS</title>
<link rel="stylesheet" href="assets/styles.css" />
</head>
<body>
<header>
<div class="navbar">
<h1>
<a class="logo-mark" href="index.html" aria-label="Open TOPAS home">
<img src="assets/img/Logo.png" alt="" />
</a>
</h1>
<button class="menu-toggle" type="button" aria-label="Toggle navigation" aria-expanded="false">
<span></span>
<span></span>
<span></span>
</button>
<nav id="primary-nav" class="nav-links" aria-label="Main navigation">
<a href="about.html" aria-current="page">About</a>
<a href="download.html">Download</a>
<a href="documentation.html">Documentation</a>
<a href="https://github.com/OpenTOPAS/OpenTOPAS/discussions" target="_blank" rel="noopener">
User Forum <span class="external-icon" aria-hidden="true">&#8599;</span>
</a>
<a href="publications.html">Publications</a>
<a href="contact.html">Contact</a>
</nav>
</div>
</header>
<main>
<section class="content-placeholder section-inner" aria-labelledby="about-overview">
<h2 id="about-overview">What is OpenTOPAS?</h2>
<article class="stat-card overview-card">
<div class="text-columns">
<p>
The NIH-funded TOPAS project made radiation therapy simulations using the Monte Carlo method easily
accessible for the radiotherapy community. This repository brings the code to a new, truly open
release stage called <strong>OpenTOPAS</strong>.
</p>
<p>
OpenTOPAS wraps and extends the <a href="https://geant4.web.cern.ch" target="_blank" rel="noopener">Geant4 Simulation Toolkit</a>
to provide an easier-to-use application for the medical physicist. The parameter control system lets physicists assemble and control a rich
library of simulation objects—geometry components, particle sources, scorers—without writing C++ or knowing Geant4 internals.
Visit the <a href="https://opentopas.readthedocs.io/en/latest" target="_blank" rel="noopener">User Guide</a> for deeper dives.
</p>
<p>
The project was originally created out of an NIH-funded collaboration of Massachusetts General Hospital,
University of California San Francisco, and SLAC National Accelerator Laboratory. Today, the UCSF and MGH teams continue
to maintain and expand OpenTOPAS in partnership with the Monte Carlo community.
</p>
<p>
OpenTOPAS supports simulation of medical applications of ionizing radiation with the Monte Carlo method.
Free availability is intended to aid research by medical physicists, radiobiologists, and clinicians across all radiotherapy modalities.
New users should review the key publications to explore its potential.
</p>
</div>
</article>

<div class="stat-grid">
<article class="stat-card">
<h3>Mission</h3>
<p>
Deliver a validated, community-supported Monte Carlo framework that enables accurate and efficient radiation therapy research.
</p>
</article>
<article class="stat-card">
<h3>Why Open</h3>
<p>
Full open access allows advanced users to extend the platform in C++ while benefiting from the OpenTOPAS parameter system and Geant4 flexibility.
</p>
</article>
<article class="stat-card">
<h3>Focus Areas</h3>
<p>
Proton and conventional radiotherapy, LET / RBE modelling, optical photon transport, dosimetry detectors, and radiopharmaceutical therapy.
</p>
</article>
</div>
</section>

<section class="collaborators-section section-inner">
<h2>Collaborators</h2>
<p>
OpenTOPAS is jointly maintained by interdisciplinary teams at the University of California San Francisco and
Massachusetts General Hospital / Harvard Medical School. Each site contributes physics leadership, code
development, validation, and user support.
</p>

<div class="collab-grid">
<article class="collab-card stat-card">
<div>
<img class="collab-logo" src="assets/img/UCSF_logo.png" alt="University of California San Francisco logo" />
<h3>University of California San Francisco</h3>
<p class="collab-role">Core Maintainers</p>
<ul>
<li>Bruce Faddegon (PI 2018-2024)</li>
<li>José Ramos-Méndez</li>
<li>Thongchai Masilela</li>
<li>Naoki D-Kondo</li>
<li>Ramon Ortiz</li>
</ul>
</div>
</article>

<article class="collab-card stat-card">
<div>
<img class="collab-logo" src="assets/img/MGH-Harvard_logo.png" alt="Massachusetts General Hospital Harvard Medical School logo" />
<h3>Massachusetts General Hospital<br />Harvard Medical School</h3>
<p class="collab-role">Core Maintainers</p>
<ul>
<li>Harald Paganetti (PI 2009-2016)</li>
<li>Jan Schuemann</li>
<li>Alejandro Bertolet</li>
<li>Victor V. Onecha</li>
<li>Wook-Geun Shin</li>
</ul>
</div>
</article>
</div>

<div class="collab-grid former-grid">
<article class="collab-card stat-card">
<div>
<h3>Former Contributors · UCSF</h3>
<ul class="compact-list">
<li>Daren Sawkey</li>
<li>Jhonatan Carrasco Hernandez</li>
<li>Jungwook Shin</li>
<li>Kyungdon Choi</li>
<li>Lucas Burigo</li>
<li>Pierluigi Piersimoni</li>
</ul>
</div>
</article>

<article class="collab-card stat-card">
<div>
<h3>Former Contributors · MGH / Harvard</h3>
<ul class="compact-list">
<li>Aimee McNamara</li>
<li>Alejandro Carabe-Fernández</li>
<li>Andrea Attili</li>
<li>David Hall</li>
<li>David J Carlson</li>
<li>Giulia Tamborino</li>
<li>Hongyu Zhu</li>
<li>Hoyeon Lee</li>
<li>Hsiao-Ming Lu</li>
<li>Ilaria Rinaldi</li>
<li>Isaac Meyer</li>
<li>Jungwook Shin</li>
<li>Kira Grogg</li>
<li>Lisa Polster</li>
<li>Mauro Testa</li>
<li>Nils Peters</li>
<li>Robert Stewart</li>
<li>Wonmo Sung</li>
<li>Yizheng Chen</li>
</ul>
</div>
</article>
</div>
</section>
</main>
<footer>
<small>© <span id="year"></span> The TOPAS Collaboration</small>
</footer>
<script src="assets/site.js"></script>
</body>
</html>
Binary file added assets/.DS_Store
Binary file not shown.
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
115 changes: 115 additions & 0 deletions assets/site.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
(() => {
const yearEl = document.getElementById('year');
if (yearEl) {
yearEl.textContent = new Date().getFullYear();
}

const nav = document.querySelector('.nav-links');
const toggle = document.querySelector('.menu-toggle');

if (nav) {
const navItems = [
{ href: 'about.html', label: 'About' },
{ href: 'download.html', label: 'Download' },
{ href: 'documentation.html', label: 'Documentation' },
{ href: 'https://github.com/OpenTOPAS/OpenTOPAS/discussions', label: 'User Forum', external: true },
{ href: 'publications.html', label: 'Publications' },
{ href: 'contact.html', label: 'Contact' },
];

const currentPath = window.location.pathname.split('/').pop() || 'index.html';
nav.innerHTML = navItems
.map(({ href, label, external }) => {
const isActive = !external && currentPath === href;
const attrs = [
`href="${href}"`,
external ? 'target="_blank"' : '',
external ? 'rel="noopener"' : '',
isActive ? 'aria-current="page"' : '',
]
.filter(Boolean)
.join(' ');
const suffix = external ? ' <span class="external-icon" aria-hidden="true">&#8599;</span>' : '';
return `<a ${attrs}>${label}${suffix}</a>`;
})
.join('');
}

if (nav && toggle) {
toggle.addEventListener('click', () => {
const open = nav.classList.toggle('open');
toggle.setAttribute('aria-expanded', open);
});

nav.querySelectorAll('a').forEach((link) => {
link.addEventListener('click', () => {
if (window.innerWidth <= 640 && nav.classList.contains('open')) {
nav.classList.remove('open');
toggle.setAttribute('aria-expanded', 'false');
}
});
});
}

document.querySelectorAll('.link-card[data-href]').forEach((card) => {
const url = card.getAttribute('data-href');
if (!url) return;

card.addEventListener('click', (event) => {
if (event.target.tagName === 'A') return;
window.open(url, '_blank', 'noopener');
});

card.addEventListener('keydown', (event) => {
if (event.key === 'Enter' || event.key === ' ') {
event.preventDefault();
window.open(url, '_blank', 'noopener');
}
});
});

const carousel = document.querySelector('.carousel');
const track = document.querySelector('.carousel-track');
const prevBtn = document.querySelector('.carousel button.prev');
const nextBtn = document.querySelector('.carousel button.next');

if (carousel && track && prevBtn && nextBtn) {
const slides = Array.from(track.children);
let index = 0;
let autoId;
const interval = 3500;

const updateCarousel = () => {
track.style.transform = `translateX(-${index * 100}%)`;
};

const startAuto = () => {
if (slides.length < 2) return;
if (autoId) clearInterval(autoId);
autoId = setInterval(() => {
handleNext(true);
}, interval);
};

const handlePrev = (isAuto = false) => {
index = (index - 1 + slides.length) % slides.length;
updateCarousel();
if (!isAuto) startAuto();
};

const handleNext = (isAuto = false) => {
index = (index + 1) % slides.length;
updateCarousel();
if (!isAuto) startAuto();
};

prevBtn.addEventListener('click', handlePrev);
nextBtn.addEventListener('click', handleNext);

carousel.addEventListener('mouseenter', () => autoId && clearInterval(autoId));
carousel.addEventListener('mouseleave', startAuto);

updateCarousel();
startAuto();
}
})();
Loading