212 for ( std::vector<G4PhysicsTable*>::iterator it =
fBankT.begin();
213 it !=
fBankT.end(); ++it ) {
214 if ( (*it) ) (*it)->clearAndDestroy();
256 G4int iTkin, jTransfer;
258 G4double t1, t2, dt, delta = 0., sum = 0.;
274 plab = std::sqrt( Tkin*( Tkin + 2*
fMassProj ) );
291 for( jTransfer =
fBinT-1; jTransfer >= 1; jTransfer--)
293 t1 = dt*(jTransfer-1);
307 vectorT->
PutValue( jTransfer-1, t1, sum );
325 G4int iTkin, iTransfer;
327 G4double Tkin = std::sqrt(m1*m1+p*p) - m1;
345 if ( delta < deltaMax ) iTkin =
fInTkin;
350 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
354 if ( iTkin < 0 ) iTkin = 0;
365 for(iTransfer = 0; iTransfer <
fBinT-1; iTransfer++)
369 if (iTransfer >=
fBinT-1) iTransfer =
fBinT-2;
384 for(iTransfer = 0; iTransfer <
fBinT-1; iTransfer++)
389 if (iTransfer >=
fBinT-1) iTransfer =
fBinT-2;
441 G4int iTkin, iTransfer;
443 G4double Tkin = std::sqrt(m1*m1+p*p) - m1;
460 if ( delta < deltaMax ) iTkin =
fInTkin;
465 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
469 if ( iTkin < 0 ) iTkin = 0;
478 for(iTransfer = 0; iTransfer <
fBinT-1; iTransfer++)
482 if (iTransfer >=
fBinT-1) iTransfer =
fBinT-2;
491 position = (*(*fTableT)(iTkin))(0)*rand;
495 G4int sTransfer = 0, fTransfer =
fBinT - 2, dTransfer = fTransfer - sTransfer;
498 for( iTransfer = 0; iTransfer <
fBinT - 1; iTransfer++ )
503 y2 = (*(*fTableT)(iTkin))( sTransfer + dTransfer );
505 if( y2 >
position ) sTransfer += dTransfer;
508 if( dTransfer < 1 )
break;
510 t = (*fTableT)(iTkin)->GetLowEdgeEnergy(sTransfer);
524 G4double t1, t2, dt, delta = 0., sum = 0. ;
552 for( jTransfer =
fBinT-1; jTransfer >= 1; jTransfer-- )
554 t1 = dt*(jTransfer-1);
576 vectorT->
PutValue( jTransfer-1, t1, sum );
595 G4int iTkin, iTransfer, iTmin;
602 for(iTransfer = 0; iTransfer <
fBinT-1; iTransfer++)
605 if( tMin <= (*
fTableT)(iTkin)->GetLowEdgeEnergy(iTransfer) )
break;
608 if(iTmin < 0 ) iTmin = 0;
612 for( iTmin = 0; iTransfer <
fBinT-1; iTransfer++)
616 if (iTransfer >=
fBinT-1) iTransfer =
fBinT-2;
635 randTransfer = (*fTableT)(iTkin)->GetLowEdgeEnergy(iTransfer);
640 if ( iTransfer >=
G4int((*
fTableT)(iTkin)->GetVectorLength()) )
642 iTransfer = (*fTableT)(iTkin)->GetVectorLength() - 1;
644 y1 = (*(*fTableT)(iTkin))(iTransfer-1);
645 y2 = (*(*fTableT)(iTkin))(iTransfer);
647 x1 = (*fTableT)(iTkin)->GetLowEdgeEnergy(iTransfer-1);
648 x2 = (*fTableT)(iTkin)->GetLowEdgeEnergy(iTransfer);
653 if ( x1 == x2 ) randTransfer = x2;
659 else randTransfer = x1 + (
position - y1 )*( x2 - x1 )/delta;
669 { 2.76754, 4.8, 4.8, 0.05, 0.742441, 10.5 },
670 { 3.07744, 5.4, 5.4, 0.02, 0.83818, 6.5 },
671 { 3.36305, 5.2, 5.2, 0.02, 0.838893, 7.5 },
672 { 4.32941, 6, 6, 0.03, 0.769389, 7.5 },
673 { 4.62126, 6, 6, 0.03, 0.770111, 6.5 },
675 { 5.47416, 4.5, 4.5, 0.03, 0.813185, 7.5 },
676 { 6.15088, 6.5, 6.5, 0.02, 0.799539, 6.5 },
677 { 6.77474, 5.2, 5.2, 0.03, 0.784901, 7.5 },
678 { 9.77775, 7, 7, 0.03, 0.742531, 6.5 },
680 { 10.4728, 5.2, 5.2, 0.03, 0.780439, 7.5 },
682 { 13.7631, 7, 7, 0.008, 0.8664, 5.0 },
683 { 19.4184, 6.8, 6.8, 0.009, 0.861337, 2.5 },
684 { 23.5, 6.8, 6.8, 0.007, 0.878112, 1.5 },
686 { 24.1362, 7.2, 7.2, 0.008, 0.864745, 5.5 },
687 { 52.8, 6.8, 6.8, 0.008, 0.871929, 1.5 },
689 { 546, 7.4, 7.4, 0.013, 0.845877, 5.5 },
690 { 1960, 7.8, 7.8, 0.022, 0.809062, 7.5 },
691 { 7000, 8, 8, 0.024, 0.820441, 5.5 },
692 { 13000, 8.5, 8.5, 0.03, 0.796721, 10.5 }
702 { 2.5627, 3.8, 3.3, 0.22, 0.222, 1.5 },
703 { 2.93928, 4.3, 3.8, 0.2, 0.250601, 1.3 },
704 { 3.22326, 4.8, 4.3, 0.13, 0.32751, 2.5 },
705 { 7.80704, 5.5, 5, 0.13, 0.340631, 2.5 },
706 { 9.7328, 5, 4.5, 0.05, 0.416319, 5.5 },
708 { 13.7315, 5.3, 4.8, 0.05, 0.418426, 5.5 },
709 { 16.6359, 6.3, 5.8, 0.05, 0.423817, 5.5 },
710 { 19.3961, 5, 4.5, 0.05, 0.413477, 3.5 }
G4double epsilon(G4double density, G4double temperature)
static constexpr double keV
static constexpr double GeV
static constexpr double MeV
G4GLOB_DLL std::ostream G4cout
void SetMinEnergy(G4double anEnergy)
void SetMaxEnergy(const G4double anEnergy)
G4double GetMaxEnergy() const
static G4HadronicParameters * Instance()
static G4KaonMinus * KaonMinus()
static G4KaonPlus * KaonPlus()
static G4Neutron * Neutron()
G4double GetPDGMass() const
void PutValue(const std::size_t index, const G4double e, const G4double value)
void insertAt(std::size_t, G4PhysicsVector *)
G4double GetLowEdgeEnergy(const std::size_t index) const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4Proton * Proton()
G4PhysicsLogVector * fEnergyVector
G4ParticleDefinition * theNeutron
G4ParticleDefinition * fProjectile
G4double GetdsdtF123(G4double q)
G4ParticleDefinition * fTarget
G4double lowEnergyRecoilLimit
G4ParticleDefinition * thePionPlus
G4double lowEnergyLimitHE
G4double SampleBisectionalT(const G4ParticleDefinition *p, G4double plab)
std::vector< G4PhysicsTable * > fBankT
G4ParticleDefinition * thePionMinus
static const G4double thePiKaNuclData[8][6]
G4ParticleDefinition * theProton
void BuildTableTest(G4ParticleDefinition *target, G4ParticleDefinition *projectile, G4double plab)
G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int, G4int)
G4HadronNucleonXsc * fHadrNuclXsc
void SetParametersCMS(G4double plab)
G4double lowestEnergyLimit
G4double GetdsdtF123qQgG(G4double q)
G4double SampleTest(G4double tMin)
void BuildTableT(G4ParticleDefinition *target, G4ParticleDefinition *projectile)
G4double GetTransfer(G4int iMomentum, G4int iTransfer, G4double position)
static const G4double theNuclNuclData[19][6]