KaliVeda
Toolkit for HIC analysis
KV2Body Class Reference

Detailed Description

Relativistic binary kinematics calculator.

This class calculates various useful characteristics of binary nuclear reactions. It is based on a Fortran programme by Jean-Luc Charvet (cibi.for).

It allows to calculate:

  • centre of mass recoil velocity and available energy
  • laboratory grazing angle of projectile and target
  • maximum laboratory scattering angles
  • Q-values
  • CM and laboratory Rutherford cross-sections for elastic scattering
  • CM and laboratory angles of ejectiles after elastic or inelastic scattering
  • reaction cross-sections from systematics
  • equilibrium charge states from systematics

The values are calculated using relativistic kinematics.

Setting up the calculation

There are 3 ways in which KV2Body can be used.

Note on use of KV2Body constructors.

The arguments used to define the different nuclei are of type (const KVNucleus&). This means that you can use either

(1) a normal KVNucleus object instantiated before calling the constructor:

        KVNucleus xe("129Xe", 50.); // 129Xe nucleus with 50MeV/A kinetic energy
        KVNucleus sn(50,119);       // 119Sn nucleus at rest

        KV2Body kin(xe, sn);        // define kinematics of 129Xe+119Sn@50AMeV collision

(2) a temporary KVNucleus object instantiated in the argument list:

        KV2Body kin(KVNucleus("129Xe", 50.), KVNucleus(50,119));        // define kinematics of 129Xe+119Sn@50AMeV collision

(3) a string giving the symbol and mass of the nucleus.

        KV2Body kin(KVNucleus("129Xe", 50.), "119Sn");        // define kinematics of 129Xe+119Sn@50AMeV collision

(4) any KVNucleus constructor through uniform initialization:

        KV2Body kin({"129Xe", 50.}, {50,119});        // define kinematics of 129Xe+119Sn@50AMeV collision

a. Collision kinematics

Calculate kinematics for either elastic or inelastic A + B -> A + B collisions.

Either use the constructor with arguments to specify projectile and target, and optionally the dissipated/excitation energy, or the constructor which takes as single argument a formatted name for the colliding system defining projectile, target and beam energy:

KV2Body(const KVNucleus& proj, const KVNucleus& targ, double Ediss = 0);
KV2Body(const Char_t* systemname);
char Char_t
KV2Body()
default ctor
Definition: KV2Body.cpp:61
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123

or use specific methods to define the entrance channel after using the default constructor (without arguments):

SetProjectile(int Z, int A = 0);
SetTarget(int Z, int A = 0);
SetEDiss(double); // dissipated/excitation energy
SetExcitEnergy(double); // same as SetEDiss
void SetTarget(const KVNucleus &)
Set target for reaction.
Definition: KV2Body.cpp:328
void SetEDiss(Double_t ex)
Definition: KV2Body.h:310
void SetExcitEnergy(Double_t ex)
Definition: KV2Body.h:295
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Definition: KV2Body.cpp:353

b. Binary reaction kinematics

Calculate kinematics for A + B -> C + D reactions.

Either use one of the constructors shown above to define the entrance channel then use the method below to define the outgoing fragment, or use the specific constructor with arguments to specify projectile, target, outgoing fragment, and optionally the dissipated/excitation energy:

KV2Body(const KVNucleus& proj, const KVNucleus& targ, const KVNucleus& outgoing, double Ediss = 0);

or use specific methods as above to define the entrance channel after using the default constructor (without arguments):

void SetOutgoing(const KVNucleus &proj_out)
Definition: KV2Body.cpp:411

Note that the partner of the outgoing fragment in the exit channel is deduced from conservation laws.

c. Binary decay kinematics

Calculate kinematics for A -> C + D decays.

Define the compound nucleus and its excitation energy with the constructor

KV2Body(const KVNucleus& compound, double Exx = 0);

(if Exx is not given, the excitation energy of compound is used) and then define the decay channel with

Calculating and obtaining reaction information

Once the entrance channel (and, if necessary, the exit channel) is(are) defined, the kinematical calculation is carried out by:

void CalculateKinematics()
Definition: KV2Body.cpp:693

For a general print-out of the reaction characteristics:

Print("lab");//laboratory scattering angles and energies
Print("ruth");//Rutherford scattering angles, energies and cross-sections
void Print(Option_t *opt="") const override
Definition: KV2Body.cpp:874

Binary kinematics: nucleus of interest and choice of kinematic solution

You can obtain informations on the angular, energy, and (Rutherford) cross-section distributions of either the outgoing projectile- or target-like nucleus, using the methods:

Double_t GetMaxAngleLab(nucleus_of_interest i) const
Definition: KV2Body.cpp:546
Double_t GetLabGrazingAngle(nucleus_of_interest i=projectile) const
Definition: KV2Body.cpp:613
nucleus_of_interest
Definition: KV2Body.h:263
Double_t GetMinAngleLab(nucleus_of_interest i) const
Definition: KV2Body.cpp:565
Examples
ExampleFilteredSimDataAnalysis.cpp, ExampleINDRAAnalysis.cpp, and Example_KV2Body.C.

Definition at line 178 of file KV2Body.h.

#include <KV2Body.h>

Inheritance diagram for KV2Body:

Classes

class  KinematicSolutions
 Maybe single- or double-valued. More...
 

Public Types

enum  kinematic_solution { high_E_branch , low_E_branch , both_branches }
 
enum  nucleus_of_interest { projectile = 1 , target , projectile_like , target_like }
 
- Public Types inherited from KVBase
enum  EKaliVedaBits { kIsKaliVedaObject = BIT(23) }
 
enum class  GetX_status {
  ok , above_maximum , below_minimum , at_maximum ,
  at_minimum
}
 
- Public Types inherited from TObject
enum  EDeprecatedStatusBits
 
enum  EStatusBits
 

Public Member Functions

 KV2Body ()
 default ctor More...
 
 KV2Body (const Char_t *systemname)
 
 KV2Body (const KVNucleus &compound, double Exx=0.0)
 
 KV2Body (const KVNucleus &proj, const KVNucleus &targ, const KVNucleus &outgoing, double Ediss=0.0)
 
 KV2Body (const KVNucleus &proj, const KVNucleus &targ, double Ediss=0.0)
 
 KV2Body (KVNucleus *, KVNucleus *=nullptr, KVNucleus *=nullptr, Double_t=0.0)
 Deprecated. Do not use. More...
 
virtual ~ KV2Body ()
 
Double_t BassIntBarrier ()
 
void CalculateKinematics ()
 
Double_t eqbm_charge_state_shiwietz_gas (Double_t *t, Double_t *)
 
Double_t eqbm_charge_state_shiwietz_solid (Double_t *t, Double_t *)
 
Double_t EqbmChargeState (Double_t *t, Double_t *)
 
Double_t GetBmaxFromReactionXSec (Double_t ReacXsec)
 
Double_t GetCMEnergy () const
 Return available kinetic energy in centre of mass. More...
 
Double_t GetCMEnergy (nucleus_of_interest i) const
 
Double_t GetCMGamma () const
 
TVector3 GetCMVelocity () const
 Return vector velocity of centre of mass of reaction (units: cm/ns) More...
 
Double_t GetCMVelocity (nucleus_of_interest i) const
 
Double_t GetEDiss () const
 
Double_t GetELab (Double_t ThetaCM, nucleus_of_interest OfNucleus) const
 
KinematicSolutions_v GetELab (nucleus_of_interest OfNucleus, Double_t ThetaLab, std::optional< nucleus_of_interest > AngleNucleus={}) const
 
KVDrawable< TF1GetELabVsThetaCMFunc (nucleus_of_interest OfNucleus) const
 
KVDrawable< TF1GetELabVsThetaLabFunc (nucleus_of_interest OfNucleus, kinematic_solution kine_sol=kinematic_solution::high_E_branch) const
 
KVDrawable< TF1GetEqbmChargeStateFunc () const
 
