Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
F06PrimaryGeneratorAction.cc
Go to the documentation of this file.
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: F06PrimaryGeneratorAction.cc 75296 2013-10-30 09:34:21Z gcosmo $
27 //
28 /// \file field/field06/src/F06PrimaryGeneratorAction.cc
29 /// \brief Implementation of the F06PrimaryGeneratorAction class
30 //
31 
32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
34 
36 
38 
39 #include "G4Event.hh"
40 #include "G4ParticleGun.hh"
41 #include "G4ParticleTable.hh"
42 #include "G4ParticleDefinition.hh"
43 #include "Randomize.hh"
44 #include "G4PhysicalConstants.hh"
45 #include "G4SystemOfUnits.hh"
46 
47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
48 
50 {
51  G4int n_particle = 1;
52  fParticleGun = new G4ParticleGun(n_particle);
53 
55 
56  G4ParticleDefinition* particle = particleTable->FindParticle("proton");
57  G4double mass_proton = particle->GetPDGMass();
58 
59  G4double muN = 0.5*CLHEP::eplus*CLHEP::hbar_Planck/
60  (mass_proton/CLHEP::c_squared);
61 
62  G4cout << " *** Neutron *** " << G4endl;
63 
64  particle = particleTable->FindParticle("neutron");
65  G4double mass_neutron = particle->GetPDGMass();
66 
67  G4double magneticMoment = particle->GetPDGMagneticMoment();
68  G4cout << " magneticMoment: " << magneticMoment/muN << G4endl;
69 
70  // g_factor for spin 1/2
71 
72  G4double g_factor = 2 * magneticMoment/muN;
73  G4cout << " g_factor: " << g_factor << G4endl;
74 
75  G4double charge = particle->GetPDGCharge();
76  G4cout << " charge: " << charge << G4endl;
77 
78  G4double anomaly = (g_factor - 2.)/2.;
79  G4cout << " anomaly: " << anomaly << G4endl;
80 
81  anomaly = (g_factor * (mass_neutron/mass_proton) - 2.)/2.;
82  G4cout << " corrected anomaly: " << anomaly << G4endl;
83 
84  muN = 0.5*CLHEP::eplus*CLHEP::hbar_Planck/(mass_neutron/CLHEP::c_squared);
85  g_factor = 2 * magneticMoment/muN;
86 
87  anomaly = (g_factor - 2.)/2.;
88  G4cout << " *** anomaly: " << anomaly << G4endl;
89 
90  G4cout << " *** MuonPlus *** " << G4endl;
91 
92  particle = particleTable->FindParticle("mu+");
93  G4double mass_muon = particle->GetPDGMass();
94 
95  G4double muB = 0.5*CLHEP::eplus*CLHEP::hbar_Planck/
96  (mass_muon/CLHEP::c_squared);
97 
98  magneticMoment = particle->GetPDGMagneticMoment();
99  G4cout << " magneticMoment: " << magneticMoment/muB << G4endl;
100 
101  // g_factor for spin 1/2
102 
103  g_factor = magneticMoment/muB;
104  G4cout << " g_factor: " << g_factor << G4endl;
105 
106  charge = particle->GetPDGCharge();
107  G4cout << " charge: " << charge << G4endl;
108 
109  anomaly = (g_factor - 2.)/2.;
110  G4cout << " anomaly: " << anomaly << G4endl;
111 
112 // anomaly = particle->CalculateAnomaly();
113 // G4cout << " *** anomaly: " << anomaly << G4endl;
114 
115  particle = particleTable->FindParticle("neutron");
116  fParticleGun->SetParticleDefinition(particle);
117 }
118 
119 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
120 
122 {
123  delete fParticleGun;
124 }
125 
126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127 
129 {
130  //this function is called at the begining of event
131  //
132 
133  fParticleGun->SetParticlePosition(G4ThreeVector(0.0, 0.0, 0.0));
134  fParticleGun->SetParticlePolarization(G4ThreeVector(0,1,0));
135 
136  G4double particleEnergy = G4UniformRand()*1e-7*eV;
137  fParticleGun->SetParticleEnergy(particleEnergy);
138 
139  G4double theta = 2*pi*G4UniformRand();
140  G4double phi = std::acos(1-2*G4UniformRand());
141  if (phi > pi/2 && phi < pi) phi = pi-phi;
142 
143  G4double z = std::sin(phi)*std::cos(theta);
144  G4double x = std::sin(phi)*std::sin(theta);
145  G4double y = std::cos(phi);
146 
147  fParticleGun->SetParticleMomentumDirection(G4ThreeVector(x,y,z));
148 
149  fParticleGun->GeneratePrimaryVertex(anEvent);
150 }
151 
152 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4ParticleDefinition * FindParticle(G4int PDGEncoding)
CLHEP::Hep3Vector G4ThreeVector
G4double z
Definition: TRTMaterials.hh:39
void SetParticleMomentumDirection(G4ParticleMomentum aMomentumDirection)
Definition of the F06PrimaryGeneratorAction class.
int G4int
Definition: G4Types.hh:78
virtual void GeneratePrimaryVertex(G4Event *evt)
Definition of the F06DetectorConstruction class.
void SetParticlePolarization(G4ThreeVector aVal)
void SetParticlePosition(G4ThreeVector aPosition)
#define G4UniformRand()
Definition: Randomize.hh:87
G4GLOB_DLL std::ostream G4cout
void SetParticleEnergy(G4double aKineticEnergy)
G4double GetPDGMass() const
static G4ParticleTable * GetParticleTable()
#define G4endl
Definition: G4ios.hh:61
G4double GetPDGMagneticMoment() const
double G4double
Definition: G4Types.hh:76
G4double GetPDGCharge() const
void SetParticleDefinition(G4ParticleDefinition *aParticleDefinition)
virtual void GeneratePrimaries(G4Event *)