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