Geant4-DNA de l’intérieur : track structure, architecture et perspectives
J’ai passé une part significative de ma thèse à écrire, compiler, déboguer et interpréter des simulations Geant4-DNA : l’extension de Geant4 dédiée à la track structure et aux dommages induits à l’échelle biologique (Meylan, 2016, projet ROSIRIS / IRSN). À l’époque, je rêvais déjà d’un article qui explique comment ça marche vraiment : pas le tutoriel « Hello World » du débutant, pas non plus le manuel de 2000 pages du CERN, mais une cartographie claire entre la physique Monte Carlo et l’architecture logicielle du toolkit. Le fil rouge reprend la chaîne multi-échelle FullSim, développée collectivement au sein du programme ROSIRIS à l’IRSN (physique, biologie, informatique) : protons et ions alpha dans le noyau d’une fibroblaste, géométrie ADN générée par DnaFabric, puis scoring SSB/DSB. J’y ai contribué lors de ma thèse, aux côtés des équipes radiobiologie et simulation de l’IRSN et de la collaboration Geant4-DNA, comme détaillé dans Meylan et al. (2017).
Geant4 (Geometry And Tracking, 4e version) est un toolkit de simulation Monte Carlo de passage de particules dans la matière. Il est maintenu par une collaboration internationale, utilisé en physique des hautes énergies, médecine nucléaire, radioprotection, imagerie, spatial. Le principe : reproduire événement par événement l’historique d’interactions d’une particule (et de ses produits) dans un détecteur modélisé en 3D. Ce n’est pas un code « boîte noire » : c’est un framework orienté objet en C++ où l’utilisateur assemble géométrie, liste de physique et actions utilisateur autour d’un noyau commun.
Vous découvrez Geant4
Lisez les encadrés En clair, le glossaire ci-dessous et les schémas animés (bouton « Lancer »). Ignorez les noms de classes au premier passage, revenez-y ensuite. Sections 1 → 3 → 4 suffisent pour comprendre l’essentiel.
Vous codez déjà avec Geant4
Allez directement au fil rouge (§1), aux §3–4 (cycle de vie, stepping), aux tableaux DoIt, aux encadrés Praticiens et à la validation (§6). Les animations reprennent la doc v11.4 (Run, Tracking).
Mini-glossaire (référence rapide)
- Run
- Campagne de simulation : même géométrie, même physique, N événements.
- Event
- Une « photo » du détecteur : une source ou un faisceau primaire (+ toute la cascade qui en découle).
- Track
- Trajectoire d’une particule (électron, photon, neutron…) du moment où elle naît jusqu’à son arrêt.
- Step
- Morceau élémentaire d’un track, entre deux interactions ou deux frontières de volume.
- GPIL
- Get Physical Interaction Length : chaque processus propose « jusqu’où puis-je aller avant d’agir ? » ; le minimum fixe la longueur du step.
- Physics list
- Ensemble des modèles physiques activés (EM, hadronique, coupes…), ex. FTFP_BERT, QGSP_BERT.
- Production cut
- Seuil sous lequel un secondaire n’est plus tracké (son énergie est déposée sur place).
- DoIt
- Méthode d’action d’un processus : AtRest, AlongStep (continu) ou PostStep (discret).
- Hit / Digit
- Hit = dépôt d’énergie simulé dans un SD ; Digit = signal électronique simplifié (ADC, bruit…) dérivé des hits.
- Track structure
- Transport événement par événement à basse énergie (eV–keV), avec sections efficaces dédiées, cœur de Geant4-DNA.
- G4_WATER
- Matériau de référence Geant4 (eau liquide NIST) pour les modèles Geant4-DNA « standard » ; FullSim étend le transport à des matériaux représentatifs de l’ADN (bases, squelette…).
Les références canoniques sont les articles de la Collaboration : Agostinelli et al. (2003, NIM A), Allison et al. (2006, IEEE TNS), Allison et al. (2016, NIM A). Pour l’état récent du toolkit, Verderi (2025, EPJ Nuclear Sci. Technol.) propose une synthèse de la décennie écoulée. La documentation applicative v11.4 et le dépôt public github.com/Geant4/geant4 sont les sources de vérité pour les noms de classes et les flux d’exécution cités ci-dessous.
1. La physique : pourquoi Monte Carlo ?
En clair : l’idée en une phrase
Geant4 ne calcule pas une équation sur toute la matière d’un coup : il simule des particules une par une, comme si vous suiviez des billes qui ricochent, perdent de l’énergie et créent d’autres particules, puis vous moyennez sur des milliers de cas identiques pour obtenir une dose, un spectre ou une efficacité.
Le transport de particules chargées ou neutres dans un milieu obéit à des lois probabilistes : une particule parcourt une certaine distance avant d’interagir, avec une probabilité décroissant exponentiellement avec la distance parcourue. Geant4 ne résout pas une équation de transport sur une grille (approche déterministe) ; il échantillonne les trajectoires une par une, en tirant aléatoirement les distances de vol libre et les types d’interaction à partir de sections efficaces microscopiques σ(E). Les formules ci-dessous reprennent la formulation de ma thèse (Meylan, 2016, §1, eq. 1.9–1.13), alignée avec l’implémentation Geant4 (Agostinelli 2003, §5).
λ = 1 / (ρ Σi fi σi / mi) (mélange)
p(s) = (1/λ) exp(−s/λ) · coupes de production sur secondaires
- F(s) : probabilité cumulée d’avoir interagi avant la distance s (Meylan 2016, eq. 1.11) ; la probabilité de parcourir s sans interaction est 1 − F(s) = exp(−s/λ).
- Tirage de s : à la création du track, puis décrémenté à chaque step via GPIL (Agostinelli 2003, §5).
- Coupes : seuils sur secondaires, pas sur les primaires ; convertis portée → énergie par matériau.
En clair
Geant4 simule des « histories » individuelles : à chaque morceau de trajectoire (step), le code demande à tous les processus physiques actifs « où est votre prochaine interaction ? » et avance jusqu’au premier événement, interaction, frontière de volume, ou limite imposée par l’utilisateur. En accumulant des milliers ou milliards d’événements identiques, on reconstruit une dose, un spectre, une efficacité de détecteur.
La hiérarchie temporelle officielle est : Run → Event → Track → Step (les processus physiques interviennent à chaque step).
géo + physique figées
primaire + cascade
de la naissance à l’arrêt
de trajectoire
Un run garde géométrie, détecteurs sensibles et processus physiques inchangés. Un event correspond à une réaction primaire (faisceau, source). Chaque particule, primaire ou secondaire, devient un track empilé puis traité par le gestionnaire de tracking.
Fil rouge : proton dans le noyau d’une fibroblaste (FullSim, thèse 2016)
Chaîne multi-échelle FullSim (programme ROSIRIS / IRSN, travail d’équipe) : application phys_geo (étape physique) + stages physico-chimique/chimique, géométrie ADN exportée par DnaFabric (.fab2g4dna), version dérivée Geant4.LDRI.01 (Geant4.10.1 + matériaux ADN). Les exemples publics (molecularDNA, électron keV) illustrent le même moteur avec un scénario plus simple.
- Géométrie DnaFabric : modèle 3D du génome humain (noyau elliptique de fibroblaste, hiérarchie nucléosome → chromatine → voxels) ; export vers Geant4 via
phys_geo. - Matériaux ADN : au-delà de
G4_WATER: sections efficaces des constituants (phosphate, 2-désoxyribose, bases…) introduites dans Geant4.LDRI.01 (électrons 12 eV–1 keV, protons 70 keV–10 MeV dans ces milieux, thèse §3.1.1) ; le transport se fait dans l’ADN, pas seulement par superposition post hoc sur une carte d’eau. - PrimaryGenerator : proton (0,5–20 MeV dans les campagnes de la thèse, TEL variable) ou ion alpha dans le volume du noyau ; un event = une particule primaire.
- Steps & cascade : le proton MeV a des steps plus longs dans le milieu ; la cascade électronique sub-keV (ordre de grandeur 50–800 eV pour les secondaires énergétiques, thèse §3.1.2) produit les steps nanométriques et remplit le stack de centaines à milliers de tracks par event.
- Dommage direct : critère de comptage dans FullSim : ionisations/excitations dans le phosphate ou la 2-désoxyribose (couche d’hydratation incluse) avec énergie déposée totale ≥ 17,5 eV → SSBdirect (Nikjoo et al. 2001) ; une méthode probabiliste alternative existe (seuil 37,5 eV, thèse §3.1.4).
- Étapes physico-chimique & chimique : après
phys_geo,extractChemInputdécoupe la sortie en binômes event/voxel (approximation : pas de diffusion inter-voxels, thèse §3.2.1) ; chaque binôme lancechem_geo(module chimie, physics listG4EmDNAChemistry, durée par défaut 2,5 ns) : solvatation, radicaux •OH, H•, eaq⁻, diffusion et réactions, SSBindirect via réactions OH• / désoxyribose (probabilité d’acceptation 42 % par défaut). - SSB → DSB :
extractSSBagrège lésions directes et indirectes ;DBScanclusterise les dommages ;postProcessDBScanconvertit en SSB/DSB (paramètres de clustering et critères SSBdirect très sensibles, thèse ch. 4). - Statistique : campagnes de milliers de primaires (ex. 1000 protons de 1 MeV → ~45 000 binômes event/voxel à traiter en
chem_geo) ; comparaison aux données expérimentales (DSB/Gy/Gbp, complexité des DSB).
Ce fil rouge montre pourquoi Geant4-DNA est exigeant : cascade électronique sub-keV à steps nanométriques, milliers de tracks par event, trois étages couplés (physique → chimie), et une géométrie moléculaire, loin des listes hadroniques du LHC. La structure logicielle reste celle de Geant4 (RunManager, stepping, stack) ; changent la physics list, les matériaux, la géométrie et la chaîne d’analyse des dommages.
Geant4-DNA : ce qui change par rapport au « Geant4 général »
Geant4-DNA n’est pas un fork : c’est un ensemble de constructeurs de physique (G4EmDNAPhysics, G4EmDNAPhysics_option2, option4, option6…) et de processus EM dédiés, intégrés au toolkit standard. La doc officielle (Physics Reference Manual, Geant4-DNA) précise : modèles adaptés à la track structure dans l’eau (et autres matériaux) jusqu’à l’échelle eV, avec possibilité de simuler la radiolyse.
Praticiens : limites du modèle proton (thèse / Geant4-DNA)
Geant4-DNA standard (v10.x) traite les protons MeV en trajectoire rectiligne : pas de diffusion élastique proton, pas d’excitations ni de changements de charge modélisés (Meylan 2016, §3.1.1). FullSim ajoute l’ionisation proton dans les matériaux ADN, mais ces approximations subsistent, à garder en tête pour l’interprétation radiobiologique et la comparaison aux ions alpha. Les constructeurs publics G4EmDNAPhysics_option* (option4, etc.) concernent surtout l’eau et les exemples récents ; FullSim s’appuie sur Geant4.LDRI.01, version dérivée non distribuée telle quelle.
- Matériau pivot :
G4_WATER(eau liquide NIST) ; comparaisons de modèles et sections efficaces publiées par le projet (Incerti et al. 2010 ; Villagrasa et al. 2010). - Particules typiques : e⁻, e⁺, protons, ions légers (H, He…) selon les constructeurs activés.
- Exemples officiels :
molecularDNA,dnadamage1, applications chimie (chem*) dansexamples/extended/dna/. - Trois étages (quand la chimie est activée) : physique (~fs) → physico-chimique → chimique (radicaux, réactions), cf. revue Tran et al., Med. Phys. 2024.
Praticiens Geant4-DNA
option4 est souvent recommandé pour les études au niveau DNA (sections efficaces d’excitation/ionisation révisées dans l’eau, modèle élastique cohérent). option2 accélère via des sections différentielles cumulées. option6 intègre le code CPA100. Ne mélangez pas une physics list LHC et Geant4-DNA dans le même volume sans maîtriser les limites d’énergie des modèles, le stepping « marche », mais la physique est fausse.
2. L’architecture logicielle : les modules du dépôt
En clair : métaphore
Pensez à Geant4 comme un atelier : le module geometry construit la maquette 3D du détecteur, materials définit le plomb, le silicium, l’air…, processes encode « que fait un photon dans le plomb ? », et tracking déplace les particules step par step. Votre code applicatif branche ces briques via le run manager.
Le code source Geant4 est organisé en catégories CMake sous source/. Chaque catégorie compile en bibliothèque liée au toolkit. L’ordre de dépendance conceptuel (Introduction to Geant4, OO Analysis Design) est :
global / materials / particles → geometry → track / processes / tracking → event → run, avec des catégories transverses (visualization, persistency, interfaces, intercoms, analysis).
02 · Architecture source/
Les catégories du toolkit
Survolez une carte pour la mettre en avant. Le carrousel parcourt les modules du dépôt public Geant4.
Géométrie et matériaux
La géométrie sépare solides (G4VSolid : la forme), volumes logiques (G4LogicalVolume : forme + matériau + attributs) et volumes physiques (G4VPhysicalVolume : où ce volume est placé dans l’arbre). Le G4Navigator calcule, à chaque step, la distance à la frontière du volume courant (safety) et assure qu’aucun step ne traverse une paroi. G4GeometryManager verrouille la géométrie après construction (closing) et déclenche l’optimisation (voxelisation G4SmartVoxelHeader).
Volume logique vs physique : un même bloc de silicium (logique) peut être répliqué dix fois à dix endroits (dix volumes physiques), même matériau, mêmes processus, positions différentes.
Particules et processus
Chaque type de particule est une instance G4ParticleDefinition (masse, charge, statistiques). Les processus héritent de G4VProcess et s’enregistrent sur les particules via G4ProcessManager. La documentation officielle distingue sept grandes catégories : électromagnétique, hadronique, désintégration, photolepton-hadron, optique, paramétrisation et transportation.
Les listes de physique modulaires (G4VModularPhysicsList) assemblent des constructeurs G4VPhysicsConstructor. Les listes de référence (FTFP_BERT, QGSP_BERT, QBBC…) sont dans source/physics_lists/. L’utilisateur peut aussi dériver G4VUserPhysicsList entièrement.
Les trois DoIt : comment Geant4 classe les interactions
Chaque G4VProcess implémente une ou plusieurs des trois familles d’actions documentées (Physics Processes, Application Developer Guide) :
| Type | Quand | Exemples | Rôle dans le step |
|---|---|---|---|
| AtRestDoIt | Particule à l’arrêt (KE = 0) | Annihilation e⁺e⁻, capture, désintégration au repos | Step en temps, pas en distance |
| AlongStepDoIt | À chaque step, pour tous les processus continus actifs | Ionisation, multiple diffusion, transportation, perte d’énergie | Met à jour énergie / direction le long du segment |
| PostStepDoIt | Fin de step, si un processus discret a limité le GPIL | Bremsstrahlung, photoeffet, ionisation (Geant4-DNA), interaction hadronique, decay in flight | Crée des secondaires, change l’état du track |
Distinction clé pour lire une simulation : les processus continus (AlongStep) agissent à chaque morceau de trajectoire ; les processus discrets (PostStep) « gagnent » un step entier quand leur GPIL est le plus court. Le transportation est un AlongStep continu qui gère la propagation géométrique, il doit être ordonné en dernier dans la liste des processus AlongStep (Multiple Scattering juste avant), convention documentée dans le Toolkit Developer Guide.
Champs, limites utilisateur, matériaux
ConstructSDandField() attache aussi les champs (G4MagneticField, électrique…) via G4FieldManager : la courbure des trajectoires chargées est calculée par le transportation et les processus EM. Les G4UserLimits sur un volume logique imposent une longueur de step max, utile en calorimétrie GeV, ou en Geant4-DNA pour contraindre le transport dans des géométries cellulaires / voxels nanométriques.
Côté matériaux, la base NIST (G4NistManager) fournit eau, air, Si, W, Pb… avec compositions et densités standardisées. À l’initialisation, chaque couple matériau/coupe est encapsulé dans un G4MaterialCutsCouple : c’est ce qui permet de convertir une cut en portée en seuil énergétique propre à chaque milieu.
Praticiens
Le choix de physics list n’est pas cosmétique : il fixe les modèles hadroniques (FTF vs QGS), la précision EM (standard vs option4), les coupes par défaut et parfois des extensions (optical, DNA, radioactivité). Toujours documenter la liste utilisée dans les publications.
3. Structurer une simulation : main(), Initialize(), BeamOn()
En clair : la recette minimale
Toute application Geant4 ressemble à une recette en quatre temps : (1) créer le chef d’orchestre G4RunManager, (2) déclarer qui construit le détecteur, quelle physique et quoi enregistrer, (3) lancer Initialize() pour tout préparer, (4) lancer BeamOn(N) pour simuler N événements. C’est tout le squelette, le reste est du détail dans les classes utilisateur.
Point d’entrée côté utilisateur : instancier G4RunManager (sequential) ou G4MTRunManager (multithread), enregistrer trois initialisations obligatoires via SetUserInitialization(), puis appeler Initialize() et BeamOn(nEvents). Les classes ci-dessous sont enregistrées avant Initialize() ; leur code de construction s’exécute surtout pendant Initialize().
G4VUserDetectorConstruction:Construct(),ConstructSDandField()G4VUserPhysicsList: particules, processus,SetCuts()G4VUserActionInitialization: fabrique les actions utilisateur (Build(),BuildForMaster()en MT)
Geant4 est une machine à états (G4ApplicationState) : PreInit → Init → Idle → GeomClosed → EventProc → Quit (ou Abort). Certaines méthodes ne sont valides que dans un état donné, par exemple GetCurrentEvent() uniquement en EventProc.
03 · Cycle de vie
De main() au scoring
Animation du flux officiel (Book For Application Developers, Run). Chaque carte correspond à une étape documentée du noyau Geant4.
Actions utilisateur
Dans G4VUserActionInitialization::Build(), on enregistre via SetUserAction() :
- Obligatoire :
G4VUserPrimaryGeneratorAction(GeneratePrimaries) - Optionnelles :
G4UserRunAction,G4UserEventAction,G4UserStackingAction,G4UserTrackingAction,G4UserSteppingAction
En multithreading, G4MTRunManager crée des G4WorkerRunManager par fil ; les événements sont distribués first-come-first-served. La reproductibilité repose sur G4RNGHelper et des seeds pré-assignés (moteur par défaut recommandé en MT : MixMaxRng via CLHEP).
Empilement des tracks, le rôle du stack
Un event ne se réduit pas au primaire. Quand un processus PostStep crée des secondaires, ceux-ci sont d’abord stockés puis injectés dans le G4StackManager. Trois piles existent (urgent, waiting, postponed) ; par défaut les secondaires urgents sont traités avant de reprendre le track parent, sauf si vous surchargez G4UserStackingAction pour prioriser (ex. optiques avant chargés, ou l’inverse pour perf).
Boucle interne d’un event (G4EventManager::ProcessOneEvent) : tant que le stack n’est pas vide, pop track → ProcessOneTrack → nouveaux secondaires repushés → repeat. En Geant4-DNA, un proton MeV ou un électron keV peut générer une forêt de tracks sub-keV, d’où le coût CPU de la track structure (dans FullSim, ~45 000 sous-simulations chem_geo pour 1000 protons de 1 MeV dans un noyau de fibroblaste).
Générateurs de primaires
La classe obligatoire G4VUserPrimaryGeneratorAction encapsule typiquement :
G4ParticleGun: particule, énergie, direction, vertex simples (tests, éducation)G4GeneralParticleSource(GPS), distributions spatiales et spectrales flexibles via macroG4HEPEvtInterface: lecture d’events pré-générés (générateurs externes, HepMC…)
Praticiens : Initialize() en détail
Initialize() déclenche successivement : construction géométrie (Construct, ConstructSDandField), enregistrement particules/processus (ConstructParticle, ConstructProcess), calcul des tables de sections efficaces, conversion des range cuts en seuils d’énergie (SetCuts), fermeture du navigator. Modifier la géométrie ou les cuts entre deux runs impose GeometryHasBeenModified() ou CutOffHasBeenModified() : sinon le kernel travaille avec un état incohérent.
4. Le cœur du transport : la boucle de stepping
En clair : un step, en quatre mots
Proposer (qui agit en premier et à quelle distance ?) → Avancer (pertes d’énergie continues) → Interagir (création de secondaires si un processus discret gagne) → Enregistrer (détecteur, hooks utilisateur). Puis on recommence jusqu’à ce que la particule s’arrête ou sorte du monde.
C’est ici que la physique rencontre l’informatique. G4TrackingManager::ProcessOneTrack() délègue à G4SteppingManager::Stepping() une boucle de steps jusqu’à l’arrêt du track (fin d’énergie, sortie du monde, kill utilisateur).
Version condensée de l’algorithme (Application Developer Guide, Tracking ; Agostinelli 2003 §5) :
- GPIL + Navigator : tous les processus proposent une longueur de step ; le navigator impose que l’on ne traverse pas une paroi ; on retient le minimum.
- AlongStepDoIt : tous les processus continus actifs mettent à jour énergie et direction.
- PostStepDoIt : seul le processus discret gagnant peut créer une interaction « ponctuelle » et des secondaires.
- Secondaires, frontière, hits, utilisateur : coupes de production, passage de volume, détecteur sensible,
G4UserSteppingAction: puis step suivant.
Algorithme complet (10 points, doc officielle Tracking)
- Si énergie cinétique nulle → processus AtRest (step en temps).
- GPIL, chaque processus discret ou continu propose une longueur ; minimum retenu.
- Navigator, comparaison avec la safety ; step = min(physique, géométrie).
- AlongStepDoIt, tous les processus continus actifs, quel que soit le limitant.
- Mise à jour du track et stockage des secondaires.
- PostStepDoIt, uniquement pour le processus discret limitant.
- Filtre des secondaires sous les coupes de production.
- Passage de frontière si step limité par la géométrie.
G4VSensitiveDetector::ProcessHitssi volume sensible.- SteppingAction, trajectoire, parcours optiques / interaction lengths.
Praticiens : piège fréquent
Le processus qui limite le step déclenche le PostStepDoIt discret, mais tous les AlongStepDoIt continus s’exécutent quand même. Confondre les deux mène à des diagnostics erronés sur l’ionisation ou la multiple diffusion.
04 · Stepping
Un step, vue simplifiée
Animation pédagogique de la boucle G4SteppingManager::Stepping() (l’ordre exact GPIL ↔ Navigator est itératif dans le code). Huit jalons principaux.
min step
continu
discret
cuts
safety
volume
Detector
Action
Un step Geant4, ce n’est pas « avancer d’un millimètre » : c’est résoudre une course entre processus, géométrie et utilisateur.
5. Détecteurs, hits et scoring
En clair
Geant4 calcule des trajectoires ; vous choisissez ce qu’on mesure. Soit vous attachez un « capteur » à un volume (détecteur sensible : énergie déposée, position…), soit vous activez le scoring par commandes pour des cartes de dose ou des sondes, sans réécrire tout un SD.
Deux voies complémentaires pour extraire des observables :
Dans la chaîne FullSim (fil rouge), les SSB/DSB ne passent pas par un détecteur sensible Geant4 classique : elles sont extraites en post-traitement (extractSSB, clustering DBScan, postProcessDBScan) à partir des fichiers produits par phys_geo et chem_geo. Le mécanisme Geant4 sous-jacent (steps → énergie déposée) reste identique ; seule la couche d’analyse change.
- Détecteurs sensibles : classe dérivée de
G4VSensitiveDetector, associée à unG4LogicalVolume;ProcessHits(G4Step*, G4TouchableHistory*)remplit uneG4VHitsCollection. Registre central :G4SDManager. - Scoring par commandes :
G4ScoringManager::GetScoringManager()active le scoring UI (/score/...), meshes, sondes, mondes parallèles. - Multi-functional detector :
G4MultiFunctionalDetector+ primitifsG4VPrimitiveScorerpour plusieurs quantités dans le même volume.
En multithread, un G4Run dérivé peut surcharger RecordEvent() (local au worker) et Merge() (fusion master) pour accumuler des observables thread-safe.
De la simulation au signal, hits, digits, analyse
Dans une chaîne réaliste de reconstruction, Geant4 sépare plusieurs niveaux (Book For Application Developers, Hits and Digitization) :
- Step : dépôt d’énergie physique dans un volume (
G4Step::GetTotalEnergyDeposit()). - Hit : agrégat par détecteur sensible (
G4VHitsCollection) : position, temps, énergie par cellule. - Digit : optionnel :
G4Digitizer/ modules dérivés simulent ADC, bruit, seuil, pile-up (G4VDigitCollection). - Analyse :
G4AnalysisManager(ROOT, CSV…) ou code utilisateur dansEndOfEventAction/EndOfRunAction.
Le scoring par commandes (/score/) court-circuite parfois la chaîne hits/digits pour des cartes de dose rapides, utile en radioprotection, moins pour un calorimètre avec électronique réaliste.
Praticiens : lire un step correctement
Ne confondez pas GetDeltaEnergy() (changement d’énergie cinétique du track) et GetTotalEnergyDeposit() (énergie cédée au milieu, incluant secondaires non créés sous la cut). Pour la dosimétrie, c’est le dépôt total qui compte. Les secondaires créés pendant le step apparaissent dans G4Step::GetSecondaryInCurrentStep() : mais tous les secondaires du track peuvent aussi être listés via le stepping manager.
6. Coupes, précision et coût calcul
En clair : les coupes, sans confusion
Les coupes de production disent : « si cette particule secondaire est trop faible, ne perds pas de temps à la suivre, dépose son énergie ici. » Ce n’est pas un arrêt des particules primaires. Geant4, par défaut, suit les primaires jusqu’à l’arrêt (sauf si vous ajoutez vous-même un processus de kill).
Distinction essentielle (FAQ Physics and cuts, Physics Reference Manual, SetCuts) :
- Production cuts : seuils sur secondaires (γ, e±, protons) ; énergie déposée localement si sous le seuil. Définis en portée (
defaultCutValue, typiquement ~0,7–1 mm dans les listes de référence), convertis en énergie par matériau à l’initialisation. - Pas de tracking cut par défaut : les primaires sont suivis jusqu’à arrêt (sauf processus utilisateur explicite).
- Geant4-DNA, seuils spécifiques : en track structure, des seuils d’énergie par espèce remplacent les production cuts « millimétriques » des listes GeV (ex. arrêt des électrons sous un seuil, énergie déposée localement ou passage au stage chimique via solvatation). Ne pas recopier les
defaultCutValued’une physics list LHC.
Le compromis performance / précision se joue sur les coupes, la granularité géométrique, le choix de liste de physique (EM standard vs option4, modèle hadronique FTFP vs QGSP…) et le nombre d’événements (loi en 1/√N sur les incertitudes statistiques).
Valider une simulation, ce qui manque souvent dans les tutos
Geant4 ne garantit pas la justesse physique par la compilation. Une simulation crédible en thèse ou en production repose sur une validation explicite :
- Benchmarks internes : exemples
extended/dna/, comparaison aux modèles publiés par le projet Geant4-DNA (Incerti et al. 2010) ; pour FullSim, comparaison DSB/Gy/Gbp sur noyau de fibroblaste (Meylan 2016, ch. 4 ; Meylan et al. 2017, données PFGE). - Particule de référence : électron 100 eV–10 keV dans
G4_WATER(tests toolkit) ; proton 0,5–20 MeV dans un noyau modélisé (validation radiobiologique de la thèse). - Conservation : bilan énergétique event par event (primaire = dépôts + secondaires échappés + énergie restante) ; écarts systématiques signalent souvent une géométrie mal fermée ou une cut mal choisie.
- Convergence statistique : relancer avec 10× plus d’events ; si la observable bouge encore significativement, le résultat n’est pas convergé.
- Traçabilité : version Geant4, physics list, cuts, seed RNG, géométrie (GDML hash) dans chaque jeu de résultats, condition sine qua non pour reproduire un chiffre six mois plus tard.
Praticiens : où ça casse en pratique
Top 5 des sources d’erreur en usage réel : (1) physics list « LHC » au lieu d’un constructeur G4EmDNAPhysics_option* ; (2) matériau incompatible avec les modèles DNA (eau seule vs constituants ADN) ; (3) confusion production cuts GeV / seuils de tracking DNA ; (4) géométrie DNA chevauchée ou unités (nm vs mm) ; (5) chimie activée sans maîtriser les paramètres (/scheduler/endTime, scavenging, /dnageom/radicalKillDistance…). La doc de référence est sur geant4-dna.org.
7. Perspectives : PINNs, surrogates et fast simulation
En clair : deux familles d’accélération
Fast simulation (Geant4) : un réseau de neurones apprend à imiter les sorties de Geant4 sur des gerbes déjà simulées (ex. Par04), rapide, mais data-driven.
PINNs : un réseau apprend à satisfaire une équation de transport, prometteur pour des problèmes continus (neutrons, radiatif), pas encore standard pour remplacer le stepping Geant4 complet.
Geant4 est précis et flexible, mais coûteux en CPU pour les gerbes électromagnétiques ou hadroniques détaillées. Deux familles d’accélération émergent, qu’il faut distinguer clairement.
Ce que fait déjà la Collaboration Geant4
La voie officielle d’accélération par apprentissage passe par la fast simulation générative : remplacer certaines étapes coûteuses (ex. développement de gerbe calorimétrique) par un modèle entraîné sur des sorties Geant4. Depuis Geant4 v11.0, l’exemple Par04 (examples/extended/parameterisations/Par04/) montre un autoencodeur variationnel (VAE) avec inférence ONNX Runtime, LWTNN ou libTorch. Le groupe R&D G4RD7 et la ressource g4fastsim.web.cern.ch structurent cette intégration. Verderi (2025, EPJ N 11, 66) consacre une section à l’IA pour la simulation de gerbes, ce sont des surrogates data-driven, pas des PINNs au sens strict.
Les PINNs et l’équation de transport
Les Physics-Informed Neural Networks (Raissi, Perdikaris & Karniadakis, J. Comput. Phys. 2019) entraînent un réseau à satisfaire simultanément des données et le résidu d’une équation aux dérivées partielles, en gros, la physique est une contrainte d’entraînement, pas seulement les mesures.
Pour le transport, des travaux ciblent l’équation de transport linéaire de Boltzmann ou l’équation de transfert radiatif :
- Mishra & Molinaro (2021, JQSRT), PINNs pour transfert radiatif
- Huhn, Tano & Ragusa (2023, Nucl. Sci. Eng.), PINN avec features de Fourier pour transport en milieu hétérogène, couplé à une itération sur le facteur d’Eddington
- Biswal et al. (2025, JQSRT), RTE absorbante-diffusante
Ces approches résolvent une formulation déterministe (flux moyen, intensité angulaire) sur un domaine continu. Geant4, lui, simule des trajectoires stochastiques discrètes avec modèles hadroniques, coupes, secondaires, un espace de phase de dimension très élevée. À ma connaissance, il n’existe pas encore de publication établie couplant directement PINNs et le stepping Geant4 pour remplacer le noyau de transport.
Piste de recherche
Les PINNs pourraient accélérer des sous-problèmes bien posés : diffusion de neutrons basse énergie, transport 1D/2D de validation, inversions de source. Pour une gerbe hadronique complète, les surrogates génératifs entraînés sur Geant4 (Par04, modèles CaloDiT intégrés dans cet exemple depuis v11.x) restent aujourd’hui la voie la plus mature côté Collaboration. L’enjeu pour les PINNs : encoder des sections efficaces discontinues en énergie, les interfaces matériaux, et garantir la conservation locale de l’énergie, contraintes physiques que Raissi et al. ont popularisées mais qui restent ouvertes en haute dimension.
Chez IMPROBA, nous suivons ces deux fronts : l’accélération GPU de modèles déterministes (chimie-transport, CFD…) et l’exploration de surrogates pour les codes Monte Carlo lourds. Geant4-DNA m’a appris que la crédibilité d’une simulation ne tient pas à la vitesse du binaire, mais à la traçabilité physique de chaque step, à l’échelle nanométrique comme au GeV, une leçon que tout accélérateur, PINN ou réseau de neurones, devra respecter.
Références
- S. Agostinelli et al. (Geant4 Collaboration), « Geant4, a simulation toolkit », Nucl. Instrum. Meth. A 506 (2003) 250–303. doi:10.1016/S0168-9002(03)01368-8
- J. Allison et al., « Geant4 Developments and Applications », IEEE Trans. Nucl. Sci. 53 (2006) 270–278. doi:10.1109/TNS.2006.869826
- J. Allison et al., « Recent developments in Geant4 », Nucl. Instrum. Meth. A 835 (2016) 186–225. doi:10.1016/j.nima.2016.06.125
- M. Verderi (Geant4 Collaboration), « The Geant4 software toolkit evolution over the past decade », EPJ Nuclear Sci. Technol. 11 (2025) 66. doi:10.1051/epjn/2025047
- Geant4 Collaboration, Book For Application Developers v11.4, Run, Tracking, Physics Processes. geant4-userdoc.web.cern.ch
- Geant4 source tree,
source/categories. github.com/Geant4/geant4 - M. Raissi, P. Perdikaris, G.E. Karniadakis, « Physics-informed neural networks… », J. Comput. Phys. 378 (2019). doi:10.1016/j.jcp.2018.10.045
- Q.A. Huhn, M.E. Tano, J.C. Ragusa, « Physics-Informed Neural Network with Fourier Features for Radiation Transport in Heterogeneous Media », Nucl. Sci. Eng. 197 (2023). doi:10.1080/00295639.2023.2184194
- S. Mishra, R. Molinaro, « Physics informed neural networks for simulating radiative transfer », J. Quant. Spectrosc. Radiat. Transfer 270 (2021). doi:10.1016/j.jqsrt.2021.107705
- S. Meylan, « Développement d’un outil de simulation multi-échelle adapté au calcul des dommages radio-induits précoces dans des cellules exposées à des irradiations d’ions légers (proton et alpha) », thèse de doctorat, Université de Bordeaux, 2016. tel-01420743
- S. Meylan, S. Incerti, M. Karamitros, N. Tang, M. Bueno, I. Clairand et C. Villagrasa, « Simulation of early DNA damage after the irradiation of a fibroblast cell nucleus using Geant4-DNA », Sci. Rep. 7 (2017) 11923. doi:10.1038/s41598-017-11851-4
- H.N. Tran et al., « Review of chemical models and applications in Geant4-DNA: Report from the ESA BioRad III Project », Med. Phys. 51 (2024) 5873–5889. doi:10.1002/mp.17256
- P. Biswal et al., « Physics informed neural networks to solve radiative transfer equation in absorbing-scattering media », J. Quant. Spectrosc. Radiat. Transfer 344 (2025) 109509. doi:10.1016/j.jqsrt.2025.109509
- S. Incerti et al., « The Geant4-DNA project », Int. J. Model. Simul. Sci. Comput. 1 (2010). doi:10.1142/S1793962310000122
- C. Villagrasa, Z. Francis et S. Incerti, « Physical models implemented in the GEANT4-DNA extension… », Radiat. Prot. Dosim. 143 (2010) 214–218. doi:10.1093/rpd/ncq067
- H. Nikjoo et al., « Biophysical modelling of radiation damage », Int. J. Radiat. Biol. 77 (2001) 1053–1074. doi:10.1080/09553000110073527
- S. Incerti et al., « Geant4-DNA example applications for track structure simulations in liquid water », Med. Phys. 45 (2018) e722–e739. doi:10.1002/mp.13048
- Geant4-DNA, Physics Reference Manual & geant4-dna.org
- Geant4 Par04 example, fast calorimeter simulation. Documentation Par04