54 G4cout <<
"G4RPGAntiSigmaMinusInelastic::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 G4RPGAntiSigmaMinusInelastic::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);
155 static G4bool first =
true;
156 const G4int numMul = 1200;
157 const G4int numMulA = 400;
158 const G4int numSec = 60;
159 static G4double protmul[numMul], protnorm[numSec];
160 static G4double neutmul[numMul], neutnorm[numSec];
161 static G4double protmulA[numMulA], protnormA[numSec];
162 static G4double neutmulA[numMulA], neutnormA[numSec];
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-2); nneg<=np; ++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=std::max(0,np-1); nneg<=(np+1); ++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=2; 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=1; 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];
276 const G4double anhl[] = {1.00,1.00,1.00,1.00,1.00,1.00,1.00,1.00,0.97,0.88,
277 0.85,0.81,0.75,0.64,0.64,0.55,0.55,0.45,0.47,0.40,
278 0.39,0.36,0.33,0.10,0.01};
280 if( iplab > 9 )iplab =
G4int( (pOriginal/GeV- 1.0)*5.0 ) + 10;
281 if( iplab > 14 )iplab =
G4int( pOriginal/GeV- 2.0 ) + 15;
282 if( iplab > 23 )iplab =
G4int( (pOriginal/GeV-10.0)/10.0 ) + 23;
283 if( iplab > 24 )iplab = 24;
286 if( availableEnergy <= aPiPlus->GetPDGMass()/MeV )
298 for( np=0; np<numSec/3 && ran>=excs; ++np )
300 for( nneg=std::max(0,np-2); nneg<=np && ran>=excs; ++nneg )
302 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
304 if( ++counter < numMul )
307 if( nt>0 && nt<=numSec )
309 test = std::exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
310 dum = (
pi/anpn)*nt*protmul[counter]*protnorm[nt-1]/(2.0*n*n);
311 if( std::fabs(dum) < 1.0 )
313 if( test >= 1.0e-10 )excs += dum*test;
328 G4int ncht = std::min( 3, std::max( 1, np-nneg+1 ) );
337 targetHasChanged =
true;
345 incidentHasChanged =
true;
353 incidentHasChanged =
true;
355 targetHasChanged =
true;
362 for( np=0; np<numSec/3 && ran>=excs; ++np )
364 for( nneg=std::max(0,np-1); nneg<=(np+1) && ran>=excs; ++nneg )
366 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
368 if( ++counter < numMul )
371 if( nt>0 && nt<=numSec )
373 test = std::exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
374 dum = (
pi/anpn)*nt*neutmul[counter]*neutnorm[nt-1]/(2.0*n*n);
375 if( std::fabs(dum) < 1.0 )
377 if( test >= 1.0e-10 )excs += dum*test;
392 G4int ncht = std::min( 3, std::max( 1, np-nneg+2 ) );
398 targetHasChanged =
true;
407 incidentHasChanged =
true;
409 targetHasChanged =
true;
417 incidentHasChanged =
true;
419 targetHasChanged =
true;
428 incidentHasChanged =
true;
435 if( centerofmassEnergy <= aPiPlus->GetPDGMass()/MeV+aKaonPlus->
GetPDGMass()/MeV )
447 for( np=2; np<numSec/3 && ran>=excs; ++np )
450 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
452 if( ++counter < numMulA )
455 if( nt>1 && nt<=numSec )
457 test = std::exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
458 dum = (
pi/anpn)*nt*protmulA[counter]*protnormA[nt-1]/(2.0*n*n);
459 if( std::fabs(dum) < 1.0 )
461 if( test >= 1.0e-10 )excs += dum*test;
479 for( np=1; np<numSec/3 && ran>=excs; ++np )
482 for( nz=0; nz<numSec/3 && ran>=excs; ++nz )
484 if( ++counter < numMulA )
487 if( nt>1 && nt<=numSec )
489 test = std::exp( std::min( expxu, std::max( expxl, -(pi/4.0)*(nt*nt)/(n*n) ) ) );
490 dum = (
pi/anpn)*nt*neutmulA[counter]*neutnormA[nt-1]/(2.0*n*n);
491 if( std::fabs(dum) < 1.0 )
493 if( test >= 1.0e-10 )excs += dum*test;
553 currentParticle.
SetMass( 0.0 );
G4DLLIMPORT 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
G4ThreeVector GetMomentum() const
void SetSide(const G4int sid)
void SetDefinitionAndUpdateE(G4ParticleDefinition *aParticleDefinition)
void SetKineticEnergy(const G4double en)
G4ParticleDefinition * GetDefinition() const
void SetDefinition(G4ParticleDefinition *aParticleDefinition)
void SetMass(const G4double mas)