Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCL::NNbarToNNbarpiChannel Class Reference

#include <G4INCLNNbarToNNbarpiChannel.hh>

+ Inheritance diagram for G4INCL::NNbarToNNbarpiChannel:

Public Member Functions

 NNbarToNNbarpiChannel (Particle *, Particle *)
 
virtual ~NNbarToNNbarpiChannel ()
 
void fillFinalState (FinalState *fs)
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
FinalStategetFinalState ()
 

Detailed Description

Definition at line 47 of file G4INCLNNbarToNNbarpiChannel.hh.

Constructor & Destructor Documentation

◆ NNbarToNNbarpiChannel()

G4INCL::NNbarToNNbarpiChannel::NNbarToNNbarpiChannel ( Particle * p1,
Particle * p2 )

Definition at line 49 of file G4INCLNNbarToNNbarpiChannel.cc.

50 : particle1(p1), particle2(p2)
51 {}

◆ ~NNbarToNNbarpiChannel()

G4INCL::NNbarToNNbarpiChannel::~NNbarToNNbarpiChannel ( )
virtual

Definition at line 53 of file G4INCLNNbarToNNbarpiChannel.cc.

53{}

Member Function Documentation

◆ fillFinalState()

void G4INCL::NNbarToNNbarpiChannel::fillFinalState ( FinalState * fs)
virtual

Implements G4INCL::IChannel.

Definition at line 55 of file G4INCLNNbarToNNbarpiChannel.cc.

