36    for (
int i = 0; i < 5; i++) {
 
   43       fThetaLabVsThetaCM[i] = 
nullptr;
 
   44       fELabVsThetaCM[i] = 
nullptr;
 
   45       fELabVsThetaLab[i] = 
nullptr;
 
   47    fKoxReactionXSec = 
nullptr;
 
   48    fEqbmChargeState = 
nullptr;
 
   49    fEqbmChargeStateShSol = 
nullptr;
 
   50    fEqbmChargeStateShGas = 
nullptr;
 
   53    SetIntegralPrecision(1
e-10);
 
  115       scouple = syst.
Next();
 
  156    Obsolete(
"KV2Body(KVNucleus*, KVNucleus*, KVNucleus*, Double_t)", 
"1.11", 
"1.12");
 
  159       Info(
"KV2Body", 
"Use constructor KV2Body(const KVNucleus& compound) to simulate binary decay of compound");
 
  161    else if (!proj_out) {
 
  162       Info(
"KV2Body", 
"Use constructor KV2Body(const KVNucleus& proj, const KVNucleus& targ) to define entrance channel");
 
  165       Info(
"KV2Body", 
"Use constructor KV2Body(const KVNucleus& proj, const KVNucleus& targ, const KVNucleus& outgoing) to define entrance & exit channels");
 
  197    : fNuclei(5), fEDiss(-Exx)
 
  243    fNuclei(5), fEDiss(Ediss)
 
  283    fNuclei(5), fEDiss(Ediss)
 
  366    for (
int i = 0; i < 5; i++) {
 
  408    for (
unsigned i = 1; i <= 4; ++i) 
if (
fNuclei[i].IsDefined()) 
fNuclei[i].SetExcitEnergy(0);
 
  466    if (i > 0 && i < 5) {
 
  470    Warning(
"GetNucleus(Int_t i)", 
"Index i out of bounds, i=%d", i);
 
  485       Warning(
"GetQReaction", 
"Parameters for outgoing nuclei not set");
 
  505               "Parameters for outgoing nuclei not set");
 
  540    if (i < 3 || i > 4) {
 
  541       Warning(
"GetMaxAngleLab(Int_t i)",
 
  542               "Returns maximum scattering angle in lab for nuclei i=3 (quasiproj) and i=4 (quasitarget)");
 
  558    if (i < 3 || i > 4) {
 
  559       Warning(
"GetMinAngleLab(Int_t i)",
 
  560               "Returns minimum scattering angle in lab for nuclei i=3 (quasiproj) and i=4 (quasitarget)");
 
  609    if (i < 1 || i > 2) {
 
  610       Warning(
"GetLabGrazingAngle(Int_t i)",
 
  611               "i should be 1 (proj) or 2 (targ)");
 
  615       Warning(
"GetLabGrazingAngle(Int_t i)",
 
  616               "No target defined for reaction");
 
  625    Double_t RINT = CP + CT + 4.49 - (CT + CP) / 6.35;
 
  693       Error(
"CalculateKinematics", 
"Set outgoing (decay) product first");
 
  702    for (
int i = 0; i < 5; i++) {
 
  829    cout << 
"    ******" << endl;
 
  838       cout << 
" ==> Q-REACTION = " << 
GetQReaction() << 
" MEV";
 
  841    cout << 
" AVAILABLE ENERGY IN C.M. : ECM = " << 
GetCMEnergy() <<
 
  844                                        GetA() : 0.)) << 
" MEV/A)" << endl;
 
  848         Mag() << 
" CM/NS" << endl;
 
  850    for (
int i = 1; i <= 4; i++) {
 
  852          cout << 
" ENERGY - VELOCITY OF NUCLEUS " << i << 
" IN CM : " <<
 
  857       cout << 
" MAXIMUM SCATTERING ANGLE IN LABORATORY" << endl;
 
  865       cout << 
" GRAZING ANGLE IN LABORATORY : PROJECTILE " <<
 
  867       cout << 
" GRAZING ANGLE IN LABORATORY : TARGET     " <<
 
  874       if (!strcmp(opt, 
"lab") || !strcmp(opt, 
"LAB")
 
  875             || !strcmp(opt, 
"Lab")) {
 
  878               "                   LABORATORY ANGULAR DISTRIBUTION" << endl
 
  881               "   TETA 3        EN.DIF.3               V3              TETA 4            EN.DIF.4            TETA 3" 
  884               "   (LAB)           (LAB)               (LAB)            (LAB)              (LAB)              (C.M)" 
  887          for (
int step = 0; step <= nsteps; step++) {
 
  895             GetELab(3, theta, 3, elabP1, elabP2);
 
  897             GetVLab(3, theta, 3, vP1, vP2);
 
  899             GetELab(4, theta, 3, elabT1, elabT2);
 
  901             (
"   %6.2f     %7.2f/%7.2f      %5.2f/%5.2f      %6.2f/%6.2f      %7.2f/%7.2f     %6.2f/%6.2f\n",
 
  902              theta, elabP1, elabP2, vP1, vP2,
 
  903              tlT1, tlT2, elabT1, elabT2,
 
  907       if (
GetNucleus(2) && (!strcmp(opt, 
"ruth") || !strcmp(opt, 
"RUTH")
 
  908                             || !strcmp(opt, 
"Ruth"))) {
 
  911               "             RUTHERFORD LABORATORY ANGULAR DISTRIBUTION" <<
 
  914               "   TETA 3     TETA 3    EN.DIF.3        SIG.RUT.        SIG.RUT." 
  917               "   (LAB)       (CM)       (LAB)       (LAB) (b/sr)    (CM)  (b/sr)" 
  921          for (
int step = 0; step < nsteps; step++) {
 
  922             Double_t theta = dtheta * (step + 1);
 
  925             GetELab(3, theta, 3, elabP1, elabP2);
 
  928             (
"   %6.2f     %6.2f     %7.2f      %10.4g      %10.4g\n",
 
  954    if (ThetaLab > 
TETAMAX[AngleNucleus]) 
return 0;
 
  958    TCM1 = 
GetThetaCM(OfNucleus, TCM1, AngleNucleus);
 
  959    if (nsol > 1) TCM2 = 
GetThetaCM(OfNucleus, TCM2, AngleNucleus);
 
  962    if (nsol == 2) e2 = 
GetELab(TCM2, OfNucleus);
 
 1034    if (ThetaL < 0.) ThetaL += 180.;
 
 1098    Int_t nsol = 
GetELab(OfNucleus, ThetaLab, AngleNucleus, e1, e2);
 
 1099    if (!nsol) 
return nsol;
 
 1126    if (ThetaLab > 
TETAMAX[AngleNucleus]) 
return 0;
 
 1127    if (!(
TMath::Abs(OfNucleus - AngleNucleus) % 2)) {
 
 1135    TCM1 = 
GetThetaCM(OfNucleus, TCM1, AngleNucleus);
 
 1136    if (nsol > 1) TCM2 = 
GetThetaCM(OfNucleus, TCM2, AngleNucleus);
 
 1202       Warning(
"GetXSecRuthCM", 
"No target defined for reaction");
 
 1210    if (TCM < 0) 
return 0;
 
 1231    if (theta > 
TETAMAX[OtherNucleus]) 
return -1;
 
 1234    if (!nsol) 
return -1.;
 
 1257       Warning(
"XSecRuthCMVsThetaCM", 
"No target defined for reaction");
 
 1265    if (OfNucleus == 2 || OfNucleus == 4) TCM = 
TMath::Pi() - TCM; 
 
 1317       if (DSIDTB * RLC < 0) {
 
 1318          Warning(
"GetXSecRuthLab", 
"negative value for choosen parameters : %lf %d\n", 
x[0], (
Int_t)par[0]);
 
 1402    if (phi1 == -1 || phi2 == -1) dphi = 2 * 
TMath::Pi();
 
 1403    else if (phi1 == phi2) dphi = 1;
 
 1410    if (
th1 < theta_min) theta_min = 
th1;
 
 1411    if (
th2 > theta_max) theta_max = 
th2;
 
 1413 #if ROOT_VERSION_CODE > ROOT_VERSION(5,99,01) 
 1441    if (OfNucleus == 3) 
name += 
"(projectile)";
 
 1442    else name += 
"(target)";
 
 1443    TF1* fXSecRuthCM = (
TF1*)
gROOT->GetListOfFunctions()->FindObject(
name.Data());
 
 1445       fXSecRuthCM = 
new TF1(
name.Data(),
 
 1447                             theta_cm_min, theta_cm_max, 1, 
"KV2Body", 
"XSecRuthCMVsThetaCM");
 
 1449       fXSecRuthCM->
SetNpx(1000);
 
 1451    fXSecRuthCM->
SetRange(theta_cm_min, theta_cm_max); 
 
 1473    Double_t R12 = r0 * (A1third + A2third);
 
 1476                    - 2.9 * A1third * A2third / (A1third + A2third);
 
 1511    Double_t BC = proj->
GetZ() * targ->
GetZ() * e2 / (rc * (A1third + A2third));
 
 1515                    pow((A1third + A2third + 
a * A1third * A2third / (A1third + A2third) - 
c), 2) *
 
 1537                    pow(A1third + A2third, 2);
 
 1740    x = Vp / V0 * 
pow(Zp, -0.52) * 
pow(Zt, 
x) / 1.68;
 
 1741    x = 
pow(
x, 1. + 1.8 / Zp);
 
 1743    q = (Zp * (12 * 
x + 
pow(
x, 4.))) / 
q;
 
 1773       name += 
" SHIWIETZ-SOLID";
 
 1800    x = Vp / V0 * 
pow(Zp, -0.52) * 
pow(Zt, 
x);
 
 1801    x = 
pow(
x, 1. + 0.4 / Zp);
 
 1803    q = (Zp * (376.*
x + 
pow(
x, 6.))) / 
q;
 
 1834       name += 
" SHIWIETZ-GAS";
 
 1858       Info(
"GetXSecRuthLabFunc", 
"Maximum angle set to %lf degrees", theta_max);
 
 1868    if (OfNucleus == 3) 
name += 
"(projectile)";
 
 1869    else name += 
"(target)";
 
 1917    if (OfNucleus == 3) 
name += 
"(projectile)";
 
 1918    else name += 
"(target)";
 
 1958    if (val > 
max) 
return nRoots;
 
 1970    if (nRoots == 1) 
return nRoots;
 
winID h TVirtualViewer3D TVirtualGLPainter p
 
Option_t Option_t TPoint TPoint const char x2
 
Option_t Option_t TPoint TPoint const char x1
 
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t g
 
char * Form(const char *fmt,...)
 
Relativistic binary kinematics calculator.
 
Double_t XSecRuthLabInt(Double_t *, Double_t *)
 
Double_t TETAMIN[5]
defined only for nuclei 3 et 4
 
Double_t eqbm_charge_state_shiwietz_gas(Double_t *t, Double_t *)
 
Double_t VC[5]
cm velocities
 
void SetTarget(const KVNucleus &)
Set target for reaction.
 
TF1 * GetEqbmChargeStateFunc() const
 
TF1 * GetXSecRuthLabFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
 
Double_t K[5]
ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm
 
Double_t GetMaxAngleLab(Int_t i) const
 
std::vector< KVNucleus > fNuclei
nuclei involved in calculation
 
void Print(Option_t *opt="") const
 
TF1 * GetXSecRuthLabIntegralFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
 
Double_t WCT
total cm energy
 
Double_t GetSphereDureReactionXSec(Double_t r0=1.05)
 
Double_t ELabVsThetaLab(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any lab angle x[0].
 
TF1 * fThetaLabVsThetaCM[5]
 
Double_t GetMinAngleLab(Int_t i) const
 
Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
 
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
 
Double_t fIntPrec
Precision of the TF1::Integral method.
 
Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
 
Double_t GetQReaction() const
Calculate Q-value for reaction, including dissipated (excitation) energy.
 
TF1 * fEqbmChargeStateShSol
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)
 
Double_t EqbmChargeState(Double_t *t, Double_t *)
 
TF1 * GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const
 
void SetOutgoing(const KVNucleus &proj_out)
 
TF1 * fKoxReactionXSec
function Kox reaction cross-section [barns] vs. E/A projectile
 
TF1 * GetELabVsThetaCMFunc(Int_t OfNucleus) const
 
Double_t XSecRuthCM(Double_t *, Double_t *)
 
TF1 * GetShiwietzEqbmChargeStateFuncForGasTargets() const
 
Double_t XSecRuthLab(Double_t *, Double_t *)
 
TF1 * GetKoxReactionXSecFunc() const
 
Double_t BCM
beta of centre of mass
 
TF1 * fEqbmChargeStateShGas
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)
 
Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
 
Int_t FindRoots(TF1 *, Double_t, Double_t, Double_t, Double_t &, Double_t &) const
 
Double_t GetEDiss() const
 
static Double_t GetVelocity(Double_t mass, Double_t E)
 
Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1=-1, Float_t phi2=-1, Int_t OfNucleus=3)
 
Double_t GetBmaxFromReactionXSec(Double_t ReacXsec)
 
TVector3 VCM
velocity of centre of mass
 
Double_t KoxReactionXSec(Double_t *, Double_t *)
 
Double_t ELabVsThetaCM(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any CM angle x[0].
 
Double_t ThetaLabVsThetaCM(Double_t *, Double_t *)
 
Double_t GetCMGamma() const
 
Double_t TETAMAX[5]
defined only for nuclei 3 et 4
 
Bool_t fSetOutgoing
= kTRUE if SetOutgoing is called before CalculateKinematics
 
Double_t WC[5]
cm energy of each nucleus
 
Double_t EC[5]
cm energies
 
Double_t GetExcitEnergy() const
 
Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
 
Double_t WLT
total lab energy
 
Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t &e1, Double_t &e2) const
 
Double_t BassIntBarrier()
 
TVector3 GetCMVelocity() const
Return vector velocity of centre of mass of reaction (units: cm/ns)
 
void CalculateKinematics()
 
void init()
Default initialisations.
 
Double_t GetIntegratedXsec(Double_t b1, Double_t b2)
 
TF1 * GetXSecRuthCMFunc(Int_t OfNucleus=3, Double_t theta_cm_min=1., Double_t theta_cm_max=179.) const
 
Double_t GetLabGrazingAngle(Int_t i=1) const
 
Double_t GetQGroundStates() const
Calculate Q-value for reaction, assuming all nuclei in ground state.
 
KVNucleus * GetNucleus(Int_t i) const
 
Double_t XSecRuthCMVsThetaCM(Double_t *, Double_t *)
 
Double_t GetCMEnergy() const
Return available kinetic energy in centre of mass.
 
TF1 * fEqbmChargeState
function equilibrium charge state of projectile vs. E/A projectile (Leon et al)
 
Double_t eqbm_charge_state_shiwietz_solid(Double_t *t, Double_t *)
 
Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
 
Double_t fEDiss
dissipated energy, 0 means elastic scattering
 
Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t &t1, Double_t &t2) const
 
TF1 * GetShiwietzEqbmChargeStateFuncForSolidTargets() const
 
TF1 * GetELabVsThetaLabFunc(Int_t OfNucleus) const
 
Description of properties and kinematics of atomic nuclei.
 
const Char_t * GetSymbol(Option_t *opt="") const
 
Double_t GetExcitEnergy() const
 
Double_t GetMassExcess(Int_t z=-1, Int_t a=-1) const
 
Int_t GetZ() const
Return the number of proton / atomic number.
 
TVector3 GetMomentum() const
 
Double_t GetEnergy() const
 
void SetFrame(const Char_t *frame, const KVFrameTransform &)
 
KVParticle const  * GetFrame(const Char_t *frame, Bool_t warn_and_return_null_if_unknown=kTRUE) const
 
void SetEnergy(Double_t e)
 
TVector3 GetVelocity() const
returns velocity vector in cm/ns units
 
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
 
void Begin(TString delim) const
 
KVString Next(Bool_t strip_whitespace=kFALSE) const
 
virtual void SetRange(Double_t xmin, Double_t xmax)
 
virtual Double_t Integral(Double_t a, Double_t b, Double_t epsrel=1.e-12)
 
virtual void SetNpx(Int_t npx=100)
 
virtual Double_t GetX(Double_t y, Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
 
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
 
virtual Double_t GetMaximum(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
 
virtual void SetParameter(const TString &name, Double_t value)
 
virtual Double_t GetMaximumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
 
virtual void SetTitle(const char *title="")
 
virtual void Warning(const char *method, const char *msgfmt,...) const
 
R__ALWAYS_INLINE Bool_t IsZombie() const
 
virtual void Error(const char *method, const char *msgfmt,...) const
 
virtual void Info(const char *method, const char *msgfmt,...) const
 
void Obsolete(const char *method, const char *asOfVers, const char *removedFromVers) const
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
TString & ReplaceAll(const char *s1, const char *s2)
 
void SetXYZ(Double_t x, Double_t y, Double_t z)
 
double beta(double x, double y)
 
T Mag(const SVector< T, D > &rhs)
 
RVec< PromoteTypes< T0, T1 > > pow(const T0 &x, const RVec< T1 > &v)
 
double max(double x, double y)
 
Double_t Min(Double_t a, Double_t b)
 
Double_t Landau(Double_t x, Double_t mpv=0, Double_t sigma=1, Bool_t norm=kFALSE)
 
constexpr Double_t PiOver2()
 
Double_t ATan2(Double_t y, Double_t x)
 
Double_t Power(Double_t x, Double_t y)
 
constexpr Double_t DegToRad()
 
Double_t Sqrt(Double_t x)
 
Bool_t AreEqualAbs(Double_t af, Double_t bf, Double_t epsilon)
 
constexpr Double_t RadToDeg()
 
Double_t Log10(Double_t x)