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

#include <G4INCLDeltaDecayChannel.hh>

+ Inheritance diagram for G4INCL::DeltaDecayChannel:

Public Member Functions

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

Static Public Member Functions

static G4double computeDecayTime (Particle *p)
 

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.

47 :theParticle(p), incidentDirection(dir)
48 { }

◆ ~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 }
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 hc
[MeV*fm]
G4double 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);
112 G4double beta = incidentDirection.mag();
113
114 G4double q1, q2, q3;
115 G4double sal=0.0;
116 if (beta >= 1.0e-10)
117 sal = incidentDirection.perp()/beta;
118 if (sal >= 1.0e-6) {
119 G4double b1 = incidentDirection.getX();
120 G4double b2 = incidentDirection.getY();
121 G4double b3 = incidentDirection.getZ();
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 }
133 theParticle->setHelicity(0.0);
134
135 ParticleType pionType;
136#ifdef INCLXX_IN_GEANT4_MODE
137 G4int deltaPDGCode = 0;
138#endif
139 switch(theParticle->getType()) {
140 case DeltaPlusPlus:
141 theParticle->setType(Proton);
142 pionType = PiPlus;
143#ifdef INCLXX_IN_GEANT4_MODE
144 deltaPDGCode = 2224;
145#endif
146 break;
147 case DeltaPlus:
148 if(Random::shoot() < 1.0/3.0) {
149 theParticle->setType(Neutron);
150 pionType = PiPlus;
151 } else {
152 theParticle->setType(Proton);
153 pionType = PiZero;
154 }
155#ifdef INCLXX_IN_GEANT4_MODE
156 deltaPDGCode = 2214;
157#endif
158 break;
159 case DeltaZero:
160 if(Random::shoot() < 1.0/3.0) {
161 theParticle->setType(Proton);
162 pionType = PiMinus;
163 } else {
164 theParticle->setType(Neutron);
165 pionType = PiZero;
166 }
167#ifdef INCLXX_IN_GEANT4_MODE
168 deltaPDGCode = 2114;
169#endif
170 break;
171 case DeltaMinus:
172 theParticle->setType(Neutron);
173 pionType = PiMinus;
174#ifdef INCLXX_IN_GEANT4_MODE
175 deltaPDGCode = 1114;
176#endif
177 break;
178 default:
179 INCL_FATAL("Unrecognized delta type; type=" << theParticle->getType() << '\n');
180 pionType = UnknownParticle;
181 break;
182 }
183
185 theParticle->getMass(),
187
188 q1 *= xq;
189 q2 *= xq;
190 q3 *= xq;
191
192 ThreeVector pionMomentum(q1, q2, q3);
193 ThreeVector pionPosition(theParticle->getPosition());
194 Particle *pion = new Particle(pionType, pionMomentum, pionPosition);
195 theParticle->setMomentum(-pionMomentum);
196 theParticle->adjustEnergyFromMomentum();
197
198#ifdef INCLXX_IN_GEANT4_MODE
199 // Set the information about the parent resonance for the two daughters
200 // (as unique, integer ID, we take the rounded integer of the resonance mass in keV)
201 G4int parentResonanceID = static_cast<G4int>(round(deltaMass/CLHEP::keV));
202 pion->setParentResonancePDGCode(deltaPDGCode);
203 pion->setParentResonanceID(parentResonanceID);
204 theParticle->setParentResonancePDGCode(deltaPDGCode);
205 theParticle->setParentResonanceID(parentResonanceID);
206#endif
207
208 fs->addModifiedParticle(theParticle);
209 fs->addCreatedParticle(pion);
210 // call loren(q1,q2,q3,b1,b2,b3,wq)
211 // call loren(p1,p2,p3,b1,b2,b3,wp)
212 // qq1(ij)=q1
213 // qq2(ij)=q2
214 // qq3(ij)=q3
215 // qq4(ij)=wq
216 // ym(ij)=xi
217 // RETURN P-N21120
218 // END P-N21130
219 }
#define INCL_FATAL(x)
int G4int
Definition G4Types.hh:85
void setParentResonancePDGCode(const G4int parentPDGCode)
void setHelicity(G4double h)
const G4INCL::ThreeVector & getPosition() const
void setParentResonanceID(const G4int parentID)
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 perp() const
G4double getX() const
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)

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