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

#include <G4INCLStrangeAbsorbtionChannel.hh>

+ Inheritance diagram for G4INCL::StrangeAbsorbtionChannel:

Public Member Functions

 StrangeAbsorbtionChannel (Particle *, Particle *)
 
virtual ~StrangeAbsorbtionChannel ()
 
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 48 of file G4INCLStrangeAbsorbtionChannel.hh.

Constructor & Destructor Documentation

◆ StrangeAbsorbtionChannel()

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

Definition at line 47 of file G4INCLStrangeAbsorbtionChannel.cc.

48 : particle1(p1), particle2(p2)
49 {
50
51 }

◆ ~StrangeAbsorbtionChannel()

G4INCL::StrangeAbsorbtionChannel::~StrangeAbsorbtionChannel ( )
virtual

Definition at line 53 of file G4INCLStrangeAbsorbtionChannel.cc.

53{}

Member Function Documentation

◆ fillFinalState()

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

Implements G4INCL::IChannel.

Definition at line 62 of file G4INCLStrangeAbsorbtionChannel.cc.

62 {
63 Particle * nucleon;
64 Particle * strange;
65
66 ThreeVector const incidentDirection = particle1->getMomentum() + particle2->getMomentum();
67
68 if(particle1->isNucleon()) {
69 nucleon = particle1;
70 strange = particle2;
71 } else {
72 nucleon = particle2;
73 strange = particle1;
74 }
75// assert(strange->isSigma() || strange->isAntiKaon());
76
77 ParticleType finalType = Neutron;
78 if(ParticleConfig::isPair(nucleon, strange, Neutron, KZeroBar)) {
79 finalType = PiZero;
80 } else if(ParticleConfig::isPair(nucleon, strange, Proton, KZeroBar)) {
81 finalType = PiPlus;
82 } else if(ParticleConfig::isPair(nucleon, strange, Neutron, KMinus)) {
83 finalType = PiMinus;
84 } else if(ParticleConfig::isPair(nucleon, strange, Proton, KMinus)) {
85 finalType = PiZero;
86 } else if(ParticleConfig::isPair(nucleon, strange, Proton, SigmaMinus)) {
87 finalType = Neutron;
88 } else if(ParticleConfig::isPair(nucleon, strange, Neutron, SigmaZero)) {
89 finalType = Neutron;
90 } else if(ParticleConfig::isPair(nucleon, strange, Proton, SigmaZero)) {
91 finalType = Proton;
92 } else if(ParticleConfig::isPair(nucleon, strange, Neutron, SigmaPlus)) {
93 finalType = Proton;
94 } else {
95 INCL_ERROR("Unknown particle pair in Strange-N absorption: " << nucleon << '\t' << strange << '\n');
96 return;
97 }
98
99 G4double energycm = KinematicsUtils::totalEnergyInCM(nucleon, strange);
100
101 G4double finalTypemass = ParticleTable::getINCLMass(finalType);
102 nucleon->setType(Lambda); // nucleon becomes the lambda
103 G4double lambdamass = nucleon->getMass();
104
105 G4double fi, ctet, stet;
106 sampleAngles(&ctet, &stet, &fi);
107
108 G4double cfi = std::cos(fi);
109 G4double sfi = std::sin(fi);
110 G4double beta = incidentDirection.mag();
111
112 G4double q1, q2, q3;
113 G4double sal=0.0;
114 if (beta >= 1.0e-10)
115 sal = incidentDirection.perp()/beta;
116 if (sal >= 1.0e-6) {
117 G4double b1 = incidentDirection.getX();
118 G4double b2 = incidentDirection.getY();
119 G4double b3 = incidentDirection.getZ();
120 G4double cal = b3/beta;
121 G4double t1 = ctet+cal*stet*sfi/sal;
122 G4double t2 = stet/sal;
123 q1=(b1*t1+b2*t2*cfi)/beta;
124 q2=(b2*t1-b1*t2*cfi)/beta;
125 q3=(b3*t1/beta-t2*sfi);
126 } else {
127 q1 = stet*cfi;
128 q2 = stet*sfi;
129 q3 = ctet;
130 }
131
133 lambdamass,
134 finalTypemass);
135
136 q1 *= xq;
137 q2 *= xq;
138 q3 *= xq;
139
140 ThreeVector finalMomentum(q1, q2, q3);
141
142 strange->setType(finalType);
143 strange->setMomentum(finalMomentum);
144 strange->adjustEnergyFromMomentum();
145 nucleon->setMomentum(-finalMomentum);
146 nucleon->adjustEnergyFromMomentum();
147
148 fs->addModifiedParticle(nucleon); // nucleon became a lambda
149 fs->addModifiedParticle(strange); // the strange particle became an unstange particle
150 }
#define INCL_ERROR(x)
double G4double
Definition: G4Types.hh:83
const G4INCL::ThreeVector & getMomentum() const
G4bool isNucleon() const
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double momentumInCM(Particle const *const p1, Particle const *const p2)
gives the momentum in the CM frame of two particles.
G4bool isPair(Particle const *const p1, Particle const *const p2, ParticleType t1, ParticleType t2)
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4bool nucleon(G4int ityp)

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