CMS 3D CMS Logo

CMSHyperonFTFPBuilder.cc
Go to the documentation of this file.
1 //
3 
4 #include "G4SystemOfUnits.hh"
5 #include "G4ParticleDefinition.hh"
6 #include "G4ParticleTable.hh"
7 #include "G4ProcessManager.hh"
8 #include "G4CrossSectionInelastic.hh"
9 #include "G4ComponentGGHadronNucleusXsc.hh"
10 #include "G4HadronicParameters.hh"
11 
12 #include "G4LambdaInelasticProcess.hh"
13 #include "G4AntiLambdaInelasticProcess.hh"
14 #include "G4SigmaPlusInelasticProcess.hh"
15 #include "G4SigmaMinusInelasticProcess.hh"
16 #include "G4AntiSigmaPlusInelasticProcess.hh"
17 #include "G4AntiSigmaMinusInelasticProcess.hh"
18 #include "G4XiZeroInelasticProcess.hh"
19 #include "G4XiMinusInelasticProcess.hh"
20 #include "G4AntiXiZeroInelasticProcess.hh"
21 #include "G4AntiXiMinusInelasticProcess.hh"
22 #include "G4OmegaMinusInelasticProcess.hh"
23 #include "G4AntiOmegaMinusInelasticProcess.hh"
24 
25 #include "G4TheoFSGenerator.hh"
26 #include "G4GeneratorPrecompoundInterface.hh"
27 #include "G4FTFModel.hh"
28 #include "G4LundStringFragmentation.hh"
29 #include "G4ExcitedStringDecay.hh"
30 #include "G4CascadeInterface.hh"
31 
33 
35 
37  // Hyperon : Bertini at low energies, then FTFP
38 
39  auto HyperonFTFP = new G4TheoFSGenerator("FTFP");
40 
41  HyperonFTFP->SetMinEnergy(G4HadronicParameters::Instance()->GetMinEnergyTransitionFTF_Cascade());
42  HyperonFTFP->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy());
43 
44  auto theStringModel = new G4FTFModel;
45  auto theStringDecay = new G4ExcitedStringDecay(new G4LundStringFragmentation());
46  theStringModel->SetFragmentationModel(theStringDecay);
47 
48  auto theCascade = new G4GeneratorPrecompoundInterface;
49 
50  HyperonFTFP->SetTransport(theCascade);
51  HyperonFTFP->SetHighEnergyGenerator(theStringModel);
52 
53  auto theBertini = new G4CascadeInterface;
54  theBertini->SetMinEnergy(0.0);
55  theBertini->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergyTransitionFTF_Cascade());
56 
57  // AntiHyperons: Use FTFP for full energy range, starting at 0.
58 
59  auto AntiHyperonFTFP = new G4TheoFSGenerator("FTFP");
60  AntiHyperonFTFP->SetMinEnergy(0.0);
61  AntiHyperonFTFP->SetMaxEnergy(G4HadronicParameters::Instance()->GetMaxEnergy());
62  AntiHyperonFTFP->SetTransport(theCascade);
63  AntiHyperonFTFP->SetHighEnergyGenerator(theStringModel);
64 
65  // use Glauber-Gribov cross sections
66  auto theInelasticCrossSection = new G4CrossSectionInelastic(new G4ComponentGGHadronNucleusXsc);
67 
68  G4ProcessManager* aProcMan = nullptr;
69 
70  // Lambda
71  auto theLambdaInelastic = new G4LambdaInelasticProcess();
72  theLambdaInelastic->RegisterMe(theBertini);
73  theLambdaInelastic->RegisterMe(HyperonFTFP);
74  theLambdaInelastic->AddDataSet(theInelasticCrossSection);
75  aProcMan = G4Lambda::Lambda()->GetProcessManager();
76  aProcMan->AddDiscreteProcess(theLambdaInelastic);
77 
78  // AntiLambda
79  auto theAntiLambdaInelastic = new G4AntiLambdaInelasticProcess();
80  theAntiLambdaInelastic->RegisterMe(AntiHyperonFTFP);
81  theAntiLambdaInelastic->AddDataSet(theInelasticCrossSection);
82 
83  aProcMan = G4AntiLambda::AntiLambda()->GetProcessManager();
84  aProcMan->AddDiscreteProcess(theAntiLambdaInelastic);
85 
86  // SigmaMinus
87  auto theSigmaMinusInelastic = new G4SigmaMinusInelasticProcess();
88  theSigmaMinusInelastic->RegisterMe(theBertini);
89  theSigmaMinusInelastic->RegisterMe(HyperonFTFP);
90  theSigmaMinusInelastic->AddDataSet(theInelasticCrossSection);
91 
92  aProcMan = G4SigmaMinus::SigmaMinus()->GetProcessManager();
93  aProcMan->AddDiscreteProcess(theSigmaMinusInelastic);
94 
95  // anti-SigmaMinus
96  auto theAntiSigmaMinusInelastic = new G4AntiSigmaMinusInelasticProcess();
97  theAntiSigmaMinusInelastic->RegisterMe(AntiHyperonFTFP);
98  theAntiSigmaMinusInelastic->AddDataSet(theInelasticCrossSection);
99 
100  aProcMan = G4AntiSigmaMinus::AntiSigmaMinus()->GetProcessManager();
101  aProcMan->AddDiscreteProcess(theAntiSigmaMinusInelastic);
102 
103  // SigmaPlus
104  auto theSigmaPlusInelastic = new G4SigmaPlusInelasticProcess();
105  theSigmaPlusInelastic->RegisterMe(theBertini);
106  theSigmaPlusInelastic->RegisterMe(HyperonFTFP);
107  theSigmaPlusInelastic->AddDataSet(theInelasticCrossSection);
108 
109  aProcMan = G4SigmaPlus::SigmaPlus()->GetProcessManager();
110  aProcMan->AddDiscreteProcess(theSigmaPlusInelastic);
111 
112  // anti-SigmaPlus
113  auto theAntiSigmaPlusInelastic = new G4AntiSigmaPlusInelasticProcess();
114  theAntiSigmaPlusInelastic->RegisterMe(AntiHyperonFTFP);
115  theAntiSigmaPlusInelastic->AddDataSet(theInelasticCrossSection);
116 
117  aProcMan = G4AntiSigmaPlus::AntiSigmaPlus()->GetProcessManager();
118  aProcMan->AddDiscreteProcess(theAntiSigmaPlusInelastic);
119 
120  // XiMinus
121  auto theXiMinusInelastic = new G4XiMinusInelasticProcess();
122  theXiMinusInelastic->RegisterMe(theBertini);
123  theXiMinusInelastic->RegisterMe(HyperonFTFP);
124  theXiMinusInelastic->AddDataSet(theInelasticCrossSection);
125 
126  aProcMan = G4XiMinus::XiMinus()->GetProcessManager();
127  aProcMan->AddDiscreteProcess(theXiMinusInelastic);
128 
129  // anti-XiMinus
130  auto theAntiXiMinusInelastic = new G4AntiXiMinusInelasticProcess();
131  theAntiXiMinusInelastic->RegisterMe(AntiHyperonFTFP);
132  theAntiXiMinusInelastic->AddDataSet(theInelasticCrossSection);
133 
134  aProcMan = G4AntiXiMinus::AntiXiMinus()->GetProcessManager();
135  aProcMan->AddDiscreteProcess(theAntiXiMinusInelastic);
136 
137  // XiZero
138  auto theXiZeroInelastic = new G4XiZeroInelasticProcess();
139  theXiZeroInelastic->RegisterMe(theBertini);
140  theXiZeroInelastic->RegisterMe(HyperonFTFP);
141  theXiZeroInelastic->AddDataSet(theInelasticCrossSection);
142 
143  aProcMan = G4XiZero::XiZero()->GetProcessManager();
144  aProcMan->AddDiscreteProcess(theXiZeroInelastic);
145 
146  // anti-XiZero
147  auto theAntiXiZeroInelastic = new G4AntiXiZeroInelasticProcess();
148  theAntiXiZeroInelastic->RegisterMe(AntiHyperonFTFP);
149  theAntiXiZeroInelastic->AddDataSet(theInelasticCrossSection);
150 
151  aProcMan = G4AntiXiZero::AntiXiZero()->GetProcessManager();
152  aProcMan->AddDiscreteProcess(theAntiXiZeroInelastic);
153 
154  // OmegaMinus
155  auto theOmegaMinusInelastic = new G4OmegaMinusInelasticProcess();
156  theOmegaMinusInelastic->RegisterMe(theBertini);
157  theOmegaMinusInelastic->RegisterMe(HyperonFTFP);
158  theOmegaMinusInelastic->AddDataSet(theInelasticCrossSection);
159 
160  aProcMan = G4OmegaMinus::OmegaMinus()->GetProcessManager();
161  aProcMan->AddDiscreteProcess(theOmegaMinusInelastic);
162 
163  // anti-OmegaMinus
164  auto theAntiOmegaMinusInelastic = new G4AntiOmegaMinusInelasticProcess();
165  theAntiOmegaMinusInelastic->RegisterMe(AntiHyperonFTFP);
166  theAntiOmegaMinusInelastic->AddDataSet(theInelasticCrossSection);
167 
168  aProcMan = G4AntiOmegaMinus::AntiOmegaMinus()->GetProcessManager();
169  aProcMan->AddDiscreteProcess(theAntiOmegaMinusInelastic);
170 }
CMSHyperonFTFPBuilder::~CMSHyperonFTFPBuilder
~CMSHyperonFTFPBuilder() override
Definition: CMSHyperonFTFPBuilder.cc:34
CMSHyperonFTFPBuilder::Build
void Build() final
Definition: CMSHyperonFTFPBuilder.cc:36
CMSHyperonFTFPBuilder.h
BPhysicsValidation_cfi.Lambda
Lambda
Definition: BPhysicsValidation_cfi.py:63
CMSHyperonFTFPBuilder::CMSHyperonFTFPBuilder
CMSHyperonFTFPBuilder()
Definition: CMSHyperonFTFPBuilder.cc:32