1 #include "SimG4Core/PhysicsLists/interface/CMSFTFPNeutronBuilder.hh"
2 #include "G4ParticleDefinition.hh"
3 #include "G4ParticleTable.hh"
4 #include "G4ProcessManager.hh"
5 #include "G4NeutronInelasticCrossSection.hh"
6 #include "G4SystemOfUnits.hh"
8 CMSFTFPNeutronBuilder::CMSFTFPNeutronBuilder(G4bool quasiElastic) {
11 theModel =
new G4TheoFSGenerator(
"FTFP");
13 theStringModel =
new G4FTFModel;
14 theStringDecay =
new G4ExcitedStringDecay(
new G4LundStringFragmentation);
15 theStringModel->SetFragmentationModel(theStringDecay);
17 theCascade =
new G4GeneratorPrecompoundInterface;
18 thePreEquilib =
new G4PreCompoundModel(
new G4ExcitationHandler);
19 theCascade->SetDeExcitation(thePreEquilib);
21 theModel->SetTransport(theCascade);
23 theModel->SetHighEnergyGenerator(theStringModel);
25 theQuasiElastic =
new G4QuasiElasticChannel;
26 theModel->SetQuasiElasticChannel(theQuasiElastic);
28 theQuasiElastic =
nullptr;
31 theModel->SetMinEnergy(theMin);
32 theModel->SetMaxEnergy(100 * TeV);
35 CMSFTFPNeutronBuilder::~CMSFTFPNeutronBuilder() {
36 delete theStringDecay;
37 delete theStringModel;
41 delete theQuasiElastic;
44 void CMSFTFPNeutronBuilder::Build(G4HadronElasticProcess*) {}
46 void CMSFTFPNeutronBuilder::Build(G4HadronFissionProcess*) {}
48 void CMSFTFPNeutronBuilder::Build(G4HadronCaptureProcess*) {}
50 void CMSFTFPNeutronBuilder::Build(G4NeutronInelasticProcess* aP) {
51 theModel->SetMinEnergy(theMin);
52 theModel->SetMaxEnergy(theMax);
53 aP->RegisterMe(theModel);
54 aP->AddDataSet(
new G4NeutronInelasticCrossSection);