ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLNKToNK2piChannel.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4INCLNKToNK2piChannel.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 
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 NKToNK2piChannel::angularSlope = 4.; // What is the exact effect? Sould be check
50 
52  : particle1(p1), particle2(p2)
53  {}
54 
56 
58 
59  // p K+ -> p K+ pi+ pi- (1)
60  // p K+ -> p K+ pi0 pi0 (1/8)
61  // p K+ -> p K0 pi+ pi0 (1)
62  // p K+ -> n K+ pi+ pi0 (1/2)
63  // p K+ -> n K0 pi+ pi+ (1/4)
64  //
65  // p K0 -> p K0 pi+ pi- (1)
66  // p K0 -> p K0 pi0 pi0 (1/8)
67  // p K0 -> p K+ pi0 pi- (1)
68  // p K0 -> n K+ pi+ pi- (1/4)
69  // p K0 -> n K+ pi0 pi0 (1/4)
70  // p K0 -> n K0 pi+ pi0 (1/2)
71 
73  Particle *kaon;
74 
75  if(particle1->isNucleon()){
76  nucleon = particle1;
77  kaon = particle2;
78  }
79  else{
80  nucleon = particle2;
81  kaon = particle1;
82  }
83 
84  const G4double sqrtS = KinematicsUtils::totalEnergyInCM(nucleon, kaon);
85 
86  const G4int iso = ParticleTable::getIsospin(nucleon->getType()) + ParticleTable::getIsospin(kaon->getType());
87  const G4int iso_n = ParticleTable::getIsospin(nucleon->getType());
88  G4double rdm = Random::shoot();
89 
90  ParticleType Pion1Type;
91  ParticleType Pion2Type;
92 
93  if(iso == 2 || iso == -2){
94  if(rdm*23. < 8.){
95  Pion1Type = PiPlus;
96  Pion2Type = PiMinus;
97  }
98  else if(rdm*23. < 9.){
99  Pion1Type = PiZero;
100  Pion2Type = PiZero;
101  }
102  else if(rdm*23. < 17.){
103  Pion1Type = ParticleTable::getPionType(iso);
104  Pion2Type = PiZero;
105  kaon->setType(ParticleTable::getKaonType(-iso/2));
106  }
107  else if(rdm*23. < 21.){
108  Pion1Type = ParticleTable::getPionType(iso);
109  Pion2Type = PiZero;
110  nucleon->setType(ParticleTable::getNucleonType(-iso/2));
111  }
112  else{
113  Pion1Type = ParticleTable::getPionType(iso);
114  Pion2Type = ParticleTable::getPionType(iso);
115  kaon->setType(ParticleTable::getKaonType(-iso/2));
116  nucleon->setType(ParticleTable::getNucleonType(-iso/2));
117  }
118  }
119  else{
120  if(rdm*25. < 8.){
121  Pion1Type = PiPlus;
122  Pion2Type = PiMinus;
123  }
124  else if(rdm*25. < 9.){
125  Pion1Type = PiZero;
126  Pion2Type = PiZero;
127  }
128  else if(rdm*25. < 17.){
129  Pion1Type = ParticleTable::getPionType(-2*iso_n);
130  Pion2Type = PiZero;
131  kaon->setType(ParticleTable::getKaonType(iso_n));
132  }
133  else if(rdm*25. < 19.){
134  Pion1Type = PiPlus;
135  Pion2Type = PiMinus;
136  kaon->setType(ParticleTable::getKaonType(iso_n));
137  nucleon->setType(ParticleTable::getNucleonType(-iso_n));
138  }
139  else if(rdm*25. < 21.){
140  Pion1Type = PiZero;
141  Pion2Type = PiZero;
142  kaon->setType(ParticleTable::getKaonType(iso_n));
143  nucleon->setType(ParticleTable::getNucleonType(-iso_n));
144  }
145  else{
146  Pion1Type = ParticleTable::getPionType(2*iso_n);
147  Pion2Type = PiZero;
148  nucleon->setType(ParticleTable::getNucleonType(-iso_n));
149  }
150  }
151 
152  ParticleList list;
153  list.push_back(nucleon);
154  list.push_back(kaon);
155  const ThreeVector &rcol1 = nucleon->getPosition();
156  const ThreeVector &rcol2 = kaon->getPosition();
157  const ThreeVector zero;
158  Particle *pion1 = new Particle(Pion1Type,zero,rcol1);
159  Particle *pion2 = new Particle(Pion2Type,zero,rcol2);
160  list.push_back(pion1);
161  list.push_back(pion2);
162 
164 
165  fs->addModifiedParticle(nucleon);
166  fs->addModifiedParticle(kaon);
167  fs->addCreatedParticle(pion1);
168  fs->addCreatedParticle(pion2);
169 
170  }
171 }