KaliVeda
Toolkit for HIC analysis
KVMaterial.h
1 /***************************************************************************
2  kvmaterial.h - description
3  -------------------
4  begin : Thu May 16 2002
5  copyright : (C) 2002 by J.D. Frankland
6  email : frankland@ganil.fr
7 
8 
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 KVMATERIAL_H
21 #define KVMATERIAL_H
22 
23 #include "KVBase.h"
24 #include "KVDrawable.h"
25 #include "TVector3.h"
26 class KVIonRangeTable;
27 
28 class KVNucleus;
29 class TGeoMedium;
30 class TGeoVolume;
31 class TGraph;
32 
90 class KVMaterial: public KVBase {
91 
92 protected:
94 
96 
97 public:
98 
99 private:
104  mutable Double_t fELoss;
105 
106 public:
107  enum SolType {
109  kEmin
110  };
111  KVMaterial();
112  KVMaterial(const Char_t* type, const Double_t thick = 0.0);
113  KVMaterial(const Char_t* gas, const Double_t thick, const Double_t pressure, const Double_t temperature = 19.0);
114  KVMaterial(Double_t area_density, const Char_t* type);
115  KVMaterial(const KVMaterial&);
116  ROOT_COPY_ASSIGN_OP(KVMaterial)
117 
118  static KVIonRangeTable* GetRangeTable();
119  static KVIonRangeTable* ChangeRangeTable(const Char_t* name);
120 
121  void init();
122  virtual ~ KVMaterial();
123  void SetMass(Int_t a);
124  virtual void SetMaterial(const Char_t* type);
125  Double_t GetMass() const;
126  Double_t GetZ() const;
127  Double_t GetDensity() const;
128  void SetAreaDensity(Double_t dens /* g/cm**2 */);
129  Double_t GetAreaDensity() const;
130  virtual void SetThickness(Double_t thick /* cm */);
131  virtual Double_t GetThickness() const;
132  Double_t GetEffectiveThickness(TVector3& norm, TVector3& direction);
134 
135  virtual void DetectParticle(KVNucleus*, TVector3* norm = nullptr);
136  virtual Double_t GetELostByParticle(KVNucleus*, TVector3* norm = nullptr);
137  virtual Double_t GetParticleEIncFromERes(KVNucleus*, TVector3* norm = nullptr);
138 
139  void Print(Option_t* option = "") const override;
140  virtual Double_t GetEnergyLoss() const
141  {
148  return fELoss;
149  }
150  virtual void SetEnergyLoss(Double_t e) const
151  {
154  fELoss = e;
155  }
156 
157  void Copy(TObject& obj) const override;
158  void Clear(Option_t* opt = "") override;
159 
161  virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e =
162  -1.0, enum SolType type = kEmax);
164  virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
165  virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres);
166  virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
167  virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE =
168  -1.0, enum SolType type = kEmax);
169  virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A);
170  virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A);
171 
172  virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc);
173  virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc);
174 
176 
177  virtual KVMaterial* GetActiveLayer() const
178  {
180  return nullptr;
181  }
182 
183  virtual void SetPressure(Double_t);
184  virtual void SetTemperature(Double_t);
185 
186  virtual Double_t GetPressure() const;
187  virtual Double_t GetTemperature() const;
188 
189  Bool_t IsIsotopic() const;
190  Bool_t IsNat() const;
191 
192  Bool_t IsGas() const;
193 
194  virtual TGeoMedium* GetGeoMedium(const Char_t* /*med_name*/ = "");
195  virtual void SetAbsGeoVolume(TGeoVolume* v)
196  {
198  fAbsorberVolume = v;
199  }
200  virtual TGeoVolume* GetAbsGeoVolume() const
201  {
203  return fAbsorberVolume;
204  }
205 
206  virtual KVDrawable<TGraph> GetGraphOfDeltaEVsE(const KVNucleus& nuc, Int_t npts, Double_t Emin, Double_t Emax);
207 
208  ClassDefOverride(KVMaterial, 6)// Class describing physical materials used to construct detectors & targets
209 };
210 
211 #endif
int Int_t
#define e(i)
bool Bool_t
char Char_t
double Double_t
const char Option_t
#define ClassDefOverride(name, id)
Base class for KaliVeda framework.
Definition: KVBase.h:139
Simple wrapper for objects which can be drawn (graphs, histograms)
Definition: KVDrawable.h:29
Abstract base class for calculation of range & energy loss of charged particles in matter.
Description of physical materials used to construct detectors & targets; interface to range tables.
Definition: KVMaterial.h:90
Double_t GetZ() const
Definition: KVMaterial.cpp:390
virtual Double_t GetPressure() const
Definition: KVMaterial.cpp:617
virtual void SetPressure(Double_t)
Definition: KVMaterial.cpp:580
virtual void SetTemperature(Double_t)
Definition: KVMaterial.cpp:646
Double_t GetEffectiveAreaDensity(TVector3 &norm, TVector3 &direction)
Definition: KVMaterial.cpp:720
virtual void SetEnergyLoss(Double_t e) const
Definition: KVMaterial.h:150
virtual void SetThickness(Double_t thick)
Definition: KVMaterial.cpp:451
virtual Double_t GetThickness() const
Definition: KVMaterial.cpp:484
Double_t GetDensity() const
Definition: KVMaterial.cpp:418
Double_t fThick
area density of absorber in g/cm**2
Definition: KVMaterial.h:101
Bool_t IsGas() const
Definition: KVMaterial.cpp:371
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
static KVIonRangeTable * GetRangeTable()
Definition: KVMaterial.cpp:158
virtual Double_t GetEnergyLoss() const
Definition: KVMaterial.h:140
Int_t fAmasr
isotopic mass of element
Definition: KVMaterial.h:100
Double_t GetEmaxValid(Int_t Z, Int_t A)
virtual void SetAbsGeoVolume(TGeoVolume *v)
Definition: KVMaterial.h:195
TGeoVolume * fAbsorberVolume
pointer to corresponding volume in ROOT geometry
Definition: KVMaterial.h:95
virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e=-1.0, enum SolType type=kEmax)
Double_t fELoss
total of energy lost by all particles traversing absorber
Definition: KVMaterial.h:104
virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A)
void Clear(Option_t *opt="") override
Reset absorber - set stored energy lost by particles in absorber to zero.
virtual Double_t GetPunchThroughEnergy(Int_t Z, Int_t A)
Bool_t IsNat() const
Definition: KVMaterial.cpp:349
void SetMass(Int_t a)
Definition: KVMaterial.cpp:282
void init()
Definition: KVMaterial.cpp:46
virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE=-1.0, enum SolType type=kEmax)
virtual KVDrawable< TGraph > GetGraphOfDeltaEVsE(const KVNucleus &nuc, Int_t npts, Double_t Emin, Double_t Emax)
virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A)
static KVIonRangeTable * ChangeRangeTable(const Char_t *name)
Definition: KVMaterial.cpp:179
void SetAreaDensity(Double_t dens)
Definition: KVMaterial.cpp:520
Double_t GetAreaDensity() const
Definition: KVMaterial.cpp:553
virtual Double_t GetParticleEIncFromERes(KVNucleus *, TVector3 *norm=nullptr)
Definition: KVMaterial.cpp:801
Double_t fTemp
gas temperature in degrees celsius
Definition: KVMaterial.h:103
Double_t fPressure
gas pressure in torr
Definition: KVMaterial.h:102
virtual void DetectParticle(KVNucleus *, TVector3 *norm=nullptr)
virtual Double_t GetTemperature() const
Definition: KVMaterial.cpp:677
virtual Double_t GetIncidentEnergyFromERes(Int_t Z, Int_t A, Double_t Eres)
virtual void SetMaterial(const Char_t *type)
Definition: KVMaterial.cpp:217
virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres)
Definition: KVMaterial.cpp:948
static KVIonRangeTable * fIonRangeTable
pointer to class used to calculate charged particle ranges & energy losses
Definition: KVMaterial.h:93
virtual TGeoVolume * GetAbsGeoVolume() const
Definition: KVMaterial.h:200
virtual Double_t GetELostByParticle(KVNucleus *, TVector3 *norm=nullptr)
Definition: KVMaterial.cpp:766
virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t dx=0.)
virtual ~ KVMaterial()
KVMaterial()
default ctor
Definition: KVMaterial.cpp:73
virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:864
Bool_t IsIsotopic() const
Definition: KVMaterial.cpp:324
void Copy(TObject &obj) const override
Make a copy of this material object.
void Print(Option_t *option="") const override
Show information on this material.
Definition: KVMaterial.cpp:739
Double_t GetEffectiveThickness(TVector3 &norm, TVector3 &direction)
Definition: KVMaterial.cpp:697
virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t dx=0.)
Definition: KVMaterial.cpp:833
virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:901
virtual KVMaterial * GetActiveLayer() const
Definition: KVMaterial.h:177
Double_t GetMass() const
Definition: KVMaterial.cpp:302
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
v