00001 #include "DsPhysConsElectroNu.h"
00002
00003 #include "G4ProcessManager.hh"
00004
00006
00007
00008 #include "G4PhotoNuclearProcess.hh"
00009 #include "G4GammaNuclearReaction.hh"
00010 #include "G4GammaParticipants.hh"
00011 #include "G4TheoFSGenerator.hh"
00012 #include "G4QGSModel.hh"
00013 #include "G4QGSMFragmentation.hh"
00014 #include "G4ExcitedStringDecay.hh"
00015 #include "G4GeneratorPrecompoundInterface.hh"
00016 #include "G4PhotoNuclearCrossSection.hh"
00017 #include "G4ElectroNuclearReaction.hh"
00018 #include "G4ElectronNuclearProcess.hh"
00019 #include "G4PositronNuclearProcess.hh"
00020 #include "G4MuNuclearInteraction.hh"
00021
00022 DsPhysConsElectroNu::DsPhysConsElectroNu(const std::string& type,
00023 const std::string& name,
00024 const IInterface* parent)
00025 : GiGaPhysConstructorBase(type,name,parent)
00026 {
00027 declareProperty("MaxGammaReactionEnergy",m_maxGammaReactionEnergy=3.5*GeV,
00028 "Maximum gamma nuclear reaction energy.");
00029 declareProperty("MinFinalStateEnergy",m_minFinalStateEnergy=3.0*GeV,
00030 "Min energy for final state hadron production.");
00031 declareProperty("MaxFinalStateEnergy",m_maxFinalStateEnergy=100*TeV,
00032 "Max energy for final state hadron production.");
00033 }
00034
00035 DsPhysConsElectroNu::~DsPhysConsElectroNu()
00036 {
00037 }
00038
00039
00040 void DsPhysConsElectroNu::ConstructParticle()
00041 {
00042 }
00043 void DsPhysConsElectroNu::ConstructProcess()
00044 {
00045
00046 G4ProcessManager* pmanager = G4Gamma::Gamma()->GetProcessManager();
00047
00048 G4PhotoNuclearProcess * thePhotoNuclearProcess = new G4PhotoNuclearProcess;
00049 G4GammaNuclearReaction * theGammaReaction = new G4GammaNuclearReaction;
00050 G4TheoFSGenerator * theModel = new G4TheoFSGenerator;
00051 G4QGSModel<G4GammaParticipants>* theStringModel = new G4QGSModel<G4GammaParticipants>;
00052 G4ExcitedStringDecay * theStringDecay = new G4ExcitedStringDecay(new G4QGSMFragmentation);
00053 theStringModel->SetFragmentationModel(theStringDecay);
00054 G4GeneratorPrecompoundInterface * theCascade = new G4GeneratorPrecompoundInterface;
00055 theModel->SetTransport(theCascade);
00056 theModel->SetHighEnergyGenerator(theStringModel);
00057 theGammaReaction->SetMaxEnergy(m_maxGammaReactionEnergy);
00058
00059 thePhotoNuclearProcess->RegisterMe(theGammaReaction);
00060
00061 theModel->SetMinEnergy(m_minFinalStateEnergy);
00062 theModel->SetMaxEnergy(m_maxFinalStateEnergy);
00063
00064 thePhotoNuclearProcess->RegisterMe(theModel);
00065
00066 pmanager->AddDiscreteProcess(thePhotoNuclearProcess);
00067
00068
00069 pmanager = G4Electron::Electron()->GetProcessManager();
00070
00071 G4ElectroNuclearReaction* electroNuclear = new G4ElectroNuclearReaction();
00072 G4ElectronNuclearProcess* theElectroNuclearProcess = new G4ElectronNuclearProcess();
00073
00074 theElectroNuclearProcess->RegisterMe(electroNuclear);
00075
00076 pmanager->AddProcess(theElectroNuclearProcess, -1, -1, 5);
00077
00078
00079 pmanager = G4Positron::Positron()->GetProcessManager();
00080
00081 G4PositronNuclearProcess* thePositronNuclearProcess = new G4PositronNuclearProcess();
00082
00083 thePositronNuclearProcess->RegisterMe(electroNuclear);
00084
00085 pmanager->AddProcess(thePositronNuclearProcess, -1, -1, 5);
00086
00087
00088
00089 pmanager = G4MuonMinus::MuonMinus()->GetProcessManager();
00090
00091 G4MuNuclearInteraction* munucProc = new G4MuNuclearInteraction();
00092
00093 pmanager->AddDiscreteProcess(munucProc);
00094
00095
00096 pmanager = G4MuonPlus::MuonPlus()->GetProcessManager();
00097
00098 pmanager->AddDiscreteProcess(munucProc);
00099
00100 }
00101
00102
00103