8 |
#include <TParticlePDG.h> |
#include <TParticlePDG.h> |
9 |
#include <TVector3.h> |
#include <TVector3.h> |
10 |
#include <TMath.h> |
#include <TMath.h> |
11 |
|
#include <Riostream.h> |
12 |
|
|
13 |
#include "PamVMCPrimaryGenerator.h" |
#include "PamVMCPrimaryGenerator.h" |
14 |
|
|
15 |
using TMath::Sqrt; |
using namespace TMath; |
|
using TMath::Sin; |
|
|
using TMath::Cos; |
|
|
using TMath::ATan; |
|
|
using TMath::Log; |
|
|
using TMath::Power; |
|
|
using TMath::Exp; |
|
16 |
|
|
17 |
ClassImp(PamVMCPrimary) |
ClassImp(PamVMCPrimary) |
18 |
|
|
39 |
fevno(0), |
fevno(0), |
40 |
fmass(0.), |
fmass(0.), |
41 |
fcharge(0.), |
fcharge(0.), |
42 |
frnd(0) |
frandom(0) |
43 |
{ |
{ |
44 |
// Standard constructor |
// Standard constructor |
|
fprimColl = new TClonesArray("PamVMCPrimary"); |
|
|
frnd = new TRandom3(0); |
|
45 |
|
|
46 |
|
ftheta = new TF1("ftheta","sin(x)*cos(x)",0.,acos(-1.)/4.); |
47 |
|
ftheta->SetNpx(1000); |
48 |
|
|
49 |
|
fprimColl = new TClonesArray("PamVMCPrimary"); |
50 |
fprim.fPDG=kProton; |
fprim.fPDG=kProton; |
51 |
fprim.fX0=1.; |
fprim.fX0=1.; |
52 |
fprim.fY0=1.; |
fprim.fY0=1.; |
64 |
fmass(0.), |
fmass(0.), |
65 |
fcharge(0.), |
fcharge(0.), |
66 |
fprimColl(0), |
fprimColl(0), |
67 |
frnd(0) |
frandom(0) |
68 |
{ |
{ |
69 |
frnd = new TRandom3(0); |
// Default constructor |
|
// Default constructor |
|
70 |
//Default primary proton |
//Default primary proton |
71 |
|
ftheta = new TF1("ftheta","sin(x)*cos(x)",0.,acos(-1.)/4.); |
72 |
|
ftheta->SetNpx(1000); |
73 |
|
|
74 |
fprim.fPDG=kProton; |
fprim.fPDG=kProton; |
75 |
fprim.fX0=1.; |
fprim.fX0=1.; |
76 |
fprim.fY0=1.; |
fprim.fY0=1.; |
83 |
PamVMCPrimaryGenerator::~PamVMCPrimaryGenerator() |
PamVMCPrimaryGenerator::~PamVMCPrimaryGenerator() |
84 |
{ |
{ |
85 |
// Destructor |
// Destructor |
86 |
delete frnd; |
delete ftheta; |
87 |
delete fprimColl; |
delete fprimColl; |
88 |
} |
} |
89 |
|
|
90 |
// private methods |
// private methods |
91 |
|
|
|
#include <Riostream.h> |
|
92 |
|
|
93 |
void PamVMCPrimaryGenerator::GeneratePrimary() |
void PamVMCPrimaryGenerator::GeneratePrimary() |
94 |
{ |
{ |
155 |
void PamVMCPrimaryGenerator::GenSpe(Double_t PEmin, Double_t PEmax, Bool_t isEnergy) |
void PamVMCPrimaryGenerator::GenSpe(Double_t PEmin, Double_t PEmax, Bool_t isEnergy) |
156 |
{ |
{ |
157 |
if(isEnergy) { |
if(isEnergy) { |
158 |
fprim.fP0=frnd->Uniform(KinEToMomentum(PEmin),KinEToMomentum(PEmax)); |
fprim.fP0=frandom->Uniform(KinEToMomentum(PEmin),KinEToMomentum(PEmax)); |
159 |
} else{ |
} else{ |
160 |
fprim.fP0=frnd->Uniform(PEmin,PEmax); |
fprim.fP0=frandom->Uniform(PEmin,PEmax); |
161 |
} |
} |
162 |
|
|
163 |
} |
} |
166 |
{ |
{ |
167 |
Double_t alpha = 1.+gamma; //integral spectral index |
Double_t alpha = 1.+gamma; //integral spectral index |
168 |
if(alpha==0.){ |
if(alpha==0.){ |
169 |
fprim.fP0=Exp(Log(PEmin)+frnd->Uniform(0.,1.)*(Log(PEmax)-Log(PEmin))); |
fprim.fP0=Exp(Log(PEmin)+frandom->Uniform(0.,1.)*(Log(PEmax)-Log(PEmin))); |
170 |
} else { |
} else { |
171 |
if(PEmin==0.) PEmin=1.E-10; |
if(PEmin==0.) PEmin=1.E-10; |
172 |
fprim.fP0=Power((frnd->Uniform(0.,1.)*(Power(PEmax,alpha)-Power(PEmin,alpha))+Power(PEmin,alpha)),1./alpha); |
fprim.fP0=Power((frandom->Uniform(0.,1.)*(Power(PEmax,alpha)-Power(PEmin,alpha))+Power(PEmin,alpha)),1./alpha); |
173 |
} |
} |
174 |
|
|
175 |
if(isEnergy) fprim.fP0=KinEToMomentum(fprim.fP0); |
if(isEnergy) fprim.fP0=KinEToMomentum(fprim.fP0); |