-
Notifications
You must be signed in to change notification settings - Fork 74
Expand file tree
/
Copy pathGammaNuclearPhysics.cc
More file actions
73 lines (51 loc) · 2.43 KB
/
GammaNuclearPhysics.cc
File metadata and controls
73 lines (51 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "G4BertiniElectroNuclearBuilder.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4Gamma.hh"
#include "G4Electron.hh"
#include "G4Positron.hh"
#include "G4ProcessManager.hh"
#include "G4GammaGeneralProcess.hh"
#include "G4LossTableManager.hh"
#include "G4HadronicParameters.hh"
#include "GammaNuclearPhysics.h"
GammaNuclearPhysics::GammaNuclearPhysics(const G4String& name) : G4VPhysicsConstructor(name) { }
GammaNuclearPhysics::~GammaNuclearPhysics() { }
void GammaNuclearPhysics::ConstructProcess()
{
G4PhotoNuclearProcess* thePhotoNuclearProcess = new G4PhotoNuclearProcess();
G4ElectronNuclearProcess *theElectronNuclearProcess = new G4ElectronNuclearProcess;
G4ElectroVDNuclearModel *theElectroReaction = new G4ElectroVDNuclearModel;
theElectronNuclearProcess->RegisterMe(theElectroReaction);
G4PositronNuclearProcess* thePositronNuclearProcess = new G4PositronNuclearProcess;
thePositronNuclearProcess->RegisterMe(theElectroReaction);
G4CascadeInterface *theGammaReaction = new G4CascadeInterface;
theGammaReaction->SetMaxEnergy(3.5*GeV);
thePhotoNuclearProcess->RegisterMe(theGammaReaction);
G4QGSMFragmentation *theFragmentation = new G4QGSMFragmentation;
G4ExcitedStringDecay *theStringDecay = new G4ExcitedStringDecay(theFragmentation);
G4QGSModel< G4GammaParticipants > *theStringModel = new G4QGSModel< G4GammaParticipants >;
theStringModel->SetFragmentationModel(theStringDecay);
G4GeneratorPrecompoundInterface *theCascade = new G4GeneratorPrecompoundInterface;
G4TheoFSGenerator *theModel = new G4TheoFSGenerator;
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
G4ProcessManager * aProcMan = nullptr;
theModel->SetMinEnergy(1.5*GeV);
theModel->SetMaxEnergy( G4HadronicParameters::Instance()->GetMaxEnergy() );
thePhotoNuclearProcess->RegisterMe(theModel);
G4GammaGeneralProcess* sp = (G4GammaGeneralProcess*)G4LossTableManager::Instance()->GetGammaGeneralProcess();
if(sp) {
sp->AddHadProcess(thePhotoNuclearProcess);
} else {
aProcMan = G4Gamma::Gamma()->GetProcessManager();
aProcMan->AddDiscreteProcess(thePhotoNuclearProcess);
}
aProcMan = G4Electron::Electron()->GetProcessManager();
aProcMan->AddDiscreteProcess(theElectronNuclearProcess);
aProcMan = G4Positron::Positron()->GetProcessManager();
aProcMan->AddDiscreteProcess(thePositronNuclearProcess);
}