KaliVeda
Toolkit for HIC analysis
KV2Body.h
1 /***************************************************************************
2  KV2Body.h - description
3  -------------------
4  begin : 28/11/2003
5  copyright : (C) 2002 by J.D. Frankland
6  email : frankland@ganil.fr
7 
8 $Id: KV2Body.h,v 1.5 2009/02/02 13:52:29 ebonnet Exp $
9  ***************************************************************************/
10 
11 /***************************************************************************
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * *
18  ***************************************************************************/
19 
20 #ifndef KV2BODY_H
21 #define KV2BODY_H
22 
23 #include "KVBase.h"
24 #include <vector>
25 #include "TVector3.h"
26 #include "KVNucleus.h"
27 #include "TF1.h"
28 #include "TGraph.h"
29 #include "KVDrawable.h"
30 
93 
127 
168 class KV2Body: public KVBase {
169 
170  std::vector<KVNucleus> fNuclei;
172 
178 
184 
189 
190  void Set4thNucleus();
198 
199  mutable TF1* fThetaLabVsThetaCM[5];
200  mutable TF1* fELabVsThetaCM[5];
201  mutable TF1* fELabVsThetaLab[5];
202 
204  mutable TF1* fXSecRuthLab[5];
205 
207 
210 
211 public:
212 
213  void init();
214  KV2Body();
215  KV2Body(const Char_t* systemname);
216  KV2Body(const KVNucleus& compound, double Exx = 0.0);
217  KV2Body(const KVNucleus& proj, const KVNucleus& targ, double Ediss = 0.0);
218  KV2Body(const KVNucleus& proj, const KVNucleus& targ, const KVNucleus& outgoing, double Ediss = 0.0);
219  KV2Body(KVNucleus*, KVNucleus* = nullptr, KVNucleus* = nullptr, Double_t = 0.0);
220  virtual ~ KV2Body();
221 
222  void CalculateKinematics();
224 
225  static Double_t GetVelocity(Double_t mass, Double_t E);
226 
227  void SetProjectile(const KVNucleus&);
228  void SetProjectile(Int_t z, Int_t a = 0);
229  void SetTarget(const KVNucleus&);
230  void SetTarget(Int_t z, Int_t a = 0);
231  void SetOutgoing(const KVNucleus& proj_out);
232 
239  {
240  fEDiss = ex;
241  }
245  {
246  return fEDiss;
247  }
250  {
252  }
255  {
256  return GetExcitEnergy();
257  }
258  KVNucleus* GetNucleus(Int_t i) const;
259 
260  Double_t GetQReaction() const;
261  Double_t GetQGroundStates() const;
262  Double_t GetLabGrazingAngle(Int_t i = 1) const;
263 
264  Double_t GetCMEnergy() const;
265  Double_t GetCMEnergy(Int_t i) const;
266 
267  Double_t GetMaxAngleLab(Int_t i) const;
268  Double_t GetMinAngleLab(Int_t i) const;
269 
270  TVector3 GetCMVelocity() const;
271  Double_t GetCMVelocity(Int_t i) const;
273  {
274  Double_t gamma =
275  1.0 - TMath::Power(BCM, 2.);
276  if (gamma > 0.)
277  gamma = 1. / TMath::Sqrt(gamma);
278  else {
279  Warning("GetCMGamma", "1 - (beta)**2 = %f ... strange!", gamma);
280  gamma = 0.0;
281  }
282  return gamma;
283  }
284 
285  TF1* GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const;
286  TF1* GetELabVsThetaCMFunc(Int_t OfNucleus) const;
287  TF1* GetELabVsThetaLabFunc(Int_t OfNucleus) const;
288 
289  Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
290  {
292  return const_cast<KV2Body*>(this)->GetThetaLabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
293  }
294  Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
295  {
297  return const_cast<KV2Body*>(this)->GetELabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
298  }
299  Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t& t1, Double_t& t2) const;
300  Double_t GetThetaCM(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
301  {
303  if (TMath::Abs(OfNucleus - OtherNucleus) % 2) return 180. - theta;
304  return theta;
305  }
306  Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const;
307 
308  KVDrawable<TGraph> GraphELabVsThetaLab(int ofNuc = 3, int npoints = 50) const;
309 
310  Int_t GetELab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
311  Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
312  Int_t GetThetaLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
313 
314  Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
315  Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
316 
317  Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1 = -1, Float_t phi2 = -1, Int_t OfNucleus = 3);
320 
321  TF1* GetXSecRuthCMFunc(Int_t OfNucleus = 3, Double_t theta_cm_min = 1., Double_t theta_cm_max = 179.) const;
322  TF1* GetXSecRuthLabFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
323  TF1* GetXSecRuthLabIntegralFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
324 
325  void Print(Option_t* opt = "") const override;
326 
329  TF1* GetKoxReactionXSecFunc() const;
330 
334 
336  TF1* GetEqbmChargeStateFunc() const;
341 
343  {
345  return fIntPrec;
346  }
348  {
350  fIntPrec = precision;
351  }
352 
353  ClassDefOverride(KV2Body, 0) //Relativistic binary kinematical calculation
354 };
355 
356 #endif
int Int_t
bool Bool_t
char Char_t
float Float_t
double Double_t
const char Option_t
#define ClassDefOverride(name, id)
Relativistic binary kinematics calculator.
Definition: KV2Body.h:168
Double_t XSecRuthLabInt(Double_t *, Double_t *)
Definition: KV2Body.cpp:1435
Double_t TETAMIN[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:183
Double_t eqbm_charge_state_shiwietz_gas(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1889
Double_t VC[5]
cm velocities
Definition: KV2Body.h:179
void SetTarget(const KVNucleus &)
Set target for reaction.
Definition: KV2Body.cpp:314
TF1 * GetEqbmChargeStateFunc() const
Definition: KV2Body.cpp:1800
TString GetReactionEquation() const
Definition: KV2Body.cpp:799
void Set4thNucleus()
Definition: KV2Body.cpp:422
TF1 * fELabVsThetaLab[5]
Definition: KV2Body.h:201
TF1 * GetXSecRuthLabFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1952
Double_t K[5]
ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm
Definition: KV2Body.h:181
Double_t GetMaxAngleLab(Int_t i) const
Definition: KV2Body.cpp:536
std::vector< KVNucleus > fNuclei
nuclei involved in calculation
Definition: KV2Body.h:170
TF1 * GetXSecRuthLabIntegralFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1998
void SetIntegralPrecision(Double_t precision)
Definition: KV2Body.h:347
Double_t WCT
total cm energy
Definition: KV2Body.h:176
void SetEDiss(Double_t ex)
Definition: KV2Body.h:249
Double_t GetIntegralPrecision()
Definition: KV2Body.h:342
Double_t GetSphereDureReactionXSec(Double_t r0=1.05)
Definition: KV2Body.cpp:1630
Double_t ELabVsThetaLab(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any lab angle x[0].
Definition: KV2Body.cpp:1034
TF1 * fThetaLabVsThetaCM[5]
Definition: KV2Body.h:199
void SetExcitEnergy(Double_t ex)
Definition: KV2Body.h:238
Double_t GetMinAngleLab(Int_t i) const
Definition: KV2Body.cpp:554
Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:289
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Definition: KV2Body.cpp:339
Double_t fIntPrec
Precision of the TF1::Integral method.
Definition: KV2Body.h:209
Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1381
Double_t GetQReaction() const
Calculate Q-value for reaction, including dissipated (excitation) energy.
Definition: KV2Body.cpp:480
Double_t GetThetaCM(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
Definition: KV2Body.h:300
TF1 * fEqbmChargeStateShSol
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)
Definition: KV2Body.h:187
Double_t EqbmChargeState(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1737
TF1 * GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1194
void SetOutgoing(const KVNucleus &proj_out)
Definition: KV2Body.cpp:397
TF1 * fKoxReactionXSec
function Kox reaction cross-section [barns] vs. E/A projectile
Definition: KV2Body.h:185
TF1 * GetELabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1089
Double_t XSecRuthCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1238
virtual ~ KV2Body()
TF1 * GetShiwietzEqbmChargeStateFuncForGasTargets() const
Definition: KV2Body.cpp:1921
Double_t XSecRuthLab(Double_t *, Double_t *)
Definition: KV2Body.cpp:1402
TF1 * GetKoxReactionXSecFunc() const
Definition: KV2Body.cpp:1689
Double_t BCM
beta of centre of mass
Definition: KV2Body.h:174
TF1 * fEqbmChargeStateShGas
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)
Definition: KV2Body.h:188
Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:294
Int_t FindRoots(TF1 *, Double_t, Double_t, Double_t, Double_t &, Double_t &) const
Definition: KV2Body.cpp:2046
Double_t GetEDiss() const
Definition: KV2Body.h:254
static Double_t GetVelocity(Double_t mass, Double_t E)
Definition: KV2Body.cpp:380
Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1=-1, Float_t phi2=-1, Int_t OfNucleus=3)
Definition: KV2Body.cpp:1489
Double_t GetBmaxFromReactionXSec(Double_t ReacXsec)
Definition: KV2Body.cpp:1651
TVector3 VCM
velocity of centre of mass
Definition: KV2Body.h:173
Double_t KoxReactionXSec(Double_t *, Double_t *)
Definition: KV2Body.cpp:1592
Double_t ELabVsThetaCM(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any CM angle x[0].
Definition: KV2Body.cpp:1051
Double_t ThetaLabVsThetaCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1070
Double_t GetCMGamma() const
Definition: KV2Body.h:272
Double_t TETAMAX[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:182
Bool_t fSetOutgoing
= kTRUE if SetOutgoing is called before CalculateKinematics
Definition: KV2Body.h:206
Double_t WC[5]
cm energy of each nucleus
Definition: KV2Body.h:177
TF1 * fXSecRuthLabIntegral[5]
Definition: KV2Body.h:203
KVDrawable< TGraph > GraphELabVsThetaLab(int ofNuc=3, int npoints=50) const
Definition: KV2Body.cpp:1312
Double_t EC[5]
cm energies
Definition: KV2Body.h:180
Double_t GetExcitEnergy() const
Definition: KV2Body.h:244
Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
Definition: KV2Body.cpp:1269
Double_t WLT
total lab energy
Definition: KV2Body.h:175
Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t &e1, Double_t &e2) const
Definition: KV2Body.cpp:1133
TF1 * fXSecRuthLab[5]
Definition: KV2Body.h:204
Double_t BassIntBarrier()
Definition: KV2Body.cpp:1565
TVector3 GetCMVelocity() const
Return vector velocity of centre of mass of reaction (units: cm/ns)
Definition: KV2Body.cpp:572
void CalculateKinematics()
Definition: KV2Body.cpp:677
void Print(Option_t *opt="") const override
Definition: KV2Body.cpp:858
void init()
Default initialisations.
Definition: KV2Body.cpp:32
KV2Body()
default ctor
Definition: KV2Body.cpp:61
Double_t GetIntegratedXsec(Double_t b1, Double_t b2)
Definition: KV2Body.cpp:1670
TF1 * GetXSecRuthCMFunc(Int_t OfNucleus=3, Double_t theta_cm_min=1., Double_t theta_cm_max=179.) const
Definition: KV2Body.cpp:1530
Double_t GetLabGrazingAngle(Int_t i=1) const
Definition: KV2Body.cpp:603
Double_t GetQGroundStates() const
Calculate Q-value for reaction, assuming all nuclei in ground state.
Definition: KV2Body.cpp:499
KVNucleus * GetNucleus(Int_t i) const
Definition: KV2Body.cpp:456
Double_t XSecRuthCMVsThetaCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1353
Double_t GetCMEnergy() const
Return available kinetic energy in centre of mass.
Definition: KV2Body.cpp:522
TF1 * fEqbmChargeState
function equilibrium charge state of projectile vs. E/A projectile (Leon et al)
Definition: KV2Body.h:186
Double_t eqbm_charge_state_shiwietz_solid(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1829
Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1217
Double_t fEDiss
dissipated energy, 0 means elastic scattering
Definition: KV2Body.h:171
TF1 * fELabVsThetaCM[5]
Definition: KV2Body.h:200
Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t &t1, Double_t &t2) const
Definition: KV2Body.cpp:1017
TF1 * GetShiwietzEqbmChargeStateFuncForSolidTargets() const
Definition: KV2Body.cpp:1860
TF1 * GetELabVsThetaLabFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1109
Base class for KaliVeda framework.
Definition: KVBase.h:139
void Warning(const char *method, const char *msgfmt,...) const override
Definition: KVBase.cpp:1661
Simple wrapper for objects which can be drawn (graphs, histograms)
Definition: KVDrawable.h:29
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
Double_t ex[n]
double gamma(double x)
Double_t Power(Double_t x, Double_t y)
Double_t Sqrt(Double_t x)
Double_t Abs(Double_t d)