Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
G4eeToTwoPiModel.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$
27//
28// -------------------------------------------------------------------
29//
30// GEANT4 Class header file
31//
32//
33// File name: G4eeToTwoPiModel
34//
35// Author: Vladimir Ivanchenko
36//
37// Creation date: 25.10.2003
38//
39// Modifications:
40//
41//
42// -------------------------------------------------------------------
43//
44
45
46//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
47//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
48
49#include "G4eeToTwoPiModel.hh"
50#include "Randomize.hh"
52#include "G4SystemOfUnits.hh"
53#include "G4PionPlus.hh"
54#include "G4PionMinus.hh"
55#include "G4DynamicParticle.hh"
56#include "G4PhysicsVector.hh"
58#include "G4eeCrossSections.hh"
59
60//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
61
62using namespace std;
63
65 cross(cr)
66{
67 massPi = G4PionPlus::PionPlus()->GetPDGMass();
68 massRho = 775.5*MeV;
69}
70
71//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
72
74{}
75
76//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
77
79{
80 return 2.0*massPi;
81}
82
83//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
84
86{
87 return massRho;
88}
89
90//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
91
93{
94 G4double ee = std::min(HighEnergy(),e);
95 return cross->CrossSection2pi(ee);
96}
97
98//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
99
101 G4double emax) const
102{
103 G4double tmin = std::max(emin, 2.0*massPi);
104 G4double tmax = std::max(tmin, emax);
105 G4int nbins = (G4int)((tmax - tmin)/(5.*MeV));
106 G4PhysicsVector* v = new G4PhysicsLinearVector(emin,emax,nbins);
107 v->SetSpline(true);
108 return v;
109}
110
111//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
112
113void G4eeToTwoPiModel::SampleSecondaries(std::vector<G4DynamicParticle*>* newp,
114 G4double e, const G4ThreeVector& direction)
115{
116
117 G4double tkin = 0.5*e - massPi;
118 if(tkin < 0.0) tkin = 0.0;
119 G4double cost;
120 do {
121 cost = 2.0*G4UniformRand() - 1.0;
122 } while( G4UniformRand() > 1.0 - cost*cost );
123
124 G4double sint = sqrt(1.0 - cost*cost);
125 G4double phi = twopi * G4UniformRand();
126
127 G4ThreeVector dir(sint*cos(phi),sint*sin(phi), cost);
128 dir.rotateUz(direction);
129
130 // create G4DynamicParticle objects
131 G4DynamicParticle* pip =
133 G4DynamicParticle* pin =
135 newp->push_back(pip);
136 newp->push_back(pin);
137}
138
139//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
140
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4UniformRand()
Definition: Randomize.hh:53
Hep3Vector & rotateUz(const Hep3Vector &)
Definition: ThreeVector.cc:72
void SetSpline(G4bool)
static G4PionMinus * PionMinus()
Definition: G4PionMinus.cc:98
static G4PionPlus * PionPlus()
Definition: G4PionPlus.cc:98
G4double HighEnergy() const
G4double CrossSection2pi(G4double)
G4eeToTwoPiModel(G4eeCrossSections *)
virtual G4double PeakEnergy() const
virtual void SampleSecondaries(std::vector< G4DynamicParticle * > *, G4double, const G4ThreeVector &)
virtual G4double ComputeCrossSection(G4double) const
virtual G4PhysicsVector * PhysicsVector(G4double, G4double) const
virtual ~G4eeToTwoPiModel()
virtual G4double ThresholdEnergy() const