Double_t GetExcitEnergy () const
 
KVDrawable< TGraphGetGraphELabVsThetaLab (nucleus_of_interest OfNucleus=projectile_like, int npoints=50) const
 
Double_t GetIntegralPrecision ()
 
Double_t GetIntegratedXsec (Double_t b1, Double_t b2)
 
Double_t GetIntegratedXSecRuthLab (Float_t th1, Float_t th2, Float_t phi1=-1, Float_t phi2=-1, nucleus_of_interest OfNucleus=projectile_like)
 
KVDrawable< TF1GetKoxReactionXSecFunc () const
 
Double_t GetLabGrazingAngle (nucleus_of_interest i=projectile) const
 
Double_t GetMaxAngleLab (nucleus_of_interest i) const
 
Double_t GetMinAngleLab (nucleus_of_interest i) const
 
KVNucleusGetNucleus (nucleus_of_interest i) const
 
Double_t GetQGroundStates () const
 Calculate Q-value for reaction, assuming all nuclei in ground state. More...
 
Double_t GetQReaction () const
 Calculate Q-value for reaction, including dissipated (excitation) energy. More...
 
TString GetReactionEquation () const
 
KVDrawable< TF1GetShiwietzEqbmChargeStateFuncForGasTargets () const
 
KVDrawable< TF1GetShiwietzEqbmChargeStateFuncForSolidTargets () const
 
Double_t GetSphereDureReactionXSec (Double_t r0=1.05)
 
KinematicSolutions_v GetThetaCM (Double_t ThetaLab, nucleus_of_interest OfNucleus) const
 
std::optional< double > GetThetaCM (Double_t ThetaLab, nucleus_of_interest OfNucleus, kinematic_solution kine_sol) const
 
Double_t GetThetaCM (nucleus_of_interest OfNucleus, Double_t theta, nucleus_of_interest OtherNucleus) const
 
Double_t GetThetaLab (Double_t ThetaCM, nucleus_of_interest OfNucleus) const
 
KinematicSolutions_v GetThetaLab (nucleus_of_interest OfNucleus, Double_t ThetaLab, nucleus_of_interest AngleNucleus) const
 
KVDrawable< TF1GetThetaLabVsThetaCMFunc (nucleus_of_interest OfNucleus) const
 
KinematicSolutions_v GetVLab (nucleus_of_interest OfNucleus, Double_t ThetaLab, std::optional< nucleus_of_interest > AngleNucleus={}) const
 
Double_t GetXSecRuthCM (Double_t ThetaLab, nucleus_of_interest OfNucleus=projectile_like, kinematic_solution kineSol=high_E_branch) const
 
KVDrawable< TF1GetXSecRuthCMFunc (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
 
KVDrawable< TF1GetXSecRuthLabFunc (nucleus_of_interest OfNucleus=projectile_like, kinematic_solution kineSol=high_E_branch, Double_t theta_min=1., Double_t theta_max=179.) const
 
KVDrawable< TF1GetXSecRuthLabIntegralFunc (nucleus_of_interest OfNucleus=projectile_like, Double_t theta_min=1., Double_t theta_max=179., kinematic_solution kineSol=high_E_branch) const
 
void init ()
 Default initialisations. More...
 
Bool_t IsInverseKinematics () const
 
Double_t KoxReactionXSec (Double_t *, Double_t *)
 
void Print (Option_t *opt="") const override
 
void SetEDiss (Double_t ex)
 
void SetExcitEnergy (Double_t ex)
 
void SetIntegralPrecision (Double_t precision)
 
void SetOutgoing (const KVNucleus &proj_out)
 
void SetProjectile (const KVNucleus &)
 Set projectile for reaction. More...
 
void SetProjectile (Int_t z, Int_t a=0)
 Set projectile for reaction. More...
 
void SetTarget (const KVNucleus &)
 Set target for reaction. More...
 
void SetTarget (Int_t z, Int_t a=0)
 Set target for reaction. More...
 
- Public Member Functions inherited from KVBase
 KVBase ()
 Default constructor. More...
 
 KVBase (const Char_t *name, const Char_t *title="")
 Ctor for object with given name and type. More...
 
 KVBase (const KVBase &)
 copy ctor More...
 
void Clear (Option_t *opt="") override
 Clear object properties : name, type/title, number, label. More...
 
void Copy (TObject &) const override
 Make a copy of this object. More...
 
void Error (const char *method, const char *msgfmt,...) const override
 
const Char_tGetLabel () const
 
UInt_t GetNumber () const
 
virtual TObjectGetObject () const
 
virtual const Char_tGetType () const
 
Bool_t HasLabel () const
 
virtual Bool_t IsCalled (const Char_t *name) const
 
Bool_t IsLabelled (const Char_t *l) const
 
virtual Bool_t IsType (const Char_t *typ) const
 
virtual void List ()
 
KVBaseoperator= (const KVBase &)
 copy assignment operator More...
 
void SetLabel (const Char_t *lab)
 
virtual void SetNumber (UInt_t num)
 
virtual void SetType (const Char_t *str)
 
void Warning (const char *method, const char *msgfmt,...) const override
 
- Public Member Functions inherited from TNamed
 TNamed ()
 
 TNamed (const char *name, const char *title)
 
 TNamed (const TNamed &named)
 
 TNamed (const TString &name, const TString &title)
 
virtual ~TNamed ()
 
TObjectClone (const char *newname="") const override
 
Int_t Compare (const TObject *obj) const override
 
virtual void FillBuffer (char *&buffer)
 
const char * GetName () const override
 
const char * GetTitle () const override
 
ULong_t Hash () const override
 
TClassIsA () const override
 
Bool_t IsSortable () const override
 
void ls (Option_t *option="") const override
 
TNamedoperator= (const TNamed &rhs)
 
virtual void SetName (const char *name)
 
virtual void SetNameTitle (const char *name, const char *title)
 
virtual void SetTitle (const char *title="")
 
virtual Int_t Sizeof () const
 
void Streamer (TBuffer &) override
 
void StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b)
 
- Public Member Functions inherited from TObject
 TObject ()
 
 TObject (const TObject &object)
 
virtual ~TObject ()
 
void AbstractMethod (const char *method) const
 
virtual void AppendPad (Option_t *option="")
 
virtual void Browse (TBrowser *b)
 
ULong_t CheckedHash ()
 
virtual const char * ClassName () const
 
virtual void Delete (Option_t *option="")
 
virtual Int_t DistancetoPrimitive (Int_t px, Int_t py)
 
virtual void Draw (Option_t *option="")
 
virtual void DrawClass () const
 
virtual TObjectDrawClone (Option_t *option="") const
 
virtual void Dump () const
 
virtual void Execute (const char *method, const char *params, Int_t *error=nullptr)
 
virtual void Execute (TMethod *method, TObjArray *params, Int_t *error=nullptr)
 
virtual void ExecuteEvent (Int_t event, Int_t px, Int_t py)
 
virtual void Fatal (const char *method, const char *msgfmt,...) const
 
virtual TObjectFindObject (const char *name) const
 
virtual TObjectFindObject (const TObject *obj) const
 
virtual Option_tGetDrawOption () const
 
virtual const char * GetIconName () const
 
virtual char * GetObjectInfo (Int_t px, Int_t py) const
 
virtual Option_tGetOption () const
 
virtual UInt_t GetUniqueID () const
 
virtual Bool_t HandleTimer (TTimer *timer)
 
Bool_t HasInconsistentHash () const
 
virtual void Info (const char *method, const char *msgfmt,...) const
 
virtual Bool_t InheritsFrom (const char *classname) const
 
virtual Bool_t InheritsFrom (const TClass *cl) const
 
virtual void Inspect () const
 
void InvertBit (UInt_t f)
 
Bool_t IsDestructed () const
 
virtual Bool_t IsEqual (const TObject *obj) const
 
