Geant4-11
Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
G4INCL::DeltaDecayChannel Class Reference

#include <G4INCLDeltaDecayChannel.hh>

Inheritance diagram for G4INCL::DeltaDecayChannel:
G4INCL::IChannel

Public Member Functions

 DeltaDecayChannel (Particle *, ThreeVector const &)
 
void fillFinalState (FinalState *fs)
 
FinalStategetFinalState ()
 
virtual ~DeltaDecayChannel ()
 

Static Public Member Functions

static G4double computeDecayTime (Particle *p)
 

Private Member Functions

void sampleAngles (G4double *, G4double *, G4double *)
 

Private Attributes

ThreeVector const incidentDirection
 
ParticletheParticle
 

Detailed Description

Definition at line 49 of file G4INCLDeltaDecayChannel.hh.

Constructor & Destructor Documentation

◆ DeltaDecayChannel()

G4INCL::DeltaDecayChannel::DeltaDecayChannel ( Particle p,
ThreeVector const &  dir 
)

Definition at line 46 of file G4INCLDeltaDecayChannel.cc.

◆ ~DeltaDecayChannel()

G4INCL::DeltaDecayChannel::~DeltaDecayChannel ( )
virtual

Definition at line 50 of file G4INCLDeltaDecayChannel.cc.

50{}

Member Function Documentation

◆ computeDecayTime()

G4double G4INCL::DeltaDecayChannel::computeDecayTime ( Particle p)
static

Definition at line 52 of file G4INCLDeltaDecayChannel.cc.

52 {
53 const G4double m = p->getMass();
54 const G4double g0 = 115.0;
55 G4double gg = g0;
56 if(m > 1500.0) gg = 200.0;
57 const G4double geff = p->getEnergy()/m;
59 const G4double psf = std::pow(qqq, 3)/(std::pow(qqq, 3) + 5832000.0); // phase space factor 5.832E6 = 180^3
60 const G4double tdel = -G4INCL::PhysicalConstants::hc/(gg*psf)*std::log(Random::shoot())*geff; // fm
61 if( m > 1400) return tdel * 1./(1. + std::pow((m-1400)/g0,2)); // reduction of Delta life time for high masses.
62 return tdel; // fm
63 }
static constexpr double m
Definition: G4SIunits.hh:109
double G4double
Definition: G4Types.hh:83
G4double momentumInCM(Particle const *const p1, Particle const *const p2)
gives the momentum in the CM frame of two particles.
const G4double effectiveNucleonMass
const G4double effectivePionMass
const G4double hc
[MeV*fm]
G4double shoot()
Definition: G4INCLRandom.cc:93

References G4INCL::ParticleTable::effectiveNucleonMass, G4INCL::ParticleTable::effectivePionMass, G4INCL::Particle::getEnergy(), G4INCL::Particle::getMass(), G4INCL::PhysicalConstants::hc, m, G4INCL::KinematicsUtils::momentumInCM(), and G4INCL::Random::shoot().

Referenced by G4INCL::StandardPropagationModel::generateDecays().

◆ fillFinalState()

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

Implements G4INCL::IChannel.

Definition at line 78 of file G4INCLDeltaDecayChannel.cc.

78 {
79 // SUBROUTINE DECAY2(P1,P2,P3,WP,ij,
80 // s X1,X2,hel,B1,B2,B3)
81
82 // This routine describes the anisotropic decay of a particle of mass
83 // xi into 2 particles of masses x1,x2.
84 // The anisotropy is supposed to follow a 1+3*hel*(cos(theta))**2
85 // law with respect to the direction of the incoming particle.
86 // In the input, p1,p2,p3 is the momentum of particle xi.
87 // In the output, p1,p2,p3 is the momentum of particle x1 , while
88 // q1,q2,q3 is the momentum of particle x2.
89
90 // COMMON/bl12/QQ1(200),QQ2(200),QQ3(200),QQ4(200),
91 // s YY1(200),YY2(200),YY3(200),YM(200),IPI(200)
92 // common/hazard/ial,IY1,IY2,IY3,IY4,IY5,IY6,IY7,IY8,IY9,IY10,
93 // s IY11,IY12,IY13,IY14,IY15,IY16,IY17,IY18,IY19
94
95 // DATA IY8,IY9,IY10/82345,92345,45681/
96 // PCM(E,A,C)=0.5*SQRT((E**2-(A+C)**2)*(E**2-(A-C)**2))/E P-N20800
97 // XI=YM(ij)
98
99 // XE=WP P-N20810
100 // B1=P1/XE P-N20820
101 // B2=P2/XE P-N20830
102 // B3=P3/XE
103 // XQ=PCM(XI,X1,X2)
104
105 const G4double deltaMass = theParticle->getMass();
106
107 G4double fi, ctet, stet;
108 sampleAngles(&ctet, &stet, &fi);
109
110 G4double cfi = std::cos(fi);
111 G4double sfi = std::sin(fi);
113
114 G4double q1, q2, q3;
115 G4double sal=0.0;
116 if (beta >= 1.0e-10)
118 if (sal >= 1.0e-6) {
122 G4double cal = b3/beta;
123 G4double t1 = ctet+cal*stet*sfi/sal;
124 G4double t2 = stet/sal;
125 q1=(b1*t1+b2*t2*cfi)/beta;
126 q2=(b2*t1-b1*t2*cfi)/beta;
127 q3=(b3*t1/beta-t2*sfi);
128 } else {
129 q1 = stet*cfi;
130 q2 = stet*sfi;
131 q3 = ctet;
132 }
134
135 ParticleType pionType;
136 switch(theParticle->getType()) {
137 case DeltaPlusPlus:
139 pionType = PiPlus;
140 break;
141 case DeltaPlus:
142 if(Random::shoot() < 1.0/3.0) {
144 pionType = PiPlus;
145 } else {
147 pionType = PiZero;
148 }
149 break;
150 case DeltaZero:
151 if(Random::shoot() < 1.0/3.0) {
153 pionType = PiMinus;
154 } else {
156 pionType = PiZero;
157 }
158 break;
159 case DeltaMinus:
161 pionType = PiMinus;
162 break;
163 default:
164 INCL_FATAL("Unrecognized delta type; type=" << theParticle->getType() << '\n');
165 pionType = UnknownParticle;
166 break;
167 }
168
172
173 q1 *= xq;
174 q2 *= xq;
175 q3 *= xq;
176
177 ThreeVector pionMomentum(q1, q2, q3);
178 ThreeVector pionPosition(theParticle->getPosition());
179 Particle *pion = new Particle(pionType, pionMomentum, pionPosition);
180 theParticle->setMomentum(-pionMomentum);
182
183 fs->addModifiedParticle(theParticle);
184 fs->addCreatedParticle(pion);
185 // call loren(q1,q2,q3,b1,b2,b3,wq)
186 // call loren(p1,p2,p3,b1,b2,b3,wp)
187 // qq1(ij)=q1
188 // qq2(ij)=q2
189 // qq3(ij)=q3
190 // qq4(ij)=wq
191 // ym(ij)=xi
192 // RETURN P-N21120
193 // END P-N21130
194 }
#define INCL_FATAL(x)
void sampleAngles(G4double *, G4double *, G4double *)
void setHelicity(G4double h)
const G4INCL::ThreeVector & getPosition() const
G4double adjustEnergyFromMomentum()
Recompute the energy to match the momentum.
virtual void setMomentum(const G4INCL::ThreeVector &momentum)
G4INCL::ParticleType getType() const
void setType(ParticleType t)
G4double getMass() const
Get the cached particle mass.
G4double getY() const
G4double getZ() const
G4double mag() const
G4double perp() const
G4double getX() const
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4bool pion(G4int ityp)

