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 
91 
125 
166 class KV2Body: public KVBase {
167 
168  std::vector<KVNucleus> fNuclei;
170 
176 
182 
187 
188  void Set4thNucleus();
196 
197  mutable TF1* fThetaLabVsThetaCM[5];
198  mutable TF1* fELabVsThetaCM[5];
199  mutable TF1* fELabVsThetaLab[5];
200 
202  mutable TF1* fXSecRuthLab[5];
203 
205 
208 
209 public:
210 
211  void init();
212  KV2Body();
213  KV2Body(const Char_t* systemname);
214  KV2Body(const KVNucleus& compound, double Exx = 0.0);
215  KV2Body(const KVNucleus& proj, const KVNucleus& targ, double Ediss = 0.0);
216  KV2Body(const KVNucleus& proj, const KVNucleus& targ, const KVNucleus& outgoing, double Ediss = 0.0);
217  KV2Body(KVNucleus*, KVNucleus* = nullptr, KVNucleus* = nullptr, Double_t = 0.0);
218  virtual ~ KV2Body();
219 
220  void CalculateKinematics();
221 
222  static Double_t GetVelocity(Double_t mass, Double_t E);
223 
224  void SetProjectile(const KVNucleus&);
225  void SetProjectile(Int_t z, Int_t a = 0);
226  void SetTarget(const KVNucleus&);
227  void SetTarget(Int_t z, Int_t a = 0);
228  void SetOutgoing(const KVNucleus& proj_out);
229 
236  {
237  fEDiss = ex;
238  }
242  {
243  return fEDiss;
244  }
247  {
249  }
252  {
253  return GetExcitEnergy();
254  }
255  KVNucleus* GetNucleus(Int_t i) const;
256 
257  Double_t GetQReaction() const;
258  Double_t GetQGroundStates() const;
259  Double_t GetLabGrazingAngle(Int_t i = 1) const;
260 
261  Double_t GetCMEnergy() const;
262  Double_t GetCMEnergy(Int_t i) const;
263 
264  Double_t GetMaxAngleLab(Int_t i) const;
265  Double_t GetMinAngleLab(Int_t i) const;
266 
267  TVector3 GetCMVelocity() const;
268  Double_t GetCMVelocity(Int_t i) const;
270  {
271  Double_t gamma =
272  1.0 - TMath::Power(BCM, 2.);
273  if (gamma > 0.)
274  gamma = 1. / TMath::Sqrt(gamma);
275  else {
276  Warning("GetCMGamma", "1 - (beta)**2 = %f ... strange!", gamma);
277  gamma = 0.0;
278  }
279  return gamma;
280  }
281 
282  TF1* GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const;
283  TF1* GetELabVsThetaCMFunc(Int_t OfNucleus) const;
284  TF1* GetELabVsThetaLabFunc(Int_t OfNucleus) const;
285 
286  Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
287  {
289  return const_cast<KV2Body*>(this)->GetThetaLabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
290  }
291  Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
292  {
294  return const_cast<KV2Body*>(this)->GetELabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
295  }
296  Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t& t1, Double_t& t2) const;
297  Double_t GetThetaCM(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
298  {
300  if (TMath::Abs(OfNucleus - OtherNucleus) % 2) return 180. - theta;
301  return theta;
302  }
303  Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const;
304 
305  Int_t GetELab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
306  Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
307  Int_t GetThetaLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
308 
309  Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
310  Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
311 
312  Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1 = -1, Float_t phi2 = -1, Int_t OfNucleus = 3);
315 
316  TF1* GetXSecRuthCMFunc(Int_t OfNucleus = 3, Double_t theta_cm_min = 1., Double_t theta_cm_max = 179.) const;
317  TF1* GetXSecRuthLabFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
318  TF1* GetXSecRuthLabIntegralFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
319 
320  void Print(Option_t* opt = "") const;
321 
324  TF1* GetKoxReactionXSecFunc() const;
325 
329 
331  TF1* GetEqbmChargeStateFunc() const;
336 
338  {
340  return fIntPrec;
341  }
343  {
345  fIntPrec = precision;
346  }
347 
348  ClassDef(KV2Body, 0) //Relativistic binary kinematical calculation
349 };
350 
351 #endif
int Int_t
bool Bool_t
char Char_t
float Float_t
double Double_t
const char Option_t
#define ClassDef(name, id)
Relativistic binary kinematics calculator.
Definition: KV2Body.h:166
Double_t XSecRuthLabInt(Double_t *, Double_t *)
Definition: KV2Body.cpp:1333
Double_t TETAMIN[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:181
Double_t eqbm_charge_state_shiwietz_gas(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1787
Double_t VC[5]
cm velocities
Definition: KV2Body.h:177
void SetTarget(const KVNucleus &)
Set target for reaction.
Definition: KV2Body.cpp:314
TF1 * GetEqbmChargeStateFunc() const
Definition: KV2Body.cpp:1698
void Set4thNucleus()
Definition: KV2Body.cpp:422
TF1 * fELabVsThetaLab[5]
Definition: KV2Body.h:199
TF1 * GetXSecRuthLabFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1850
Double_t K[5]
ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm
Definition: KV2Body.h:179
Double_t GetMaxAngleLab(Int_t i) const
Definition: KV2Body.cpp:536
std::vector< KVNucleus > fNuclei
nuclei involved in calculation
Definition: KV2Body.h:168
void Print(Option_t *opt="") const
Definition: KV2Body.cpp:813
TF1 * GetXSecRuthLabIntegralFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1896
void SetIntegralPrecision(Double_t precision)
Definition: KV2Body.h:342
Double_t WCT
total cm energy
Definition: KV2Body.h:174
void SetEDiss(Double_t ex)
Definition: KV2Body.h:246
Double_t GetIntegralPrecision()
Definition: KV2Body.h:337
Double_t GetSphereDureReactionXSec(Double_t r0=1.05)
Definition: KV2Body.cpp:1528
Double_t ELabVsThetaLab(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any lab angle x[0].
Definition: KV2Body.cpp:989
TF1 * fThetaLabVsThetaCM[5]
Definition: KV2Body.h:197
void SetExcitEnergy(Double_t ex)
Definition: KV2Body.h:235
Double_t GetMinAngleLab(Int_t i) const
Definition: KV2Body.cpp:554
Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:286
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Definition: KV2Body.cpp:339
Double_t fIntPrec
Precision of the TF1::Integral method.
Definition: KV2Body.h:207
Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1279
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:297
TF1 * fEqbmChargeStateShSol
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)
Definition: KV2Body.h:185
Double_t EqbmChargeState(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1635
TF1 * GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1149
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:183
TF1 * GetELabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1044
Double_t XSecRuthCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1193
virtual ~ KV2Body()
TF1 * GetShiwietzEqbmChargeStateFuncForGasTargets() const
Definition: KV2Body.cpp:1819
Double_t XSecRuthLab(Double_t *, Double_t *)
Definition: KV2Body.cpp:1300
TF1 * GetKoxReactionXSecFunc() const
Definition: KV2Body.cpp:1587
Double_t BCM
beta of centre of mass
Definition: KV2Body.h:172
TF1 * fEqbmChargeStateShGas
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)
Definition: KV2Body.h:186
Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:291
Int_t FindRoots(TF1 *, Double_t, Double_t, Double_t, Double_t &, Double_t &) const
Definition: KV2Body.cpp:1944
Double_t GetEDiss() const
Definition: KV2Body.h:251
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:1387
Double_t GetBmaxFromReactionXSec(Double_t ReacXsec)
Definition: KV2Body.cpp:1549
TVector3 VCM
velocity of centre of mass
Definition: KV2Body.h:171
Double_t KoxReactionXSec(Double_t *, Double_t *)
Definition: KV2Body.cpp:1490
Double_t ELabVsThetaCM(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any CM angle x[0].
Definition: KV2Body.cpp:1006
Double_t ThetaLabVsThetaCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1025
Double_t GetCMGamma() const
Definition: KV2Body.h:269
Double_t TETAMAX[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:180
Bool_t fSetOutgoing
= kTRUE if SetOutgoing is called before CalculateKinematics
Definition: KV2Body.h:204
Double_t WC[5]
cm energy of each nucleus
Definition: KV2Body.h:175
TF1 * fXSecRuthLabIntegral[5]
Definition: KV2Body.h:201
Double_t EC[5]
cm energies
Definition: KV2Body.h:178
Double_t GetExcitEnergy() const
Definition: KV2Body.h:241
Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
Definition: KV2Body.cpp:1224
Double_t WLT
total lab energy
Definition: KV2Body.h:173
Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t &e1, Double_t &e2) const
Definition: KV2Body.cpp:1088
TF1 * fXSecRuthLab[5]
Definition: KV2Body.h:202
Double_t BassIntBarrier()
Definition: KV2Body.cpp:1463
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 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:1568
TF1 * GetXSecRuthCMFunc(Int_t OfNucleus=3, Double_t theta_cm_min=1., Double_t theta_cm_max=179.) const
Definition: KV2Body.cpp:1428
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:1251
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:184
Double_t eqbm_charge_state_shiwietz_solid(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1727
Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1172
Double_t fEDiss
dissipated energy, 0 means elastic scattering
Definition: KV2Body.h:169
TF1 * fELabVsThetaCM[5]
Definition: KV2Body.h:198
Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t &t1, Double_t &t2) const
Definition: KV2Body.cpp:972
TF1 * GetShiwietzEqbmChargeStateFuncForSolidTargets() const
Definition: KV2Body.cpp:1758
TF1 * GetELabVsThetaLabFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1064
Base class for KaliVeda framework.
Definition: KVBase.h:142
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:126
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual void Warning(const char *method, const char *msgfmt,...) 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)