virtual Bool_t IsFolder () const
 
R__ALWAYS_INLINE Bool_t IsOnHeap () const
 
R__ALWAYS_INLINE Bool_t IsZombie () const
 
void MayNotUse (const char *method) const
 
virtual Bool_t Notify ()
 
void Obsolete (const char *method, const char *asOfVers, const char *removedFromVers) const
 
void operator delete (void *ptr)
 
void operator delete (void *ptr, void *vp)
 
void operator delete[] (void *ptr)
 
void operator delete[] (void *ptr, void *vp)
 
voidoperator new (size_t sz)
 
voidoperator new (size_t sz, void *vp)
 
voidoperator new[] (size_t sz)
 
voidoperator new[] (size_t sz, void *vp)
 
TObjectoperator= (const TObject &rhs)
 
virtual void Paint (Option_t *option="")
 
virtual void Pop ()
 
virtual Int_t Read (const char *name)
 
virtual void RecursiveRemove (TObject *obj)
 
void ResetBit (UInt_t f)
 
virtual void SaveAs (const char *filename="", Option_t *option="") const
 
virtual void SavePrimitive (std::ostream &out, Option_t *option="")
 
void SetBit (UInt_t f)
 
void SetBit (UInt_t f, Bool_t set)
 
virtual void SetDrawOption (Option_t *option="")
 
virtual void SetUniqueID (UInt_t uid)
 
void StreamerNVirtual (TBuffer &ClassDef_StreamerNVirtual_b)
 
virtual void SysError (const char *method, const char *msgfmt,...) const
 
R__ALWAYS_INLINE Bool_t TestBit (UInt_t f) const
 
Int_t TestBits (UInt_t f) const
 
virtual void UseCurrentStyle ()
 
virtual Int_t Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
 
virtual Int_t Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) const
 

Static Public Member Functions

static Double_t GetVelocity (Double_t mass, Double_t E)
 
- Static Public Member Functions inherited from KVBase
static Bool_t AreEqual (Double_t x, Double_t y, Long64_t maxdif=1)
 Comparison between two 64-bit floating-point values. More...
 
static void BackupFileWithDate (const Char_t *path)
 
static void CombineFiles (const Char_t *file1, const Char_t *file2, const Char_t *newfilename, Bool_t keep=kTRUE)
 
static void Deprecated (const char *method, const char *advice)
 
static Bool_t FindClassSourceFiles (const KVString &class_name, KVString &imp_file, KVString &dec_file, const KVString &dir_name=".")
 
static Bool_t FindExecutable (TString &exec, const Char_t *path="$(PATH)")
 
static const Char_tFindFile (const Char_t *search, TString &wfil)
 
static const Char_tGetBINDIRFilePath (const Char_t *namefile="")
 
static const Char_tGetDATABASEFilePath ()
 
static const Char_tGetDATADIRFilePath (const Char_t *namefile="")
 
template<typename ValType >
static ValType GetDataSetEnv (const KVString &dataset, const KVString &type, const ValType &defval={})
 
static const Char_tGetETCDIRFilePath (const Char_t *namefile="")
 
static const Char_tGetExampleFilePath (const Char_t *library, const Char_t *namefile)
 Return full path to example file for given library (="KVMultiDet", "BackTrack", etc.) More...
 
static const Char_tGetINCDIRFilePath (const Char_t *namefile="")
 
static const Char_tGetKVBuildDate ()
 Returns KaliVeda build date. More...
 
static const Char_tGetKVBuildDir ()
 Returns top-level directory used for build. More...
 
static const Char_tGetKVBuildTime ()
 Returns KaliVeda build time. More...
 
static const Char_tGetKVBuildType ()
 Returns KaliVeda build type (cmake build: Release, Debug, RelWithDebInfo, ...) More...
 
static const Char_tGetKVBuildUser ()
 Returns username of person who performed build. More...
 
static int GetKVMajorVersion ()
 
static int GetKVMinorVersion ()
 
static int GetKVPatchVersion ()
 
static const Char_tGetKVSourceDir ()
 Returns top-level directory of source tree used for build. More...
 
static const Char_tGetKVVersion ()
 Returns KaliVeda version string. More...
 
static const Char_tGetLIBDIRFilePath (const Char_t *namefile="")
 
static const Char_tGetListOfPlugins (const Char_t *base)
 
static const Char_tGetListOfPluginURIs (const Char_t *base)
 
static const Char_tGetPluginURI (const Char_t *base, const Char_t *plugin)
 
static void GetTempFileName (TString &base)
 
static const Char_tGetTEMPLATEDIRFilePath (const Char_t *namefile="")
 
static const Char_tGetWORKDIRFilePath (const Char_t *namefile="")
 
static const Char_tgitBranch ()
 Returns git branch of sources. More...
 
static const Char_tgitCommit ()
 Returns last git commit of sources. More...
 
static void InitEnvironment ()
 
static bool is_gnuinstall ()
 
static Bool_t IsEnvInit ()
 
static Bool_t IsThisAPlugin (const TString &uri, TString &base)
 
static TPluginHandlerLoadPlugin (const Char_t *base, const Char_t *uri="0")
 
static Bool_t OpenContextMenu (const char *method, TObject *obj, const char *alt_method_name="")
 
static void OpenTempFile (TString &base, std::ofstream &fp)
 
static void PrintSplashScreen ()
 Prints welcome message and infos on version etc. More...
 
static Double_t ProtectedGetX (const TF1 &func, Double_t val, GetX_status &status, std::optional< Double_t > xmin={}, std::optional< Double_t > xmax={})
 
static Double_t ProtectedGetX (const TF1 *func, Double_t val, GetX_status &status, std::optional< Double_t > xmin={}, std::optional< Double_t > xmax={})
 
static Bool_t SearchAndOpenKVFile (const Char_t *name, KVSQLite::database &dbfile, const Char_t *kvsubdir="")
 
static Bool_t SearchAndOpenKVFile (const Char_t *name, std::ifstream &file, const Char_t *kvsubdir="", KVLockfile *locks=0)
 
static Bool_t SearchAndOpenKVFile (const Char_t *name, std::ofstream &file, const Char_t *kvsubdir="", KVLockfile *locks=0)
 
static Bool_t SearchKVFile (const Char_t *name, TString &fullpath, const Char_t *kvsubdir="")
 
static const Char_tWorkingDirectory ()
 
- Static Public Member Functions inherited from TNamed
static TClassClass ()
 
static const char * Class_Name ()
 
static constexpr Version_t Class_Version ()
 
static const char * DeclFileName ()
 
- Static Public Member Functions inherited from TObject
static TClassClass ()
 
static const char * Class_Name ()
 
static constexpr Version_t Class_Version ()
 
static const char * DeclFileName ()
 
static Longptr_t GetDtorOnly ()
 
static Bool_t GetObjectStat ()
 
static void SetDtorOnly (void *obj)
 
static void SetObjectStat (Bool_t stat)
 

Private Types

using KinematicSolutions_v = std::optional< KinematicSolutions >
 

Private Member Functions

Double_t ELabVsThetaCM (Double_t *, Double_t *)
 Function calculating lab energy of nucleus par[0] for any CM angle x[0]. More...
 
Double_t ELabVsThetaLab (Double_t *, Double_t *)
 
KinematicSolutions_v FindRoots (TF1 *, Double_t) const
 
void Set4thNucleus ()
 
Double_t ThetaLabVsThetaCM (Double_t *, Double_t *)
 
Double_t XSecRuthCM (Double_t *, Double_t *)
 
Double_t XSecRuthCMVsThetaCM (Double_t *, Double_t *)
 
Double_t XSecRuthLab (Double_t *, Double_t *)
 
Double_t XSecRuthLabInt (Double_t *, Double_t *)
 

Private Attributes

Double_t BCM
 beta of centre of mass More...
 
Double_t EC [5]
 cm energies More...
 
Double_t fEDiss
 dissipated energy, 0 means elastic scattering More...
 