55 {
56
57 //brief ppbar
58 // p pbar -> p pbar pi0 (BFMM 185)
59 // p pbar -> p nbar pi- (BFMM 188)
60 // p pbar -> n pbar pi+ (BFMM 199)
61 // p pbar -> n nbar pi0 (no data)
62 //
63 //brief npbar
64 // n pbar -> p pbar pi- (BFMM 491)
65 // n pbar -> p nbar pion (impossible)
66 // n pbar -> n pbar pi0 (BFMM 495)
67 // n pbar -> n nbar pi- (same as BFMM 188)
68 //
69 //brief nnbar
70 // n nbar -> n nbar pi0 (same as BFMM 185)
71 // n nbar -> p nbar pi- (same as BFMM 188)
72 // n nbar -> n pbar pi+ (same as BFMM 199)
73 // n nbar -> p pbar pi0 (no data)
74 //
75 //brief pnbar
76 // p nbar -> p pbar pi+ (same as BFMM 491)
77 // p nbar -> n pbar pion (impossible)
78 // p nbar -> p nbar pi0 (same as BFMM 495)
79 // p nbar -> n nbar pi+ (same as BFMM 188)
80
81 Particle *nucleon;
82 Particle *antinucleon;
83
84 if(particle1->isNucleon()){
85 nucleon = particle1;
86 antinucleon = particle2;
87 }
88 else{
89 nucleon = particle2;
90 antinucleon = particle1;
91 }
92
93 const G4double plab = 0.001*KinematicsUtils::momentumInLab(particle1, particle2);
94 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(nucleon, antinucleon);
95 const G4double rdm = Random::shoot();
96
97 const std::vector<G4double> BFMM185 = {-0.734, 0.841, 0.905, 3.415, -2.316, 0.775};
98 //{22.781, -22.602, -0.752, -11.036, 1.548, 0.775};
99 //const G4double Eth_PPbar_PPbar_pi0 = 0.775;
100 const std::vector<G4double> BFMM188 = { -0.442, 0.501, 0.002, 3.434, -1.201, 0.798};
101 //const G4double Eth_PPbar_PNbar_pim = 0.798;
102 const std::vector<G4double> BFMM199 = {-2.025, 2.055, -2.355, 6.064, -2.004, 0.798};
103 //const G4double Eth_PPbar_NPbar_pip = 0.798;
104 const std::vector<G4double> BFMM491 = {24.125, -20.669, -1.534, -19.573, 4.493, 0.787};
105 //const G4double Eth_NPbar_PPbar_pim = 0.787;
106 const std::vector<G4double> BFMM495 = {-0.650, -0.140, -0.058, 5.166, -1.705, 0.777};
107 //const G4double Eth_NPbar_NPbar_pi0 = 0.777;
108
109 // pnbar total is same as for npbar
110 // ppbar total is same as for nnbar
111 const G4double totalppbar = KinematicsUtils::compute_xs(BFMM199, plab) +KinematicsUtils::compute_xs(BFMM185, plab) +KinematicsUtils::compute_xs(BFMM188, plab);
112 const G4double totalpnbar = KinematicsUtils::compute_xs(BFMM491, plab) +KinematicsUtils::compute_xs(BFMM495, plab) +KinematicsUtils::compute_xs(BFMM188, plab);
113 //totalnnbar == totalppbar;
114 //totalpnbar == totalnpbar;
115 ParticleType PionType;
116
117 //setting types of new particles
118 if(nucleon->getType()==Proton){
119 if(antinucleon->getType()==antiProton){ // ppbar case
120 if(rdm*totalppbar < KinematicsUtils::compute_xs(BFMM185, plab)){ // ppbarpi0 case
121 PionType = PiZero;
122 if(rdm<0.5){
123 nucleon->setType(Proton);
124 antinucleon->setType(antiProton);
125 }
126 else{
127 nucleon->setType(antiProton);
128 antinucleon->setType(Proton);
129 }
130 }
131 else if(rdm*totalppbar < KinematicsUtils::compute_xs(BFMM185, plab)+KinematicsUtils::compute_xs(BFMM188, plab)){ //pnbarpi- case
132 PionType = PiMinus;
133 if(rdm<0.5){
134 nucleon->setType(Proton);
135 antinucleon->setType(antiNeutron);
136 }
137 else{
138 nucleon->setType(antiNeutron);
139 antinucleon->setType(Proton);
140 }
141 }
142 else{ // npbarpi+ case
143 PionType = PiPlus;
144 if(rdm<0.5){
145 nucleon->setType(Neutron);
146 antinucleon->setType(antiProton);
147 }
148 else{
149 nucleon->setType(antiProton);
150 antinucleon->setType(Neutron);
151 }
152 }
153 }
154 else{ //antiNeutron (pnbar case)
155 if(rdm*totalpnbar < KinematicsUtils::compute_xs(BFMM491, plab)){ // ppbarpi+ case
156 PionType = PiPlus;
157 if(rdm<0.5){
158 nucleon->setType(Proton);
159 antinucleon->setType(antiProton);
160 }
161 else{
162 nucleon->setType(antiProton);
163 antinucleon->setType(Proton);
164 }
165 }
166 else if(rdm*totalppbar < KinematicsUtils::compute_xs(BFMM491, plab)+KinematicsUtils::compute_xs(BFMM495, plab)){ //pnbarpi0 case
167 PionType = PiZero;
168 if(rdm<0.5){
169 nucleon->setType(Proton);
170 antinucleon->setType(antiNeutron);
171 }
172 else{
173 nucleon->setType(antiNeutron);
174 antinucleon->setType(Proton);
175 }
176 }
177 else{ // nnbarpi+ case
178 PionType = PiPlus;
179 if(rdm<0.5){
180 nucleon->setType(Neutron);
181 antinucleon->setType(antiNeutron);
182 }
183 else{
184 nucleon->setType(antiNeutron);
185 antinucleon->setType(Neutron);
186 }
187 }
188 }
189 }
190 else{ // neutron
191 if(antinucleon->getType()==antiProton){ //npbar case
192 if(rdm*totalpnbar < KinematicsUtils::compute_xs(BFMM491, plab)){ // ppbarpi- case
193 PionType = PiMinus;
194 if(rdm<0.5){
195 nucleon->setType(Proton);
196 antinucleon->setType(antiProton);
197 }
198 else{
199 nucleon->setType(antiProton);
200 antinucleon->setType(Proton);
201 }
202 }
203 else if(rdm*totalppbar < KinematicsUtils::compute_xs(BFMM491, plab)+KinematicsUtils::compute_xs(BFMM495, plab)){ //npbarpi0 case
204 PionType = PiZero;
205 if(rdm<0.5){
206 nucleon->setType(Neutron);
207 antinucleon->setType(antiProton);
208 }
209 else{
210 nucleon->setType(antiProton);
211 antinucleon->setType(Neutron);
212 }
213 }
214 else{ // nnbarpi- case
215 PionType = PiMinus;
216 if(rdm<0.5){
217 nucleon->setType(Neutron);
218 antinucleon->setType(antiNeutron);
219 }
220 else{
221 nucleon->setType(antiNeutron);
222 antinucleon->setType(Neutron);
223 }
224 }
225 }
226 else{ //antiNeutron (nnbar case)
227 if(rdm*totalpnbar < KinematicsUtils::compute_xs(BFMM185, plab)){ // nnbarpi0 case
228 PionType = PiZero;
229 if(rdm<0.5){
230 nucleon->setType(Neutron);
231 antinucleon->setType(antiNeutron);
232 }
233 else{
234 nucleon->setType(antiNeutron);
235 antinucleon->setType(Neutron);
236 }
237 }
238 else if(rdm*totalpnbar < KinematicsUtils::compute_xs(BFMM185, plab)+KinematicsUtils::compute_xs(BFMM188, plab)){ //pnbarpi- case
239 PionType = PiMinus;
240 if(rdm<0.5){
241 nucleon->setType(Proton);
242 antinucleon->setType(antiNeutron);
243 }
244 else{
245 nucleon->setType(antiNeutron);
246 antinucleon->setType(Proton);
247 }
248 }
249 else{ // npbarpi+ case
250 PionType = PiPlus;
251 if(rdm<0.5){
252 nucleon->setType(Neutron);
253 antinucleon->setType(antiProton);
254 }
255 else{
256 nucleon->setType(antiProton);
257 antinucleon->setType(Neutron);
258 }
259 }
260 }
261 }
262
263 ParticleList list;
264 list.push_back(nucleon);
265 list.push_back(antinucleon);
266 const ThreeVector &rcol = nucleon->getPosition();
267 const ThreeVector zero;
268 Particle *pion = new Particle(PionType,zero,rcol);
269 list.push_back(pion);
270
272
273 fs->addModifiedParticle(nucleon);
274 fs->addModifiedParticle(antinucleon);
275 fs->addCreatedParticle(pion);
276
277 }
double G4double
Definition G4Types.hh:83
G4bool isNucleon() const
G4double compute_xs(const std::vector< G4double > coefficients, const G4double pLab)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
void generate(const G4double sqrtS, ParticleList &particles)
Generate an event in the CM system.
G4double shoot()
G4bool antinucleon(G4int ityp)
G4bool nucleon(G4int ityp)

The documentation for this class was generated from the following files: