ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4INCLNDeltaToNNKKbChannel.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file G4INCLNDeltaToNNKKbChannel.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 
50 
52  : particle1(p1), particle2(p2)
53  {}
54 
56 
58 
59  // ratio
60  // D++ p -> p p K+ K0b (6)
61  //
62  // D++ n -> p p K+ K- (3)
63  // D++ n -> p p K0 K0b (3)
64  // D++ n -> p n K+ K0b (3)
65  //
66  // D+ p -> p p K+ K- (3)
67  // D+ p -> p p K0 K0b (1)
68  // D+ p -> p n K+ K0b (3)
69  //
70  // D+ n -> p p K0 K- (2)
71  // D+ n -> p n K+ K- (1)
72  // D+ n -> p n K0 K0b (3)
73  // D+ n -> n n K+ K0b (2)
74  //
75 
77 
79  G4int iso_n;
82 
83  ParticleType Nucleon1Type;
84  ParticleType Nucleon2Type;
85  ParticleType KaonType;
86  ParticleType antiKaonType;
87 
88  const G4double rdm = Random::shoot();
89 
90  if(std::abs(iso) == 4){// D++ p
91  Nucleon1Type = ParticleTable::getNucleonType(iso/4);
92  Nucleon2Type = ParticleTable::getNucleonType(iso/4);
93  KaonType = ParticleTable::getKaonType(iso/4);
94  antiKaonType = ParticleTable::getAntiKaonType(iso/4);
95  }
96  else if(iso == 0){// D+ n
97  if(rdm*8 < 2){
98  Nucleon1Type = Proton;
99  Nucleon2Type = Proton;
100  KaonType = KZero;
101  antiKaonType = KMinus;
102  }
103  else if(rdm*8 < 3){
104  Nucleon1Type = Proton;
105  Nucleon2Type = Neutron;
106  KaonType = ParticleTable::getKaonType(-iso_n);
107  antiKaonType = ParticleTable::getAntiKaonType(iso_n);
108  }
109  else if(rdm*8 < 6){
110  Nucleon1Type = Proton;
111  Nucleon2Type = Neutron;
112  KaonType = ParticleTable::getKaonType(iso_n);
113  antiKaonType = ParticleTable::getAntiKaonType(-iso_n);
114  }
115  else{
116  Nucleon1Type = Neutron;
117  Nucleon2Type = Neutron;
118  KaonType = KPlus;
119  antiKaonType = KZeroBar;
120  }
121  }
123  if(rdm*3 < 1){
124  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
125  Nucleon2Type = ParticleTable::getNucleonType(iso/2);
126  KaonType = ParticleTable::getKaonType(iso/2);
127  antiKaonType = ParticleTable::getAntiKaonType(-iso/2);
128  }
129  else if(rdm*3 < 2){
130  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
131  Nucleon2Type = ParticleTable::getNucleonType(iso/2);
132  KaonType = ParticleTable::getKaonType(-iso/2);
133  antiKaonType = ParticleTable::getAntiKaonType(iso/2);
134  }
135  else{
136  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
137  Nucleon2Type = ParticleTable::getNucleonType(-iso/2);
138  KaonType = ParticleTable::getKaonType(iso/2);
139  antiKaonType = ParticleTable::getAntiKaonType(iso/2);
140  }
141  }
142  else{// D++ n
143  if(rdm*5 < 2){
144  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
145  Nucleon2Type = ParticleTable::getNucleonType(iso/2);
146  KaonType = ParticleTable::getKaonType(iso/2);
147  antiKaonType = ParticleTable::getAntiKaonType(-iso/2);
148  }
149  else if(rdm*5 < 4){
150  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
151  Nucleon2Type = ParticleTable::getNucleonType(iso/2);
152  KaonType = ParticleTable::getKaonType(-iso/2);
153  antiKaonType = ParticleTable::getAntiKaonType(iso/2);
154  }
155  else{
156  Nucleon1Type = ParticleTable::getNucleonType(iso/2);
157  Nucleon2Type = ParticleTable::getNucleonType(-iso/2);
158  KaonType = ParticleTable::getKaonType(iso/2);
159  antiKaonType = ParticleTable::getAntiKaonType(iso/2);
160  }
161  }
162 
163 
164  particle1->setType(Nucleon1Type);
165  particle2->setType(Nucleon2Type);
166 
167  ParticleList list;
168  list.push_back(particle1);
169  list.push_back(particle2);
170  const ThreeVector &rcol1 = particle1->getPosition();
171  const ThreeVector zero1;
172  const ThreeVector &rcol2 = particle2->getPosition();
173  const ThreeVector zero2;
174  Particle *kaon = new Particle(KaonType,zero1,rcol1);
175  Particle *antikaon = new Particle(antiKaonType,zero2,rcol2);
176  list.push_back(kaon);
177  list.push_back(antikaon);
178 
181 
184  fs->addCreatedParticle(kaon);
185  fs->addCreatedParticle(antikaon);
186 
187  }
188 }