TF1fELabVsThetaCM [5]
 
TF1fELabVsThetaLab [5]
 
TF1fEqbmChargeState
 function equilibrium charge state of projectile vs. E/A projectile (Leon et al) More...
 
TF1fEqbmChargeStateShGas
 function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas) More...
 
TF1fEqbmChargeStateShSol
 function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid) More...
 
Double_t fIntPrec
 Precision of the TF1::Integral method. More...
 
TF1fKoxReactionXSec
 function Kox reaction cross-section [barns] vs. E/A projectile More...
 
std::vector< KVNucleusfNuclei
 nuclei involved in calculation More...
 
Bool_t fSetOutgoing
 = kTRUE if SetOutgoing is called before CalculateKinematics More...
 
TF1fThetaLabVsThetaCM [5]
 
TF1fXSecRuthLab [5]
 
TF1fXSecRuthLabIntegral [5]
 
Double_t K [5]
 ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm More...
 
Double_t TETAMAX [5]
 defined only for nuclei 3 et 4 More...
 
Double_t TETAMIN [5]
 defined only for nuclei 3 et 4 More...
 
Double_t VC [5]
 cm velocities More...
 
TVector3 VCM
 velocity of centre of mass More...
 
Double_t WC [5]
 cm energy of each nucleus More...
 
Double_t WCT
 total cm energy More...
 
Double_t WLT
 total lab energy More...
 

Additional Inherited Members

- Public Attributes inherited from TObject
 kBitMask
 
 kCanDelete
 
 kCannotPick
 
 kHasUUID
 
 kInconsistent
 
 kInvalidObject
 
 kIsOnHeap
 
 kIsReferenced
 
 kMustCleanup
 
 kNoContextMenu
 
 kNotDeleted
 
 kObjInCanvas
 
 kOverwrite
 
 kSingleKey
 
 kWriteDelete
 
 kZombie
 
- Protected Member Functions inherited from TObject
virtual void DoError (int level, const char *location, const char *fmt, va_list va) const
 
void MakeZombie ()
 
- Protected Attributes inherited from TNamed
TString fName
 
TString fTitle
 
- Protected Attributes inherited from TObject
 kOnlyPrepStep
 

Member Typedef Documentation

◆ KinematicSolutions_v

using KV2Body::KinematicSolutions_v = std::optional<KinematicSolutions>
private

Definition at line 259 of file KV2Body.h.

Member Enumeration Documentation

◆ kinematic_solution

Enumerator
high_E_branch 
low_E_branch 
both_branches 

Definition at line 269 of file KV2Body.h.

◆ nucleus_of_interest

Enumerator
projectile 
target 
projectile_like 
target_like 

Definition at line 263 of file KV2Body.h.

Constructor & Destructor Documentation

◆ KV2Body() [1/6]

KV2Body::KV2Body ( )

default ctor

Definition at line 61 of file KV2Body.cpp.

◆ KV2Body() [2/6]

KV2Body::KV2Body ( const Char_t systemname)

Set up calculation defining entrance channel following this prescription:

[Projectile_Symbol]+[Target_Symbol]@[Incident_Energy]MeV/A [Projectile_Symbol]+[Target_Symbol]@[Incident_Energy]MeV/u [Projectile_Symbol]+[Target_Symbol]@[Incident_Energy]MeV [Projectile_Symbol]+[Target_Symbol]

Any spaces will be ignored.

Valid examples:

129Xe.nosp@m.+119.nosp@m.Sn@50.nosp@m..0Me.nosp@m.V/A 58Ni + 64Ni @ 32 MeV/u 12C + 1H @ 132 MeV U+U@5MeV/A Ta+Zn

If the format is not respected, this object will be a zombie (IsZombie() returns kTRUE)

Definition at line 89 of file KV2Body.cpp.

◆ KV2Body() [3/6]

KV2Body::KV2Body ( const KVNucleus compound,
double  Exx = 0.0 
)

Set up kinematics of binary decay of compound nucleus.

The excitation energy of the CN (in MeV) is either given:

  • in the KVNucleus object itself (i.e. compound.GetExcitEnergy() gives the E* of CN)
  • or in the variable Exx: in this case any E* in the KVNucleus will be ignored
  • or by calling SetExcitEnergy or SetDissipatedEnergy after this constructor with the NEGATIVE E*

Usage:

KVNucleus CN("204Pb");
CN.SetExcitEnergy(1.5*CN.GetA());
KV2Body CNdecay(CN);
or: KV2Body CNdecay("204Pb", 1.5*204);
* or: KV2Body CNdecay("204Pb");
* CNdecay.SetExcitEnergy(-1.5*204);
// calculate decay
KVNucleus alpha("4He", 67.351/4.);
CNdecay.SetOutgoing(alpha);
Relativistic binary kinematics calculator.
Definition: KV2Body.h:178

Definition at line 210 of file KV2Body.cpp.

◆ KV2Body() [4/6]

KV2Body::KV2Body ( const KVNucleus proj,
const KVNucleus targ,
double  Ediss = 0.0 
)

Set up calculation of basic binary reaction for given projectile and target.

By default the dissipated energy Ediss is zero (elastic reaction).

Usage:

KV2Body reaction(KVNucleus("129Xe",50), "natSn");
// or with C++11 (ROOT6):
KV2Body reaction({"129Xe",50}, "natSn");

Definition at line 256 of file KV2Body.cpp.

◆ KV2Body() [5/6]

KV2Body::KV2Body ( const KVNucleus proj,
const KVNucleus targ,
const KVNucleus outgoing,
double  Ediss = 0.0 
)

Set up calculation of basic binary reaction for given projectile and target with definition of exit channel (outgoing projectile- or target-like fragment).

By default the dissipated energy is zero (elastic reaction).

Any excitation energy of the outgoing fragment will be taken into account, e.g. for quasi-elastic scattering leaving the target in an excited state.

Usage:

KV2Body reaction(KVNucleus("129Xe",50), "natSn", KVNucleus("24Mg",35));
// or with C++11 (ROOT6):
KV2Body reaction({"129Xe",50}, "natSn", {"24Mg",35});

Definition at line 296 of file KV2Body.cpp.

◆ KV2Body() [6/6]

KV2Body::KV2Body ( KVNucleus ,
KVNucleus cib = nullptr,
KVNucleus proj_out = nullptr,
Double_t  = 0.0 
)

Deprecated. Do not use.

Definition at line 166 of file KV2Body.cpp.

◆ ~ KV2Body()

virtual KV2Body::~ KV2Body ( )
virtual

Member Function Documentation

◆ BassIntBarrier()

Double_t KV2Body::BassIntBarrier ( )

calculate Bass interaction barrier B_int

r0 = 1.07 fm

Definition at line 1647 of file KV2Body.cpp.

◆ CalculateKinematics()

void KV2Body::CalculateKinematics ( )

Called to make kinematics calculation for all nuclei, use once properties of entrance-channel (and, if necessary, exit-channel) nuclei have been defined.

If a compound decay is to be calculated (only 1 nucleus in entrance channel), outgoing (decay) product must be defined before calling this method.

For a 2-body entrance channel, if no exit-channel nuclei are defined, we assume elastic scattering (i.e. identical outgoing nuclei)

Examples
Example_KV2Body.C.

Definition at line 693 of file KV2Body.cpp.

◆ ELabVsThetaCM()

Double_t KV2Body::ELabVsThetaCM ( Double_t x,
Double_t par 
)
private

Function calculating lab energy of nucleus par[0] for any CM angle x[0].

Definition at line 1111 of file KV2Body.cpp.

◆ ELabVsThetaLab()

Double_t KV2Body::ELabVsThetaLab ( Double_t x,
Double_t par 
)
private

Function calculating lab energy of nucleus par[0] for any lab angle x[0]

par[1] is choice of kinematic solution

Definition at line 1094 of file KV2Body.cpp.

