Une fois la géométrie, la physique et la génération des primaires définis, Geant4 simule la physique de façonsilencieuse–A vous dajouter du code pourextraire linformation qui vous intéresse
Plusieurs façons: –Lesuser hooks(G4UserSteppingAction, etc.) •Accès complet à toute linformation •Facile mais tout faire soi-même
–Définir des détecteurssensibles: assignerG4VSensitiveDetectorà un volume et en option générer des “hits” •Utiliser desuser hooks(G4UserEventAction,G4UserRunAction) pour obtenir un résumé de lévénement ou du run
–Utiliser les commandes existantes descoring •La plupart des quantités physiques sont disponibles.
2
Userhooks
Approche “faites-le vous-même”
Dans Geant4, on a accès a presque toute linformation –G4UserSteppingAction–G4UserEventAction–G4UserRunAction–G4UserTrackingAction
Bien adaptés auxpetites applications& exemples Geant4
Trop lourd pour lesapplications complexes, où de nombreuses données de nombreux volumes doivent être enregistrées: –SteppingAction trop chargé –Subdiviser le problème, avec des Sensitive Detectors
3
Principe
Dans leSteppingAction, vérifier que la particule est dans le volume A et faîtes ce dont vous avez besoin
En général, vos conteneurs et histogrammes seront des attributs deTrack,EventouRun–Ainsi il faudrainstancierTrackingActionet/ouEventActionet/ouRunAction–passer leur pointeur au SteppingAction.
Voir par exemple –examples/novice N03, N06, –extended/electromagnetic, optical, ...
4
Informationgéométrique- 1
Un objetG4Stepest constitué dedeux points: G4StepPoint* point1 = step->GetPreStepPoint(); G4StepPoint* point2 = step->GetPostStepPoint(); Pour obtenirleur position dans le système de coordonnées globales:
G4ThreeVector pos1 = point1->GetPosition(); G4ThreeVector pos2 = point2->GetPosition(); Ensuite, on appellera volume courant le volume que le step a traversé
nformation géométrique sobtient dupreStepPoint
5
Information géométrique - 2
G4VTouchableet ses dérivéesconservent linformation géométrique et la hiérarchie G4TouchableHandle touch1 = point1->GetTouchableHandle();
Pour vérifier que la particule a pénétré dans le volume courant, cad se trouve au premier step dans le volume, lepreStepPointest à la frontière (boundary) if (point1->GetStepStatus() == fGeomBoundary) Pour vérifier que la partticule quitte le volume courant , cad quelle se trouve au dernier step du volume, lepostStepPointest à la frontière (boundary)if (point2->GetStepStatus() == fGeomBoundary) Dans cette situation, on récupère letouchable du volume suivant
Pour transformerdu système de coordonnées globales au système local du volume en cours, utiliser linformation preStepPoint G4ThreeVector localPosi = touch1->GetHistory()->GetTopTransform().TransformPoint(position); 9
Et plus encore
De même dansTrackingActionon accède aux information de latrackvoid MyTrackingAction::PostUserTrackingAction(const G4Track* track) { G4double tracklen = track->GetTrackLength(); G4double charge = track->GetDefinition()->GetPDGCharge(); G4ThreeVector position = track->GetPosition(); // Cest celle du PostStepPoint
Voir dans –$G4INSTALL/source/track/include/G4Step.hh–$G4INSTALL/source/track/include/G4Track.hh–…
On peut récupérer facilement à chaque step des quantités et les cumuler sur les événements ou sur le run en utilisant desaccesseurs/enregistreursajoutés à vos classesEventActionetRunActionG4double dose = (aStep->GetTotalEnergyDeposit()/joule)/(Run->GetMassTarget()/kg); Run->AddDoseN(dose); 10
En résumé
Nécessaire décrire votre propre code pour extraire les informations qui vous intéressent Usage dehooks –Grande flexibilité (géométrie, physique) mais à réserver à un usage simple Alternativement, utilisation dedétecteurs sensiblesou deméthodes de scoring