ECCE @ EIC Software
Reference for
ECCE @ EIC
simulation and reconstruction software on GitHub
Home page
Related Pages
Modules
Namespaces
Classes
Files
External Links
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
G4INCLNNToMultiPionsChannel.cc
Go to the documentation of this file.
Or view
the newest version in sPHENIX GitHub for file G4INCLNNToMultiPionsChannel.cc
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
38
#include "
G4INCLNNToMultiPionsChannel.hh
"
39
#include "
G4INCLKinematicsUtils.hh
"
40
#include "
G4INCLBinaryCollisionAvatar.hh
"
41
#include "
G4INCLRandom.hh
"
42
#include "
G4INCLGlobals.hh
"
43
#include "
G4INCLLogger.hh
"
44
#include <algorithm>
45
#include "
G4INCLPhaseSpaceGenerator.hh
"
46
47
namespace
G4INCL {
48
49
const
G4double
NNToMultiPionsChannel::angularSlope
= 6.;
50
51
NNToMultiPionsChannel::NNToMultiPionsChannel
(
const
G4int
npi,
Particle
*p1,
Particle
*p2)
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
61
NNToMultiPionsChannel::~NNToMultiPionsChannel
(){
62
63
}
64
65
void
NNToMultiPionsChannel::fillFinalState
(
FinalState
*
fs
) {
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
79
const
ParticleType
tn1=
ParticleTable::getNucleonType
(
iso1
);
80
particle1
->
setType
(tn1);
81
const
ParticleType
tn2=
ParticleTable::getNucleonType
(iso2);
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
94
const
G4double
sqrtS =
KinematicsUtils::totalEnergyInCM
(
particle1
,
particle2
);
95
G4int
biasIndex = ((
Random::shoot
()<0.5) ? 0 : 1);
96
PhaseSpaceGenerator::generateBiased
(sqrtS, list, biasIndex,
angularSlope
);
97
98
}
99
100
void
NNToMultiPionsChannel::isospinRepartition
() {
101
const
G4double
rjcd=
Random::shoot
();
102
G4double
p
;
103
const
G4int
itot=
iso1
+
iso2
;
104
105
if
(
npion
== 1) {
106
p=3.*rjcd;
107
if
(p < 1.)
pn_ppPim
();
108
else
if
(p < 2.)
pn_pnPi0
();
109
else
pn_nnPip
();
110
}
111
else
if
(
npion
== 2) {
112
if
(itot == 2) {
113
p=20.*rjcd;
114
if
(p >= 14.)
pp_nnPipPip
();
115
else
if
(p >= 11.)
pp_pnPipPi0
();
116
else
if
(p >= 7.)
pp_ppPi0Pi0
();
117
else
pp_ppPipPim
();
118
}
119
else
if
(itot == -2) {
120
p=20.*rjcd;
121
if
(p >= 14.)
nn_ppPimPim
();
122
else
if
(p >= 11.)
nn_pnPimPi0
();
123
else
if
(p >= 7.)
nn_nnPi0Pi0
();
124
else
nn_nnPipPim
();
125
}
126
else
{
127
G4double
pp
=
Random::shoot
();
128
if
(pp > 0.5) {
129
p=3.*rjcd;
130
if
(p < 2.) {
131
pn_pnPipPim
();
132
}
133
else
{
134
pn_pnPi0Pi0
();
135
}
136
}
137
else
{
138
p=60.*rjcd;
139
if
(p >= 51.)
pn_nnPipPi0
();
140
else
if
(p >= 33.)
pn_pnPi0Pi0
();
141
else
if
(p >= 9.)
pn_pnPipPim
();
142
else
pn_ppPimPi0
();
143
}
144
}
145
}
146
else
if
(
npion
== 3) {
147
p=60.*rjcd;
148
if
(itot == 2) {
149
if
(p >= 42.)
pp_nnPipPipPi0
();
150
else
if
(p >= 39.)
pp_pnPipPi0Pi0
();
151
else
if
(p >= 33.)
pp_pnPipPipPim
();
152
else
if
(p >= 22.)
pp_ppPi0Pi0Pi0
();
153
else
pp_ppPipPimPi0
();
154
}
155
else
if
(itot == -2) {
156
if
(p >= 42.)
nn_ppPimPimPi0
();
157
else
if
(p >= 39.)
nn_pnPimPi0Pi0
();
158
else
if
(p >= 33.)
nn_pnPipPimPim
();
159
else
if
(p >= 22.)
nn_nnPi0Pi0Pi0
();
160
else
nn_nnPipPimPi0
();
161
}
162
else
{
163
if
(p >= 57.)
pn_nnPipPi0Pi0
();
164
else
if
(p >= 51.)
pn_nnPipPipPim
();
165
else
if
(p >= 37.)
pn_pnPi0Pi0Pi0
();
166
else
if
(p >= 9.)
pn_pnPi0PipPim
();
167
else
if
(p >= 6.)
pn_ppPimPi0Pi0
();
168
else
pn_ppPimPimPip
();
169
170
}
171
}
172
else
if
(
npion
== 4) {
173
p=60.*rjcd;
174
if
(itot == 2) {
175
if
(p >= 48.)
pp_nnPipPipPipPim
();
176
else
if
(p >= 42.)
pp_nnPipPipPi0Pi0
();
177
else
if
(p >= 36.)
pp_pnPipPipPi0Pim
();
178
else
if
(p >= 33.)
pp_pnPipPi0Pi0Pi0
();
179
else
if
(p >= 19.)
pp_ppPipPipPimPim
();
180
else
if
(p >= 4.)
pp_ppPipPi0Pi0Pim
();
181
else
pp_ppPi0Pi0Pi0Pi0
();
182
}
183
else
if
(itot == -2) {
184
if
(p >= 48.)
nn_ppPipPimPimPim
();
185
else
if
(p >= 42.)
nn_ppPi0Pi0PimPim
();
186
else
if
(p >= 36.)
nn_pnPipPi0PimPim
();
187
else
if
(p >= 33.)
nn_pnPi0Pi0Pi0Pim
();
188
else
if
(p >= 19.)
nn_nnPipPipPimPim
();
189
else
if
(p >= 4.)
nn_nnPipPi0Pi0Pim
();
190
else
nn_nnPi0Pi0Pi0Pi0
();
191
}
192
else
{
193
G4double
pp
=
Random::shoot
();
194
if
(pp > 0.5) {
195
p=9.*rjcd;
196
if
(p < 1.)
pn_pnPi0Pi0Pi0Pi0
();
197
else
if
(p < 5.)
pn_pnPipPi0Pi0Pim
();
198
else
pn_pnPipPipPimPim
();
199
}
200
else
{
201
if
(p < 3.)
pn_ppPi0Pi0Pi0Pim
();
202
else
if
(p < 9.)
pn_ppPipPi0PimPim
();
203
else
if
(p < 15.)
pn_pnPi0Pi0Pi0Pi0
();
204
else
if
(p < 35.)
pn_pnPipPi0Pi0Pim
();
205
else
if
(p < 51.)
pn_pnPipPipPimPim
();
206
else
if
(p < 54.)
pn_nnPipPi0Pi0Pi0
();
207
else
pn_nnPipPipPi0Pim
();
208
}
209
}
210
}
211
212
std::shuffle(
isosp
,
isosp
+
npion
,
Random::getAdapter
());
213
inter2Part
(0.5);
214
}
215
216
217
void
NNToMultiPionsChannel::pn_ppPim
() {
218
isosp
[0]=-2;
219
iso1
=1;
220
iso2
=1;
221
}
222
void
NNToMultiPionsChannel::pn_pnPi0
() {
223
isosp
[0]=0;
224
}
225
void
NNToMultiPionsChannel::pn_nnPip
() {
226
isosp
[0]=2;
227
iso1
=-1;
228
iso2
=-1;
229
}
230
void
NNToMultiPionsChannel::pp_nnPipPip
() {
231
isosp
[0]=2;
232
isosp
[1]=2;
233
iso1
=-1;
234
iso2
=-1;
235
}
236
void
NNToMultiPionsChannel::nn_ppPimPim
() {
237
isosp
[0]=-2;
238
isosp
[1]=-2;
239
iso1
=1;
240
iso2
=1;
241
}
242
void
NNToMultiPionsChannel::pn_pnPipPim
() {
243
isosp
[0]=2;
244
isosp
[1]=-2;
245
}
246
void
NNToMultiPionsChannel::pn_pnPi0Pi0
() {
247
isosp
[0]=0;
248
isosp
[1]=0;
249
}
250
void
NNToMultiPionsChannel::pp_ppPipPim
() {
251
isosp
[0]=2;
252
isosp
[1]=-2;
253
}
254
void
NNToMultiPionsChannel::nn_nnPipPim
() {
255
isosp
[0]=2;
256
isosp
[1]=-2;
257
}
258
void
NNToMultiPionsChannel::pp_ppPi0Pi0
() {
259
isosp
[0]=0;
260
isosp
[1]=0;
261
}
262
void
NNToMultiPionsChannel::nn_nnPi0Pi0
() {
263
isosp
[0]=0;
264
isosp
[1]=0;
265
}
266
void
NNToMultiPionsChannel::pp_pnPipPi0
() {
267
isosp
[0]=2;
268
isosp
[1]=0;
269
iso1
=1;
270
iso2
=-1;
271
}
272
void
NNToMultiPionsChannel::pn_ppPimPi0
() {
273
isosp
[0]=-2;
274
isosp
[1]=0;
275
iso1
=1;
276
iso2
=1;
277
}
278
void
NNToMultiPionsChannel::pn_nnPipPi0
() {
279
isosp
[0]=2;
280
isosp
[1]=0;
281
iso1
=-1;
282
iso2
=-1;
283
}
284
void
NNToMultiPionsChannel::nn_pnPimPi0
() {
285
isosp
[0]=-2;
286
isosp
[1]=0;
287
iso1
=1;
288
iso2
=-1;
289
}
290
void
NNToMultiPionsChannel::pp_pnPipPi0Pi0
() {
291
isosp
[0]=2;
292
isosp
[1]=0;
293
isosp
[2]=0;
294
iso1
=1;
295
iso2
=-1;
296
}
297
void
NNToMultiPionsChannel::nn_pnPimPi0Pi0
() {
298
isosp
[0]=-2;
299
isosp
[1]=0;
300
isosp
[2]=0;
301
iso1
=1;
302
iso2
=-1;
303
}
304
void
NNToMultiPionsChannel::pn_nnPipPi0Pi0
() {
305
isosp
[0]=2;
306
isosp
[1]=0;
307
isosp
[2]=0;
308
iso1
=-1;
309
iso2
=-1;
310
}
311
void
NNToMultiPionsChannel::pp_ppPipPimPi0
() {
312
isosp
[0]=2;
313
isosp
[1]=-2;
314
isosp
[2]=0;
315
}
316
void
NNToMultiPionsChannel::nn_nnPipPimPi0
() {
317
isosp
[0]=2;
318
isosp
[1]=-2;
319
isosp
[2]=0;
320
}
321
void
NNToMultiPionsChannel::pp_ppPi0Pi0Pi0
() {
322
isosp
[0]=0;
323
isosp
[1]=0;
324
isosp
[2]=0;
325
}
326
void
NNToMultiPionsChannel::nn_nnPi0Pi0Pi0
() {
327
isosp
[0]=0;
328
isosp
[1]=0;
329
isosp
[2]=0;
330
}
331
void
NNToMultiPionsChannel::pp_pnPipPipPim
() {
332
isosp
[0]=2;
333
isosp
[1]=2;
334
isosp
[2]=-2;
335
iso1
=1;
336
iso2
=-1;
337
}
338
void
NNToMultiPionsChannel::pp_nnPipPipPi0
() {
339
isosp
[0]=2;
340
isosp
[1]=2;
341
isosp
[2]=0;
342
iso1
=-1;
343
iso2
=-1;
344
}
345
void
NNToMultiPionsChannel::pn_ppPimPi0Pi0
() {
346
isosp
[0]=-2;
347
isosp
[1]=0;
348
isosp
[2]=0;
349
iso1
=1;
350
iso2
=1;
351
}
352
void
NNToMultiPionsChannel::pn_ppPimPimPip
() {
353
isosp
[0]=-2;
354
isosp
[1]=-2;
355
isosp
[2]=2;
356
iso1
=1;
357
iso2
=1;
358
}
359
void
NNToMultiPionsChannel::pn_pnPi0PipPim
() {
360
isosp
[0]=0;
361
isosp
[1]=2;
362
isosp
[2]=-2;
363
}
364
void
NNToMultiPionsChannel::pn_pnPi0Pi0Pi0
() {
365
isosp
[0]=0;
366
isosp
[1]=0;
367
isosp
[2]=0;
368
}
369
void
NNToMultiPionsChannel::pn_nnPipPipPim
() {
370
isosp
[0]=2;
371
isosp
[1]=2;
372
isosp
[2]=-2;
373
iso1
=-1;
374
iso2
=-1;
375
}
376
void
NNToMultiPionsChannel::nn_pnPipPimPim
() {
377
isosp
[0]=2;
378
isosp
[1]=-2;
379
isosp
[2]=-2;
380
iso1
=1;
381
iso2
=-1;
382
}
383
void
NNToMultiPionsChannel::nn_ppPimPimPi0
() {
384
isosp
[0]=-2;
385
isosp
[1]=-2;
386
isosp
[2]=0;
387
iso1
=1;
388
iso2
=1;
389
}
390
void
NNToMultiPionsChannel::pp_nnPipPipPi0Pi0
() {
391
isosp
[0]=2;
392
isosp
[1]=2;
393
isosp
[2]=0;
394
isosp
[3]=0;
395
iso1
=-1;
396
iso2
=-1;
397
}
398
void
NNToMultiPionsChannel::pp_nnPipPipPipPim
() {
399
isosp
[0]=2;
400
isosp
[1]=2;
401
isosp
[2]=2;
402
isosp
[3]=-2;
403
iso1
=-1;
404
iso2
=-1;
405
}
406
void
NNToMultiPionsChannel::nn_ppPi0Pi0PimPim
() {
407
isosp
[0]=0;
408
isosp
[1]=0;
409
isosp
[2]=-2;
410
isosp
[3]=-2;
411
iso1
=1;
412
iso2
=1;
413
}
414
void
NNToMultiPionsChannel::nn_ppPipPimPimPim
() {
415
isosp
[0]=2;
416
isosp
[1]=-2;
417
isosp
[2]=-2;
418
isosp
[3]=-2;
419
iso1
=1;
420
iso2
=1;
421
}
422
void
NNToMultiPionsChannel::pp_ppPi0Pi0Pi0Pi0
() {
423
isosp
[0]=0;
424
isosp
[1]=0;
425
isosp
[2]=0;
426
isosp
[3]=0;
427
}
428
void
NNToMultiPionsChannel::nn_nnPi0Pi0Pi0Pi0
() {
429
isosp
[0]=0;
430
isosp
[1]=0;
431
isosp
[2]=0;
432
isosp
[3]=0;
433
}
434
void
NNToMultiPionsChannel::pn_pnPi0Pi0Pi0Pi0
() {
435
isosp
[0]=0;
436
isosp
[1]=0;
437
isosp
[2]=0;
438
isosp
[3]=0;
439
}
440
void
NNToMultiPionsChannel::pp_ppPipPi0Pi0Pim
() {
441
isosp
[0]=2;
442
isosp
[1]=0;
443
isosp
[2]=0;
444
isosp
[3]=-2;
445
}
446
void
NNToMultiPionsChannel::nn_nnPipPi0Pi0Pim
() {
447
isosp
[0]=2;
448
isosp
[1]=0;
449
isosp
[2]=0;
450
isosp
[3]=-2;
451
}
452
void
NNToMultiPionsChannel::pn_pnPipPi0Pi0Pim
() {
453
isosp
[0]=2;
454
isosp
[1]=0;
455
isosp
[2]=0;
456
isosp
[3]=-2;
457
}
458
void
NNToMultiPionsChannel::pp_ppPipPipPimPim
() {
459
isosp
[0]=2;
460
isosp
[1]=2;
461
isosp
[2]=-2;
462
isosp
[3]=-2;
463
}
464
void
NNToMultiPionsChannel::nn_nnPipPipPimPim
() {
465
isosp
[0]=2;
466
isosp
[1]=2;
467
isosp
[2]=-2;
468
isosp
[3]=-2;
469
}
470
void
NNToMultiPionsChannel::pn_pnPipPipPimPim
() {
471
isosp
[0]=2;
472
isosp
[1]=2;
473
isosp
[2]=-2;
474
isosp
[3]=-2;
475
}
476
void
NNToMultiPionsChannel::pp_pnPipPi0Pi0Pi0
() {
477
isosp
[0]=2;
478
isosp
[1]=0;
479
isosp
[2]=0;
480
isosp
[3]=0;
481
iso1
=1;
482
iso2
=-1;
483
}
484
void
NNToMultiPionsChannel::pn_nnPipPi0Pi0Pi0
() {
485
isosp
[0]=2;
486
isosp
[1]=0;
487
isosp
[2]=0;
488
isosp
[3]=0;
489
iso1
=-1;
490
iso2
=-1;
491
}
492
void
NNToMultiPionsChannel::pp_nnPipPi0Pi0Pi0
() {
493
isosp
[0]=2;
494
isosp
[1]=0;
495
isosp
[2]=0;
496
isosp
[3]=0;
497
iso1
=-1;
498
iso2
=-1;
499
}
500
void
NNToMultiPionsChannel::pp_pnPipPipPi0Pim
() {
501
isosp
[0]=2;
502
isosp
[1]=2;
503
isosp
[2]=0;
504
isosp
[3]=-2;
505
iso1
=1;
506
iso2
=-1;
507
}
508
void
NNToMultiPionsChannel::pn_nnPipPipPi0Pim
() {
509
isosp
[0]=2;
510
isosp
[1]=2;
511
isosp
[2]=0;
512
isosp
[3]=-2;
513
iso1
=-1;
514
iso2
=-1;
515
}
516
void
NNToMultiPionsChannel::pp_nnPipPipPi0Pim
() {
517
isosp
[0]=2;
518
isosp
[1]=2;
519
isosp
[2]=0;
520
isosp
[3]=-2;
521
iso1
=-1;
522
iso2
=-1;
523
}
524
void
NNToMultiPionsChannel::nn_pnPi0Pi0Pi0Pim
() {
525
isosp
[0]=0;
526
isosp
[1]=0;
527
isosp
[2]=0;
528
isosp
[3]=-2;
529
iso1
=1;
530
iso2
=-1;
531
}
532
void
NNToMultiPionsChannel::pn_ppPi0Pi0Pi0Pim
() {
533
isosp
[0]=0;
534
isosp
[1]=0;
535
isosp
[2]=0;
536
isosp
[3]=-2;
537
iso1
=1;
538
iso2
=1;
539
}
540
void
NNToMultiPionsChannel::nn_pnPipPi0PimPim
() {
541
isosp
[0]=2;
542
isosp
[1]=0;
543
isosp
[2]=-2;
544
isosp
[3]=-2;
545
iso1
=1;
546
iso2
=-1;
547
}
548
void
NNToMultiPionsChannel::pn_ppPipPi0PimPim
() {
549
isosp
[0]=2;
550
isosp
[1]=0;
551
isosp
[2]=-2;
552
isosp
[3]=-2;
553
iso1
=1;
554
iso2
=1;
555
}
556
557
void
NNToMultiPionsChannel::inter2Part
(
const
G4double
p
) {
558
559
if
(
Random::shoot
() < p)
std::swap
(
iso1
,
iso2
);
560
561
}
562
563
564
}
geant4
tree
geant4-10.6-release
source
processes
hadronic
models
inclxx
incl_physics
src
G4INCLNNToMultiPionsChannel.cc
Built by
Jin Huang
. updated:
Wed Jun 29 2022 17:25:45
using
1.8.2 with
ECCE GitHub integration