◆ eqbm_charge_state_shiwietz_gas()

Double_t KV2Body::eqbm_charge_state_shiwietz_gas ( Double_t t,
Double_t  
)

G. Shiwietz et al Nucl. Instr. and Meth. in Phys. Res. B 175-177 (2001) 125-131 for gas targets

Definition at line 1971 of file KV2Body.cpp.

◆ eqbm_charge_state_shiwietz_solid()

Double_t KV2Body::eqbm_charge_state_shiwietz_solid ( Double_t t,
Double_t  
)

G. Shiwietz et al Nucl. Instr. and Meth. in Phys. Res. B 175-177 (2001) 125-131 for solid targets

Definition at line 1911 of file KV2Body.cpp.

◆ EqbmChargeState()

Double_t KV2Body::EqbmChargeState ( Double_t t,
Double_t  
)

Calculate the mean charge state of the projectile after passage through the target, assuming that the equilibrium charge state distribution is achieved*. t[0] = energy of projectile after the target (in MeV/nucleon)

We use the empirical parameterization of Leon et al., At. Dat. and Nucl. Dat. Tab. 69, 217 (1998) developed for heavy ions in the GANIL energy range (it represents a fit to data measured using GANIL beams).

*N.B. Concerning equilibrium charge state distributions, it is not easy to know whether, for a given combination of projectile, projectile energy, target, and target thickness, the equilibrium distribution is reached or not. Here are some comments from the paper cited above which may give some guidelines:

"The energies available at the GANIL accelerator range from 24 to 95 MeV/u. Within this energy range, the equilibrium charge state is reached only for fairly thick targets (~1 mg/cm2 for C foils)."

"Mean Charge State as a Function of the Target Thickness A typical example of the variation of the mean charge as a function of the foil thickness is shown ... It is seen that the mean charge initially increases due to the ionization process. Then, the equilibrium state is reached at a certain thickness, the so-called equilibrium thickness, due to the equilibration of electron loss and capture processes. Finally, for foils thicker than the equilibrium thickness, the mean charge decreases due to the slowing down of the ions in matter leading to higher capture cross sections."

It should be noted that, according to the data published in this and other papers, the equilibrium thickness decreases with increasing atomic number of the target, and increases with increasing energy of the projectile.

Definition at line 1819 of file KV2Body.cpp.

◆ FindRoots()

KV2Body::KinematicSolutions_v KV2Body::FindRoots ( TF1 fonc,
Double_t  val 
) const
private

Find at most two solutions x1 and x2 between xmin and xmax for which fonc->Eval(x) = val i.e. we use TF1::GetX for a function which may be (at most) double-valued in range (xmin, xmax)

This is adapted to the case of the lab angle vs. CM angle of scattered particles:

  • if fonc has a maximum between xmin and xmax, and if val < max, we look for x1 between xmin and the maximum, and x2 between the maximum and xmax.
  • if not (single-valued function) we look for x1 between xmin and xmax.

If val > maximum of fonc between xmin and xmax, there is no solution

Returns
a KinematicSolutions_v which may or may not contain kinematic solutions

Testing and using returned value:

KV2Body kin;
if(roots)
{
if(roots->second())
std::cout << "Two solutions found: second one is " << *roots->second() << std::endl;
std::cout << "First solution (always exists) is " << *roots->first() << std::endl;
}
else
std::cout << "No kinematic solutions exist\n";
KinematicSolutions_v FindRoots(TF1 *, Double_t) const
Definition: KV2Body.cpp:2150
@ projectile_like
Definition: KV2Body.h:266
KVDrawable< TF1 > GetThetaLabVsThetaCMFunc(nucleus_of_interest OfNucleus) const
Definition: KV2Body.cpp:1282
TCanvas * roots()

Definition at line 2150 of file KV2Body.cpp.

◆ GetBmaxFromReactionXSec()

Double_t KV2Body::GetBmaxFromReactionXSec ( Double_t  ReacXsec)

Deduce the maximum impact parameter (in fm) from a given reaction cross section (in barn) in the approximation Xsec = \int(0,bmax) 2Pi b db

Definition at line 1733 of file KV2Body.cpp.

◆ GetCMEnergy() [1/2]

Double_t KV2Body::GetCMEnergy ( ) const

Return available kinetic energy in centre of mass.

Definition at line 532 of file KV2Body.cpp.

◆ GetCMEnergy() [2/2]

Double_t KV2Body::GetCMEnergy ( nucleus_of_interest  i) const

Returns kinetic energy of nucleus in the centre of mass of the reaction

Parameters
[in]inucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 856 of file KV2Body.cpp.

◆ GetCMGamma()

Double_t KV2Body::GetCMGamma ( ) const
inline

Definition at line 334 of file KV2Body.h.

◆ GetCMVelocity() [1/2]

TVector3 KV2Body::GetCMVelocity ( ) const

Return vector velocity of centre of mass of reaction (units: cm/ns)

Definition at line 583 of file KV2Body.cpp.

◆ GetCMVelocity() [2/2]

Double_t KV2Body::GetCMVelocity ( nucleus_of_interest  i) const

Return velocity of nucleus in the centre of mass of the reaction

Parameters
[in]inucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 598 of file KV2Body.cpp.

◆ GetEDiss()

Double_t KV2Body::GetEDiss ( ) const
inline
Returns
energy dissipated in the reaction [MeV]

Definition at line 315 of file KV2Body.h.

◆ GetELab() [1/2]

Double_t KV2Body::GetELab ( Double_t  ThetaCM,
nucleus_of_interest  OfNucleus 
) const
inline

Calculate lab energy of nucleus OfNucleus as a function of CM angle

Parameters
[in]OfNucleusnucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 358 of file KV2Body.h.

◆ GetELab() [2/2]

KV2Body::KinematicSolutions_v KV2Body::GetELab ( nucleus_of_interest  OfNucleus,
Double_t  ThetaLab,
std::optional< nucleus_of_interest AngleNucleus = {} 
) const
Returns
laboratory kinetic energy(ies) of nucleus OfNucleus as a function of the lab angle ThetaLab
Parameters
[in]AngleNucleusif given, ThetaLab is AngleNucleus' lab angle calculate CM angle(s)

Definition at line 1004 of file KV2Body.cpp.

◆ GetELabVsThetaCMFunc()

KVDrawable< TF1 > KV2Body::GetELabVsThetaCMFunc ( nucleus_of_interest  OfNucleus) const

Return TF1 giving lab energy of nucleus as function of CM angle

Parameters
[in]OfNucleusnucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 1166 of file KV2Body.cpp.

◆ GetELabVsThetaLabFunc()

KVDrawable< TF1 > KV2Body::GetELabVsThetaLabFunc ( nucleus_of_interest  OfNucleus,
kinematic_solution  kine_sol = kinematic_solution::high_E_branch 
) const

Return TF1 giving lab energy of nucleus as function of its lab angle

Parameters
[in]OfNucleusnucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)
[in]kine_solin case of multiple solutions, choose either high- or low-energy branch
Note
A one-to-one correspondence between \(\theta_{cm}\) and \(\theta_{lab}\) only exists for:
  • in direct kinematics, the projectile-like nucleus for elastic or inelastic scattering;
  • in symmetric kinematics, both nuclei (only for elastic scattering);
  • in any kinematics, the target-like nucleus for elastic scattering. In all other cases, there are two \(\theta_{cm}\) values for each \(\theta_{lab}\), up to the maximum lab scattering angle which corresponds to a single \(\theta_{cm}\). In all cases, the solution with the smallest \(\theta_{cm}\) corresponds to the largest \(E_{lab}\).

Definition at line 1198 of file KV2Body.cpp.

◆ GetEqbmChargeStateFunc()

KVDrawable< TF1 > KV2Body::GetEqbmChargeStateFunc ( ) const

