KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KV2Body.h
Go to the documentation of this file.
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 
90 
124 
165 class KV2Body: public KVBase {
166 
167  std::vector<KVNucleus> fNuclei;
169 
175 
181 
186 
187  void Set4thNucleus();
195 
196  mutable TF1* fThetaLabVsThetaCM[5];
197  mutable TF1* fELabVsThetaCM[5];
198  mutable TF1* fELabVsThetaLab[5];
199 
201  mutable TF1* fXSecRuthLab[5];
202 
204 
207 
208 public:
209 
210  void init();
211  KV2Body();
212  KV2Body(const Char_t* systemname);
213  KV2Body(const KVNucleus& compound, double Exx = 0.0);
214  KV2Body(const KVNucleus& proj, const KVNucleus& targ, double Ediss = 0.0);
215  KV2Body(const KVNucleus& proj, const KVNucleus& targ, const KVNucleus& outgoing, double Ediss = 0.0);
216  KV2Body(KVNucleus*, KVNucleus* = nullptr, KVNucleus* = nullptr, Double_t = 0.0);
217  virtual ~ KV2Body();
218 
219  void CalculateKinematics();
220 
221  static Double_t GetVelocity(Double_t mass, Double_t E);
222 
223  void SetProjectile(const KVNucleus&);
224  void SetProjectile(Int_t z, Int_t a = 0);
225  void SetTarget(const KVNucleus&);
226  void SetTarget(Int_t z, Int_t a = 0);
227  void SetOutgoing(const KVNucleus& proj_out);
228 
235  {
236  fEDiss = ex;
237  }
241  {
242  return fEDiss;
243  }
246  {
248  }
251  {
252  return GetExcitEnergy();
253  }
254  KVNucleus* GetNucleus(Int_t i) const;
255 
256  Double_t GetQReaction() const;
257  Double_t GetQGroundStates() const;
258  Double_t GetLabGrazingAngle(Int_t i = 1) const;
259 
260  Double_t GetCMEnergy() const;
261  Double_t GetCMEnergy(Int_t i) const;
262 
263  Double_t GetMaxAngleLab(Int_t i) const;
264  Double_t GetMinAngleLab(Int_t i) const;
265 
266  TVector3 GetCMVelocity() const;
267  Double_t GetCMVelocity(Int_t i) const;
269  {
270  Double_t gamma =
271  1.0 - TMath::Power(BCM, 2.);
272  if (gamma > 0.)
273  gamma = 1. / TMath::Sqrt(gamma);
274  else {
275  Warning("GetCMGamma", "1 - (beta)**2 = %f ... strange!", gamma);
276  gamma = 0.0;
277  }
278  return gamma;
279  }
280 
281  TF1* GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const;
282  TF1* GetELabVsThetaCMFunc(Int_t OfNucleus) const;
283  TF1* GetELabVsThetaLabFunc(Int_t OfNucleus) const;
284 
285  Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
286  {
288  return const_cast<KV2Body*>(this)->GetThetaLabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
289  }
290  Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
291  {
293  return const_cast<KV2Body*>(this)->GetELabVsThetaCMFunc(OfNucleus)->Eval(ThetaCM);
294  }
295  Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t& t1, Double_t& t2) const;
296  Double_t GetThetaCM(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
297  {
299  if (TMath::Abs(OfNucleus - OtherNucleus) % 2) return 180. - theta;
300  return theta;
301  }
302  Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const;
303 
304  Int_t GetELab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
305  Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
306  Int_t GetThetaLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t& e1, Double_t& e2) const;
307 
308  Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
309  Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus = 3) const;
310 
311  Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1 = -1, Float_t phi2 = -1, Int_t OfNucleus = 3);
314 
315  TF1* GetXSecRuthLabFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
316  TF1* GetXSecRuthLabIntegralFunc(Int_t OfNucleus = 3, Double_t theta_min = 1., Double_t theta_max = 179.) const;
317 
318  void Print(Option_t* opt = "") const;
319 
322  TF1* GetKoxReactionXSecFunc() const;
323 
327 
329  TF1* GetEqbmChargeStateFunc() const;
334 
336  {
338  return fIntPrec;
339  }
341  {
343  fIntPrec = precision;
344  }
345 
346  ClassDef(KV2Body, 0) //Relativistic binary kinematical calculation
347 };
348 
349 #endif
int Int_t
char Char_t
bool Bool_t
double Double_t
float Float_t
const char Option_t
#define ClassDef(name, id)
Relativistic binary kinematics calculator.
Definition: KV2Body.h:165
Double_t XSecRuthLabInt(Double_t *, Double_t *)
Definition: KV2Body.cpp:1325
Double_t TETAMIN[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:180
Double_t eqbm_charge_state_shiwietz_gas(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1758
Double_t VC[5]
cm velocities
Definition: KV2Body.h:176
void SetTarget(const KVNucleus &)
Set target for reaction.
Definition: KV2Body.cpp:315
TF1 * GetEqbmChargeStateFunc() const
Definition: KV2Body.cpp:1669
void Set4thNucleus()
Definition: KV2Body.cpp:423
TF1 * fELabVsThetaLab[5]
Definition: KV2Body.h:198
TF1 * GetXSecRuthLabFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1821
Double_t K[5]
ratio of c.m. velocity to velocity of nucleus in c.m. v_cm/v_i_cm
Definition: KV2Body.h:178
Double_t GetMaxAngleLab(Int_t i) const
Definition: KV2Body.cpp:537
std::vector< KVNucleus > fNuclei
nuclei involved in calculation
Definition: KV2Body.h:167
void Print(Option_t *opt="") const
Definition: KV2Body.cpp:814
TF1 * GetXSecRuthLabIntegralFunc(Int_t OfNucleus=3, Double_t theta_min=1., Double_t theta_max=179.) const
Definition: KV2Body.cpp:1862
void SetIntegralPrecision(Double_t precision)
Definition: KV2Body.h:340
Double_t WCT
total cm energy
Definition: KV2Body.h:173
void SetEDiss(Double_t ex)
Definition: KV2Body.h:245
Double_t GetIntegralPrecision()
Definition: KV2Body.h:335
Double_t GetSphereDureReactionXSec(Double_t r0=1.05)
Definition: KV2Body.cpp:1499
Double_t ELabVsThetaLab(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any lab angle x[0].
Definition: KV2Body.cpp:990
TF1 * fThetaLabVsThetaCM[5]
Definition: KV2Body.h:196
void SetExcitEnergy(Double_t ex)
Definition: KV2Body.h:234
Double_t GetMinAngleLab(Int_t i) const
Definition: KV2Body.cpp:555
Double_t GetThetaLab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:285
void SetProjectile(const KVNucleus &)
Set projectile for reaction.
Definition: KV2Body.cpp:340
Double_t fIntPrec
Precision of the TF1::Integral method.
Definition: KV2Body.h:206
Double_t GetXSecRuthLab(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1274
Double_t GetQReaction() const
Calculate Q-value for reaction, including dissipated (excitation) energy.
Definition: KV2Body.cpp:481
Double_t GetThetaCM(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
Definition: KV2Body.h:296
TF1 * fEqbmChargeStateShSol
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al solid)
Definition: KV2Body.h:184
Double_t EqbmChargeState(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1606
TF1 * GetThetaLabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1150
void SetOutgoing(const KVNucleus &proj_out)
Definition: KV2Body.cpp:398
TF1 * fKoxReactionXSec
function Kox reaction cross-section [barns] vs. E/A projectile
Definition: KV2Body.h:182
TF1 * GetELabVsThetaCMFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1045
Double_t XSecRuthCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1194
virtual ~ KV2Body()
TF1 * GetShiwietzEqbmChargeStateFuncForGasTargets() const
Definition: KV2Body.cpp:1790
Double_t XSecRuthLab(Double_t *, Double_t *)
Definition: KV2Body.cpp:1295
TF1 * GetKoxReactionXSecFunc() const
Definition: KV2Body.cpp:1558
Double_t BCM
beta of centre of mass
Definition: KV2Body.h:171
TF1 * fEqbmChargeStateShGas
function equilibrium charge state of projectile vs. E/A projectile (Shiwietz et al gas)
Definition: KV2Body.h:185
Double_t GetELab(Double_t ThetaCM, Int_t OfNucleus) const
Definition: KV2Body.h:290
Int_t FindRoots(TF1 *, Double_t, Double_t, Double_t, Double_t &, Double_t &) const
Definition: KV2Body.cpp:1910
Double_t GetEDiss() const
Definition: KV2Body.h:250
static Double_t GetVelocity(Double_t mass, Double_t E)
Definition: KV2Body.cpp:381
Double_t GetIntegratedXSecRuthLab(Float_t th1, Float_t th2, Float_t phi1=-1, Float_t phi2=-1, Int_t OfNucleus=3)
Definition: KV2Body.cpp:1379
Double_t GetBmaxFromReactionXSec(Double_t ReacXsec)
Definition: KV2Body.cpp:1520
TVector3 VCM
velocity of centre of mass
Definition: KV2Body.h:170
Double_t KoxReactionXSec(Double_t *, Double_t *)
Definition: KV2Body.cpp:1453
Double_t ELabVsThetaCM(Double_t *, Double_t *)
Function calculating lab energy of nucleus par[0] for any CM angle x[0].
Definition: KV2Body.cpp:1007
Double_t ThetaLabVsThetaCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1026
Double_t GetCMGamma() const
Definition: KV2Body.h:268
Double_t TETAMAX[5]
defined only for nuclei 3 et 4
Definition: KV2Body.h:179
Bool_t fSetOutgoing
= kTRUE if SetOutgoing is called before CalculateKinematics
Definition: KV2Body.h:203
Double_t WC[5]
cm energy of each nucleus
Definition: KV2Body.h:174
TF1 * fXSecRuthLabIntegral[5]
Definition: KV2Body.h:200
Double_t EC[5]
cm energies
Definition: KV2Body.h:177
Double_t GetExcitEnergy() const
Definition: KV2Body.h:240
Double_t GetMinThetaCMFromThetaLab(Int_t OfNucleus, Double_t theta, Int_t OtherNucleus) const
Definition: KV2Body.cpp:1222
Double_t WLT
total lab energy
Definition: KV2Body.h:172
Int_t GetVLab(Int_t OfNucleus, Double_t ThetaLab, Int_t AngleNucleus, Double_t &e1, Double_t &e2) const
Definition: KV2Body.cpp:1089
TF1 * fXSecRuthLab[5]
Definition: KV2Body.h:201
Double_t BassIntBarrier()
Definition: KV2Body.cpp:1421
TVector3 GetCMVelocity() const
Return vector velocity of centre of mass of reaction (units: cm/ns)
Definition: KV2Body.cpp:573
void CalculateKinematics()
Definition: KV2Body.cpp:678
void init()
Default initialisations.
Definition: KV2Body.cpp:33
KV2Body()
default ctor
Definition: KV2Body.cpp:62
Double_t GetIntegratedXsec(Double_t b1, Double_t b2)
Definition: KV2Body.cpp:1539
Double_t GetLabGrazingAngle(Int_t i=1) const
Definition: KV2Body.cpp:604
Double_t GetQGroundStates() const
Calculate Q-value for reaction, assuming all nuclei in ground state.
Definition: KV2Body.cpp:500
KVNucleus * GetNucleus(Int_t i) const
Definition: KV2Body.cpp:457
Double_t XSecRuthCMVsThetaCM(Double_t *, Double_t *)
Definition: KV2Body.cpp:1246
Double_t GetCMEnergy() const
Return available kinetic energy in centre of mass.
Definition: KV2Body.cpp:523
TF1 * fEqbmChargeState
function equilibrium charge state of projectile vs. E/A projectile (Leon et al)
Definition: KV2Body.h:183
Double_t eqbm_charge_state_shiwietz_solid(Double_t *t, Double_t *)
Definition: KV2Body.cpp:1698
Double_t GetXSecRuthCM(Double_t ThetaLab_Proj, Int_t OfNucleus=3) const
Definition: KV2Body.cpp:1173
Double_t fEDiss
dissipated energy, 0 means elastic scattering
Definition: KV2Body.h:168
TF1 * fELabVsThetaCM[5]
Definition: KV2Body.h:197
Int_t GetThetaCM(Double_t ThetaLab, Int_t OfNucleus, Double_t &t1, Double_t &t2) const
Definition: KV2Body.cpp:973
TF1 * GetShiwietzEqbmChargeStateFuncForSolidTargets() const
Definition: KV2Body.cpp:1729
TF1 * GetELabVsThetaLabFunc(Int_t OfNucleus) const
Definition: KV2Body.cpp:1065
Base class for KaliVeda framework.
Definition: KVBase.h:135
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
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)