59 theABLAModel(new
G4Abla(ablaResult)),
73 applyYourselfResult.Clear();
86 if (isInitialised)
return;
88 theABLAModel->initEvapora();
89 theABLAModel->SetParameters();
105 ed <<
"G4AblaModel is used for ";
129 applyYourselfResult.Clear();
131 for (
auto const& prod : *deExciteResult) {
133 new G4DynamicParticle(prod->GetDefinition(), prod->GetTotalEnergy(), prod->GetMomentum());
135 G4double time = std::max(prod->GetFormationTime(), 0.0);
136 aNew.
SetTime(timePrimary + time);
139 applyYourselfResult.AddSecondary(aNew);
141 delete deExciteResult;
142 return &applyYourselfResult;
163 theABLAModel->DeexcitationAblaxx(ARem, ZRem, eStarRem, jRem, pxRem, pyRem, pzRem,
164 (
G4int)eventNumber, SRem);
168 for (
G4int j = 0; j < ablaResult->ntrack; ++j) {
170 toG4Particle(ablaResult->avv[j], ablaResult->zvv[j], ablaResult->svv[j], ablaResult->enerj[j],
171 ablaResult->pxlab[j], ablaResult->pylab[j], ablaResult->pzlab[j]);
173 product->SetCreatorModelID(secID);
174 result->push_back(product);
182 if (
A == 1 && Z == 1 &&
S == 0)
184 else if (
A == 1 && Z == 0 &&
S == 0)
186 else if (
A == 1 && Z == 0 &&
S == -1)
188 else if (
A == -1 && Z == 1 &&
S == 0)
190 else if (
A == -1 && Z == -1 &&
S == 0)
192 else if (
A == -1 && Z == 0 &&
S == 0)
194 else if (
A == 0 && Z == 0 &&
S == 0)
196 else if (
A == 2 && Z == 1 &&
S == 0)
198 else if (
A == 3 && Z == 1 &&
S == 0)
200 else if (
A == 3 && Z == 2 &&
S == 0)
202 else if (
A == 3 && Z == 1 &&
S == -1)
204 else if (
A == 4 && Z == 2 &&
S == 0)
206 else if (
A == 4 && Z == 1 &&
S == -1)
208 else if (
A == 4 && Z == 2 &&
S == -1)
210 else if (
A == 4 && Z == 1 &&
S == -2)
212 else if (
A == 4 && Z == 0 &&
S == -2)
214 else if (
A == 5 && Z == 2 &&
S == -1)
216 else if (
A > 0 && Z > 0 &&
A > Z) {
222 G4cout <<
"Can't convert particle with A=" <<
A <<
", Z=" << Z <<
", S=" <<
S
223 <<
" to G4ParticleDefinition, trouble ahead" <<
G4endl;
228 G4cout <<
"Can't convert particle with A=" <<
A <<
", Z=" << Z <<
", S=" <<
S
229 <<
" to G4ParticleDefinition, trouble ahead" <<
G4endl;
237 G4ParticleDefinition* def = toG4ParticleDefinition(
A, Z,
S);
245 G4DynamicParticle p(def, momentumDirection, energy);
246 G4ReactionProduct* r =
new G4ReactionProduct(def);
253 outFile <<
"ABLA++ does not provide an implementation of the ApplyYourself "
259 outFile <<
"ABLA++ is a statistical model for nuclear de-excitation. It simulates\n"
260 <<
"the gamma emission and the evaporation of neutrons, light charged\n"
261 <<
"particles and IMFs, as well as fission where applicable. The code\n"
262 <<
"included in Geant4 is a C++ translation of the original Fortran\n"
263 <<
"code ABLA07. Although the model has been recently extended to\n"
264 <<
"hypernuclei by including the evaporation of lambda particles.\n"
265 <<
"More details about the physics are available in the Geant4\n"
266 <<
"Physics Reference Manual and in the reference articles.\n\n"
268 <<
"(1) A. Kelic, M. V. Ricciardi, and K. H. Schmidt, in Proceedings of Joint\n"
269 <<
"ICTP-IAEA Advanced Workshop on Model Codes for Spallation Reactions,\n"
270 <<
"ICTP Trieste, Italy, 4–8 February 2008, edited by D. Filges, S. "
271 "Leray, Y. Yariv, A. Mengoni, A. Stanculescu, and G. Mank (IAEA "
272 "INDC(NDS)-530, Vienna, 2008), pp. 181–221.\n\n"
273 <<
"(2) J.L. Rodriguez-Sanchez, J.-C. David et al., Phys. Rev. C 98, 021602R (2018)\n"
274 <<
"(3) J.L. Rodriguez-Sanchez et al., Phys. Rev. C 105, 014623 (2022)\n"
275 <<
"(4) J.L. Rodriguez-Sanchez et al., Phys. Rev. Lett. 130, 132501 (2023)\n\n";
G4double S(G4double temp)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
CLHEP::HepLorentzVector G4LorentzVector
std::vector< G4ReactionProduct * > G4ReactionProductVector
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
virtual void BuildPhysicsTable(const G4ParticleDefinition &) final
virtual void DeExciteModelDescription(std::ostream &outFile) const
virtual G4HadFinalState * ApplyYourself(G4HadProjectile const &, G4Nucleus &) final
virtual void InitialiseModel() final
virtual void ModelDescription(std::ostream &outFile) const
virtual G4ReactionProductVector * DeExcite(G4Fragment &aFragment)
G4AblaInterface(G4ExcitationHandler *ptr=nullptr)
virtual ~G4AblaInterface()
static G4Deuteron * Deuteron()
static G4DoubleHyperDoubleNeutron * Definition()
static G4DoubleHyperH4 * Definition()
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
void SetCreatorModelID(G4int value)
void SetCreationTime(G4double time)
void SetNumberOfHoles(G4int valueTot, G4int valueP=0)
G4int GetNumberOfLambdas() const
G4ThreeVector GetAngularMomentum() const
void SetNumberOfExcitedParticle(G4int valueTot, G4int valueP)
const G4ParticleDefinition * GetDefinition() const
const G4LorentzVector & Get4Momentum() const
G4double GetGlobalTime() const
void SetTime(G4double aT)
void SetCreatorModelID(G4int id)
const G4String & GetModelName() const
static G4HyperAlpha * Definition()
static G4HyperH4 * Definition()
static G4HyperHe5 * Definition()
static G4HyperTriton * Definition()
G4ParticleDefinition * GetIon(G4int Z, G4int A, G4int lvl=0)
static G4IonTable * GetIonTable()
static G4Lambda * Lambda()
static G4Neutron * Neutron()
static G4Neutron * Definition()
static G4double GetNuclearMass(const G4double A, const G4double Z)
const G4String & GetParticleName() const
static G4int GetModelID(const G4int modelIndex)
static G4PionMinus * PionMinus()
static G4PionPlus * PionPlus()
static G4PionZero * PionZero()
static G4Proton * Definition()
static G4Proton * Proton()
static G4Triton * Triton()
G4ExcitationHandler * GetExcitationHandler() const
G4VPreCompoundModel(G4ExcitationHandler *ptr=nullptr, const G4String &modelName="PrecompoundModel")
void SetExcitationHandler(G4ExcitationHandler *ptr)
G4double energy(const ThreeVector &p, const G4double m)