Return pointer to TF1 giving mean charge state of the projectile after passage through the target, assuming that the equilibrium charge state distribution is achieved, as a function of projectile energy after the target (in MeV/nucleon). We use the empirical parameterization of Leon et al., At. Dat. and Nucl. Dat. Tab. 69, 217 (1998) (see EqbmChargeState(Double_t t,Double_t) for details)

By default the range of the function is [5,100] MeV/nucleon. Change with TF1::SetRange.

Definition at line 1882 of file KV2Body.cpp.

◆ GetExcitEnergy()

Double_t KV2Body::GetExcitEnergy ( ) const
inline
Returns
the excitation energy of the exit channel [MeV] i.e. this corresponds to the energy dissipated in the reaction

Definition at line 304 of file KV2Body.h.

◆ GetGraphELabVsThetaLab()

KVDrawable< TGraph > KV2Body::GetGraphELabVsThetaLab ( nucleus_of_interest  OfNucleus = projectile_like,
int  npoints = 50 
) const

Fill and return TGraph with complete correlation between lab energy [MeV] and angle [deg]

Parameters
ofNucindex of outgoing nucleus for which to draw correlation:
  • ofNuc=3: projectile-like
  • ofNuc=4: target-like
npointsnumber of points in graph [default=50]
Returns
a KVDrawable<TGraph> object which can either be used directly as a TGraph with the -> operator:
KV2Body toto;
toto.GraphELabVsThetaLab()->Draw("al");
virtual void Draw(Option_t *option="")
or with a chain of instructions to define the colour, style, etc. of the lines, points:
toto.GraphELabVsThetaLab().LineColor(kRed).LineWidth(2).LineStyle(kDashed)->Draw("al");

See Example_KV2Body.C for a full example of use.

Definition at line 1319 of file KV2Body.cpp.

◆ GetIntegralPrecision()

Double_t KV2Body::GetIntegralPrecision ( )
inline

Precision of the TF1::Integral() method

Definition at line 408 of file KV2Body.h.

◆ GetIntegratedXsec()

Double_t KV2Body::GetIntegratedXsec ( Double_t  b1,
Double_t  b2 
)

Integrate the cross section between two impact parameter (in fm) and give the result in barn

Definition at line 1752 of file KV2Body.cpp.

◆ GetIntegratedXSecRuthLab()

Double_t KV2Body::GetIntegratedXSecRuthLab ( Float_t  th1,
Float_t  th2,
Float_t  phi1 = -1,
Float_t  phi2 = -1,
nucleus_of_interest  OfNucleus = projectile_like 
)

Calculate Integrated Rutherford cross-section (barns) in the Lab using polar and azimuthal angular range expressed in degree if (OfNucleus==3) This angular range is considered to be the scattered projectile one if (OfNucleus==4) This angular range is considered to be the scattered target one

If phi1 ou phi2 ==-1 the azimuthal width is set to 2pi Else if phi1=phi2 the azimuthal width is set to 1 ie the integral is only on theta

The returned value is in barns

Definition at line 1604 of file KV2Body.cpp.

◆ GetKoxReactionXSecFunc()

KVDrawable< TF1 > KV2Body::GetKoxReactionXSecFunc ( ) const

Return pointer to TF1 with Kox reaction X-section in barns as a function of projectile lab energy (in Mev/nucleon) for this reaction. By default the range of the function is [20,100] MeV/nucleon. Change with TF1::SetRange.

Definition at line 1771 of file KV2Body.cpp.

◆ GetLabGrazingAngle()

Double_t KV2Body::GetLabGrazingAngle ( nucleus_of_interest  i = projectile) const

Calculate laboratory grazing angle.

Parameters
[in]inucleus_of_interest::projectile or nucleus_of_interest::target

Definition at line 613 of file KV2Body.cpp.

◆ GetMaxAngleLab()

Double_t KV2Body::GetMaxAngleLab ( nucleus_of_interest  i) const

Returns maximum scattering angle in lab

Parameters
[in]ieither nucleus_of_interest::projectile_like or nucleus_of_interest::target_like

Definition at line 546 of file KV2Body.cpp.

◆ GetMinAngleLab()

Double_t KV2Body::GetMinAngleLab ( nucleus_of_interest  i) const

Returns minimum scattering angle in lab

Parameters
[in]ieither nucleus_of_interest::projectile_like or nucleus_of_interest::target_like

Definition at line 565 of file KV2Body.cpp.

◆ GetNucleus()

KVNucleus * KV2Body::GetNucleus ( nucleus_of_interest  i) const

Return pointer to nucleus

Parameters
[in]inucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Will return nullptr if any nucleus is undefined

Examples
ExampleFilteredSimDataAnalysis.cpp, and ExampleINDRAAnalysis.cpp.

Definition at line 468 of file KV2Body.cpp.

◆ GetQGroundStates()

Double_t KV2Body::GetQGroundStates ( ) const

Calculate Q-value for reaction, assuming all nuclei in ground state.

Definition at line 509 of file KV2Body.cpp.

◆ GetQReaction()

Double_t KV2Body::GetQReaction ( ) const

Calculate Q-value for reaction, including dissipated (excitation) energy.

Definition at line 490 of file KV2Body.cpp.

◆ GetReactionEquation()

TString KV2Body::GetReactionEquation ( ) const
Returns
symbolic representation of the reaction as \(A(X,Y)B\) where
  • \(A\) is the target nucleus;
  • \(X\) is the projectile nucleus;
  • \(Y\) is the outgoing projectile-like nucleus;
  • \(B\) is the outgoing target-like nucleus.

If dissipated/excitation energy is non-zero, we add \(E_{X}=...\) at the end.

Definition at line 815 of file KV2Body.cpp.

◆ GetShiwietzEqbmChargeStateFuncForGasTargets()

KVDrawable< TF1 > KV2Body::GetShiwietzEqbmChargeStateFuncForGasTargets ( ) const

Return pointer to TF1 giving mean charge state of the projectile after passage through the target, assuming that the equilibrium charge state distribution is achieved, as a function of projectile energy after the target (in MeV/nucleon). G. Shiwietz et al Nucl. Instr. and Meth. in Phys. Res. B 175-177 (2001) 125-131 This formula is valid for gas targets.

By default the range of the function is [5,100] MeV/nucleon. Change with TF1::SetRange.

Definition at line 2003 of file KV2Body.cpp.

◆ GetShiwietzEqbmChargeStateFuncForSolidTargets()

KVDrawable< TF1 > KV2Body::GetShiwietzEqbmChargeStateFuncForSolidTargets ( ) const

Return pointer to TF1 giving mean charge state of the projectile after passage through the target, assuming that the equilibrium charge state distribution is achieved, as a function of projectile energy after the target (in MeV/nucleon). G. Shiwietz et al Nucl. Instr. and Meth. in Phys. Res. B 175-177 (2001) 125-131 This formula is valid for solid targets.

By default the range of the function is [5,100] MeV/nucleon. Change with TF1::SetRange.

Definition at line 1942 of file KV2Body.cpp.

◆ GetSphereDureReactionXSec()

Double_t KV2Body::GetSphereDureReactionXSec ( Double_t  r0 = 1.05)

calculate Reaction Cross Section with the "Sphere Dure" approximation

Definition at line 1712 of file KV2Body.cpp.

◆ GetThetaCM() [1/3]

KV2Body::KinematicSolutions_v KV2Body::GetThetaCM ( Double_t  ThetaLab,
nucleus_of_interest  OfNucleus 
) const
Returns
CM angle(s) of nucleus OfNucleus for a given lab angle, if solution(s) exist
Note
A one-to-one correspondence between \(\theta_{cm}\) and \(\theta_{lab}\) only exists for:
  • in direct kinematics, the projectile-like nucleus for elastic or inelastic scattering;
  • in symmetric kinematics, both nuclei (only for elastic scattering);
  • in any kinematics, the target-like nucleus for elastic scattering.

