79 lowEnergyRecoilLimit = 100.*keV;
80 lowEnergyLimitQ = 0.0*GeV;
81 lowEnergyLimitHE = 0.0*GeV;
82 lowestEnergyLimit= 0.0*keV;
83 plabLowLimit = 20.0*MeV;
85 fRhoReIm=fSigmaTot=fOptRatio=fSpp=fPcms=0.0;
120 lowEnergyRecoilLimit = 100.*keV;
121 lowEnergyLimitQ = 0.0*GeV;
122 lowEnergyLimitHE = 0.0*GeV;
123 lowestEnergyLimit = 0.0*keV;
124 plabLowLimit = 20.0*MeV;
126 fRhoReIm=fSigmaTot=fOptRatio=fSpp=fPcms=0.0;
134 fProjectile = projectile;
137 fMassSum2 = (fMassTarg+fMassProj)*(fMassTarg+fMassProj);
138 fMassDif2 = (fMassTarg-fMassProj)*(fMassTarg-fMassProj);
165 lowEnergyRecoilLimit = 100.*keV;
166 lowEnergyLimitQ = 0.0*GeV;
167 lowEnergyLimitHE = 0.0*GeV;
168 lowestEnergyLimit= 0.0*keV;
169 plabLowLimit = 20.0*MeV;
171 fRhoReIm=fSigmaTot=fOptRatio=fSpp=fPcms=0.0;
175 fProjectile = projectile;
184 fMassSum2 = (fMassTarg+fMassProj)*(fMassTarg+fMassProj);
185 fMassDif2 = (fMassTarg-fMassProj)*(fMassTarg-fMassProj);
207 if ( fEnergyVector ) {
208 delete fEnergyVector;
212 for ( std::vector<G4PhysicsTable*>::iterator it = fBankT.begin();
213 it != fBankT.end(); ++it ) {
214 if ( (*it) ) (*it)->clearAndDestroy();
219 if(fHadrNuclXsc)
delete fHadrNuclXsc;
236 fBankT.push_back(fTableT);
242 fBankT.push_back(fTableT);
246 fBankT.push_back(fTableT);
256 G4int iTkin, jTransfer;
258 G4double t1, t2, dt, delta = 0., sum = 0.;
261 fProjectile = projectile;
264 fMassSum2 = (fMassTarg+fMassProj)*(fMassTarg+fMassProj);
265 fMassDif2 = (fMassTarg-fMassProj)*(fMassTarg-fMassProj);
271 for( iTkin = 0; iTkin < fEnergyBin; iTkin++)
274 plab = std::sqrt( Tkin*( Tkin + 2*fMassProj ) );
282 tMax = 4.*fPcms*fPcms;
283 if( tMax > 15.*GeV*GeV ) tMax = 15.*GeV*GeV;
291 for( jTransfer = fBinT-1; jTransfer >= 1; jTransfer--)
293 t1 = dt*(jTransfer-1);
296 if( fMassProj > 900.*MeV )
307 vectorT->
PutValue( jTransfer-1, t1, sum );
310 fTableT->insertAt( iTkin, vectorT );
325 G4int iTkin, iTransfer;
327 G4double Tkin = std::sqrt(m1*m1+p*p) - m1;
342 G4double delta = std::abs(Tkin - fOldTkin)/(Tkin + fOldTkin);
345 if ( delta < deltaMax ) iTkin = fInTkin;
348 for( iTkin = 0; iTkin < fEnergyBin; iTkin++)
350 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
353 if ( iTkin >= fEnergyBin ) iTkin = fEnergyBin-1;
354 if ( iTkin < 0 ) iTkin = 0;
359 if (iTkin == fEnergyBin -1 || iTkin == 0 )
365 for(iTransfer = 0; iTransfer < fBinT-1; iTransfer++)
367 if(
position >= (*(*fTableT)(iTkin))(iTransfer) )
break;
369 if (iTransfer >= fBinT-1) iTransfer = fBinT-2;
384 for(iTransfer = 0; iTransfer < fBinT-1; iTransfer++)
387 if(
position >= (*(*fTableT)(iTkin))(iTransfer) )
break;
389 if (iTransfer >= fBinT-1) iTransfer = fBinT-2;
441 G4int iTkin, iTransfer;
443 G4double Tkin = std::sqrt(m1*m1+p*p) - m1;
457 G4double delta = std::abs(Tkin - fOldTkin)/(Tkin + fOldTkin);
460 if ( delta < deltaMax ) iTkin = fInTkin;
463 for( iTkin = 0; iTkin < fEnergyBin; iTkin++ )
465 if( Tkin < fEnergyVector->GetLowEdgeEnergy(iTkin) )
break;
468 if ( iTkin >= fEnergyBin ) iTkin = fEnergyBin-1;
469 if ( iTkin < 0 ) iTkin = 0;
474 if (iTkin == fEnergyBin -1 || iTkin == 0 )
478 for(iTransfer = 0; iTransfer < fBinT-1; iTransfer++)
480 if(
position >= (*(*fTableT)(iTkin))(iTransfer) )
break;
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. ;
527 fProjectile = projectile;
530 fMassSum2 = (fMassTarg+fMassProj)*(fMassTarg+fMassProj);
531 fMassDif2 = (fMassTarg-fMassProj)*(fMassTarg-fMassProj);
532 fSpp = fMassProj*fMassProj + fMassTarg*fMassTarg + 2.*fMassTarg*std::sqrt(plab*plab + fMassProj*fMassProj);
533 fPcms = std::sqrt( (fSpp - fMassSum2)*(fSpp - fMassDif2)/4./fSpp);
535 G4cout<<
"fMassTarg = "<<fMassTarg<<
" MeV; fMassProj = "<<fMassProj<<
" MeV"<<
G4endl;
536 tMax = 4.*fPcms*fPcms;
537 if( tMax > 15.*GeV*GeV ) tMax = 15.*GeV*GeV;
546 G4cout<<
"s = "<<std::sqrt(fSpp)/GeV<<
" GeV; fPcms = "<<fPcms/GeV
547 <<
" GeV; qMax = "<<tMax/GeV/GeV<<
" GeV2; dt = "<<dt/GeV/GeV<<
" GeV2"<<
G4endl;
552 for( jTransfer = fBinT-1; jTransfer >= 1; jTransfer-- )
554 t1 = dt*(jTransfer-1);
557 if( fMassProj > 900.*MeV )
576 vectorT->
PutValue( jTransfer-1, t1, sum );
579 fTableT->insertAt( 0, vectorT );
580 fBankT.push_back( fTableT );
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++)
614 if(
position > (*(*fTableT)(iTkin))(iTransfer) )
break;
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;
665const G4double G4hhElastic::theNuclNuclData[19][6] =
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 }
698const G4double G4hhElastic::thePiKaNuclData[8][6] =
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 }
double epsilon(double density, double temperature)
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(std::size_t index, G4double energy, G4double dValue)
G4double GetLowEdgeEnergy(std::size_t binNumber) const
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4Proton * Proton()
G4double GetdsdtF123(G4double q)
G4double SampleBisectionalT(const G4ParticleDefinition *p, G4double plab)
void BuildTableTest(G4ParticleDefinition *target, G4ParticleDefinition *projectile, G4double plab)
G4double SampleInvariantT(const G4ParticleDefinition *p, G4double plab, G4int, G4int)
void SetParametersCMS(G4double plab)
G4double GetdsdtF123qQgG(G4double q)
G4double SampleTest(G4double tMin)
void BuildTableT(G4ParticleDefinition *target, G4ParticleDefinition *projectile)
G4double GetTransfer(G4int iMomentum, G4int iTransfer, G4double position)