References G4INCL::FinalState::addCreatedParticle(), G4INCL::FinalState::addModifiedParticle(), G4INCL::Particle::adjustEnergyFromMomentum(), anonymous_namespace{G4PionRadiativeDecayChannel.cc}::beta, G4INCL::DeltaMinus, G4INCL::DeltaPlus, G4INCL::DeltaPlusPlus, G4INCL::DeltaZero, G4INCL::ParticleTable::getINCLMass(), G4INCL::Particle::getMass(), G4INCL::Particle::getPosition(), G4INCL::Particle::getType(), G4INCL::ThreeVector::getX(), G4INCL::ThreeVector::getY(), G4INCL::ThreeVector::getZ(), incidentDirection, INCL_FATAL, G4INCL::ThreeVector::mag(), G4INCL::KinematicsUtils::momentumInCM(), G4INCL::Neutron, G4INCL::ThreeVector::perp(), G4INCL::PiMinus, G4InuclParticleNames::pion(), G4INCL::PiPlus, G4INCL::PiZero, G4INCL::Proton, sampleAngles(), G4INCL::Particle::setHelicity(), G4INCL::Particle::setMomentum(), G4INCL::Particle::setType(), G4INCL::Random::shoot(), theParticle, and G4INCL::UnknownParticle.

◆ getFinalState()

FinalState * G4INCL::IChannel::getFinalState ( )
inherited

Definition at line 50 of file G4INCLIChannel.cc.

50 {
51 FinalState *fs = new FinalState;
53 return fs;
54 }
virtual void fillFinalState(FinalState *fs)=0

References G4INCL::IChannel::fillFinalState().

◆ sampleAngles()

void G4INCL::DeltaDecayChannel::sampleAngles ( G4double ctet_par,
G4double stet_par,
G4double phi_par 
)
private

Definition at line 65 of file G4INCLDeltaDecayChannel.cc.

65 {
66 const G4double hel = theParticle->getHelicity();
67 unsigned long loopCounter = 0;
68 const unsigned long maxLoopCounter = 10000000;
69 do {
70 (*ctet_par) = -1.0 + 2.0*Random::shoot();
71 if(std::abs(*ctet_par) > 1.0) (*ctet_par) = Math::sign(*ctet_par);
72 ++loopCounter;
73 } while(loopCounter<maxLoopCounter && Random::shoot() > ((1.0 + 3.0 * hel * (*ctet_par) * (*ctet_par)) /(1.0 + 3.0 * hel))); /* Loop checking, 10.07.2015, D.Mancusi */
74 (*stet_par) = std::sqrt(1.-(*ctet_par)*(*ctet_par));
75 (*phi_par) = Math::twoPi * Random::shoot();
76 }
G4double getHelicity()
const G4double twoPi
G4int sign(const T t)

References G4INCL::Particle::getHelicity(), G4INCL::Random::shoot(), G4INCL::Math::sign(), theParticle, and G4INCL::Math::twoPi.

Referenced by fillFinalState().

Field Documentation

◆ incidentDirection

ThreeVector const G4INCL::DeltaDecayChannel::incidentDirection
private

Definition at line 61 of file G4INCLDeltaDecayChannel.hh.

Referenced by fillFinalState().

◆ theParticle

Particle* G4INCL::DeltaDecayChannel::theParticle
private

Definition at line 60 of file G4INCLDeltaDecayChannel.hh.

Referenced by fillFinalState(), and sampleAngles().


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