Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/inclxx/incl_physics/src/G4INCLNNToMultiPionsChannel.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 }
565