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 "TVector3.h"
25 class KVIonRangeTable;
26 
27 class KVNucleus;
28 class TGeoMedium;
29 class TGeoVolume;
30 class TGraph;
31 
89 class KVMaterial: public KVBase {
90 
91 protected:
93 
95 
96 public:
97 
98 private:
103  mutable Double_t fELoss;
104 
105 public:
106  enum SolType {
108  kEmin
109  };
110  KVMaterial();
111  KVMaterial(const Char_t* type, const Double_t thick = 0.0);
112  KVMaterial(const Char_t* gas, const Double_t thick, const Double_t pressure, const Double_t temperature = 19.0);
113  KVMaterial(Double_t area_density, const Char_t* type);
114  KVMaterial(const KVMaterial&);
115  ROOT_COPY_ASSIGN_OP(KVMaterial)
116 
117  static KVIonRangeTable* GetRangeTable();
118  static KVIonRangeTable* ChangeRangeTable(const Char_t* name);
119 
120  void init();
121  virtual ~ KVMaterial();
122  void SetMass(Int_t a);
123  virtual void SetMaterial(const Char_t* type);
124  Double_t GetMass() const;
125  Double_t GetZ() const;
126  Double_t GetDensity() const;
127  void SetAreaDensity(Double_t dens /* g/cm**2 */);
128  Double_t GetAreaDensity() const;
129  virtual void SetThickness(Double_t thick /* cm */);
130  virtual Double_t GetThickness() const;
131  Double_t GetEffectiveThickness(TVector3& norm, TVector3& direction);
133 
134  virtual void DetectParticle(KVNucleus*, TVector3* norm = nullptr);
135  virtual Double_t GetELostByParticle(KVNucleus*, TVector3* norm = nullptr);
136  virtual Double_t GetParticleEIncFromERes(KVNucleus*, TVector3* norm = nullptr);
137 
138  void Print(Option_t* option = "") const override;
139  virtual Double_t GetEnergyLoss() const
140  {
147  return fELoss;
148  }
149  virtual void SetEnergyLoss(Double_t e) const
150  {
153  fELoss = e;
154  }
155 
156  void Copy(TObject& obj) const override;
157  void Clear(Option_t* opt = "") override;
158 
160  virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e =
161  -1.0, enum SolType type = kEmax);
163  virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
164  virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres);
165  virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
166  virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE =
167  -1.0, enum SolType type = kEmax);
168  virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A);
169  virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A);
170 
171  virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc);
172  virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc);
173 
175 
176  virtual KVMaterial* GetActiveLayer() const
177  {
179  return nullptr;
180  }
181 
182  virtual void SetPressure(Double_t);
183  virtual void SetTemperature(Double_t);
184 
185  virtual Double_t GetPressure() const;
186  virtual Double_t GetTemperature() const;
187 
188  Bool_t IsIsotopic() const;
189  Bool_t IsNat() const;
190 
191  Bool_t IsGas() const;
192 
193  virtual TGeoMedium* GetGeoMedium(const Char_t* /*med_name*/ = "");
194  virtual void SetAbsGeoVolume(TGeoVolume* v)
195  {
197  fAbsorberVolume = v;
198  }
199  virtual TGeoVolume* GetAbsGeoVolume() const
200  {
202  return fAbsorberVolume;
203  }
204 
205  virtual TGraph* GetGraphOfDeltaEVsE(const KVNucleus& nuc, Int_t npts, Double_t Emin, Double_t Emax);
206 
207  ClassDefOverride(KVMaterial, 6)// Class describing physical materials used to construct detectors & targets
208 };
209 
210 #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
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:89
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:149
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:100
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:139
Int_t fAmasr
isotopic mass of element
Definition: KVMaterial.h:99
Double_t GetEmaxValid(Int_t Z, Int_t A)
virtual void SetAbsGeoVolume(TGeoVolume *v)
Definition: KVMaterial.h:194
TGeoVolume * fAbsorberVolume
pointer to corresponding volume in ROOT geometry
Definition: KVMaterial.h:94
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:103
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 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:102
virtual TGraph * GetGraphOfDeltaEVsE(const KVNucleus &nuc, Int_t npts, Double_t Emin, Double_t Emax)
Double_t fPressure
gas pressure in torr
Definition: KVMaterial.h:101
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:92
virtual TGeoVolume * GetAbsGeoVolume() const
Definition: KVMaterial.h:199
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:176
Double_t GetMass() const
Definition: KVMaterial.cpp:302
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
v