In all other cases, there are two \(\theta_{cm}\) values for each \(\theta_{lab}\), up to the maximum lab scattering angle which corresponds to a single \(\theta_{cm}\).

If ThetaLab>max lab scattering angle for nucleus, no solution exists.

In all cases, the solution with the smallest \(\theta_{cm}\) corresponds to the largest \(E_{lab}\).

Definition at line 1045 of file KV2Body.cpp.

◆ GetThetaCM() [2/3]

std::optional< double > KV2Body::GetThetaCM ( Double_t  ThetaLab,
nucleus_of_interest  OfNucleus,
kinematic_solution  kine_sol 
) const
Returns
\(\theta_{cm}\) corresponding to \(\theta_{lab}\) for given nucleus of interest and kinematic solution, if defined.

Definition at line 1072 of file KV2Body.cpp.

◆ GetThetaCM() [3/3]

Double_t KV2Body::GetThetaCM ( nucleus_of_interest  OfNucleus,
Double_t  theta,
nucleus_of_interest  OtherNucleus 
) const
inline

Calculate projectile(-like) CM angle from target(-like) CM angle and vice versa

Definition at line 367 of file KV2Body.h.

◆ GetThetaLab() [1/2]

Double_t KV2Body::GetThetaLab ( Double_t  ThetaCM,
nucleus_of_interest  OfNucleus 
) const
inline

Calculate lab angle of nucleus OfNucleus as a function of CM angle

Parameters
[in]OfNucleusnucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 351 of file KV2Body.h.

◆ GetThetaLab() [2/2]

KV2Body::KinematicSolutions_v KV2Body::GetThetaLab ( nucleus_of_interest  OfNucleus,
Double_t  ThetaLab,
nucleus_of_interest  AngleNucleus 
) const
Returns
laboratory angle(s) of nucleus OfNucleus as a function of the lab angle ThetaLab corresponding to nucleus AngleNucleus

Definition at line 1251 of file KV2Body.cpp.

◆ GetThetaLabVsThetaCMFunc()

KVDrawable< TF1 > KV2Body::GetThetaLabVsThetaCMFunc ( nucleus_of_interest  OfNucleus) const
Returns
TF1 giving lab angle of nucleus as function of CM angle
Parameters
[in]OfNucleusnucleus_of_interest::projectile or nucleus_of_interest::target (entrance channel), or nucleus_of_interest::projectile_like or nucleus_of_interest::target_like (exit channel)

Definition at line 1282 of file KV2Body.cpp.

◆ GetVelocity()

Double_t KV2Body::GetVelocity ( Double_t  mass,
Double_t  E 
)
static

Static function, calculates relativistic velocity (in cm/ns) from rest mass and total energy (i.e. KE + mass) 'E' for any particle

Definition at line 394 of file KV2Body.cpp.

◆ GetVLab()

KV2Body::KinematicSolutions_v KV2Body::GetVLab ( nucleus_of_interest  OfNucleus,
Double_t  ThetaLab,
std::optional< nucleus_of_interest AngleNucleus = {} 
) const
Returns
vector of laboratory velocity(ies) of nucleus OfNucleus as a function of the lab angle ThetaLab
Parameters
[in]AngleNucleusif given, ThetaLab is AngleNucleus' lab angle

Definition at line 1230 of file KV2Body.cpp.

◆ GetXSecRuthCM()

Double_t KV2Body::GetXSecRuthCM ( Double_t  ThetaLab,
nucleus_of_interest  OfNucleus = projectile_like,
kinematic_solution  kineSol = high_E_branch 
) const

Calculate Rutherford cross-section (b/sr) in the CM as a function of projectile_like or target_like lab scattering angle

For multi-valued kinematics, we return by default the high energy branch

Definition at line 1463 of file KV2Body.cpp.

◆ GetXSecRuthCMFunc()

KVDrawable< TF1 > KV2Body::GetXSecRuthCMFunc ( nucleus_of_interest  OfNucleus = projectile_like,
Double_t  theta_cm_min = 1.,
Double_t  theta_cm_max = 179. 
) const

Double_t GetIntegratedXSecRuthLab(KVTelescope* tel, Int_t OfNucleus = 3); Double_t GetIntegratedXSecRuthLab(KVDetector* det, Int_t OfNucleus = 3);

Return pointer to TF1 giving Rutherford cross-section (b/sr) in the CM as a function of projectile_like or target_like CM scattering angle By default, theta_min = 1 degree & theta_max = 179 degrees

Definition at line 1382 of file KV2Body.cpp.

◆ GetXSecRuthLab()

Double_t KV2Body::GetXSecRuthLab ( Double_t  ThetaLab,
nucleus_of_interest  OfNucleus = projectile_like,
kinematic_solution  kineSol = high_E_branch 
) const

Calculate Rutherford cross-section (b/sr) in the Lab as a function of projectile_like or target_like lab scattering angle

For multi-valued kinematics, we return by default the high energy branch

Definition at line 1524 of file KV2Body.cpp.

◆ GetXSecRuthLabFunc()

KVDrawable< TF1 > KV2Body::GetXSecRuthLabFunc ( nucleus_of_interest  OfNucleus = projectile_like,
kinematic_solution  kineSol = high_E_branch,
Double_t  theta_min = 1.,
Double_t  theta_max = 179. 
) const

Return pointer to TF1 giving Rutherford cross-section (b/sr) in the Lab as a function of projectile_like or target_like lab scattering angle

By default, theta_min = 1 degree & theta_max = 179 degrees

Definition at line 2035 of file KV2Body.cpp.

◆ GetXSecRuthLabIntegralFunc()

KVDrawable< TF1 > KV2Body::GetXSecRuthLabIntegralFunc ( nucleus_of_interest  OfNucleus = projectile_like,
Double_t  theta_min = 1.,
Double_t  theta_max = 179.,
kinematic_solution  kineSol = high_E_branch 
) const

Return pointer to TF1 giving Rutherford cross-section (b/sr) in the Lab as a function of projectile (OfNucleus=3) or target (OfNucleus=4) lab scattering angle

This function is equal to sin(theta)*dsigma/domega, i.e. it is the integrand needed for calculating total cross-sections integrated over solid angle.

WARNING: when integrating this function using TF1::Integral, the result must be multiplied by TMath::DegToRad(), because 'x' is in degrees rather than radians, e.g. the integrated cross-section in barns is given by

GetXSecRuthLabIntegralFunc(OfNucleus)->Integral(theta_min, theta_max)*TMathDegToRad()

Definition at line 2084 of file KV2Body.cpp.

◆ init()

void KV2Body::init ( void  )

Default initialisations.

Definition at line 32 of file KV2Body.cpp.

◆ IsInverseKinematics()

Bool_t KV2Body::IsInverseKinematics ( ) const
inline
Returns
kTRUE if reaction is in inverse kinematics

Definition at line 419 of file KV2Body.h.

◆ KoxReactionXSec()

Double_t KV2Body::KoxReactionXSec ( Double_t eproj,
Double_t  
)

calculate Kox reaction X-section (in barns) for a given lab energy of projectile (in MeV/nucleon)

c parameter fitted with Landau function vs. Log10(E/A) (see Fig. 12 of PRC Kox 87) by imposing c=0.1 at E/A=10 MeV (goes to 0 as E/A->0)

Definition at line 1674 of file KV2Body.cpp.

◆ Print()

void KV2Body::Print ( Option_t opt = "") const
overridevirtual

Print out characteristics of reaction.

If a two-body exit channel has been defined, you can use the following options: opt = "ruth" : list Rutherford scattering cross-sections as a function of angle in laboratory frame opt = "lab" : list energies and angles in laboratory frame

Reimplemented from KVBase.

Definition at line 874 of file KV2Body.cpp.

◆ Set4thNucleus()

void KV2Body::Set4thNucleus ( )
private

Private method, used to deduce 4th nucleus (target-like) from projectile, target and outgoing projectile using conservation of mass, momentum and energy.

