+ All Categories
Home > Documents > UFRO Master Fisica Medica 5 3 Geant4

UFRO Master Fisica Medica 5 3 Geant4

Date post: 01-Feb-2016
Category:
Upload: toro-garcia
View: 228 times
Download: 1 times
Share this document with a friend
Description:
GEANT4
Popular Tags:
45
Objeti vos: Comprender como se estructuran programas que simulan procesos basados en Geant4. 1 5. Técnicas de Simulación 3. Geant4 www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09 Dr. Willy H. Gerber Instituto de Fisica Universidad Austral Valdivia, Chile
Transcript
Page 1: UFRO Master Fisica Medica 5 3 Geant4

Objetivos: Comprender como se estructuran programas que simulan procesos basados en Geant4.

1

5. Técnicas de Simulación3. Geant4

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Dr. Willy H. GerberInstituto de Fisica

Universidad AustralValdivia, Chile

Page 2: UFRO Master Fisica Medica 5 3 Geant4

Estructura de archivos

2www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Demo

Include

src

MainDemo.cc

ExPrimaryGeneratorAction.hh

ExDetectorConstruction.hh

ExPhysicsList.hh

ExPrimaryGeneratorAction.cc

ExDetectorConstruction.cc

ExPhysicsList.cc

Page 3: UFRO Master Fisica Medica 5 3 Geant4

Programas Geant4

3www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Includesnecesarios

SetearrunManager

int main(int argc,char** argv) {

DefinirOutput

delete visManager; delete runManager; return 0; }

EjecutarProceso

Page 4: UFRO Master Fisica Medica 5 3 Geant4

Estructuras a incluir

4

#include "G4RunManager.hh" #include "G4UImanager.hh" #include "G4UIterminal.hh" #include "G4VisExecutive.hh"

#include "ExDetectorConstruction.hh" #include "ExPhysicsList.hh" #include "ExPrimaryGeneratorAction.hh“

#include “ExRunAction.hh" #include “ExEventAction.hh" #include “ExSteppingAction.hh"

#include “G4templates.hh"

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 5: UFRO Master Fisica Medica 5 3 Geant4

Inicialización runManager - Clases

5

G4RunManager* runManager = new G4RunManager;

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Construction del runManager

Clases obligatorias de inicialización

runManager->SetUserInitialization(new ExDetectorConstruction); runManager->SetUserInitialization(new ExPhysicsList);

Clases obligatorias respecto de accionesrunManager->SetUserAction(new ExPrimaryGeneratorAction);runManager->SetUserAction(new ExRunAction); runManager->SetUserAction(new ExEventAction); runManager->SetUserAction(new ExSteppingAction);

Page 6: UFRO Master Fisica Medica 5 3 Geant4

Inicializacion runManager

6www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Inicializacion el sistema

runManager->Initialize();

G4VisManager* visManager = new G4VisExecutive; visManager->Initialize();

G4UImanager* UI = G4UImanager::GetUIpointer();

UI->ApplyCommand("/run/verbose 1"); UI->ApplyCommand("/event/verbose 1"); UI->ApplyCommand("/tracking/verbose 1");

Inicializacion …

Inicializacion del Display

Page 7: UFRO Master Fisica Medica 5 3 Geant4

Ejecutar

7

int numberOfEvent = 3; runManager->BeamOn(numberOfEvent);

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Ejecución

if(argc==1) // Define (G)UI terminal for interactive mode { G4UIsession * session = new G4UIterminal; UI->ApplyCommand("/control/execute prerun.g4mac"); session->sessionStart(); delete session; } else // Batch mode { G4String command = "/control/execute "; G4String fileName = argv[1]; UI->ApplyCommand(command+fileName); }

Page 8: UFRO Master Fisica Medica 5 3 Geant4

Includes y Subrutinas

Includes y Subrutinas

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 9: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 10: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Crear caja (volumen World)Crear cilindro

Crear volumen lógico para cajaCrear volumen lógico para cilindro

Posicionar cilindroPosicionar caja

