KaliVeda
Toolkit for HIC analysis
Loading...
Searching...
No Matches
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
166class KV2Body: public KVBase {
167
168 std::vector<KVNucleus> fNuclei;
170
176
182
187
188 void Set4thNucleus();
196
198 mutable TF1* fELabVsThetaCM[5];
199 mutable TF1* fELabVsThetaLab[5];
200
202 mutable TF1* fXSecRuthLab[5];
203
205
208
209public:
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;
259 Double_t GetLabGrazingAngle(Int_t i = 1) const;
260
261 Double_t GetCMEnergy() const;
262 Double_t GetCMEnergy(Int_t i) const;
263
266
267 TVector3 GetCMVelocity() const;
270 {
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
325
329
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
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)