if the outgoing nucleus set by the user is equal to the compound nucleus formed by projectile and target, but the excitation energy of the CN was not set by the user, we calculate it here.

Definition at line 436 of file KV2Body.cpp.

◆ SetEDiss()

void KV2Body::SetEDiss ( Double_t  ex)
inline

Set energy dissipated in the reaction [MeV]

Definition at line 310 of file KV2Body.h.

◆ SetExcitEnergy()

void KV2Body::SetExcitEnergy ( Double_t  ex)
inline

Set excitation energy of exit channel [MeV] i.e. this corresponds to the energy dissipated in the reaction

To set E* of compound nucleus in entrance channel for binary break-up calculations, give negative value (or see relevant constructor)

Definition at line 295 of file KV2Body.h.

◆ SetIntegralPrecision()

void KV2Body::SetIntegralPrecision ( Double_t  precision)
inline

Set the precision of the TF1::Integral() method

Definition at line 413 of file KV2Body.h.

◆ SetOutgoing()

void KV2Body::SetOutgoing ( const KVNucleus proj_out)

Set outgoing projectile-like nucleus properties.

The properties of the outgoing target-like nucleus will be deduced from mass, charge and momentum/energy conservation.

Definition at line 411 of file KV2Body.cpp.

◆ SetProjectile() [1/2]

void KV2Body::SetProjectile ( const KVNucleus proj)

Set projectile for reaction.

Definition at line 353 of file KV2Body.cpp.

◆ SetProjectile() [2/2]

void KV2Body::SetProjectile ( Int_t  z,
Int_t  a = 0 
)

Set projectile for reaction.

Definition at line 365 of file KV2Body.cpp.

◆ SetTarget() [1/2]

void KV2Body::SetTarget ( const KVNucleus targ)

Set target for reaction.

Definition at line 328 of file KV2Body.cpp.

◆ SetTarget() [2/2]

void KV2Body::SetTarget ( Int_t  z,
Int_t  a = 0 
)

Set target for reaction.

Definition at line 340 of file KV2Body.cpp.

◆ ThetaLabVsThetaCM()

Double_t KV2Body::ThetaLabVsThetaCM ( Double_t x,
Double_t par 
)
private

Calculate Lab angle of nucleus as function of CM angle x[0] par[0] = index of nucleus = 1, 2, 3, 4

Definition at line 1130 of file KV2Body.cpp.

◆ XSecRuthCM()

Double_t KV2Body::XSecRuthCM ( Double_t x,
Double_t par 
)
private

Calculate Rutherford cross-section (b/sr) in the CM as a function of projectile_like or target_like lab scattering angle

x[0]: lab angle par[0]: nucleus_of_interest par[1]: kinematic_solution

If no kinematic solution exists (angle > max lab angle), return 0

If low energy branch is requested but does not exist, return 0

Definition at line 1422 of file KV2Body.cpp.

◆ XSecRuthCMVsThetaCM()

Double_t KV2Body::XSecRuthCMVsThetaCM ( Double_t x,
Double_t par 
)
private

Calculate CM Rutherford cross-section (b/sr) in the CM as a function of scattering angle in the CM frame for nucleus par[0]

Definition at line 1360 of file KV2Body.cpp.

◆ XSecRuthLab()

Double_t KV2Body::XSecRuthLab ( Double_t x,
Double_t par 
)
private

Calculate Rutherford cross-section (b/sr) in the Lab as a function of projectile (OfNucleus=3) or target (OfNucleus=4) lab scattering angle

x[0]: lab angle par[0]: nucleus_of_interest par[1]: kinematic_solution

Checked with LISE++ calculations: Jacobian is correct for both branches (1+K*Cos(Theta_cm) can become negative for low E branch (Theta_cm>90), correct cross-section is absolute value of DSIDTB*RLC)

Definition at line 1488 of file KV2Body.cpp.

◆ XSecRuthLabInt()

Double_t KV2Body::XSecRuthLabInt ( Double_t x,
Double_t par 
)
private

Rutherford cross-section (b/sr) function in the Lab as a function of projectile_like or target_like lab scattering angle x[0] including 'sin theta' factor needed for integrating over solid angles.

x[0]: lab angle par[0]: nucleus_of_interest par[1]: kinematic_solution

Definition at line 1546 of file KV2Body.cpp.

Member Data Documentation

◆ BCM

Double_t KV2Body::BCM
private

beta of centre of mass

Definition at line 184 of file KV2Body.h.

◆ EC

Double_t KV2Body::EC[5]
private

cm energies

Definition at line 190 of file KV2Body.h.

◆ fEDiss

Double_t KV2Body::fEDiss
private

dissipated energy, 0 means elastic scattering

Definition at line 181 of file KV2Body.h.

◆ fELabVsThetaCM

TF1* KV2Body::fELabVsThetaCM[5]
mutableprivate

Definition at line 210 of file KV2Body.h.

◆ fELabVsThetaLab

TF1* KV2Body::fELabVsThetaLab[5]
mutableprivate

Definition at line 211 of file KV2Body.h.

◆ fEqbmChargeState

TF1* KV2Body::fEqbmChargeState
mutableprivate

function equilibrium charge state of projectile vs. E/A projectile (Leon et al)

Definition at line 196 of file KV2Body.h.

◆ fEqbmChargeStateShGas

TF1* KV2Body::fEqbmChargeStateShGas
mutableprivate

function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)

Definition at line 198 of file KV2Body.h.

◆ fEqbmChargeStateShSol

TF1* KV2Body::fEqbmChargeStateShSol
mutableprivate

function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)

Definition at line 197 of file KV2Body.h.

◆ fIntPrec

Double_t KV2Body::fIntPrec
private

Precision of the TF1::Integral method.

Definition at line 218 of file KV2Body.h.

◆ fKoxReactionXSec

TF1* KV2Body::fKoxReactionXSec
mutableprivate

function Kox reaction cross-section [barns] vs. E/A projectile

Definition at line 195 of file KV2Body.h.

◆ fNuclei

std::vector<KVNucleus> KV2Body::fNuclei
private

nuclei involved in calculation

Definition at line 180 of file KV2Body.h.

◆ fSetOutgoing

Bool_t KV2Body::fSetOutgoing
private

= kTRUE if SetOutgoing is called before CalculateKinematics

Definition at line 216 of file KV2Body.h.

◆ fThetaLabVsThetaCM

TF1* KV2Body::fThetaLabVsThetaCM[5]
mutableprivate

Definition at line 209 of file KV2Body.h.

◆ fXSecRuthLab

TF1* KV2Body::fXSecRuthLab[5]
mutableprivate

Definition at line 214 of file KV2Body.h.

◆ fXSecRuthLabIntegral

TF1* KV2Body::fXSecRuthLabIntegral[5]
mutableprivate

Definition at line 213 of file KV2Body.h.

◆ K

Double_t KV2Body::K[5]
private

ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm

Definition at line 191 of file KV2Body.h.

◆ TETAMAX

Double_t KV2Body::TETAMAX[5]
private

defined only for nuclei 3 et 4

Definition at line 192 of file KV2Body.h.

◆ TETAMIN

Double_t KV2Body::TETAMIN[5]
private

defined only for nuclei 3 et 4

Definition at line 193 of file KV2Body.h.

◆ VC

Double_t KV2Body::VC[5]
private

cm velocities

Definition at line 189 of file KV2Body.h.

◆ VCM

TVector3 KV2Body::VCM
private

velocity of centre of mass

Definition at line 183 of file KV2Body.h.

◆ WC

Double_t KV2Body::WC[5]
private

cm energy of each nucleus

Definition at line 187 of file KV2Body.h.

◆ WCT

Double_t KV2Body::WCT
private

total cm energy

Definition at line 186 of file KV2Body.h.

◆ WLT

Double_t KV2Body::WLT
private

total lab energy

Definition at line 185 of file KV2Body.h.