Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCLNNOmegaToMultiPionsChannel.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 
39 #include "G4INCLKinematicsUtils.hh"
41 #include "G4INCLRandom.hh"
42 #include "G4INCLGlobals.hh"
43 #include "G4INCLLogger.hh"
44 #include <algorithm>
46 
47 namespace G4INCL {
48 
49  const G4double NNOmegaToMultiPionsChannel::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 *omega = new Particle(Omega,zero,rcol);
94  list.push_back(omega);
95  fs->addCreatedParticle(omega);
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 NNOmegaToMultiPionsChannel::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 {
196  G4double pp=Random::shoot();
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::random_shuffle(isosp,isosp+npion,Random::getAdapter());
216  inter2Part(0.5);
217  }
218 
219 
220  void NNOmegaToMultiPionsChannel::pn_ppPim() {
221  isosp[0]=-2;
222  iso1=1;
223  iso2=1;
224  }
225  void NNOmegaToMultiPionsChannel::pn_pnPi0() {
226  isosp[0]=0;
227  }
228  void NNOmegaToMultiPionsChannel::pn_nnPip() {
229  isosp[0]=2;
230  iso1=-1;
231  iso2=-1;
232  }
233  void NNOmegaToMultiPionsChannel::pp_nnPipPip() {
234  isosp[0]=2;
235  isosp[1]=2;
236  iso1=-1;
237  iso2=-1;
238  }
239  void NNOmegaToMultiPionsChannel::nn_ppPimPim() {
240  isosp[0]=-2;
241  isosp[1]=-2;
242  iso1=1;
243  iso2=1;
244  }
245  void NNOmegaToMultiPionsChannel::pn_pnPipPim() {
246  isosp[0]=2;
247  isosp[1]=-2;
248  }
249  void NNOmegaToMultiPionsChannel::pn_pnPi0Pi0() {
250  isosp[0]=0;
251  isosp[1]=0;
252  }
253  void NNOmegaToMultiPionsChannel::pp_ppPipPim() {
254  isosp[0]=2;
255  isosp[1]=-2;
256  }
257  void NNOmegaToMultiPionsChannel::nn_nnPipPim() {
258  isosp[0]=2;
259  isosp[1]=-2;
260  }
261  void NNOmegaToMultiPionsChannel::pp_ppPi0Pi0() {
262  isosp[0]=0;
263  isosp[1]=0;
264  }
265  void NNOmegaToMultiPionsChannel::nn_nnPi0Pi0() {
266  isosp[0]=0;
267  isosp[1]=0;
268  }
269  void NNOmegaToMultiPionsChannel::pp_pnPipPi0() {
270  isosp[0]=2;
271  isosp[1]=0;
272  iso1=1;
273  iso2=-1;
274  }
275  void NNOmegaToMultiPionsChannel::pn_ppPimPi0() {
276  isosp[0]=-2;
277  isosp[1]=0;
278  iso1=1;
279  iso2=1;
280  }
281  void NNOmegaToMultiPionsChannel::pn_nnPipPi0() {
282  isosp[0]=2;
283  isosp[1]=0;
284  iso1=-1;
285  iso2=-1;
286  }
287  void NNOmegaToMultiPionsChannel::nn_pnPimPi0() {
288  isosp[0]=-2;
289  isosp[1]=0;
290  iso1=1;
291  iso2=-1;
292  }
293  void NNOmegaToMultiPionsChannel::pp_pnPipPi0Pi0() {
294  isosp[0]=2;
295  isosp[1]=0;
296  isosp[2]=0;
297  iso1=1;
298  iso2=-1;
299  }
300  void NNOmegaToMultiPionsChannel::nn_pnPimPi0Pi0() {
301  isosp[0]=-2;
302  isosp[1]=0;
303  isosp[2]=0;
304  iso1=1;
305  iso2=-1;
306  }
307  void NNOmegaToMultiPionsChannel::pn_nnPipPi0Pi0() {
308  isosp[0]=2;
309  isosp[1]=0;
310  isosp[2]=0;
311  iso1=-1;
312  iso2=-1;
313  }
314  void NNOmegaToMultiPionsChannel::pp_ppPipPimPi0() {
315  isosp[0]=2;
316  isosp[1]=-2;
317  isosp[2]=0;
318  }
319  void NNOmegaToMultiPionsChannel::nn_nnPipPimPi0() {
320  isosp[0]=2;
321  isosp[1]=-2;
322  isosp[2]=0;
323  }
324  void NNOmegaToMultiPionsChannel::pp_ppPi0Pi0Pi0() {
325  isosp[0]=0;
326  isosp[1]=0;
327  isosp[2]=0;
328  }
329  void NNOmegaToMultiPionsChannel::nn_nnPi0Pi0Pi0() {
330  isosp[0]=0;
331  isosp[1]=0;
332  isosp[2]=0;
333  }
334  void NNOmegaToMultiPionsChannel::pp_pnPipPipPim() {
335  isosp[0]=2;
336  isosp[1]=2;
337  isosp[2]=-2;
338  iso1=1;
339  iso2=-1;
340  }
341  void NNOmegaToMultiPionsChannel::pp_nnPipPipPi0() {
342  isosp[0]=2;
343  isosp[1]=2;
344  isosp[2]=0;
345  iso1=-1;
346  iso2=-1;
347  }
348  void NNOmegaToMultiPionsChannel::pn_ppPimPi0Pi0() {
349  isosp[0]=-2;
350  isosp[1]=0;
351  isosp[2]=0;
352  iso1=1;
353  iso2=1;
354  }
355  void NNOmegaToMultiPionsChannel::pn_ppPimPimPip() {
356  isosp[0]=-2;
357  isosp[1]=-2;
358  isosp[2]=2;
359  iso1=1;
360  iso2=1;
361  }
362  void NNOmegaToMultiPionsChannel::pn_pnPi0PipPim() {
363  isosp[0]=0;
364  isosp[1]=2;
365  isosp[2]=-2;
366  }
367  void NNOmegaToMultiPionsChannel::pn_pnPi0Pi0Pi0() {
368  isosp[0]=0;
369  isosp[1]=0;
370  isosp[2]=0;
371  }
372  void NNOmegaToMultiPionsChannel::pn_nnPipPipPim() {
373  isosp[0]=2;
374  isosp[1]=2;
375  isosp[2]=-2;
376  iso1=-1;
377  iso2=-1;
378  }
379  void NNOmegaToMultiPionsChannel::nn_pnPipPimPim() {
380  isosp[0]=2;
381  isosp[1]=-2;
382  isosp[2]=-2;
383  iso1=1;
384  iso2=-1;
385  }
386  void NNOmegaToMultiPionsChannel::nn_ppPimPimPi0() {
387  isosp[0]=-2;
388  isosp[1]=-2;
389  isosp[2]=0;
390  iso1=1;
391  iso2=1;
392  }
393  void NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::pp_ppPi0Pi0Pi0Pi0() {
426  isosp[0]=0;
427  isosp[1]=0;
428  isosp[2]=0;
429  isosp[3]=0;
430  }
431  void NNOmegaToMultiPionsChannel::nn_nnPi0Pi0Pi0Pi0() {
432  isosp[0]=0;
433  isosp[1]=0;
434  isosp[2]=0;
435  isosp[3]=0;
436  }
437  void NNOmegaToMultiPionsChannel::pn_pnPi0Pi0Pi0Pi0() {
438  isosp[0]=0;
439  isosp[1]=0;
440  isosp[2]=0;
441  isosp[3]=0;
442  }
443  void NNOmegaToMultiPionsChannel::pp_ppPipPi0Pi0Pim() {
444  isosp[0]=2;
445  isosp[1]=0;
446  isosp[2]=0;
447  isosp[3]=-2;
448  }
449  void NNOmegaToMultiPionsChannel::nn_nnPipPi0Pi0Pim() {
450  isosp[0]=2;
451  isosp[1]=0;
452  isosp[2]=0;
453  isosp[3]=-2;
454  }
455  void NNOmegaToMultiPionsChannel::pn_pnPipPi0Pi0Pim() {
456  isosp[0]=2;
457  isosp[1]=0;
458  isosp[2]=0;
459  isosp[3]=-2;
460  }
461  void NNOmegaToMultiPionsChannel::pp_ppPipPipPimPim() {
462  isosp[0]=2;
463  isosp[1]=2;
464  isosp[2]=-2;
465  isosp[3]=-2;
466  }
467  void NNOmegaToMultiPionsChannel::nn_nnPipPipPimPim() {
468  isosp[0]=2;
469  isosp[1]=2;
470  isosp[2]=-2;
471  isosp[3]=-2;
472  }
473  void NNOmegaToMultiPionsChannel::pn_pnPipPipPimPim() {
474  isosp[0]=2;
475  isosp[1]=2;
476  isosp[2]=-2;
477  isosp[3]=-2;
478  }
479  void NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::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 NNOmegaToMultiPionsChannel::inter2Part(const G4double p) {
561 
562  if (Random::shoot() < p) std::swap(iso1,iso2);
563 
564  }
565 
566 
567 }
void addCreatedParticle(Particle *p)
G4bool pion(G4int ityp)
const char * p
Definition: xmltok.h:285
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
int G4int
Definition: G4Types.hh:78
ParticleType getPionType(const G4int isosp)
Get the type of pion.
NNOmegaToMultiPionsChannel(const G4int, Particle *, Particle *)
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()
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
G4INCL::ParticleType getType() const
const G4INCL::ThreeVector & getPosition() const
void setType(ParticleType t)
G4double shoot()
Definition: G4INCLRandom.cc:93
double G4double
Definition: G4Types.hh:76
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
void addModifiedParticle(Particle *p)