Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCL::NpiToMissingStrangenessChannel Class Reference

#include <G4INCLNpiToMissingStrangenessChannel.hh>

+ Inheritance diagram for G4INCL::NpiToMissingStrangenessChannel:

Public Member Functions

 NpiToMissingStrangenessChannel (Particle *, Particle *)
 
virtual ~NpiToMissingStrangenessChannel ()
 
void fillFinalState (FinalState *fs)
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
FinalStategetFinalState ()
 
virtual void fillFinalState (FinalState *fs)=0
 

Detailed Description

Definition at line 47 of file G4INCLNpiToMissingStrangenessChannel.hh.

Constructor & Destructor Documentation

◆ NpiToMissingStrangenessChannel()

G4INCL::NpiToMissingStrangenessChannel::NpiToMissingStrangenessChannel ( Particle p1,
Particle p2 
)

Definition at line 51 of file G4INCLNpiToMissingStrangenessChannel.cc.

52 : particle1(p1), particle2(p2)
53 {}

◆ ~NpiToMissingStrangenessChannel()

G4INCL::NpiToMissingStrangenessChannel::~NpiToMissingStrangenessChannel ( )
virtual

Definition at line 55 of file G4INCLNpiToMissingStrangenessChannel.cc.

55{}

Member Function Documentation

◆ fillFinalState()

void G4INCL::NpiToMissingStrangenessChannel::fillFinalState ( FinalState fs)
virtual

Implements G4INCL::IChannel.

Definition at line 57 of file G4INCLNpiToMissingStrangenessChannel.cc.