Lógica de la rutina con solo 2 elementos

Page 11: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4double expHall_x = 3.0*m; G4double expHall_y = 1.0*m; G4double expHall_z = 1.0*m;

G4Box* experimentalHall_box = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);

G4double innerRadiusOfTheTube = 0.*cm; G4double outerRadiusOfTheTube = 60.*cm; G4double hightOfTheTube = 25.*cm; G4double startAngleOfTheTube = 0.*deg; G4double spanningAngleOfTheTube = 360.*deg;

G4Tubs* tracker_tube = new G4Tubs("tracker_tube", innerRadiusOfTheTube, outerRadiusOfTheTube, hightOfTheTube, startAngleOfTheTube, spanningAngleOfTheTube);

Crear caja – clase G4Box (volumen World)

Crear cilindro – clase G4Tubs

Page 12: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4LogicalVolume* experimentalHall_log = new G4LogicalVolume(experimentalHall_box,Ar,"expHall_log");

G4LogicalVolume* tracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log");

G4double trackerPos_x = -1.0*meter; G4double trackerPos_y = 0.0*meter; G4double trackerPos_z = 0.0*meter;

G4VPhysicalVolume* tracker_phys = new G4PVPlacement(0, // no rotation G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z), // translation position tracker_log, // its logical volume "tracker", // its name experimentalHall_log, // its mother (logical) volume false, // no boolean operations 0); // its copy number

Crear volumen lógico para caja – clase G4LogicalVolume

Crear volumen lógico para cilindro – clase G4LogicalVolume

Posicionar cilindroc

Page 13: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4VPhysicalVolume* experimentalHall_phys = new G4PVPlacement(0, // no rotation G4ThreeVector(0.,0.,0.), // translation position experimentalHall_log, // its logical volume "expHall", // its name 0, // its mother volume false, // no boolean operations 0); // its copy number

Posicionar caja – clase G4LogicalVolume

Page 14: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Elementos

G4double density = 1.390*g/cm3; G4double a = 39.95*g/mole; G4Material* lAr = new G4Material(name="liquidArgon", z=18., a, density);

G4LogicalVolume* myLbox = new G4LogicalVolume(aBox,lAr,"Lbox",0,0,0);

Material (directo)

a = 1.01*g/mole; G4Element* elH = new G4Element(name="Hydrogen",symbol="H" , z= 1., a); a = 16.00*g/mole; G4Element* elO = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a); density = 1.000*g/cm3;

G4Material* H2O = new G4Material(name="Water",density,ncomponents=2); H2O->AddElement(elH, natoms=2); H2O->AddElement(elO, natoms=1);

Material (compuesto desde elementos, por numero de elementos)

Page 15: UFRO Master Fisica Medica 5 3 Geant4

ExDetectorConstruction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Elementos

a = 14.01*g/mole; G4Element* elN = new G4Element(name="Nitrogen",symbol="N" , z= 7., a); a = 16.00*g/mole; G4Element* elO = new G4Element(name="Oxygen" ,symbol="O" , z= 8., a);

density = 1.290*mg/cm3;G4Material* Air = new G4Material(name="Air ",density,ncomponents=2); Air->AddElement(elN, fractionmass=70*perCent); Air->AddElement(elO, fractionmass=30*perCent);

Material (compuesto desde elementos, por fracción de átomos)

Page 16: UFRO Master Fisica Medica 5 3 Geant4

class G4LogicalVolume;class G4VPhysicalVolume;

#include "G4VUserDetectorConstruction.hh"

class ExDetectorConstruction : public G4VUserDetectorConstruction{ public:

ExDetectorConstruction(); ~ExDetectorConstruction();

G4VPhysicalVolume* Construct();

ExDetectorConstruction.hh – primer parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 17: UFRO Master Fisica Medica 5 3 Geant4

private: // Logical volumes // G4LogicalVolume* experimentalHall_log; G4LogicalVolume* tracker_log; G4LogicalVolume* calorimeterBlock_log; G4LogicalVolume* calorimeterLayer_log;

// Physical volumes // G4VPhysicalVolume* experimentalHall_phys; G4VPhysicalVolume* calorimeterLayer_phys; G4VPhysicalVolume* calorimeterBlock_phys; G4VPhysicalVolume* tracker_phys;};

ExDetectorConstruction.hh – segunda parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 18: UFRO Master Fisica Medica 5 3 Geant4

#include "ExDetectorConstruction.hh"

#include "G4Material.hh"#include "G4Box.hh"#include "G4Tubs.hh"#include "G4LogicalVolume.hh"#include "G4ThreeVector.hh"#include "G4PVPlacement.hh"#include "globals.hh"

ExDetectorConstruction::ExDetectorConstruction() : experimentalHall_log(0), tracker_log(0), calorimeterBlock_log(0), calorimeterLayer_log(0), experimentalHall_phys(0), calorimeterLayer_phys(0), calorimeterBlock_phys(0), tracker_phys(0){;}

ExDetectorConstruction::~ExDetectorConstruction(){}

ExDetectorConstruction.cc – primera parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 19: UFRO Master Fisica Medica 5 3 Geant4

G4VPhysicalVolume* ExN01DetectorConstruction::Construct(){

//------------------------------------------------------ materials

G4double a; // atomic mass G4double z; // atomic number G4double density;

G4Material* Ar = new G4Material("ArgonGas", z= 18., a= 39.95*g/mole, density= 1.782*mg/cm3);

G4Material* Al = new G4Material("Aluminum", z= 13., a= 26.98*g/mole, density= 2.7*g/cm3);

G4Material* Pb = new G4Material("Lead", z= 82., a= 207.19*g/mole, density= 11.35*g/cm3);

ExDetectorConstruction.cc – segunda parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 20: UFRO Master Fisica Medica 5 3 Geant4

//------------------------------------------------------ volumes

//------------------------------ experimental hall (world volume) //------------------------------ beam line along x axis

G4double expHall_x = 3.0*m;G4double expHall_y = 1.0*m;G4double expHall_z = 1.0*m;

G4Box* experimentalHall_box = new G4Box("expHall_box",expHall_x,expHall_y,expHall_z);experimentalHall_log = new G4LogicalVolume(experimentalHall_box, Ar,"expHall_log",0,0,0);experimentalHall_phys = new G4PVPlacement(0,G4ThreeVector(), experimentalHall_log,"expHall",0,false,0);

ExDetectorConstruction.cc – tercera parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 21: UFRO Master Fisica Medica 5 3 Geant4

//------------------------------ a tracker tube

G4double innerRadiusOfTheTube = 0.*cm; G4double outerRadiusOfTheTube = 60.*cm; G4double hightOfTheTube = 50.*cm; G4double startAngleOfTheTube = 0.*deg; G4double spanningAngleOfTheTube = 360.*deg;

G4Tubs* tracker_tube = new G4Tubs("tracker_tube",innerRadiusOfTheTube, outerRadiusOfTheTube,hightOfTheTube, startAngleOfTheTube,spanningAngleOfTheTube); tracker_log = new G4LogicalVolume(tracker_tube,Al,"tracker_log",0,0,0);

G4double trackerPos_x = -1.0*m; G4double trackerPos_y = 0.*m; G4double trackerPos_z = 0.*m;

tracker_phys = new G4PVPlacement(0, G4ThreeVector(trackerPos_x,trackerPos_y,trackerPos_z), tracker_log,"tracker",experimentalHall_log,false,0);

ExDetectorConstruction.cc – cuarta parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 22: UFRO Master Fisica Medica 5 3 Geant4

//------------------------------ a calorimeter block

G4double block_x = 1.0*m; G4double block_y = 50.0*cm; G4double block_z = 50.0*cm;

G4Box* calorimeterBlock_box = new G4Box("calBlock_box",block_x, block_y,block_z); calorimeterBlock_log = new G4LogicalVolume(calorimeterBlock_box, Pb,"caloBlock_log",0,0,0);

G4double blockPos_x = 1.0*m; G4double blockPos_y = 0.0*m; G4double blockPos_z = 0.0*m;

calorimeterBlock_phys = new G4PVPlacement(0, G4ThreeVector(blockPos_x,blockPos_y,blockPos_z), calorimeterBlock_log,"caloBlock", experimentalHall_log,false,0);

ExDetectorConstruction.cc – quinta parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 23: UFRO Master Fisica Medica 5 3 Geant4

//------------------------------ calorimeter layers (20 elements) G4double calo_x = 1.*cm; G4double calo_y = 40.*cm; G4double calo_z = 40.*cm;

G4Box* calorimeterLayer_box = new G4Box("caloLayer_box“, calo_x,calo_y,calo_z); calorimeterLayer_log = new G4LogicalVolume(calorimeterLayer_box, Al,"caloLayer_log",0,0,0);

for(G4int i=0;i<19;i++) // loop for 19 layers { G4double caloPos_x = (i-9)*10.*cm; G4double caloPos_y = 0.0*m; G4double caloPos_z = 0.0*m; calorimeterLayer_phys = new G4PVPlacement(0, G4ThreeVector(caloPos_x,caloPos_y,caloPos_z), calorimeterLayer_log,"caloLayer",calorimeterBlock_log,false,i); }

//------------------------------------------------------------------ return experimentalHall_phys;}

ExDetectorConstruction.cc – sesta parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 24: UFRO Master Fisica Medica 5 3 Geant4

ExPhysicsList

ExPhysicsList

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 25: UFRO Master Fisica Medica 5 3 Geant4

Definición de partículas

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4StringG4doubleG4doubleG4doubleG4doubleG4doubleG4intG4intG4doubleG4doubleG4intG4StringG4StringG4intG4intG4intG4int

GetParticleName() GetPDGMass()GetPDGWidth()GetPDGCharge()GetPDGSpin()GetPDGMagneticMoment()GetPDGiParity()GetPDGiConjugation()GetPDGIsospin()GetPDGIsospin3()GetPDGiGParity()GetParticleType()GetParticleSubType()GetLeptonNumber()GetBaryonNumber()GetPDGEncoding()GetAntiPDGEncoding()

particle namemass decay width electric charge spin magnetic moment (a) parity (b) charge conjugation (b) iso-spin 3rd-component of iso-spin G-parity (0:not defined) particle type particle sub-type lepton number baryon number particle encoding number by PDG encoding for anti-particle of this particle

a: 0: not defined or no mag. Momentb: 0:not defined

Page 26: UFRO Master Fisica Medica 5 3 Geant4

Definición de partículas

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4boolG4doubleG4DecayTable

stable flag life time decay table

GetPDGStable()GetPDGLifeTime()*GetDecayTable()

Page 27: UFRO Master Fisica Medica 5 3 Geant4

Variables dinámicas

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4doubleG4ThreeVectorG4ParticleDefinitionG4doubleG4ThreeVectorG4doubleG4doubleG4doubleG4doubleG4ElectronOccupancy

theDynamicalMasstheMomentumDirection*theParticleDefinitiontheDynamicalSpinthePolarizationtheMagneticMomenttheKineticEnergytheProperTimetheDynamicalCharge*theElectronOccupancy

dynamical mass normalized momentum vector definition of particle dynamical spin (1) polarization vector dynamical magnetic moment (2)kinetic energyproper time dynamical electric charge (3) electron orbits for ions

1. i.e. total angular momentum as a ion/atom2. i.e. total magnetic moment as a ion/atom3. i.e. total electric charge as a ion/atom

Page 28: UFRO Master Fisica Medica 5 3 Geant4

protected:

// Construct particle and physicsvoid ConstructParticle();void ConstructProcess();void SetCuts();

// these methods Construct particles void ConstructBosons();void ConstructLeptons();void ConstructMesons();void ConstructBaryons();

protected:

// these methods Construct physics processes and register themvoid ConstructGeneral();void ConstructEM();void AddStepMax();

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

ExPhysicsList.hh

Page 29: UFRO Master Fisica Medica 5 3 Geant4

void ExPhysicsList::ConstructParticle() { G4Proton::ProtonDefinition();

ConstructBosons(); ConstructLeptons(); ConstructMesons(); ConstructBaryons();

G4Geantino::GeantinoDefinition(); }void ExPhysicsList::ConstructBosons(){ G4Geantino::GeantinoDefinition(); // pseudo-particles G4ChargedGeantino::ChargedGeantinoDefinition();

G4Gamma::GammaDefinition(); // gamma}

#include "ExPhysicsList.hh"#include "G4ProcessManager.hh"#include "G4ParticleTypes.hh"

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

ExPhysicsList.cc

Page 30: UFRO Master Fisica Medica 5 3 Geant4

void ExPhysicsList::ConstructLeptons(){ G4Electron::ElectronDefinition(); // e- G4Positron::PositronDefinition(); // e+ G4MuonPlus::MuonPlusDefinition(); // mu+ G4MuonMinus::MuonMinusDefinition(); // mu- G4NeutrinoE::NeutrinoEDefinition(); // nu_e G4AntiNeutrinoE::AntiNeutrinoEDefinition(); // nu_e G4NeutrinoMu::NeutrinoMuDefinition(); // nu_mu G4AntiNeutrinoMu::AntiNeutrinoMuDefinition(); // nu_mu}

void ExPhysicsList::ConstructBaryons(){ G4Proton::ProtonDefinition(); G4AntiProton::AntiProtonDefinition(); G4Neutron::NeutronDefinition(); G4AntiNeutron::AntiNeutronDefinition();}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4LeptonConstructor pConstructor; pConstructor.ConstructParticle();

Construir todos de una vez:

Page 31: UFRO Master Fisica Medica 5 3 Geant4

void ExPhysicsList::ConstructMesons(){ G4PionPlus::PionPlusDefinition(); G4PionMinus::PionMinusDefinition(); G4PionZero::PionZeroDefinition(); G4Eta::EtaDefinition(); G4EtaPrime::EtaPrimeDefinition(); G4KaonPlus::KaonPlusDefinition(); G4KaonMinus::KaonMinusDefinition(); G4KaonZero::KaonZeroDefinition(); G4AntiKaonZero::AntiKaonZeroDefinition(); G4KaonZeroLong::KaonZeroLongDefinition(); G4KaonZeroShort::KaonZeroShortDefinition();}

void ExPhysicsList::ConstructProcess(){ AddTransportation(); ConstructEM(); ConstructGeneral(); AddStepMax();}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 32: UFRO Master Fisica Medica 5 3 Geant4

#include "G4ComptonScattering.hh"#include "G4GammaConversion.hh"#include "G4PhotoElectricEffect.hh"

#include "G4eMultipleScattering.hh"#include "G4hMultipleScattering.hh"

#include "G4eIonisation.hh"#include "G4eBremsstrahlung.hh"#include "G4eplusAnnihilation.hh"

#include "G4MuIonisation.hh"#include "G4MuBremsstrahlung.hh"#include "G4MuPairProduction.hh"

#include "G4hIonisation.hh"#include "G4hBremsstrahlung.hh"#include "G4hPairProduction.hh"

#include "G4ionIonisation.hh"

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 33: UFRO Master Fisica Medica 5 3 Geant4

void ExN02PhysicsList::ConstructEM(){ theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); G4String particleName = particle->GetParticleName(); if (particleName == "gamma") { // gamma pmanager->AddDiscreteProcess(new G4PhotoElectricEffect); pmanager->AddDiscreteProcess(new G4ComptonScattering); pmanager->AddDiscreteProcess(new G4GammaConversion); } else if (particleName == "e-") { //electron pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4eIonisation, -1, 2, 2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3, 3);

} else if (particleName == "e+") { //positron pmanager->AddProcess(new G4eMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4eIonisation, -1, 2, 2); pmanager->AddProcess(new G4eBremsstrahlung, -1, 3, 3); pmanager->AddProcess(new G4eplusAnnihilation, 0,-1, 4);

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 34: UFRO Master Fisica Medica 5 3 Geant4

} else if( particleName == "mu+" || particleName == "mu-" ) { //muon pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4MuIonisation, -1, 2, 2); pmanager->AddProcess(new G4MuBremsstrahlung, -1, 3, 3); pmanager->AddProcess(new G4MuPairProduction, -1, 4, 4); } else if( particleName == "proton" || particleName == "pi-" || particleName == "pi+" ) { //proton pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4hIonisation, -1, 2, 2); pmanager->AddProcess(new G4hBremsstrahlung, -1, 3, 3); pmanager->AddProcess(new G4hPairProduction, -1, 4, 4); } else if( particleName == "alpha" || particleName == "He3" || particleName == "GenericIon" ) {//Ions pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4ionIonisation, -1, 2, 2); } else if ((!particle->IsShortLived()) && (particle->GetPDGCharge() != 0.0) && (particle->GetParticleName() != "chargedgeantino")) { //all others charged particles except geantino pmanager->AddProcess(new G4hMultipleScattering, -1, 1, 1); pmanager->AddProcess(new G4hIonisation, -1, 2, 2); } }}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 35: UFRO Master Fisica Medica 5 3 Geant4

#include "G4Decay.hh"

void ExN02PhysicsList::ConstructGeneral(){ // Add Decay Process G4Decay* theDecayProcess = new G4Decay(); theParticleIterator->reset(); while( (*theParticleIterator)() ){ G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager(); if (theDecayProcess->IsApplicable(*particle)) { pmanager ->AddProcess(theDecayProcess); // set ordering for PostStepDoIt and AtRestDoIt pmanager ->SetProcessOrdering(theDecayProcess, idxPostStep); pmanager ->SetProcessOrdering(theDecayProcess, idxAtRest); } }}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 36: UFRO Master Fisica Medica 5 3 Geant4

#include "G4StepLimiter.hh"#include "G4UserSpecialCuts.hh"

void ExPhysicsList::AddStepMax(){ // Step limitation seen as a process G4StepLimiter* stepLimiter = new G4StepLimiter(); ////G4UserSpecialCuts* userCuts = new G4UserSpecialCuts(); theParticleIterator->reset(); while ((*theParticleIterator)()) { G4ParticleDefinition* particle = theParticleIterator->value(); G4ProcessManager* pmanager = particle->GetProcessManager();

if (particle->GetPDGCharge() != 0.0) { pmanager ->AddDiscreteProcess(stepLimiter); ////pmanager ->AddDiscreteProcess(userCuts); } }}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 37: UFRO Master Fisica Medica 5 3 Geant4

ExPhysicsList::ExPhysicsList(): G4VUserPhysicsList() { // default cut value (1.0mm) defaultCutValue = 1.0*mm; }

void ExPhysicsList::SetCuts(){ // the default cut value for all particle types SetCutsWithDefault();

// specific cut values SetCutValue(cutForGamma, "gamma"); SetCutValue(cutForElectron, "e-"); SetCutValue(cutForElectron, "e+"); if (verboseLevel>0) DumpCutValuesTable();}

ExPhysicsList - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 38: UFRO Master Fisica Medica 5 3 Geant4

#include "G4VUserPhysicsList.hh"#include "globals.hh"

class ExPhysicsList: public G4VUserPhysicsList{ public: ExPhysicsList(); ~ExPhysicsList();

protected: // Construct particle and physics process void ConstructParticle(); void ConstructProcess(); void SetCuts();};

ExPhysicsList.hh

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 39: UFRO Master Fisica Medica 5 3 Geant4

#include "ExPhysicsList.hh"#include "G4ParticleTypes.hh"

ExPhysicsList::ExPhysicsList(){;}

ExPhysicsList::~ExPhysicsList(){;}

void ExPhysicsList::ConstructParticle(){ // In this method, static member functions should be called // for all particles which you want to use. // This ensures that objects of these particle types will be // created in the program.

G4Geantino::GeantinoDefinition();}

ExPhysicsList.cc – primera parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 40: UFRO Master Fisica Medica 5 3 Geant4

void ExPhysicsList::ConstructProcess(){ // Define transportation process

AddTransportation();}

void ExPhysicsList::SetCuts(){ // uppress error messages even in case e/gamma/proton do not exist G4int temp = GetVerboseLevel(); SetVerboseLevel(0); // " G4VUserPhysicsList::SetCutsWithDefault" method sets // the default cut value for all particle types SetCutsWithDefault();

// Retrieve verbose level SetVerboseLevel(temp); }

ExPhysicsList.cc – segunda parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 41: UFRO Master Fisica Medica 5 3 Geant4

ExPrimaryGeneratorAction

ExPrimaryGeneratorAction

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 42: UFRO Master Fisica Medica 5 3 Geant4

void SetParticleDefinition(G4ParticleDefinition*) void SetParticleMomentum(G4ParticleMomentum) void SetParticleMomentumDirection(G4ThreeVector) void SetParticleEnergy(G4double) void SetParticleTime(G4double) void SetParticlePosition(G4ThreeVector) void SetParticlePolarization(G4ThreeVector) void SetNumberOfParticles(G4int)

ExPrimaryGeneratorAction - demo

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

G4int n_particle = 1; particleGun = new G4ParticleGun(n_particle);

particleGun->SetParticleDefinition(G4Geantino::GeantinoDefinition()); particleGun->SetParticleEnergy(1.0*GeV); particleGun->SetParticlePosition(G4ThreeVector(-2.0*m,0.0*m,0.0*m));

Definición de partícula disparadas

Seteos posibles

Page 43: UFRO Master Fisica Medica 5 3 Geant4

#include "G4VUserPrimaryGeneratorAction.hh"

class G4ParticleGun;class G4Event;

class ExPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction{ public: ExPrimaryGeneratorAction(); ~ExPrimaryGeneratorAction();

public: void GeneratePrimaries(G4Event* anEvent);

private: G4ParticleGun* particleGun;};

ExPrimaryGeneratorAction.hh

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 44: UFRO Master Fisica Medica 5 3 Geant4

#include "ExPrimaryGeneratorAction.hh"

#include "G4Event.hh"#include "G4ParticleGun.hh"#include "G4ParticleTable.hh"#include "G4ParticleDefinition.hh"#include "globals.hh"

ExPrimaryGeneratorAction::ExPrimaryGeneratorAction(){ G4int n_particle = 1; particleGun = new G4ParticleGun(n_particle);

G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable(); G4ParticleDefinition* particle = particleTable->FindParticle("proton");

G4String particleName; // find in particle table particleGun->SetParticleDefinition(particleTable->FindParticle(particleName="geantino")); // use defined particle particleGun->SetParticleDefinition(particle); particleGun->SetParticleEnergy(1.0*GeV); particleGun->SetParticlePosition(G4ThreeVector(-2.0*m, 0.0, 0.0));}

ExPrimaryGeneratorAction.cc – primera parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09

Page 45: UFRO Master Fisica Medica 5 3 Geant4

ExPrimaryGeneratorAction::~ExN01PrimaryGeneratorAction(){ delete particleGun;}

void ExPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent){ G4int i = anEvent->get_eventID() % 3; switch(i) { case 0: particleGun->SetParticleMomentumDirection(G4ThreeVector(1.0,0.0,0.0)); break; case 1: particleGun->SetParticleMomentumDirection(G4ThreeVector(1.0,0.1,0.0)); break; case 2: particleGun->SetParticleMomentumDirection(G4ThreeVector(1.0,0.0,0.1)); break; } particleGun->generatePrimaryVertex(anEvent); }

ExPrimaryGeneratorAction.cc – segunda parte

www.gphysics.net – UFRO-Master-Fisica-Medica-5-3-Geant4-05.09


Recommended