54 G4cout <<
"G4RPGAntiSigmaPlusInelastic::ApplyYourself called" <<
G4endl;
56 G4cout <<
"target material = " << targetMaterial->
GetName() <<
", ";
67 modifiedOriginal = *originalIncident;
73 G4double p = std::sqrt( std::abs((et-amas)*(et+amas)) );
87 p = std::sqrt( std::abs((et-amas)*(et+amas)) );
96 targetParticle = *originalTarget;
99 G4bool incidentHasChanged =
false;
100 G4bool targetHasChanged =
false;
101 G4bool quasiElastic =
false;
109 Cascade( vec, vecLen,
110 originalIncident, currentParticle, targetParticle,
111 incidentHasChanged, targetHasChanged, quasiElastic );
114 originalIncident, originalTarget, modifiedOriginal,
115 targetNucleus, currentParticle, targetParticle,
116 incidentHasChanged, targetHasChanged, quasiElastic );
119 currentParticle, targetParticle,
120 incidentHasChanged );
122 delete originalTarget;
127void G4RPGAntiSigmaPlusInelastic::Cascade(
133 G4bool &incidentHasChanged,
150 G4double centerofmassEnergy = std::sqrt( mOriginal*mOriginal +
151 targetMass*targetMass +
152 2.0*targetMass*etOriginal );
153 G4double availableEnergy = centerofmassEnergy-(targetMass+mOriginal);
156 const G4int numMul = 1200;
157 const G4int numMulA = 400;
158 const G4int numSec = 60;
164 G4int counter, nt=0, np=0, nneg=0, nz=0;
172 for( i=0; i<numMul; ++i )protmul[i] = 0.0;
173 for( i=0; i<numSec; ++i )protnorm[i] = 0.0;
175 for( np=0; np<(numSec/3); ++np )
177 for( nneg=std::max(0,np-1); nneg<=(np+1); ++nneg )
179 for( nz=0; nz<numSec/3; ++nz )
181 if( ++counter < numMul )
184 if( nt>0 && nt<=numSec )
186 protmul[counter] =
Pmltpc(np,nneg,nz,nt,b[0],c);
187 protnorm[nt-1] += protmul[counter];
193 for( i=0; i<numMul; ++i )neutmul[i] = 0.0;
194 for( i=0; i<numSec; ++i )neutnorm[i] = 0.0;
196 for( np=0; np<numSec/3; ++np )
198 for( nneg=np; nneg<=(np+2); ++nneg )
200 for( nz=0; nz<numSec/3; ++nz )
202 if( ++counter < numMul )
205 if( nt>0 && nt<=numSec )
207 neutmul[counter] =
Pmltpc(np,nneg,nz,nt,b[1],c);
208 neutnorm[nt-1] += neutmul[counter];
214 for( i=0; i<numSec; ++i )
216 if( protnorm[i] > 0.0 )protnorm[i] = 1.0/protnorm[i];
217 if( neutnorm[i] > 0.0 )neutnorm[i] = 1.0/neutnorm[i];
222 for( i=0; i<numMulA; ++i )protmulA[i] = 0.0;
223 for( i=0; i<numSec; ++i )protnormA[i] = 0.0;
225 for( np=1; np<(numSec/3); ++np )
228 for( nz=0; nz<numSec/3; ++nz )
230 if( ++counter < numMulA )
233 if( nt>1 && nt<=numSec )
235 protmulA[counter] =
Pmltpc(np,nneg,nz,nt,b[0],c);
236 protnormA[nt-1] += protmulA[counter];
241 for( i=0; i<numMulA; ++i )neutmulA[i] = 0.0;
242 for( i=0; i<numSec; ++i )neutnormA[i] = 0.0;
244 for( np=0; np<numSec/3; ++np )
247 for( nz=0; nz<numSec/3; ++nz )
249 if( ++counter < numMulA )
252 if( nt>1 && nt<=numSec )
254 neutmulA[counter] =
Pmltpc(np,nneg,nz,nt,b[1],c);
255 neutnormA[nt-1] += neutmulA[counter];
260 for( i=0; i<numSec; ++i )
262 if( protnormA[i] > 0.0 )protnormA[i] = 1.0/protnormA[i];
263 if( neutnormA[i] > 0.0 )neutnormA[i] = 1.0/neutnormA[i];
277 const G4double anhl[] = {1.00,1.00,1.00,1.00,1.00,1.00,1.00,1.00,0.97,0.88,
278 0.85,0.81,0.75,0.64,0.64,0.55,0.55,0.45,0.47,0.40,
279 0.39,0.36,0.33,0.10,0.01};
281 if( iplab > 9 )iplab =
G4int( (pOriginal/GeV- 1.0)*5.0 ) + 10;
282 if( iplab > 14 )iplab =
G4int( pOriginal/GeV- 2.0 ) + 15;
283 if( iplab > 22 )iplab =
G4int( (pOriginal/GeV-10.0)/10.0 ) + 23;
284 if( iplab > 24 )iplab = 24;
287 if( availableEnergy <= aPiPlus->GetPDGMass()/MeV )
299 for( np=0; np<numSec/3 && ran>=excs; ++np )
301 for( nneg=std::max(0,np-1); nneg<=(np+1) && ran>=excs; ++nneg )
303 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
305 if( ++counter < numMul )
308 if( (nt>0) && (nt<=numSec) )
310 test =
G4Exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
311 dum = (
pi/anpn)*nt*protmul[counter]*protnorm[nt-1]/(2.0*n*n);
312 if( std::fabs(dum) < 1.0 )
314 if( test >= 1.0e-10 )excs += dum*test;
329 G4int ncht = std::min( 3, std::max( 1, np-nneg+2 ) );
337 incidentHasChanged =
true;
346 incidentHasChanged =
true;
349 targetHasChanged =
true;
353 targetHasChanged =
true;
360 for( np=0; np<numSec/3 && ran>=excs; ++np )
362 for( nneg=np; nneg<=(np+2) && ran>=excs; ++nneg )
364 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
366 if( ++counter < numMul )
369 if( (nt>0) && (nt<=numSec) )
371 test =
G4Exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
372 dum = (
pi/anpn)*nt*neutmul[counter]*neutnorm[nt-1]/(2.0*n*n);
373 if( std::fabs(dum) < 1.0 )
375 if( test >= 1.0e-10 )excs += dum*test;
390 G4int ncht = std::min( 3, std::max( 1, np-nneg+3 ) );
398 incidentHasChanged =
true;
400 targetHasChanged =
true;
408 incidentHasChanged =
true;
413 targetHasChanged =
true;
421 incidentHasChanged =
true;
426 targetHasChanged =
true;
437 if( centerofmassEnergy <= aPiPlus->GetPDGMass()/MeV+aKaonPlus->
GetPDGMass()/MeV )
449 for( np=1; np<numSec/3 && ran>=excs; ++np )
452 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
454 if( ++counter < numMulA )
457 if( nt>1 && nt<=numSec )
459 test =
G4Exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
460 dum = (
pi/anpn)*nt*protmulA[counter]*protnormA[nt-1]/(2.0*n*n);
461 if( std::fabs(dum) < 1.0 )
463 if( test >= 1.0e-10 )excs += dum*test;
481 for( np=0; np<numSec/3 && ran>=excs; ++np )
484 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
486 if( ++counter < numMulA )
489 if( nt>1 && nt<=numSec )
491 test =
G4Exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
492 dum = (
pi/anpn)*nt*neutmulA[counter]*neutnormA[nt-1]/(2.0*n*n);
493 if( std::fabs(dum) < 1.0 )
495 if( test >= 1.0e-10 )excs += dum*test;
555 currentParticle.
SetMass( 0.0 );
G4double G4Exp(G4double initial_x)
Exponential Function double precision.
G4GLOB_DLL std::ostream G4cout
static G4AntiLambda * AntiLambda()
static G4AntiSigmaZero * AntiSigmaZero()
G4ParticleDefinition * GetDefinition() const
void SetElement(G4int anIndex, Type *anElement)
void Initialize(G4int items)
void SetStatusChange(G4HadFinalStateStatus aS)
void SetEnergyChange(G4double anEnergy)
void SetMomentumChange(const G4ThreeVector &aV)
const G4Material * GetMaterial() const
G4double GetTotalMomentum() const
const G4ParticleDefinition * GetDefinition() const
G4double GetKineticEnergy() const
const G4LorentzVector & Get4Momentum() const
G4double GetTotalEnergy() const
G4HadFinalState theParticleChange
static G4KaonMinus * KaonMinus()
static G4KaonPlus * KaonPlus()
static G4KaonZeroLong * KaonZeroLong()
const G4String & GetName() const
static G4Neutron * Neutron()
G4double EvaporationEffects(G4double kineticEnergy)
G4double Cinema(G4double kineticEnergy)
G4DynamicParticle * ReturnTargetParticle() const
G4double GetPDGMass() const
const G4String & GetParticleName() const
static G4PionPlus * PionPlus()
static G4Proton * Proton()
G4HadFinalState * ApplyYourself(const G4HadProjectile &aTrack, G4Nucleus &targetNucleus)
void SetUpPions(const G4int np, const G4int nm, const G4int nz, G4FastVector< G4ReactionProduct, 256 > &vec, G4int &vecLen)
void GetNormalizationConstant(const G4double availableEnergy, G4double &n, G4double &anpn)
void CalculateMomenta(G4FastVector< G4ReactionProduct, 256 > &vec, G4int &vecLen, const G4HadProjectile *originalIncident, const G4DynamicParticle *originalTarget, G4ReactionProduct &modifiedOriginal, G4Nucleus &targetNucleus, G4ReactionProduct ¤tParticle, G4ReactionProduct &targetParticle, G4bool &incidentHasChanged, G4bool &targetHasChanged, G4bool quasiElastic)
void SetUpChange(G4FastVector< G4ReactionProduct, 256 > &vec, G4int &vecLen, G4ReactionProduct ¤tParticle, G4ReactionProduct &targetParticle, G4bool &incidentHasChanged)
G4double Pmltpc(G4int np, G4int nm, G4int nz, G4int n, G4double b, G4double c)
void SetMomentum(const G4double x, const G4double y, const G4double z)
G4double GetTotalMomentum() const
G4double GetKineticEnergy() const
const G4ParticleDefinition * GetDefinition() const
G4ThreeVector GetMomentum() const
void SetSide(const G4int sid)
void SetDefinitionAndUpdateE(const G4ParticleDefinition *aParticleDefinition)
void SetDefinition(const G4ParticleDefinition *aParticleDefinition)
void SetKineticEnergy(const G4double en)
void SetMass(const G4double mas)