57 {
58
59 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2); // MeV /!\/!\/!\.
60// assert(sqrtS > 2.240); // ! > 2.109 Not supposed to be under 2.244 GeV.
61
62 const G4int iso = ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
63// assert(iso == -3 || iso == -1 || iso == 1 || iso == 3);
64 G4int iso_system = 0;
65 G4int available_iso = 0;
66 G4int nbr_pions = 0;
67 G4int min_pions = 0;
68 G4int max_pions = 0;
69
70 Particle *pion_initial;
71 Particle *nucleon_initial;
72
73 if(particle1->isPion()){
74 pion_initial = particle1;
75 nucleon_initial = particle2;
76 }
77 else{
78 pion_initial = particle2;
79 nucleon_initial = particle1;
80 }
81 const G4double pLab = 0.001*KinematicsUtils::momentumInLab(pion_initial, nucleon_initial); // GeV /!\/!\/!\.
82
83 G4double rdm = Random::shoot();
84
85 G4int nbr_particle = 2;
86
87 if(rdm < 0.35){
88 // Lambda-K chosen
89 nucleon_initial->setType(Lambda);
90 available_iso = 1;
91 min_pions = 3;
93 }
94 else if((iso == 0 && rdm < 0.55) || rdm < 0.5){
95 // N-K-Kb chosen
96 nbr_particle++;
97 available_iso = 3;
98 min_pions = 1;
100 }
101 else{
102 // Sigma-K chosen
103 available_iso = 3;
104 min_pions = 3;
106 }
107 // Gaussian noise + mean value nbr pions fonction energy (choice)
108 G4double intermediaire = min_pions + Random::gauss(2) + std::sqrt(pLab-2.2);
109 nbr_pions = std::min(max_pions,std::max(min_pions,G4int(intermediaire )));
110
111 available_iso += nbr_pions*2;
112 nbr_particle += nbr_pions;
113
114 ParticleList list;
115 ParticleType PionType = PiZero;
116 const ThreeVector &rcol1 = pion_initial->getPosition();
117 const ThreeVector zero;
118
119 // (pip piz pim) (sp sz sm) (L S Kb)
120 //pip_p 0.63 0.26 0.11 0.73 0.25 0.02 0.42 0.49 0.09 // inital
121 //pip_p 0.54 0.26 0.20 0.73 0.25 0.02 0.42 0.49 0.09 // choice
122 G4bool pip_p = (std::abs(iso) == 3);
123 //piz_p 0.32 0.45 0.23 0.52 0.40 0.08 0.40 0.41 0.19
124 G4bool piz_p = (ParticleTable::getIsospin(pion_initial->getType()) == 0);
125 //pim_p 0.18 0.37 0.45 0.20 0.63 0.17 0.39 0.33 0.28
126 G4bool pim_p = (!pip_p && !piz_p);
127
128 for(Int_t i=0; i<nbr_pions; i++){
129 Particle *pion = new Particle(PionType,zero,rcol1);
130 if(available_iso-std::abs(iso-iso_system) >= 4){
131 rdm = Random::shoot();
132 if((pip_p && rdm < 0.54) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
133 pion->setType(ParticleTable::getPionType(G4int(Math::sign(iso))*2)); //pip/pip/pim
134 iso_system += 2*G4int(Math::sign(iso));
135 available_iso -= 2;
136 }
137 else if((pip_p && rdm < 0.80) || (piz_p && rdm < 0.77) || (pim_p && rdm < 0.82)){
138 pion->setType(PiZero);
139 available_iso -= 2;
140 }
141 else{
143 iso_system -= 2*G4int(Math::sign(iso));
144 available_iso -= 2;
145 }
146 }
147 else if(available_iso-std::abs(iso-iso_system) == 2){
148 rdm = Random::shoot();
149 if((pip_p && rdm < 0.26/0.37 && (Math::sign(iso)*Math::sign(iso-iso_system)+1)) || (pip_p && rdm < 0.26/0.89 && (Math::sign(iso)*Math::sign(iso-iso_system)-1)) ||
150 (piz_p && rdm < 0.45/0.68 && (Math::sign(iso)*Math::sign(iso-iso_system)+1)) || (piz_p && rdm < 0.45/0.77 && (Math::sign(iso)*Math::sign(iso-iso_system)-1)) ||
151 (pim_p && rdm < 0.37/0.82 && (Math::sign(iso)*Math::sign(iso-iso_system)+1)) || (piz_p && rdm < 0.37/0.55 && (Math::sign(iso)*Math::sign(iso-iso_system)-1))){
152 pion->setType(PiZero);
153 available_iso -= 2;
154 }
155 else{
156 pion->setType(ParticleTable::getPionType(Math::sign(iso-iso_system)*2));
157 iso_system += Math::sign(iso-iso_system)*2;
158 available_iso -= 2;
159 }
160 }
161 else if(available_iso-std::abs(iso-iso_system) == 0){
162 pion->setType(ParticleTable::getPionType(Math::sign(iso-iso_system)*2));
163 iso_system += Math::sign(iso-iso_system)*2;
164 available_iso -= 2;
165 }
166 else INCL_ERROR("Pion Generation Problem in NpiToMissingStrangenessChannel" << '\n');
167 list.push_back(pion);
168 }
169
170 if(nucleon_initial->isLambda()){ // K-Lambda
171// assert(available_iso == 1);
172 pion_initial->setType(ParticleTable::getKaonType(iso-iso_system));
173 }
174 else if(min_pions == 1){ // N-K-Kb chosen
175// assert(available_iso == 3);
176 Particle *antikaon = new Particle(KMinus,zero,rcol1);
177 if(std::abs(iso-iso_system) == 3){
178 pion_initial->setType(ParticleTable::getKaonType((iso-iso_system)/3));
179 nucleon_initial->setType(ParticleTable::getNucleonType((iso-iso_system)/3));
180 antikaon->setType(ParticleTable::getAntiKaonType((iso-iso_system)/3));
181 }
182 else if(std::abs(iso-iso_system) == 1){ // equi-repartition
183 rdm = G4int(Random::shoot()*3.)-1;
184 nucleon_initial->setType(ParticleTable::getNucleonType((G4int(rdm+0.5)*2-1)*(iso_system-iso)));
185 pion_initial->setType(ParticleTable::getKaonType((std::abs(rdm*2)-1)*(iso-iso_system)));
186 antikaon->setType(ParticleTable::getAntiKaonType((G4int(rdm-0.5)*2+1)*(iso-iso_system)));
187 }
188 else INCL_ERROR("Isospin non-conservation in NNToMissingStrangenessChannel" << '\n');
189 list.push_back(antikaon);
190 nbr_pions += 1; // need for addCreatedParticle loop
191 }
192 else{// Sigma-K
193// assert(available_iso == 3);
194 if(std::abs(iso-iso_system) == 3){
195 pion_initial->setType(ParticleTable::getKaonType((iso-iso_system)/3));
196 nucleon_initial->setType(ParticleTable::getSigmaType((iso-iso_system)*2/3));
197 }
198 else if(std::abs(iso-iso_system) == 1){
199 rdm = Random::shoot();
200 if((pip_p && rdm < 0.73) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
201 nucleon_initial->setType(SigmaZero);
202 pion_initial->setType(ParticleTable::getKaonType(iso-iso_system));
203 }
204 else{
205 nucleon_initial->setType(ParticleTable::getSigmaType((iso-iso_system)*2));
206 pion_initial->setType(ParticleTable::getKaonType(iso_system-iso));
207 }
208 }
209 else INCL_ERROR("Isospin non-conservation in NNToMissingStrangenessChannel" << '\n');
210 }
211
212 list.push_back(pion_initial);
213 list.push_back(nucleon_initial);
214
215 PhaseSpaceGenerator::generateBiased(sqrtS, list, list.size()-1, angularSlope);
216
217 fs->addModifiedParticle(pion_initial);
218 fs->addModifiedParticle(nucleon_initial);
219 for(Int_t i=0; i<nbr_pions; i++) fs->addCreatedParticle(list[i]);
220
221 }
#define INCL_ERROR(x)
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4bool isPion() const
Is this a pion?
G4INCL::ParticleType getType() const
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
G4int sign(const T t)
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
ParticleType getAntiKaonType(const G4int isosp)
Get the type of antikaon.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4double gauss(G4double sigma=1.)
G4double shoot()
Definition: G4INCLRandom.cc:93
G4int Int_t
G4bool pion(G4int ityp)

The documentation for this class was generated from the following files: