33 #define INCLXX_IN_GEANT4_MODE 1
47 theMaximumRadius(std::
min((*rpCorrelationTableProton)(1.), (*rpCorrelationTableNeutron)(1.))),
50 std::fill(rFromP, rFromP +
UnknownParticle, static_cast<InverseInterpolationTable*>(NULL));
51 rFromP[
Proton] = rpCorrelationTableProton;
52 rFromP[
Neutron] = rpCorrelationTableNeutron;
54 rFromP[
DeltaPlus] = rpCorrelationTableProton;
55 rFromP[
DeltaZero] = rpCorrelationTableNeutron;
56 rFromP[
DeltaMinus] = rpCorrelationTableNeutron;
59 std::fill(pFromR, pFromR +
UnknownParticle, static_cast<InverseInterpolationTable*>(NULL));
66 INCL_DEBUG(
"Interpolation table for proton local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
70 <<
"Interpolation table for neutron local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
74 <<
"Interpolation table for delta++ local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
78 <<
"Interpolation table for delta+ local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
82 <<
"Interpolation table for delta0 local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
86 <<
"Interpolation table for delta- local energy (A=" << theA <<
", Z=" << theZ <<
") initialised:"
90 initializeTransmissionRadii();
107 theMaximumRadius(rhs.theMaximumRadius),
108 theProtonNuclearRadius(rhs.theProtonNuclearRadius)
111 std::fill(rFromP, rFromP +
UnknownParticle, static_cast<InverseInterpolationTable*>(NULL));
119 std::fill(pFromR, pFromR +
UnknownParticle, static_cast<InverseInterpolationTable*>(NULL));
131 swap(temporaryDensity);
138 std::swap(theMaximumRadius, rhs.theMaximumRadius);
139 std::swap(theProtonNuclearRadius, rhs.theProtonNuclearRadius);
140 std::swap_ranges(transmissionRadius, transmissionRadius+
UnknownParticle, rhs.transmissionRadius);
147 std::swap(pFromR[Proton], rhs.pFromR[Proton]);
148 std::swap(pFromR[Neutron], rhs.pFromR[Neutron]);
149 std::swap(pFromR[DeltaPlusPlus], rhs.pFromR[DeltaPlusPlus]);
150 std::swap(pFromR[DeltaPlus], rhs.pFromR[DeltaPlus]);
151 std::swap(pFromR[DeltaZero], rhs.pFromR[DeltaZero]);
152 std::swap(pFromR[DeltaMinus], rhs.pFromR[DeltaMinus]);
155 void NuclearDensity::initializeTransmissionRadii() {
156 const G4double theProtonRadius = 0.88;
157 const G4double theProtonTransmissionRadius = theProtonNuclearRadius + theProtonRadius;
159 transmissionRadius[
Proton] = theProtonTransmissionRadius;
160 transmissionRadius[
PiPlus] = theProtonNuclearRadius;
161 transmissionRadius[
PiMinus] = theProtonNuclearRadius;
162 transmissionRadius[
DeltaPlusPlus] = theProtonTransmissionRadius;
163 transmissionRadius[
DeltaPlus] = theProtonTransmissionRadius;
164 transmissionRadius[
DeltaMinus] = theProtonTransmissionRadius;
165 transmissionRadius[
Composite] = theProtonNuclearRadius;
171 return (*(rFromP[t]))(
p);
176 return (*(pFromR[t]))(
r);
G4double getMinPFromR(const ParticleType t, const G4double r) const
NuclearDensity(const G4int A, const G4int Z, InverseInterpolationTable const *const rpCorrelationTableProton, InverseInterpolationTable const *const rpCorrelationTableNeutron)
NuclearDensity & operator=(const NuclearDensity &rhs)
Assignment operator.
G4double getNuclearRadius(const ParticleType t, const G4int A, const G4int Z)
void copy(std::vector< T > &main, const std::vector< T > &data)
void swap(shared_ptr< P > &, shared_ptr< P > &)
Class for interpolating the inverse of a 1-dimensional function.
void swap(NuclearDensity &rhs)
Helper method for the assignment operator.
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
void print(const std::vector< T > &data)
G4double getMaxRFromP(const ParticleType t, const G4double p) const
Get the maximum allowed radius for a given momentum.