Import Geant4 11.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2024-06-28 13:08:51 +02:00
parent f7b23877ed
commit e58e650b32
5232 changed files with 239416 additions and 244360 deletions
@@ -24,28 +24,20 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#define ABLAXX_IN_GEANT4_MODE 1
#pragma once
#include "globals.hh"
#include <memory>
#ifndef G4Abla_hh
#define G4Abla_hh 1
#ifdef ABLAXX_IN_GEANT4_MODE
#include "globals.hh"
#else
#include "G4INCLGeant4Compat.hh"
#include "G4INCLConfig.hh"
#endif
#include "G4AblaRandom.hh"
#include "G4AblaDataDefs.hh"
#include "G4AblaRandom.hh"
/**
* Class containing ABLA++ de-excitation code.
@@ -55,22 +47,20 @@ class G4Abla {
public:
/**
* This constructor is used by standalone test driver and the Geant4 interface.
* This constructor is used by standalone test driver and the Geant4
* interface.
*
* @param aHazard random seeds
* @param aVolant data structure for ABLA output
* @param aVarNtp data structure for transfering ABLA output to Geant4 interface
* @param aVarNtp data structure for transfering ABLA output to Geant4
* interface
*/
#ifdef ABLAXX_IN_GEANT4_MODE
G4Abla(G4Volant *aVolant, G4VarNtp *aVarntp);
#else
G4Abla(G4INCL::Config *config, G4Volant *aVolant, G4VarNtp *aVarntp);
#endif
G4Abla(G4VarNtp *aVarntp);
/**
* Basic destructor.
*/
~G4Abla();
~G4Abla() = default;
/// \brief Dummy copy constructor
G4Abla(G4Abla const &other);
@@ -83,26 +73,23 @@ public:
*/
void setVerboseLevel(G4int level);
/**
* Get the internal output data structure pointer.
*/
G4Volant* getVolant() {
return volant;
}
/**
* Main interface to the de-excitation code.
*
* @param nucleusA mass number of the nucleus
* @param nucleusZ charge number of the nucleus
* @param excitationEnergy excitation energy of the nucleus
* @param angularMomentum angular momentum of the nucleus (produced as output by INCL4)
* @param angularMomentum angular momentum of the nucleus (produced as output
* by INCL4)
* @param momX momentum x-component
* @param momY momentum y-component
* @param momZ momentum z-component
* @param eventnumber number of the event
*/
void DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber);
void DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ,
G4double excitationEnergy, G4double angularMomentum,
G4double momX, G4double momY, G4double momZ,
G4int eventnumber);
/**
* Main interface to the de-excitation code for hyper-nuclei.
@@ -110,14 +97,18 @@ public:
* @param nucleusA mass number of the nucleus
* @param nucleusZ charge number of the nucleus
* @param excitationEnergy excitation energy of the nucleus
* @param angularMomentum angular momentum of the nucleus (produced as output by INCL)
* @param angularMomentum angular momentum of the nucleus (produced as output
* by INCL)
* @param momX momentum x-component
* @param momY momentum y-component
* @param momZ momentum z-component
* @param eventnumber number of the event
* @param nucleusS is the strange number
*/
void DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber, G4int nucleusS);
void DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ,
G4double excitationEnergy, G4double angularMomentum,
G4double momX, G4double momY, G4double momZ,
G4int eventnumber, G4int nucleusS);
// Evaporation
public:
@@ -135,18 +126,19 @@ public:
void SetParametersG4(G4int z, G4int a);
/**
* Coefficient of collective enhancement including damping
* Input: z,a,bet,sig,u
* Output: qr - collective enhancement factor
* See junghans et al., nucl. phys. a 629 (1998) 635
* Coefficient of collective enhancement including damping
* Input: z,a,bet,sig,u
* Output: qr - collective enhancement factor
* See junghans et al., nucl. phys. a 629 (1998) 635
* @param z charge number
* @param a mass number
* @param bet beta deformation
* @param sig perpendicular spin cut-off factor
* @param u Energy
* @return Coefficient of collective enhancement
* @return Coefficient of collective enhancement
*/
void qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr);
void qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u,
G4double *qr);
/**
* Model de la goutte liquide de c. f. weizsacker.
@@ -167,202 +159,263 @@ public:
/**
* Calculation of fissility parameter
*/
G4double fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis);
G4double fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam,
G4int optxfis);
/**
* Main evaporation routine.
*/
void evapora(G4double zprf, G4double aprf, G4double *ee_par, G4double jprf,
G4double *zf_par, G4double *af_par, G4double *mtota_par,
G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par,
G4int *ff_par, G4int *fimf_par, G4double *fzimf, G4double *faimf, G4double *tkeimf_par,G4double *jprfout,G4int *inttype_par, G4int *inum_par,G4double EV_TEMP[200][6],G4int *iev_tab_temp_par, G4int *nblam0);
void evapora(G4double zprf, G4double aprf, G4double *ee_par, G4double jprf,
G4double *zf_par, G4double *af_par, G4double *mtota_par,
G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par,
G4int *ff_par, G4int *fimf_par, G4double *fzimf, G4double *faimf,
G4double *tkeimf_par, G4double *jprfout, G4int *inttype_par,
G4int *inum_par, G4double EV_TEMP[indexpart][6],
G4int *iev_tab_temp_par, G4int *nblam0);
/**
* Calculation of particle emission probabilities.
*/
void direct(G4double zprf, G4double a, G4double ee, G4double jprf, G4double *probp_par, G4double *probd_par, G4double *probt_par, G4double *probn_par, G4double *probhe_par, G4double *proba_par, G4double *probg_par,G4double *probimf_par,G4double *probf_par,G4double *problamb0_par, G4double *ptotl_par, G4double *sn_par, G4double *sbp_par, G4double *sbd_par, G4double *sbt_par, G4double *sbhe_par, G4double *sba_par,G4double *slamb0_par, G4double *ecn_par, G4double *ecp_par, G4double *ecd_par, G4double *ect_par,G4double *eche_par,G4double *eca_par, G4double *ecg_par, G4double *eclamb0_par, G4double *bp_par, G4double *bd_par, G4double *bt_par, G4double *bhe_par, G4double *ba_par,G4double *sp_par,G4double *sd_par,G4double *st_par,G4double *she_par,G4double *sa_par, G4double *ef_par,G4double *ts1_par, G4int, G4int inum, G4int itest, G4int *sortie, G4double *tcn,G4double *jprfn_par, G4double *jprfp_par, G4double *jprfd_par, G4double *jprft_par, G4double *jprfhe_par, G4double *jprfa_par, G4double *jprflamb0_par, G4double *tsum_par, G4int NbLam0);
void direct(G4double zprf, G4double a, G4double ee, G4double jprf,
G4double *probp_par, G4double *probd_par, G4double *probt_par,
G4double *probn_par, G4double *probhe_par, G4double *proba_par,
G4double *probg_par, G4double *probimf_par, G4double *probf_par,
G4double *problamb0_par, G4double *ptotl_par, G4double *sn_par,
G4double *sbp_par, G4double *sbd_par, G4double *sbt_par,
G4double *sbhe_par, G4double *sba_par, G4double *slamb0_par,
G4double *ecn_par, G4double *ecp_par, G4double *ecd_par,
G4double *ect_par, G4double *eche_par, G4double *eca_par,
G4double *ecg_par, G4double *eclamb0_par, G4double *bp_par,
G4double *bd_par, G4double *bt_par, G4double *bhe_par,
G4double *ba_par, G4double *sp_par, G4double *sd_par,
G4double *st_par, G4double *she_par, G4double *sa_par,
G4double *ef_par, G4double *ts1_par, G4int, G4int inum,
G4int itest, G4int *sortie, G4double *tcn, G4double *jprfn_par,
G4double *jprfp_par, G4double *jprfd_par, G4double *jprft_par,
G4double *jprfhe_par, G4double *jprfa_par,
G4double *jprflamb0_par, G4double *tsum_par, G4int NbLam0);
/**
* Calculation of fission and the particle emission probabilities after fission.
* Calculation of fission and the particle emission probabilities after
* fission.
*/
void fission(G4double AF,G4double ZF,G4double EE,G4double JPRF,
G4double *VX1_FISSION,G4double *VY1_FISSION,G4double *VZ1_FISSION,
G4double *VX2_FISSION,G4double *VY2_FISSION,G4double *VZ2_FISSION,
G4int *ZFP1,G4int *AFP1,G4int *SFP1,G4int *ZFP2,G4int *AFP2,G4int *SFP2,G4int *imode,
G4double *VX_EVA_SC, G4double *VY_EVA_SC, G4double *VZ_EVA_SC,
G4double EV_TEMP[200][6],G4int *IEV_TAB_FIS,G4int *NbLam0);
void fission(G4double AF, G4double ZF, G4double EE, G4double JPRF,
G4double *VX1_FISSION, G4double *VY1_FISSION,
G4double *VZ1_FISSION, G4double *VX2_FISSION,
G4double *VY2_FISSION, G4double *VZ2_FISSION, G4int *ZFP1,
G4int *AFP1, G4int *SFP1, G4int *ZFP2, G4int *AFP2, G4int *SFP2,
G4int *imode, G4double *VX_EVA_SC, G4double *VY_EVA_SC,
G4double *VZ_EVA_SC, G4double EV_TEMP[indexpart][6],
G4int *IEV_TAB_FIS, G4int *NbLam0);
/**
* Calculation of lorentz's boost
*/
void lorentz_boost(G4double VXRIN,G4double VYRIN,G4double VZRIN,G4double VXIN,G4double VYIN,G4double VZIN,G4double *VXOUT,G4double *VYOUT,G4double *VZOUT);
void lorentz_boost(G4double VXRIN, G4double VYRIN, G4double VZRIN,
G4double VXIN, G4double VYIN, G4double VZIN,
G4double *VXOUT, G4double *VYOUT, G4double *VZOUT);
/**
* Calculation of unstable nuclei
*/
void unstable_nuclei(G4int AFP,G4int ZFP,G4int *AFPNEW,G4int *ZFPNEW,G4int &IOUNSTABLE,G4double VX,G4double VY,G4double VZ,G4double *VP1X,G4double *VP1Y,G4double *VP1Z,G4double BU_TAB_TEMP[200][6],G4int *ILOOP);
void unstable_nuclei(G4int AFP, G4int ZFP, G4int *AFPNEW, G4int *ZFPNEW,
G4int &IOUNSTABLE, G4double VX, G4double VY, G4double VZ,
G4double *VP1X, G4double *VP1Y, G4double *VP1Z,
G4double BU_TAB_TEMP[indexpart][6], G4int *ILOOP);
/**
* Calculation of unstable nuclei tke
*/
void unstable_tke(G4double AIN,G4double ZIN,G4double ANEW,G4double ZNEW,G4double VXIN,G4double VYIN,G4double VZIN,G4double *V1X,G4double *V1Y,G4double *V1Z,G4double *V2X,G4double *V2Y,G4double *V2Z);
void unstable_tke(G4double AIN, G4double ZIN, G4double ANEW, G4double ZNEW,
G4double VXIN, G4double VYIN, G4double VZIN, G4double *V1X,
G4double *V1Y, G4double *V1Z, G4double *V2X, G4double *V2Y,
G4double *V2Z);
/**
* Calculation of tke for breakup fragments
*/
void tke_bu(G4double Z,G4double A,G4double ZALL,G4double AAL,G4double *VX,G4double *VY,G4double *VZ);
void tke_bu(G4double Z, G4double A, G4double ZALL, G4double AAL, G4double *VX,
G4double *VY, G4double *VZ);
/**
* Calculation of the angular momentum of breakup fragments
* according to Goldhaber model
*/
void AMOMENT(G4double AABRA,G4double APRF,G4int IMULTIFR,G4double *PX,G4double *PY,G4double *PZ);
void AMOMENT(G4double AABRA, G4double APRF, G4int IMULTIFR, G4double *PX,
G4double *PY, G4double *PZ);
/**
* Calculation of particle emission barriers.
*/
void barrs(G4int Z1,G4int A1,G4int Z2,G4int A2,G4double *sBARR,G4double *sOMEGA);
void barrs(G4int Z1, G4int A1, G4int Z2, G4int A2, G4double *sBARR,
G4double *sOMEGA);
/**
* Calculation of particle emission between the saddle and scission point.
*/
void evap_postsaddle(G4double A, G4double Z, G4double E_scission_pre, G4double *E_scission_post, G4double *A_scission, G4double *Z_scission,
G4double &vx_eva,G4double &vy_eva,G4double &vz_eva,G4int *NbLam0_par);
void evap_postsaddle(G4double A, G4double Z, G4double E_scission_pre,
G4double *E_scission_post, G4double *A_scission,
G4double *Z_scission, G4double &vx_eva, G4double &vy_eva,
G4double &vz_eva, G4int *NbLam0_par);
/**
* Calculation of imfs.
*/
void imf(G4double ACN,G4double ZCN,G4double TEMP,G4double EE,G4double *ZIMF,G4double *AIMF,G4double *BIMF,G4double *SBIMF,G4double *TIMF,G4double JPRF);
void imf(G4double ACN, G4double ZCN, G4double TEMP, G4double EE,
G4double *ZIMF, G4double *AIMF, G4double *BIMF, G4double *SBIMF,
G4double *TIMF, G4double JPRF);
/**
* Calculation of omega at saddle point.
*/
void fomega_sp(G4double AF,G4double Y,G4double *MFCD,G4double *sOMEGA,G4double *sHOMEGA);
void fomega_sp(G4double AF, G4double Y, G4double *MFCD, G4double *sOMEGA,
G4double *sHOMEGA);
/**
* Calculation of omega at ground state.
*/
void fomega_gs(G4double AF,G4double ZF,G4double *K1,G4double *sOMEGA,G4double *sHOMEGA);
void fomega_gs(G4double AF, G4double ZF, G4double *K1, G4double *sOMEGA,
G4double *sHOMEGA);
/**
* Calculation of tunnelling effect in fission.
*/
G4double tunnelling(G4double A,G4double ZPRF,G4double Y,G4double EE,G4double EF,G4double TEMP,G4double DENSG,G4double DENSF,G4double ENH_FACT);
G4double tunnelling(G4double A, G4double ZPRF, G4double Y, G4double EE,
G4double EF, G4double TEMP, G4double DENSG,
G4double DENSF, G4double ENH_FACT);
/**
* Calculation of fission width at the saddle point according to B&W.
*/
void fission_width(G4double ZPRF,G4double A,G4double EE,G4double BS,G4double BK,G4double EF,G4double Y,G4double *GF,G4double *TEMP,G4double JPR,G4int IEROT,G4int FF_ALLOWED,G4int OPTCOL,G4int OPTSHP,G4double DENSG);
void fission_width(G4double ZPRF, G4double A, G4double EE, G4double BS,
G4double BK, G4double EF, G4double Y, G4double *GF,
G4double *TEMP, G4double JPR, G4int IEROT,
G4int FF_ALLOWED, G4int OPTCOL, G4int OPTSHP,
G4double DENSG);
/**
* Calculation of unbound nuclei.
*/
void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4double SA,G4double BP,G4double BD,G4double BT,G4double BHE,G4double BA,G4double *PROBF,G4double *PROBN,G4double *PROBP,G4double *PROBD,G4double *PROBT,G4double *PROBHE,G4double *PROBA,G4double *PROBIMF,G4double *PROBG,G4double *ECN,G4double *ECP,G4double *ECD,G4double *ECT,G4double *ECHE,G4double *ECA);
void unbound(G4double SN, G4double SP, G4double SD, G4double ST, G4double SHE,
G4double SA, G4double BP, G4double BD, G4double BT, G4double BHE,
G4double BA, G4double *PROBF, G4double *PROBN, G4double *PROBP,
G4double *PROBD, G4double *PROBT, G4double *PROBHE,
G4double *PROBA, G4double *PROBIMF, G4double *PROBG,
G4double *ECN, G4double *ECP, G4double *ECD, G4double *ECT,
G4double *ECHE, G4double *ECA);
/**
* Calculation of the fission distribution.
*/
void fissionDistri(G4double &a,G4double &z,G4double &e,
G4double &a1,G4double &z1,G4double &e1,G4double &v1,
G4double &a2,G4double &z2,G4double &e2,G4double &v2,
G4double &vx_eva_sc,G4double &vy_eva_sc,
G4double &vz_eva_sc,G4int *NbLam0_par);
void fissionDistri(G4double &a, G4double &z, G4double &e, G4double &a1,
G4double &z1, G4double &e1, G4double &v1, G4double &a2,
G4double &z2, G4double &e2, G4double &v2,
G4double &vx_eva_sc, G4double &vy_eva_sc,
G4double &vz_eva_sc, G4int *NbLam0_par);
/**
* Calculation of even-odd effects in fission.
*/
void even_odd(G4double r_origin,G4double r_even_odd,G4int &i_out);
void even_odd(G4double r_origin, G4double r_even_odd, G4int &i_out);
/**
* Functions for the fission model.
*/
G4double umass(G4double z,G4double n,G4double beta);
G4double ecoul(G4double z1,G4double n1,G4double beta1,G4double z2,G4double n2,G4double beta2,G4double d);
G4double Uwash(G4double E, G4double Ecrit,G4double Freduction,G4double gamma);
G4double frldm(G4double z,G4double n,G4double beta);
G4double eflmac_profi(G4double a,G4double z);
G4double umass(G4double z, G4double n, G4double beta);
G4double ecoul(G4double z1, G4double n1, G4double beta1, G4double z2,
G4double n2, G4double beta2, G4double d);
G4double Uwash(G4double E, G4double Ecrit, G4double Freduction,
G4double gamma);
G4double frldm(G4double z, G4double n, G4double beta);
G4double eflmac_profi(G4double a, G4double z);
G4double gausshaz(G4int k, G4double xmoy, G4double sig);
G4double haz(G4int k);
/**
* Level density parameters.
*/
void densniv(G4double a, G4double z, G4double ee, G4double ef, G4double *dens, G4double bshell, G4double bs, G4double bk,
G4double *temp, G4int optshp, G4int optcol, G4double defbet, G4double *ecor, G4double jprf, G4int ifis,G4double *qr);
void densniv(G4double a, G4double z, G4double ee, G4double ef, G4double *dens,
G4double bshell, G4double bs, G4double bk, G4double *temp,
G4int optshp, G4int optcol, G4double defbet, G4double *ecor,
G4double jprf, G4int ifis, G4double *qr);
/**
* Calculation of the fission probability modified by transient time effects.
*/
void part_fiss(G4double BET,G4double GP,G4double GF,G4double Y,G4double TAUF,G4double TS1,G4double TSUM,G4int *CHOICE,G4double ZF,G4double AF,G4double FT,G4double *T_LAPSE,G4double *GF_LOC);
void part_fiss(G4double BET, G4double GP, G4double GF, G4double Y,
G4double TAUF, G4double TS1, G4double TSUM, G4int *CHOICE,
G4double ZF, G4double AF, G4double FT, G4double *T_LAPSE,
G4double *GF_LOC);
G4double func_trans(G4double TIME,G4double ZF,G4double AF,G4double BET,G4double Y,G4double FT,G4double T_0);
G4double func_trans(G4double TIME, G4double ZF, G4double AF, G4double BET,
G4double Y, G4double FT, G4double T_0);
/**
* This subroutine calculates the ordinary legendre polynomials of
* order 0 to n-1 of argument x and stores them in the vector pl.
* They are calculated by recursion relation from the first two
* polynomials.
* Written by A.J.Sierk LANL t-9 February, 1984
* This subroutine calculates the ordinary legendre polynomials of
* order 0 to n-1 of argument x and stores them in the vector pl.
* They are calculated by recursion relation from the first two
* polynomials.
* Written by A.J.Sierk LANL t-9 February, 1984
*/
void lpoly(G4double x, G4int n, G4double pl[]);
/**
* This function will calculate the liquid-drop nuclear mass for spheri
* configuration according to the preprint NUCLEAR GROUND-STATE
* configuration according to the preprint NUCLEAR GROUND-STATE
* MASSES and DEFORMATIONS by P. Mo"ller et al. from August 16, 1993 p.
* All constants are taken from this publication for consistency.
* All constants are taken from this publication for consistency.
*/
G4double eflmac(G4int ia, G4int iz, G4int flag, G4int optshp);
/**
* Procedure for calculating the pairing correction to the binding
* Procedure for calculating the pairing correction to the binding
* energy of a specific nucleus.
*/
void appariem(G4double a, G4double z, G4double *del);
/**
* PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N.
* RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN
* PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N.
* RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN
*/
void parite(G4double n, G4double *par);
/**
* RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED
* RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED
* 90 PERCENT OF ITS FINAL VALUE
*/
G4double tau(G4double bet, G4double homega, G4double ef, G4double t);
/**
* KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY
* INDEPENDENT OF EXCITATION ENERGY
* KRAMERS FAKTOR - REDUCTION OF THE FISSION PROBABILITY
* INDEPENDENT OF EXCITATION ENERGY
*/
G4double cram(G4double bet, G4double homega);
/**
* CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS
* RELATIVE TO THE SPHERICAL CONFIGURATION
* BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES
* CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS
* RELATIVE TO THE SPHERICAL CONFIGURATION
* BASED ON MYERS, DROPLET MODEL FOR ARBITRARY SHAPES
*/
G4double bipol(G4int iflag, G4double y);
/**
* THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE
* GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM
* AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF
* H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC
* NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR
* MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY
* 2*PI).
* THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE
* GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM
* AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF
* H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC
* NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR
* MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY
* 2*PI).
*/
void barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax);
void barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs,
G4double *selmax);
/**
* Calculation of decay widths for light particles.
*/
G4double width(G4double AMOTHER,G4double ZMOTHER,G4double APART,G4double ZPART,G4double TEMP,G4double B1,G4double SB1,G4double EXC);
G4double width(G4double AMOTHER, G4double ZMOTHER, G4double APART,
G4double ZPART, G4double TEMP, G4double B1, G4double SB1,
G4double EXC);
/**
* Calculation of penetration factors for light charged particles.
@@ -372,12 +425,13 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
/**
* Calculation of mean value of orbital angular momentum.
*/
void lorb(G4double AMOTHER,G4double ADAUGHTER,G4double LMOTHER,G4double EEFINAL,G4double *LORBITAL,G4double *SIGMA_LORBITAL);
void lorb(G4double AMOTHER, G4double ADAUGHTER, G4double LMOTHER,
G4double EEFINAL, G4double *LORBITAL, G4double *SIGMA_LORBITAL);
/**
* Calculation of BS and BK for the nuclear-level density.
*/
void bsbkbc(G4double A,G4double Z,G4double *BS,G4double *BK,G4double *BC);
void bsbkbc(G4double A, G4double Z, G4double *BS, G4double *BK, G4double *BC);
/**
* Special functions used for the emission of particles.
@@ -386,9 +440,9 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
G4double gammp(G4double a, G4double x);
void gcf(G4double *gammcf,G4double a,G4double x,G4double gln);
void gcf(G4double *gammcf, G4double a, G4double x, G4double gln);
void gser(G4double *gamser,G4double a,G4double x,G4double gln);
void gser(G4double *gamser, G4double a, G4double x, G4double gln);
G4double fvmaxhaz(G4double T);
@@ -401,7 +455,7 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
/**
* LOGARITHM OF THE GAMM FUNCTION
*/
*/
G4double gammln(G4double xx);
/**
@@ -428,12 +482,7 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
* Random generator according to the
powerfunction y = x**(lambda) in the range from xmin to xmax
*/
G4int IPOWERLIMHAZ(G4double lambda,G4int xmin,G4int xmax);
/**
*
*/
G4double pace2(G4double a, G4double z);
G4int IPOWERLIMHAZ(G4double lambda, G4int xmin, G4int xmax);
/**
*
@@ -448,7 +497,7 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
/**
* Fill the data array for INCL
*/
void FillData(G4int IMULTBU,G4int IEV_TAB);
void FillData(G4int IMULTBU, G4int IEV_TAB);
/**
* Separation energies of lambda
@@ -458,9 +507,9 @@ void unbound(G4double SN,G4double SP,G4double SD,G4double ST,G4double SHE,G4dou
/**
* Separation energies of for other particles for hypernuclei
*/
G4double getdeltabinding(G4double a,G4int nblamb);
G4double getdeltabinding(G4double a, G4int nblamb);
G4double gethyperbinding(G4double A, G4double Z, G4int ny);
public:
// Utils
G4int min(G4int a, G4int b);
@@ -478,33 +527,22 @@ public:
G4int idnint(G4double value);
G4double utilabs(G4double a);
G4double dmin1(G4double a, G4double b, G4double c);
G4Ec2sub* getFrldmTable() {
return ec2sub;
}
private:
G4int verboseLevel;
G4int ilast;
G4double T_freeze_out_in;
G4int IEV_TAB_SSC;
G4double BU_TAB[200][12],EV_TAB[200][6],EV_TAB_SSC[200][6];
G4double BU_TAB[indexpart][12], EV_TAB[indexpart][6], EV_TAB_SSC[indexpart][6];
G4int gammaemission;
G4double T_freeze_out;
G4Pace *pace;
G4Ald *ald;
G4Eenuc *eenuc;
G4Ec2sub *ec2sub;
G4Ecld *ecld;
G4Mexp *masses;
G4Fb *fb;
G4Fiss *fiss;
G4Opt *opt;
G4Volant *volant;
std::unique_ptr<G4Ald> ald;
std::unique_ptr<G4Ec2sub> ec2sub;
std::unique_ptr<G4Ecld> ecld;
std::unique_ptr<G4Mexp> masses;
std::unique_ptr<G4Fb> fb;
std::unique_ptr<G4Fiss> fiss;
std::unique_ptr<G4Opt> opt;
G4VarNtp *varntp;
G4int Ainit,Zinit,Sinit;
#ifndef ABLAXX_IN_GEANT4_MODE
G4INCL::Config *theConfig;
#endif
G4int Ainit, Zinit, Sinit;
};
#endif
@@ -24,161 +24,108 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#define ABLAXX_IN_GEANT4_MODE 1
#pragma once
#include "globals.hh"
// Data structures needed by ABLA evaporation code.
#ifndef G4AblaDataDefs_hh
#define G4AblaDataDefs_hh 1
#ifdef ABLAXX_IN_GEANT4_MODE
#include "globals.hh"
#else
#include "G4INCLGeant4Compat.hh"
#endif
#include <cmath>
#include <vector>
// ABLA
class G4Nevent {
public:
G4Nevent() {};
~G4Nevent() {};
G4int ii;
};
constexpr const G4int nrows = 180;
constexpr const G4int zcols = 122;
// ABLA
#define PACESIZEROWS 500
#define PACESIZECOLS 500
/**
* Masses.
*/
constexpr const G4int lpcols = 13;
constexpr const G4int lprows = 154;
class G4Pace {
constexpr const G4int nrowsbeta = 251;
constexpr const G4int zcolsbeta = 137;
public:
G4Pace() {};
constexpr const G4int indexpart = 300;
~G4Pace() {};
G4double dm[PACESIZEROWS][PACESIZECOLS];
};
#define MASSIZEROWS 154
#define MASSIZECOLS 13
// Data structures needed by ABLA evaporation code
class G4Mexp {
public:
G4Mexp() {};
G4Mexp(){};
~G4Mexp() {};
G4double massexp[MASSIZEROWS][MASSIZECOLS];
G4double bind[MASSIZEROWS][MASSIZECOLS];
G4int mexpiop[MASSIZEROWS][MASSIZECOLS];
virtual ~G4Mexp() = default;
G4double massexp[lprows][lpcols] = {{0.}};
G4double bind[lprows][lpcols] = {{0.}};
G4int mexpiop[lprows][lpcols] = {{0}};
};
#define EC2SUBROWS 154
#define EC2SUBCOLS 99
/**
*
*/
class G4Ec2sub {
public:
G4Ec2sub() {};
G4Ec2sub(){};
~G4Ec2sub() {};
virtual ~G4Ec2sub() = default;
G4double ecnz[EC2SUBROWS][EC2SUBCOLS];
/**
* Dump the contents of the ecnz data table.
*/
void dump() {
for(G4int i = 0; i < EC2SUBROWS; i++) {
for(G4int j = 0; j < EC2SUBCOLS; j++) {
//G4cout << ecnz[i][j] << " ";
}
// G4cout << G4endl;
}
}
G4double ecnz[nrows][zcols] = {{0.}};
};
class G4Ald {
public:
/**
*
*/
G4Ald()
:av(0.0), as(0.0), ak(0.0), optafan(0.0)
{};
~G4Ald() {};
G4double av,as,ak,optafan;
G4Ald() : av(0.0), as(0.0), ak(0.0), optafan(0.0){};
virtual ~G4Ald() = default;
G4double av, as, ak, optafan = 0.;
};
#define ECLDROWS 154
#define ECLDCOLS 99
#define ECLDROWSbeta 251
#define ECLDCOLSbeta 137
/**
* Shell corrections and deformations.
*/
**/
class G4Ecld {
public:
G4Ecld() {};
~G4Ecld() {};
G4Ecld(){};
virtual ~G4Ecld() = default;
/**
* Ground state shell correction frldm for a spherical ground state.
*/
G4double ecgnz[ECLDROWS][ECLDCOLS];
G4double ecgnz[nrows][zcols] = {{0.}};
/**
* Shell correction for the saddle point (now: == 0).
*/
G4double ecfnz[ECLDROWS][ECLDCOLS];
G4double ecfnz[nrows][zcols] = {{0.}};
/**
* Difference between deformed ground state and ldm value.
*/
G4double vgsld[ECLDROWS][ECLDCOLS];
G4double vgsld[nrows][zcols] = {{0.}};
/**
* Alpha ground state deformation (this is not beta2!)
* beta2 = std::sqrt(5/(4pi)) * alpha
* Alpha ground state deformation (this is not beta2!)
* beta2 = std::sqrt(5/(4pi)) * alpha
*/
G4double alpha[ECLDROWS][ECLDCOLS];
G4double alpha[nrows][zcols] = {{0.}};
/**
* RMS function for lcp emission barriers
*/
G4double rms[ECLDROWS][ECLDCOLS];
G4double rms[nrows][zcols] = {{0.}};
/**
* Beta2 deformations
*/
G4double beta2[ECLDROWSbeta][ECLDCOLSbeta];
G4double beta2[nrowsbeta][zcolsbeta] = {{0.}};
/**
* Beta4 deformations
*/
G4double beta4[ECLDROWSbeta][ECLDCOLSbeta];
G4double beta4[nrowsbeta][zcolsbeta] = {{0.}};
};
class G4Fiss {
@@ -188,29 +135,26 @@ class G4Fiss {
public:
G4Fiss()
:bet(0.0), ifis(0.0), ucr(0.0), dcr(0.0), optshp(0), optxfis(0), optct(0), optcol(0),
at(0), zt(0)
{};
~G4Fiss() {};
G4double bet,ifis,ucr,dcr;
G4int optshp, optxfis,optct,optcol,at,zt;
: bet(0.0), bethyp(0.0), ifis(0.0), ucr(0.0), dcr(0.0), optshp(0), optxfis(0),
optct(0), optcol(0), at(0), zt(0){};
virtual ~G4Fiss() = default;
G4double bet, bethyp, ifis, ucr, dcr;
G4int optshp, optxfis, optct, optcol, at, zt;
};
#define FBROWS 101
#define FBCOLS 161
/**
* Fission barriers.
*/
class G4Fb {
public:
G4Fb() {};
~G4Fb() {;}
// G4double efa[FBROWS][FBCOLS];
G4double efa[FBCOLS][FBROWS];
G4Fb(){};
virtual ~G4Fb() = default;
G4double efa[nrows][zcols] = {{0.}};
};
/**
@@ -220,370 +164,32 @@ public:
class G4Opt {
public:
G4Opt()
:optemd(0), optcha(0), optshpimf(0), optimfallowed(0), nblan0(0)
{};
~G4Opt() {};
G4Opt() : optemd(0), optcha(0), optshpimf(0), optimfallowed(0), nblan0(0){};
G4int optemd,optcha,optshpimf,optimfallowed,nblan0;
virtual ~G4Opt() = default;
G4int optemd, optcha, optshpimf, optimfallowed, nblan0;
};
#define EENUCSIZE 2002
#define XHESIZE 50
class G4Eenuc {
public:
G4Eenuc() {
for(G4int i = 0; i < EENUCSIZE; ++i) {
she[i] = 0.0;
}
for(G4int i = 0; i < XHESIZE; ++i) {
for(G4int j = 0; j < EENUCSIZE; ++j) {
xhe[i][j] = 0.0;
}
}
};
~G4Eenuc() {};
G4double she[EENUCSIZE],xhe[XHESIZE][EENUCSIZE];
};
//#define VOLANTSIZE 200
#define VOLANTSIZE 301
/**
* Evaporation and fission output data.
*/
class G4Volant {
public:
G4Volant()
{
clear();
}
~G4Volant() {};
void clear()
{
for(G4int i = 0; i < VOLANTSIZE; i++) {
copied[i] = false;
acv[i] = 0;
zpcv[i] = 0;
pcv[i] = 0;
xcv[i] = 0;
ycv[i] = 0;
zcv[i] = 0;
iv = 0;
}
}
G4double getTotalMass()
{
G4double total = 0.0;
for(G4int i = 0; i <= iv; i++) {
total += acv[i];
}
return total;
}
void dump()
{
/*
G4double totA = 0.0, totZ = 0.0, totP = 0.0;
// G4cout <<"i \t ACV \t ZPCV \t PCV" << G4endl;
for(G4int i = 0; i <= iv; i++) {
if(i == 0 && acv[i] != 0) {
// G4cout <<"G4Volant: Particle stored at index " << i << G4endl;
}
totA += acv[i];
totZ += zpcv[i];
totP += pcv[i];
// G4cout << "volant" << i << "\t" << acv[i] << " \t " << zpcv[i] << " \t " << pcv[i] << G4endl;
}
// G4cout <<"Particle count index (iv) = " << iv << G4endl;
// G4cout <<"ABLA Total: A = " << totA << " Z = " << totZ << " momentum = " << totP << G4endl;
*/
}
G4double acv[VOLANTSIZE],zpcv[VOLANTSIZE],pcv[VOLANTSIZE],xcv[VOLANTSIZE];
G4double ycv[VOLANTSIZE],zcv[VOLANTSIZE];
G4bool copied[VOLANTSIZE];
G4int iv;
};
#define VARNTPSIZE 301
class G4VarNtp {
public:
G4VarNtp() {
clear();
};
G4VarNtp() { clear(); };
~G4VarNtp() {};
virtual ~G4VarNtp() = default;
/**
* Clear and initialize all variables and arrays.
*/
void clear() {
particleIndex = 0;
projType = 0;
projEnergy = 0.0;
targetA = 0;
targetZ = 0;
masp = 0.0; mzsp = 0.0; exsp = 0.0; mrem = 0.0;
// To be deleted?
spectatorA = 0;
spectatorZ = 0;
spectatorEx = 0.0;
spectatorM = 0.0;
spectatorT = 0.0;
spectatorP1 = 0.0;
spectatorP2 = 0.0;
spectatorP3 = 0.0;
massini = 0;
mzini = 0;
exini = 0;
pcorem = 0;
mcorem = 0;
pxrem = 0;
pyrem = 0;
pzrem = 0;
erecrem = 0;
mulncasc = 0;
mulnevap = 0;
mulntot = 0;
bimpact = 0.0;
jremn = 0;
kfis = 0;
estfis = 0;
izfis = 0;
iafis = 0;
ntrack = 0;
needsFermiBreakup = false;
for(G4int i = 0; i < VARNTPSIZE; i++) {
itypcasc[i] = 0;
avv[i] = 0;
zvv[i] = 0;
svv[i] = 0;
enerj[i] = 0.0;
pxlab[i] = 0.0;
pylab[i] = 0.0;
pzlab[i] = 0.0;
full[i] = false;
}
kfis = 0;
itypcasc.clear();
avv.clear();
zvv.clear();
svv.clear();
enerj.clear();
pxlab.clear();
pylab.clear();
pzlab.clear();
}
/**
* Add a particle to the INCL/ABLA final output.
*/
void addParticle(G4double A, G4double Z, G4double E, G4double P, G4double theta, G4double phi) {
if(full[particleIndex]) {
// G4cout <<"A = " << Z << " Z = " << Z << G4endl;
} else {
avv[particleIndex] = (int) A;
zvv[particleIndex] = (int) Z;
enerj[particleIndex] = E;
plab[particleIndex] = P;
tetlab[particleIndex] = theta;
philab[particleIndex] = phi;
full[particleIndex] = true;
ntrack = particleIndex + 1;
particleIndex++;
}
}
/**
* Baryon number conservation check.
*/
G4int getTotalBaryonNumber() {
G4int baryonNumber = 0;
for(G4int i = 0; i < ntrack; i++) {
if(avv[i] > 0) {
baryonNumber += avv[i];
}
}
return baryonNumber;
}
/**
* Return total energy.
*/
G4double getTotalEnergy() {
G4double energy = 0.0;
for(G4int i = 0; i < ntrack; i++) {
energy += std::sqrt(std::pow(plab[i], 2) + std::pow(getMass(i), 2)); // E^2 = p^2 + m^2
}
return energy;
}
/**
* Return total three momentum.
*/
G4double getTotalThreeMomentum() {
G4double momentum = 0;
for(G4int i = 0; i < ntrack; i++) {
momentum += plab[i];
}
return momentum;
}
G4double getMomentumSum() {
G4double momentum = 0;
for(G4int i = 0; i < ntrack; i++) {
momentum += plab[i];
}
return momentum;
}
G4double getMass(G4int particle) {
const G4double protonMass = 938.272;
const G4double neutronMass = 939.565;
const G4double pionMass = 139.57;
G4double mass = 0.0;
if(avv[particle] == 1 && zvv[particle] == 1) mass = protonMass;
if(avv[particle] == 1 && zvv[particle] == 0) mass = neutronMass;
if(avv[particle] == -1) mass = pionMass;
if(avv[particle] > 1)
mass = avv[particle] * protonMass + zvv[particle] * neutronMass;
return mass;
}
/**
* Dump debugging output.
*/
void dump()
{
/*
G4int nProton = 0, nNeutron = 0;
G4int nPiPlus = 0, nPiZero = 0, nPiMinus = 0;
G4int nH2 = 0, nHe3 = 0, nAlpha = 0;
G4int nGamma=0;
G4int nFragments = 0;
G4int nParticles = 0;
for(G4int i = 0; i < ntrack; i++) {
nParticles++;
if(avv[i] == 1 && zvv[i] == 1) nProton++; // Count multiplicities
if(avv[i] == 1 && zvv[i] == 0) nNeutron++;
if(avv[i] == 0 && zvv[i] == 0) nGamma++;
if(avv[i] == -1 && zvv[i] == 1) nPiPlus++;
if(avv[i] == -1 && zvv[i] == 0) nPiZero++;
if(avv[i] == -1 && zvv[i] == -1) nPiMinus++;
if(avv[i] == 2 && zvv[i] == 1) nH2++;
if(avv[i] == 3 && zvv[i] == 2) nHe3++;
if(avv[i] == 4 && zvv[i] == 2) nAlpha++;
if( zvv[i] > 2) nFragments++;
}
*/
}
/**
* Projectile type.
*/
G4int projType;
/**
* Projectile energy.
*/
G4double projEnergy;
/**
* Target mass number.
*/
G4int targetA;
/**
* Target charge number.
*/
G4int targetZ;
/**
* Projectile spectator A, Z, Eex;
*/
G4double masp, mzsp, exsp, mrem;
/**
* Spectator nucleus mass number for light ion projectile support.
*/
G4int spectatorA;
/**
* Spectator nucleus charge number for light ion projectile support.
*/
G4int spectatorZ;
/**
* Spectator nucleus excitation energy for light ion projectile support.
*/
G4double spectatorEx;
/**
* Spectator nucleus mass.
*/
G4double spectatorM;
/**
* Spectator nucleus kinetic energy.
*/
G4double spectatorT;
/**
* Spectator nucleus momentum x-component.
*/
G4double spectatorP1;
/**
* Spectator nucleus momentum y-component.
*/
G4double spectatorP2;
/**
* Spectator nucleus momentum z-component.
*/
G4double spectatorP3;
/**
* A of the remnant.
*/
G4double massini;
/**
* Z of the remnant.
*/
G4double mzini;
/**
* Excitation energy.
*/
G4double exini;
G4double pcorem, mcorem, pxrem, pyrem, pzrem, erecrem;
/**
* Cascade n multip.
*/
G4int mulncasc;
/**
* Evaporation n multip.
*/
G4int mulnevap;
/**
* Total n multip.
*/
G4int mulntot;
/**
* Impact parameter.
*/
G4double bimpact;
/**
* Remnant Intrinsic Spin.
*/
G4int jremn;
/**
* Fission 1/0=Y/N.
*/
@@ -609,13 +215,6 @@ public:
*/
G4int ntrack;
/**
* The state of the index:
* true = reserved
* false = free
*/
G4bool full[VARNTPSIZE];
/**
* Does this nucleus require Fermi break-up treatment? Only
* applicable when used together with Geant4.
@@ -627,49 +226,44 @@ public:
/**
* emitted in cascade (0) or evaporation (1).
*/
G4int itypcasc[VARNTPSIZE];
std::vector<G4int> itypcasc;
/**
* A (-1 for pions).
*/
G4int avv[VARNTPSIZE];
std::vector<G4int> avv;
/**
* Z
*/
G4int zvv[VARNTPSIZE];
std::vector<G4int> zvv;
/**
* S (-1 for lambda_0).
*/
G4int svv[VARNTPSIZE];
std::vector<G4int> svv;
/**
* Kinetic energy.
*/
G4double enerj[VARNTPSIZE];
std::vector<G4double> enerj;
/**
* Momentum.
*/
G4double plab[VARNTPSIZE];
G4double pxlab[VARNTPSIZE];
G4double pylab[VARNTPSIZE];
G4double pzlab[VARNTPSIZE];
std::vector<G4double> plab;
std::vector<G4double> pxlab;
std::vector<G4double> pylab;
std::vector<G4double> pzlab;
/**
* Theta angle.
*/
G4double tetlab[VARNTPSIZE];
std::vector<G4double> tetlab;
/**
* Phi angle.
*/
G4double philab[VARNTPSIZE];
std::vector<G4double> philab;
private:
G4int particleIndex;
};
#endif
@@ -24,20 +24,17 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#define ABLAXX_IN_GEANT4_MODE 1
#include "globals.hh"
#ifndef G4AblaDataFile_hh
#define G4AblaDataFile_hh 1
#pragma once
#include "G4AblaVirtualData.hh"
#include "globals.hh"
/**
* Read ABLA data from files.
@@ -45,23 +42,14 @@
class G4AblaDataFile : public G4AblaVirtualData {
public:
#ifdef ABLAXX_IN_GEANT4_MODE
G4AblaDataFile();
#else
G4AblaDataFile(G4INCL::Config *);
#endif
~G4AblaDataFile();
virtual ~G4AblaDataFile() = default;
/**
* Read all data from files.
*/
bool readData();
G4bool readData();
private:
G4int verboseLevel;
#ifndef ABLAXX_IN_GEANT4_MODE
G4INCL::Config *theConfig;
#endif
};
#endif
@@ -24,63 +24,59 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#ifndef G4AblaInterface_hh
#define G4AblaInterface_hh 1
#pragma once
#include "globals.hh"
#include "G4VPreCompoundModel.hh"
#include "G4ReactionProduct.hh"
#include "G4Abla.hh"
#include "G4Fragment.hh"
#include "G4HadFinalState.hh"
#include "G4HadProjectile.hh"
#include "G4Nucleus.hh"
#include "G4Abla.hh"
#include "G4ReactionProduct.hh"
#include "G4VPreCompoundModel.hh"
class G4ExcitationHandler;
class G4HadFinalState;
class G4AblaInterface : public G4VPreCompoundModel
{
public:
G4AblaInterface(G4ExcitationHandler* ptr = nullptr);
class G4AblaInterface : public G4VPreCompoundModel {
public:
G4AblaInterface(G4ExcitationHandler *ptr = nullptr);
virtual ~G4AblaInterface();
virtual G4ReactionProductVector* DeExcite(G4Fragment& aFragment);
virtual G4ReactionProductVector *DeExcite(G4Fragment &aFragment);
virtual G4HadFinalState* ApplyYourself(G4HadProjectile const&, G4Nucleus&) final;
virtual G4HadFinalState *ApplyYourself(G4HadProjectile const &,
G4Nucleus &) final;
virtual void BuildPhysicsTable(const G4ParticleDefinition&) final;
virtual void BuildPhysicsTable(const G4ParticleDefinition &) final;
virtual void InitialiseModel() final;
virtual void ModelDescription(std::ostream& outFile) const;
virtual void ModelDescription(std::ostream &outFile) const;
virtual void DeExciteModelDescription(std::ostream& outFile) const;
virtual void DeExciteModelDescription(std::ostream &outFile) const;
private:
private:
G4HadFinalState applyYourselfResult;
G4VarNtp* ablaResult;
G4Volant* volant;
G4Abla* theABLAModel;
G4VarNtp *ablaResult;
G4Abla *theABLAModel;
G4long eventNumber;
G4int secID; // Creator model ID for the secondaries created by ABLA
G4int secID; // Creator model ID for the secondaries created by ABLA
G4bool isInitialised;
/// \brief Convert an Abla particle to a G4DynamicParticle
G4ReactionProduct* toG4Particle(G4int A, G4int Z, G4int S, G4double kinE,
G4double px, G4double py, G4double pz) const;
G4ReactionProduct *toG4Particle(G4int A, G4int Z, G4int S, G4double kinE,
G4double px, G4double py, G4double pz) const;
/// \brief Convert A, Z and S to a G4ParticleDefinition
G4ParticleDefinition* toG4ParticleDefinition(G4int A, G4int Z, G4int S) const;
G4ParticleDefinition *toG4ParticleDefinition(G4int A, G4int Z, G4int S) const;
};
#endif
@@ -24,21 +24,17 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#define ABLAXX_IN_GEANT4_MODE 1
#pragma once
#include "globals.hh"
#ifndef G4ABLARANDOM_HH
#define G4ABLARANDOM_HH
namespace G4AblaRandom {
double flat();
G4double flat();
}
#endif
@@ -24,27 +24,17 @@
// ********************************************************************
//
// ABLAXX statistical de-excitation model
// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
// Jose Luis Rodriguez, UDC (translation from ABLA07 and contact person)
// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
// Aleksandra Kelic, GSI (ABLA07 code)
// Davide Mancusi, CEA (contact person INCL)
// Aatos Heikkinen, HIP (project coordination)
//
#define ABLAXX_IN_GEANT4_MODE 1
#pragma once
#include "globals.hh"
#ifndef G4AblaVirtualData_hh
#define G4AblaVirtualData_hh 1
#ifdef ABLAXX_IN_GEANT4_MODE
#include "globals.hh"
#else
#include "G4INCLGeant4Compat.hh"
#include "G4INCLConfig.hh"
#endif
/**
* An interface to data used by ABLA. This interface allows
* us to abstract the actual source of data. Currently the data is
@@ -54,16 +44,12 @@
class G4AblaVirtualData {
protected:
/**
* Constructor, destructor
*/
#ifdef ABLAXX_IN_GEANT4_MODE
G4AblaVirtualData();
#else
G4AblaVirtualData(G4INCL::Config *);
#endif
virtual ~G4AblaVirtualData();
virtual ~G4AblaVirtualData() = default;
public:
/**
@@ -81,11 +67,6 @@ public:
*/
G4bool setVgsld(G4int A, G4int Z, G4double value);
/**
* Set the value of Pace2.
*/
G4bool setPace2(G4int A, G4int Z, G4double value);
/**
* Set the value of RMS.
*/
@@ -111,7 +92,6 @@ public:
*/
G4bool setBeta4(G4int A, G4int Z, G4double value);
/**
* Get the value of Alpha.
*/
@@ -127,12 +107,7 @@ public:
*/
G4double getVgsld(G4int A, G4int Z);
/**
* Get the value of Pace2.
*/
G4double getPace2(G4int A, G4int Z);
/**
/*
* Get the value of RMS.
*/
G4double getRms(G4int A, G4int Z);
@@ -157,40 +132,21 @@ public:
*/
G4double getBeta4(G4int A, G4int Z);
G4int getAlphaRows();
G4int getAlphaCols();
G4int getPaceRows();
G4int getPaceCols();
virtual G4bool readData() = 0;
private:
static const G4int sRows = 180;
static const G4int sCols = 122;
static const G4int alphaRows = 154;
static const G4int alphaCols = 99;
static const G4int paceRows = 500;
static const G4int paceCols = 500;
static const G4int rmsRows = 154;
static const G4int rmsCols = 99;
static const G4int betaRows = 251;
static const G4int betaRows = sCols + sRows;
static const G4int betaCols = 137;
static const G4int massRows = 154;
static const G4int massCols = 13;
G4double alpha[alphaRows][alphaCols];
G4double ecnz[alphaRows][alphaCols];
G4double vgsld[alphaRows][alphaCols];
G4double pace2[paceRows][paceCols];
G4double rms[rmsRows][rmsCols];
G4double mexp[massRows][massCols];
G4int mexpid[massRows][massCols];
G4double alpha[sRows][sCols];
G4double ecnz[sRows][sCols];
G4double vgsld[sRows][sCols];
G4double rms[sRows][sCols];
G4double mexp[sRows][sCols];
G4int mexpid[sRows][sCols];
G4double beta2[betaRows][betaCols];
G4double beta4[betaRows][betaCols];
};
#endif