Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLNNEtaToMultiPionsChannel.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
41#include "G4INCLRandom.hh"
42#include "G4INCLGlobals.hh"
43#include "G4INCLLogger.hh"
44#include <algorithm>
46
47namespace G4INCL {
48
49 const G4double NNEtaToMultiPionsChannel::angularSlope = 6.;
50
52 : npion(npi),
53 iso1(0),
54 iso2(0),
55 particle1(p1),
56 particle2(p2)
57 {
58 std::fill(isosp, isosp+4, 0);
59 }
60
62
63 }
64
66// assert(npion > 0 && npion < 5);
67
68 iso1=ParticleTable::getIsospin(particle1->getType());
69 iso2=ParticleTable::getIsospin(particle2->getType());
70
71 ParticleList list;
72 list.push_back(particle1);
73 list.push_back(particle2);
74 fs->addModifiedParticle(particle1);
75 fs->addModifiedParticle(particle2);
76
77 isospinRepartition();
78
80 particle1->setType(tn1);
82 particle2->setType(tn2);
83 const ThreeVector &rcolnucleon1 = particle1->getPosition();
84 const ThreeVector &rcolnucleon2 = particle2->getPosition();
85 const ThreeVector rcol = (rcolnucleon1+rcolnucleon2)*0.5;
86 const ThreeVector zero;
87 for(G4int i=0; i<npion; ++i) {
88 const ParticleType pionType=ParticleTable::getPionType(isosp[i]);
89 Particle *pion = new Particle(pionType,zero,rcol);
90 list.push_back(pion);
91 fs->addCreatedParticle(pion);
92 }
93 Particle *eta = new Particle(Eta,zero,rcol);
94 list.push_back(eta);
95 fs->addCreatedParticle(eta);
96
97 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
98 G4int biasIndex = ((Random::shoot()<0.5) ? 0 : 1);
99 PhaseSpaceGenerator::generateBiased(sqrtS, list, biasIndex, angularSlope);
100
101 }
102
103 void NNEtaToMultiPionsChannel::isospinRepartition() {
104 const G4double rjcd=Random::shoot();
105 G4double p;
106 const G4int itot=iso1+iso2;
107
108 if (npion == 1) {
109 p=3.*rjcd;
110 if (p < 1.) pn_ppPim();
111 else if (p < 2.) pn_pnPi0();
112 else pn_nnPip();
113 }
114 else if (npion == 2) {
115 if (itot == 2) {
116 p=20.*rjcd;
117 if (p >= 14.) pp_nnPipPip();
118 else if (p >= 11.) pp_pnPipPi0();
119 else if (p >= 7.) pp_ppPi0Pi0();
120 else pp_ppPipPim();
121 }
122 else if (itot == -2) {
123 p=20.*rjcd;
124 if (p >= 14.) nn_ppPimPim();
125 else if (p >= 11.) nn_pnPimPi0();
126 else if (p >= 7.) nn_nnPi0Pi0();
127 else nn_nnPipPim();
128 }
129 else {
131 if (pp > 0.5) {
132 p=3.*rjcd;
133 if (p < 2.) {
134 pn_pnPipPim();
135 }
136 else {
137 pn_pnPi0Pi0();
138 }
139 }
140 else {
141 p=60.*rjcd;
142 if (p >= 51.) pn_nnPipPi0();
143 else if (p >= 33.) pn_pnPi0Pi0();
144 else if (p >= 9.) pn_pnPipPim();
145 else pn_ppPimPi0();
146 }
147 }
148 }
149 else if (npion == 3) {
150 p=60.*rjcd;
151 if (itot == 2) {
152 if (p >= 42.) pp_nnPipPipPi0();
153 else if (p >= 39.) pp_pnPipPi0Pi0();
154 else if (p >= 33.) pp_pnPipPipPim();
155 else if (p >= 22.) pp_ppPi0Pi0Pi0();
156 else pp_ppPipPimPi0();
157 }
158 else if (itot == -2) {
159 if (p >= 42.) nn_ppPimPimPi0();
160 else if (p >= 39.) nn_pnPimPi0Pi0();
161 else if (p >= 33.) nn_pnPipPimPim();
162 else if (p >= 22.) nn_nnPi0Pi0Pi0();
163 else nn_nnPipPimPi0();
164 }
165 else {
166 if (p >= 57.) pn_nnPipPi0Pi0();
167 else if (p >= 51.) pn_nnPipPipPim();
168 else if (p >= 37.) pn_pnPi0Pi0Pi0();
169 else if (p >= 9.) pn_pnPi0PipPim();
170 else if (p >= 6.) pn_ppPimPi0Pi0();
171 else pn_ppPimPimPip();
172
173 }
174 }
175 else if (npion == 4) {
176 p=60.*rjcd;
177 if (itot == 2) {
178 if (p >= 48.) pp_nnPipPipPipPim();
179 else if (p >= 42.) pp_nnPipPipPi0Pi0();
180 else if (p >= 36.) pp_pnPipPipPi0Pim();
181 else if (p >= 33.) pp_pnPipPi0Pi0Pi0();
182 else if (p >= 19.) pp_ppPipPipPimPim();
183 else if (p >= 4.) pp_ppPipPi0Pi0Pim();
184 else pp_ppPi0Pi0Pi0Pi0();
185 }
186 else if (itot == -2) {
187 if (p >= 48.) nn_ppPipPimPimPim();
188 else if (p >= 42.) nn_ppPi0Pi0PimPim();
189 else if (p >= 36.) nn_pnPipPi0PimPim();
190 else if (p >= 33.) nn_pnPi0Pi0Pi0Pim();
191 else if (p >= 19.) nn_nnPipPipPimPim();
192 else if (p >= 4.) nn_nnPipPi0Pi0Pim();
193 else nn_nnPi0Pi0Pi0Pi0();
194 }
195 else {
197 if (pp > 0.5) {
198 p=9.*rjcd;
199 if (p < 1.) pn_pnPi0Pi0Pi0Pi0();
200 else if (p < 5.) pn_pnPipPi0Pi0Pim();
201 else pn_pnPipPipPimPim();
202 }
203 else {
204 if (p < 3.) pn_ppPi0Pi0Pi0Pim();
205 else if (p < 9.) pn_ppPipPi0PimPim();
206 else if (p < 15.) pn_pnPi0Pi0Pi0Pi0();
207 else if (p < 35.) pn_pnPipPi0Pi0Pim();
208 else if (p < 51.) pn_pnPipPipPimPim();
209 else if (p < 54.) pn_nnPipPi0Pi0Pi0();
210 else pn_nnPipPipPi0Pim();
211 }
212 }
213 }
214
215 std::shuffle(isosp,isosp+npion,Random::getAdapter());
216 inter2Part(0.5);
217 }
218
219
220 void NNEtaToMultiPionsChannel::pn_ppPim() {
221 isosp[0]=-2;
222 iso1=1;
223 iso2=1;
224 }
225 void NNEtaToMultiPionsChannel::pn_pnPi0() {
226 isosp[0]=0;
227 }
228 void NNEtaToMultiPionsChannel::pn_nnPip() {
229 isosp[0]=2;
230 iso1=-1;
231 iso2=-1;
232 }
233 void NNEtaToMultiPionsChannel::pp_nnPipPip() {
234 isosp[0]=2;
235 isosp[1]=2;
236 iso1=-1;
237 iso2=-1;
238 }
239 void NNEtaToMultiPionsChannel::nn_ppPimPim() {
240 isosp[0]=-2;
241 isosp[1]=-2;
242 iso1=1;
243 iso2=1;
244 }
245 void NNEtaToMultiPionsChannel::pn_pnPipPim() {
246 isosp[0]=2;
247 isosp[1]=-2;
248 }
249 void NNEtaToMultiPionsChannel::pn_pnPi0Pi0() {
250 isosp[0]=0;
251 isosp[1]=0;
252 }
253 void NNEtaToMultiPionsChannel::pp_ppPipPim() {
254 isosp[0]=2;
255 isosp[1]=-2;
256 }
257 void NNEtaToMultiPionsChannel::nn_nnPipPim() {
258 isosp[0]=2;
259 isosp[1]=-2;
260 }
261 void NNEtaToMultiPionsChannel::pp_ppPi0Pi0() {
262 isosp[0]=0;
263 isosp[1]=0;
264 }
265 void NNEtaToMultiPionsChannel::nn_nnPi0Pi0() {
266 isosp[0]=0;
267 isosp[1]=0;
268 }
269 void NNEtaToMultiPionsChannel::pp_pnPipPi0() {
270 isosp[0]=2;
271 isosp[1]=0;
272 iso1=1;
273 iso2=-1;
274 }
275 void NNEtaToMultiPionsChannel::pn_ppPimPi0() {
276 isosp[0]=-2;
277 isosp[1]=0;
278 iso1=1;
279 iso2=1;
280 }
281 void NNEtaToMultiPionsChannel::pn_nnPipPi0() {
282 isosp[0]=2;
283 isosp[1]=0;
284 iso1=-1;
285 iso2=-1;
286 }
287 void NNEtaToMultiPionsChannel::nn_pnPimPi0() {
288 isosp[0]=-2;
289 isosp[1]=0;
290 iso1=1;
291 iso2=-1;
292 }
293 void NNEtaToMultiPionsChannel::pp_pnPipPi0Pi0() {
294 isosp[0]=2;
295 isosp[1]=0;
296 isosp[2]=0;
297 iso1=1;
298 iso2=-1;
299 }
300 void NNEtaToMultiPionsChannel::nn_pnPimPi0Pi0() {
301 isosp[0]=-2;
302 isosp[1]=0;
303 isosp[2]=0;
304 iso1=1;
305 iso2=-1;
306 }
307 void NNEtaToMultiPionsChannel::pn_nnPipPi0Pi0() {
308 isosp[0]=2;
309 isosp[1]=0;
310 isosp[2]=0;
311 iso1=-1;
312 iso2=-1;
313 }
314 void NNEtaToMultiPionsChannel::pp_ppPipPimPi0() {
315 isosp[0]=2;
316 isosp[1]=-2;
317 isosp[2]=0;
318 }
319 void NNEtaToMultiPionsChannel::nn_nnPipPimPi0() {
320 isosp[0]=2;
321 isosp[1]=-2;
322 isosp[2]=0;
323 }
324 void NNEtaToMultiPionsChannel::pp_ppPi0Pi0Pi0() {
325 isosp[0]=0;
326 isosp[1]=0;
327 isosp[2]=0;
328 }
329 void NNEtaToMultiPionsChannel::nn_nnPi0Pi0Pi0() {
330 isosp[0]=0;
331 isosp[1]=0;
332 isosp[2]=0;
333 }
334 void NNEtaToMultiPionsChannel::pp_pnPipPipPim() {
335 isosp[0]=2;
336 isosp[1]=2;
337 isosp[2]=-2;
338 iso1=1;
339 iso2=-1;
340 }
341 void NNEtaToMultiPionsChannel::pp_nnPipPipPi0() {
342 isosp[0]=2;
343 isosp[1]=2;
344 isosp[2]=0;
345 iso1=-1;
346 iso2=-1;
347 }
348 void NNEtaToMultiPionsChannel::pn_ppPimPi0Pi0() {
349 isosp[0]=-2;
350 isosp[1]=0;
351 isosp[2]=0;
352 iso1=1;
353 iso2=1;
354 }
355 void NNEtaToMultiPionsChannel::pn_ppPimPimPip() {
356 isosp[0]=-2;
357 isosp[1]=-2;
358 isosp[2]=2;
359 iso1=1;
360 iso2=1;
361 }
362 void NNEtaToMultiPionsChannel::pn_pnPi0PipPim() {
363 isosp[0]=0;
364 isosp[1]=2;
365 isosp[2]=-2;
366 }
367 void NNEtaToMultiPionsChannel::pn_pnPi0Pi0Pi0() {
368 isosp[0]=0;
369 isosp[1]=0;
370 isosp[2]=0;
371 }
372 void NNEtaToMultiPionsChannel::pn_nnPipPipPim() {
373 isosp[0]=2;
374 isosp[1]=2;
375 isosp[2]=-2;
376 iso1=-1;
377 iso2=-1;
378 }
379 void NNEtaToMultiPionsChannel::nn_pnPipPimPim() {
380 isosp[0]=2;
381 isosp[1]=-2;
382 isosp[2]=-2;
383 iso1=1;
384 iso2=-1;
385 }
386 void NNEtaToMultiPionsChannel::nn_ppPimPimPi0() {
387 isosp[0]=-2;
388 isosp[1]=-2;
389 isosp[2]=0;
390 iso1=1;
391 iso2=1;
392 }
393 void NNEtaToMultiPionsChannel::pp_nnPipPipPi0Pi0() {
394 isosp[0]=2;
395 isosp[1]=2;
396 isosp[2]=0;
397 isosp[3]=0;
398 iso1=-1;
399 iso2=-1;
400 }
401 void NNEtaToMultiPionsChannel::pp_nnPipPipPipPim() {
402 isosp[0]=2;
403 isosp[1]=2;
404 isosp[2]=2;
405 isosp[3]=-2;
406 iso1=-1;
407 iso2=-1;
408 }
409 void NNEtaToMultiPionsChannel::nn_ppPi0Pi0PimPim() {
410 isosp[0]=0;
411 isosp[1]=0;
412 isosp[2]=-2;
413 isosp[3]=-2;
414 iso1=1;
415 iso2=1;
416 }
417 void NNEtaToMultiPionsChannel::nn_ppPipPimPimPim() {
418 isosp[0]=2;
419 isosp[1]=-2;
420 isosp[2]=-2;
421 isosp[3]=-2;
422 iso1=1;
423 iso2=1;
424 }
425 void NNEtaToMultiPionsChannel::pp_ppPi0Pi0Pi0Pi0() {
426 isosp[0]=0;
427 isosp[1]=0;
428 isosp[2]=0;
429 isosp[3]=0;
430 }
431 void NNEtaToMultiPionsChannel::nn_nnPi0Pi0Pi0Pi0() {
432 isosp[0]=0;
433 isosp[1]=0;
434 isosp[2]=0;
435 isosp[3]=0;
436 }
437 void NNEtaToMultiPionsChannel::pn_pnPi0Pi0Pi0Pi0() {
438 isosp[0]=0;
439 isosp[1]=0;
440 isosp[2]=0;
441 isosp[3]=0;
442 }
443 void NNEtaToMultiPionsChannel::pp_ppPipPi0Pi0Pim() {
444 isosp[0]=2;
445 isosp[1]=0;
446 isosp[2]=0;
447 isosp[3]=-2;
448 }
449 void NNEtaToMultiPionsChannel::nn_nnPipPi0Pi0Pim() {
450 isosp[0]=2;
451 isosp[1]=0;
452 isosp[2]=0;
453 isosp[3]=-2;
454 }
455 void NNEtaToMultiPionsChannel::pn_pnPipPi0Pi0Pim() {
456 isosp[0]=2;
457 isosp[1]=0;
458 isosp[2]=0;
459 isosp[3]=-2;
460 }
461 void NNEtaToMultiPionsChannel::pp_ppPipPipPimPim() {
462 isosp[0]=2;
463 isosp[1]=2;
464 isosp[2]=-2;
465 isosp[3]=-2;
466 }
467 void NNEtaToMultiPionsChannel::nn_nnPipPipPimPim() {
468 isosp[0]=2;
469 isosp[1]=2;
470 isosp[2]=-2;
471 isosp[3]=-2;
472 }
473 void NNEtaToMultiPionsChannel::pn_pnPipPipPimPim() {
474 isosp[0]=2;
475 isosp[1]=2;
476 isosp[2]=-2;
477 isosp[3]=-2;
478 }
479 void NNEtaToMultiPionsChannel::pp_pnPipPi0Pi0Pi0() {
480 isosp[0]=2;
481 isosp[1]=0;
482 isosp[2]=0;
483 isosp[3]=0;
484 iso1=1;
485 iso2=-1;
486 }
487 void NNEtaToMultiPionsChannel::pn_nnPipPi0Pi0Pi0() {
488 isosp[0]=2;
489 isosp[1]=0;
490 isosp[2]=0;
491 isosp[3]=0;
492 iso1=-1;
493 iso2=-1;
494 }
495 void NNEtaToMultiPionsChannel::pp_nnPipPi0Pi0Pi0() {
496 isosp[0]=2;
497 isosp[1]=0;
498 isosp[2]=0;
499 isosp[3]=0;
500 iso1=-1;
501 iso2=-1;
502 }
503 void NNEtaToMultiPionsChannel::pp_pnPipPipPi0Pim() {
504 isosp[0]=2;
505 isosp[1]=2;
506 isosp[2]=0;
507 isosp[3]=-2;
508 iso1=1;
509 iso2=-1;
510 }
511 void NNEtaToMultiPionsChannel::pn_nnPipPipPi0Pim() {
512 isosp[0]=2;
513 isosp[1]=2;
514 isosp[2]=0;
515 isosp[3]=-2;
516 iso1=-1;
517 iso2=-1;
518 }
519 void NNEtaToMultiPionsChannel::pp_nnPipPipPi0Pim() {
520 isosp[0]=2;
521 isosp[1]=2;
522 isosp[2]=0;
523 isosp[3]=-2;
524 iso1=-1;
525 iso2=-1;
526 }
527 void NNEtaToMultiPionsChannel::nn_pnPi0Pi0Pi0Pim() {
528 isosp[0]=0;
529 isosp[1]=0;
530 isosp[2]=0;
531 isosp[3]=-2;
532 iso1=1;
533 iso2=-1;
534 }
535 void NNEtaToMultiPionsChannel::pn_ppPi0Pi0Pi0Pim() {
536 isosp[0]=0;
537 isosp[1]=0;
538 isosp[2]=0;
539 isosp[3]=-2;
540 iso1=1;
541 iso2=1;
542 }
543 void NNEtaToMultiPionsChannel::nn_pnPipPi0PimPim() {
544 isosp[0]=2;
545 isosp[1]=0;
546 isosp[2]=-2;
547 isosp[3]=-2;
548 iso1=1;
549 iso2=-1;
550 }
551 void NNEtaToMultiPionsChannel::pn_ppPipPi0PimPim() {
552 isosp[0]=2;
553 isosp[1]=0;
554 isosp[2]=-2;
555 isosp[3]=-2;
556 iso1=1;
557 iso2=1;
558 }
559
560 void NNEtaToMultiPionsChannel::inter2Part(const G4double p) {
561
562 if (Random::shoot() < p) std::swap(iso1,iso2);
563
564 }
565
566
567}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
void addModifiedParticle(Particle *p)
void addCreatedParticle(Particle *p)
NNEtaToMultiPionsChannel(const G4int, Particle *, Particle *)
const G4INCL::ThreeVector & getPosition() const
G4INCL::ParticleType getType() const
void setType(ParticleType t)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
Adapter const & getAdapter()
G4double shoot()
Definition: G4INCLRandom.cc:93