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

#include <G4INCLPiNElasticChannel.hh>

+ Inheritance diagram for G4INCL::PiNElasticChannel:

Public Member Functions

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

Detailed Description

Definition at line 47 of file G4INCLPiNElasticChannel.hh.

Constructor & Destructor Documentation

◆ PiNElasticChannel()

G4INCL::PiNElasticChannel::PiNElasticChannel ( Particle * p1,
Particle * p2 )

Definition at line 47 of file G4INCLPiNElasticChannel.cc.

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

◆ ~PiNElasticChannel()

G4INCL::PiNElasticChannel::~PiNElasticChannel ( )
virtual

Definition at line 53 of file G4INCLPiNElasticChannel.cc.

53 {
54
55 }

Member Function Documentation

◆ fillFinalState()

void G4INCL::PiNElasticChannel::fillFinalState ( FinalState * fs)
virtual

Implements G4INCL::IChannel.

Definition at line 57 of file G4INCLPiNElasticChannel.cc.

57 {
58 Particle * nucleon;
59 Particle * pion;
60 if(particle1->isNucleon()) {
61 nucleon = particle1;
62 pion = particle2;
63 } else {
64 nucleon = particle2;
65 pion = particle1;
66 }
67
68 G4double bpn=8e-6; // B-parameter of exp(Bt) - (MeV/c)^-2
69 G4double px_nucleon=nucleon->getMomentum().getX();
70 G4double py_nucleon=nucleon->getMomentum().getY();
71 G4double pz_nucleon=nucleon->getMomentum().getZ();
72 G4double cnorm1=px_nucleon*px_nucleon+py_nucleon*py_nucleon;
73 G4double cnorm2=std::sqrt(cnorm1);
74 G4double tnorm=cnorm1+pz_nucleon*pz_nucleon;
75 G4double cnorm=std::sqrt(tnorm);
76 G4double btm=std::exp(-4.*tnorm*bpn);
78 G4double yrn=1.-rndm*(1.-btm);
79 G4double tt=std::log(yrn)/bpn;
80 G4double ctheta=1.+0.5*tt/tnorm;
81 G4double stheta=std::sqrt(1.-ctheta*ctheta);
82 G4double t7=1.-2.*Random::shoot();
83 G4double t8=std::sqrt(1-t7*t7);
84 G4double t1=-py_nucleon/cnorm2;
85 G4double t2=px_nucleon/cnorm2;
86 G4double t4=t2*pz_nucleon/cnorm;
87 G4double t5=-t1*pz_nucleon/cnorm;
88 G4double t6=-cnorm2/cnorm;
89 ThreeVector mom_nucleon(
90 px_nucleon*ctheta+cnorm*stheta*(t1*t7+t4*t8),
91 py_nucleon*ctheta+cnorm*stheta*(t2*t7+t5*t8),
92 pz_nucleon*ctheta+cnorm*stheta*t6*t8
93 );
94 nucleon->setMomentum(mom_nucleon);
95 pion->setMomentum(-mom_nucleon);
96
97#ifdef INCLXX_IN_GEANT4_MODE
98 ParticleType startingNucleonType = nucleon->getType();
99 ParticleType startingPionType = pion->getType();
100#endif
101
103 if (iso == 1 || iso == -1) {
104 rndm=3*Random::shoot();
105 if (rndm < 1.) {
107 nucleon->setType(nucleonType);
109 pion->setType(pionType);
110 }
111 else {
113 nucleon->setType(nucleonType);
114 pion->setType(PiZero);
115 }
116 }
117 else { // Useless
119 nucleon->setType(nucleonType);
121 pion->setType(pionType);
122 }
123
124#ifdef INCLXX_IN_GEANT4_MODE
125 // Erase the parent resonance information if the nucleon or pion changes type
126 if ( startingNucleonType != nucleon->getType() || startingPionType != pion->getType() ) {
127 nucleon->setParentResonancePDGCode(0);
128 nucleon->setParentResonanceID(0);
129 pion->setParentResonancePDGCode(0);
130 pion->setParentResonanceID(0);
131 }
132#endif
133
134 fs->addModifiedParticle(nucleon);
135 fs->addModifiedParticle(pion);
136 }
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
G4bool isNucleon() const
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.
G4double shoot()
G4bool nucleon(G4int ityp)

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