27 #include "KVNucleus.h"
30 #include "KVDrawable.h"
341 Warning(
"GetCMGamma",
"1 - (beta)**2 = %f ... strange!",
gamma);
370 if (
TMath::Abs(OfNucleus - OtherNucleus) % 2)
return 180. - theta;
#define ClassDefOverride(name, id)
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.
TString GetReactionEquation() const
Double_t K[5]
ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm
std::vector< KVNucleus > fNuclei
nuclei involved in calculation
void SetIntegralPrecision(Double_t precision)
Double_t WCT
total cm energy
void SetEDiss(Double_t ex)
KVDrawable< TF1 > GetELabVsThetaLabFunc(nucleus_of_interest OfNucleus, kinematic_solution kine_sol=kinematic_solution::high_E_branch) const
Double_t GetIntegralPrecision()
Double_t GetSphereDureReactionXSec(Double_t r0=1.05)
Double_t ELabVsThetaLab(Double_t *, Double_t *)
TF1 * fThetaLabVsThetaCM[5]
Double_t GetMaxAngleLab(nucleus_of_interest i) const
KinematicSolutions_v FindRoots(TF1 *, Double_t) const
Double_t GetThetaCM(nucleus_of_interest OfNucleus, Double_t theta, nucleus_of_interest OtherNucleus) const
void SetExcitEnergy(Double_t ex)
KinematicSolutions_v GetThetaCM(Double_t ThetaLab, nucleus_of_interest OfNucleus) const
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Double_t fIntPrec
Precision of the TF1::Integral method.
KVDrawable< TF1 > GetXSecRuthCMFunc(nucleus_of_interest OfNucleus=projectile_like, Double_t theta_cm_min=1., Double_t theta_cm_max=179.) const
Double_t GetXSecRuthLab(Double_t ThetaLab, nucleus_of_interest OfNucleus=projectile_like, kinematic_solution kineSol=high_E_branch) const
Double_t GetQReaction() const
Calculate Q-value for reaction, including dissipated (excitation) energy.
std::optional< KinematicSolutions > KinematicSolutions_v
TF1 * fEqbmChargeStateShSol
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)
Double_t EqbmChargeState(Double_t *t, Double_t *)
KVDrawable< TF1 > GetShiwietzEqbmChargeStateFuncForSolidTargets() const
void SetOutgoing(const KVNucleus &proj_out)
TF1 * fKoxReactionXSec
function Kox reaction cross-section [barns] vs. E/A projectile
Double_t GetELab(Double_t ThetaCM, nucleus_of_interest OfNucleus) const
Double_t XSecRuthCM(Double_t *, Double_t *)
Double_t XSecRuthLab(Double_t *, Double_t *)
Double_t BCM
beta of centre of mass
TF1 * fEqbmChargeStateShGas
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)
KVDrawable< TGraph > GetGraphELabVsThetaLab(nucleus_of_interest OfNucleus=projectile_like, int npoints=50) const
Double_t GetThetaLab(Double_t ThetaCM, nucleus_of_interest OfNucleus) const
KVDrawable< TF1 > GetELabVsThetaCMFunc(nucleus_of_interest OfNucleus) const
Double_t GetEDiss() const
KinematicSolutions_v GetVLab(nucleus_of_interest OfNucleus, Double_t ThetaLab, std::optional< nucleus_of_interest > AngleNucleus={}) const
static Double_t GetVelocity(Double_t mass, Double_t E)
KVDrawable< TF1 > GetEqbmChargeStateFunc() const
KVDrawable< TF1 > GetXSecRuthLabFunc(nucleus_of_interest OfNucleus=projectile_like, kinematic_solution kineSol=high_E_branch, Double_t theta_min=1., Double_t theta_max=179.) const
Double_t GetBmaxFromReactionXSec(Double_t ReacXsec)
Double_t GetLabGrazingAngle(nucleus_of_interest i=projectile) const
TVector3 VCM
velocity of centre of mass
KVDrawable< TF1 > GetShiwietzEqbmChargeStateFuncForGasTargets() const
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 GetMinAngleLab(nucleus_of_interest i) 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
TF1 * fXSecRuthLabIntegral[5]
Double_t EC[5]
cm energies
Double_t GetExcitEnergy() const
Double_t WLT
total lab energy
Double_t BassIntBarrier()
TVector3 GetCMVelocity() const
Return vector velocity of centre of mass of reaction (units: cm/ns)
void CalculateKinematics()
void Print(Option_t *opt="") const override
void init()
Default initialisations.
KVDrawable< TF1 > GetKoxReactionXSecFunc() const
Double_t GetIntegratedXsec(Double_t b1, Double_t b2)
Double_t GetQGroundStates() const
Calculate Q-value for reaction, assuming all nuclei in ground state.
Double_t XSecRuthCMVsThetaCM(Double_t *, Double_t *)
KVDrawable< TF1 > GetThetaLabVsThetaCMFunc(nucleus_of_interest OfNucleus) const
Double_t GetXSecRuthCM(Double_t ThetaLab, nucleus_of_interest OfNucleus=projectile_like, kinematic_solution kineSol=high_E_branch) const
Double_t GetCMEnergy() const
Return available kinetic energy in centre of mass.
Bool_t IsInverseKinematics() const
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 *)
KVNucleus * GetNucleus(nucleus_of_interest i) const
Double_t fEDiss
dissipated energy, 0 means elastic scattering
KVDrawable< TF1 > GetXSecRuthLabIntegralFunc(nucleus_of_interest OfNucleus=projectile_like, Double_t theta_min=1., Double_t theta_max=179., kinematic_solution kineSol=high_E_branch) const
Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1=-1, Float_t phi2=-1, nucleus_of_interest OfNucleus=projectile_like)
Base class for KaliVeda framework.
void Warning(const char *method, const char *msgfmt,...) const override
Simple wrapper for objects which can be drawn (graphs, histograms)
Description of properties and kinematics of atomic nuclei.
Double_t Power(Double_t x, Double_t y)
Double_t Sqrt(Double_t x)
Maybe single- or double-valued.
std::array< std::optional< double >, 2 > solutions
std::optional< double > first() const
void iterate_solutions(std::function< void(double)> f)
std::optional< double > second() const