source: trunk/examples/advanced/hadrontherapy/src/HadrontherapyPrimaryGeneratorAction.cc@ 1194

Last change on this file since 1194 was 807, checked in by garnier, 17 years ago

update

File size: 6.5 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// $Id: HadrontherapyPositronPrimaryGeneratorAction.cc; May 2005
27// ----------------------------------------------------------------------------
28// GEANT 4 - Hadrontherapy example
29// ----------------------------------------------------------------------------
30// Code developed by:
31//
32// G.A.P. Cirrone(a)*, F. Di Rosa(a), S. Guatelli(b), G. Russo(a)
33//
34// (a) Laboratori Nazionali del Sud
35// of the National Institute for Nuclear Physics, Catania, Italy
36// (b) National Institute for Nuclear Physics Section of Genova, genova, Italy
37//
38// * cirrone@lns.infn.it
39// ----------------------------------------------------------------------------
40#include "HadrontherapyPrimaryGeneratorAction.hh"
41#include "HadrontherapyPrimaryGeneratorMessenger.hh"
42#include "G4Event.hh"
43#include "G4ParticleGun.hh"
44#include "G4ParticleTable.hh"
45#include "G4ParticleDefinition.hh"
46#include "Randomize.hh"
47
48HadrontherapyPrimaryGeneratorAction::HadrontherapyPrimaryGeneratorAction()
49{
50 // Define the messenger
51 gunMessenger = new HadrontherapyPrimaryGeneratorMessenger(this);
52
53 particleGun = new G4ParticleGun();
54
55 SetDefaultPrimaryParticle();
56}
57
58HadrontherapyPrimaryGeneratorAction::~HadrontherapyPrimaryGeneratorAction()
59{
60 delete particleGun;
61
62 delete gunMessenger;
63}
64
65void HadrontherapyPrimaryGeneratorAction::SetDefaultPrimaryParticle()
66{
67 // ****************************
68 // Default primary particle
69 // ****************************
70
71 // Define primary particles: protons
72 G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
73 G4ParticleDefinition* particle = particleTable -> FindParticle("proton");
74 particleGun -> SetParticleDefinition(particle);
75
76 // Define the energy of primary particles:
77 // gaussian distribution with mean energy = 64.55 *MeV
78 // and sigma = 300.0 *keV
79 G4double defaultMeanKineticEnergy = 63.50 *MeV;
80 meanKineticEnergy = defaultMeanKineticEnergy;
81
82 G4double defaultsigmaEnergy = 300.0 *keV;
83 sigmaEnergy = defaultsigmaEnergy;
84
85 // Define the parameters of the initial position:
86 // the y, z coordinates have a gaussian distribution
87 G4double defaultX0 = -3248.59 *mm;
88 X0 = defaultX0;
89
90 G4double defaultY0 = 0.0 *mm;
91 Y0 = defaultY0;
92
93 G4double defaultZ0 = 0.0 *mm;
94 Z0 = defaultZ0;
95
96 G4double defaultsigmaY = 1. *mm;
97 sigmaY = defaultsigmaY;
98
99 G4double defaultsigmaZ = 1. *mm;
100 sigmaZ = defaultsigmaZ;
101
102 // Define the parameters of the momentum of primary particles:
103 // The momentum along the y and z axis has a gaussian distribution
104 G4double defaultsigmaMomentumY = 0.0;
105 sigmaMomentumY = defaultsigmaMomentumY;
106
107 G4double defaultsigmaMomentumZ = 0.0;
108 sigmaMomentumZ = defaultsigmaMomentumZ;
109}
110
111void HadrontherapyPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
112{
113 // ****************************************
114 // Set the beam angular apread
115 // and spot size
116 // beam spot size
117 // ****************************************
118
119 // Set the position of the primary particles
120 G4double x = X0;
121 G4double y = Y0;
122 G4double z = Z0;
123
124 if ( sigmaY > 0.0 )
125 {
126 y += G4RandGauss::shoot( Y0, sigmaY );
127 }
128
129 if ( sigmaZ > 0.0 )
130 {
131 z += G4RandGauss::shoot( Z0, sigmaZ );
132 }
133
134 particleGun -> SetParticlePosition(G4ThreeVector( x , y , z ) );
135
136 // ********************************************
137 // Set the beam energy and energy spread
138 // ********************************************
139
140 G4double kineticEnergy = G4RandGauss::shoot( meanKineticEnergy, sigmaEnergy );
141 particleGun -> SetParticleEnergy ( kineticEnergy );
142
143 // Set the direction of the primary particles
144 G4double momentumX = 1.0;
145 G4double momentumY = 0.0;
146 G4double momentumZ = 0.0;
147
148 if ( sigmaMomentumY > 0.0 )
149 {
150 momentumY += G4RandGauss::shoot( 0., sigmaMomentumY );
151 }
152 if ( sigmaMomentumZ > 0.0 )
153 {
154 momentumZ += G4RandGauss::shoot( 0., sigmaMomentumZ );
155 }
156
157 particleGun -> SetParticleMomentumDirection( G4ThreeVector(momentumX,momentumY,momentumZ) );
158
159 // Generate a primary particle
160 particleGun -> GeneratePrimaryVertex( anEvent );
161}
162
163void HadrontherapyPrimaryGeneratorAction::SetmeanKineticEnergy (G4double val )
164{ meanKineticEnergy = val;}
165
166void HadrontherapyPrimaryGeneratorAction::SetsigmaEnergy (G4double val )
167{ sigmaEnergy = val;}
168
169void HadrontherapyPrimaryGeneratorAction::SetXposition (G4double val )
170{ X0 = val;}
171
172void HadrontherapyPrimaryGeneratorAction::SetYposition (G4double val )
173{ Y0 = val;}
174
175void HadrontherapyPrimaryGeneratorAction::SetZposition (G4double val )
176{ Z0 = val;}
177
178void HadrontherapyPrimaryGeneratorAction::SetsigmaY (G4double val )
179{ sigmaY = val;}
180
181void HadrontherapyPrimaryGeneratorAction::SetsigmaZ (G4double val )
182{ sigmaZ = val;}
183
184void HadrontherapyPrimaryGeneratorAction::SetsigmaMomentumY (G4double val )
185{ sigmaMomentumY = val;}
186
187void HadrontherapyPrimaryGeneratorAction::SetsigmaMomentumZ (G4double val )
188{ sigmaMomentumZ = val;}
Note: See TracBrowser for help on using the repository browser.