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 
115 class KVMaterial: public KVBase {
116 
117 protected:
119 
121 
122 public:
123 
124 private:
129  mutable Double_t fELoss;
130 
131 public:
132  enum SolType {
134  kEmin
135  };
136  KVMaterial();
137  KVMaterial(const Char_t* type, const Double_t thick = 0.0);
138  KVMaterial(const Char_t* gas, const Double_t thick, const Double_t pressure, const Double_t temperature = 19.0);
139  KVMaterial(Double_t area_density, const Char_t* type);
140  KVMaterial(const KVMaterial&);
141  ROOT_COPY_ASSIGN_OP(KVMaterial)
142 
143  static KVIonRangeTable* GetRangeTable();
144  static KVIonRangeTable* ChangeRangeTable(const Char_t* name);
145 
146  void init();
147  virtual ~ KVMaterial();
148  void SetMass(Int_t a);
149  virtual void SetMaterial(const Char_t* type);
150  Double_t GetMass() const;
151  Double_t GetZ() const;
152  Double_t GetDensity() const;
153  void SetDensity(Double_t);
154  void SetAreaDensity(Double_t dens /* g/cm**2 */);
155  Double_t GetAreaDensity() const;
156  virtual void SetThickness(Double_t thick /* cm */);
157  virtual Double_t GetThickness() const;
158  Double_t GetEffectiveThickness(const TVector3& norm, const TVector3& direction);
159  Double_t GetEffectiveAreaDensity(const TVector3& norm, const TVector3& direction);
160 
161  virtual void DetectParticle(KVNucleus*, TVector3* norm = nullptr);
162  virtual Double_t GetELostByParticle(KVNucleus*, TVector3* norm = nullptr);
163  virtual Double_t GetParticleEIncFromERes(KVNucleus*, TVector3* norm = nullptr);
164 
165  void Print(Option_t* option = "") const override;
166  virtual Double_t GetEnergyLoss() const
167  {
174  return fELoss;
175  }
176  virtual void SetEnergyLoss(Double_t e) const
177  {
180  fELoss = e;
181  }
182 
183  void Copy(TObject& obj) const override;
184  void Clear(Option_t* opt = "") override;
185 
187  virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e =
188  -1.0, enum SolType type = kEmax);
190  virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
191  virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres);
192  virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc, Double_t dx = 0.);
193  virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE =
194  -1.0, enum SolType type = kEmax);
195  virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A);
196  virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A);
197 
198  virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc);
199  virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc);
200 
202 
203  virtual KVMaterial* GetActiveLayer() const
204  {
206  return nullptr;
207  }
208 
209  virtual void SetPressure(Double_t);
210  virtual void SetTemperature(Double_t);
211 
212  virtual Double_t GetPressure() const;
213  virtual Double_t GetTemperature() const;
214 
215  Bool_t IsIsotopic() const;
216  Bool_t IsNat() const;
217 
218  Bool_t IsGas() const;
219 
220  virtual TGeoMedium* GetGeoMedium(const Char_t* /*med_name*/ = "");
221  virtual void SetAbsGeoVolume(TGeoVolume* v)
222  {
224  fAbsorberVolume = v;
225  }
226  virtual TGeoVolume* GetAbsGeoVolume() const
227  {
229  return fAbsorberVolume;
230  }
231 
232  virtual KVDrawable<TGraph> GetGraphOfDeltaEVsE(const KVNucleus& nuc, Int_t npts, Double_t Emin, Double_t Emax);
233 
234  ClassDefOverride(KVMaterial, 6)// Class describing physical materials used to construct detectors & targets
235 };
236 
237 #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:140
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:115
Double_t GetZ() const
Definition: KVMaterial.cpp:390
virtual Double_t GetPressure() const
Definition: KVMaterial.cpp:670
virtual void SetPressure(Double_t)
Definition: KVMaterial.cpp:633
virtual void SetTemperature(Double_t)
Definition: KVMaterial.cpp:699
virtual void SetEnergyLoss(Double_t e) const
Definition: KVMaterial.h:176
virtual void SetThickness(Double_t thick)
Definition: KVMaterial.cpp:499
virtual Double_t GetThickness() const
Definition: KVMaterial.cpp:537
Double_t GetEffectiveAreaDensity(const TVector3 &norm, const TVector3 &direction)
Definition: KVMaterial.cpp:773
Double_t GetDensity() const
Definition: KVMaterial.cpp:418
Double_t fThick
area density of absorber in g/cm**2
Definition: KVMaterial.h:126
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:166
Int_t fAmasr
isotopic mass of element
Definition: KVMaterial.h:125
Double_t GetEmaxValid(Int_t Z, Int_t A)
virtual void SetAbsGeoVolume(TGeoVolume *v)
Definition: KVMaterial.h:221
TGeoVolume * fAbsorberVolume
pointer to corresponding volume in ROOT geometry
Definition: KVMaterial.h:120
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:129
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:573
Double_t GetAreaDensity() const
Definition: KVMaterial.cpp:606
virtual Double_t GetParticleEIncFromERes(KVNucleus *, TVector3 *norm=nullptr)
Definition: KVMaterial.cpp:854
Double_t fTemp
gas temperature in degrees celsius
Definition: KVMaterial.h:128
Double_t fPressure
gas pressure in torr
Definition: KVMaterial.h:127
virtual void DetectParticle(KVNucleus *, TVector3 *norm=nullptr)
virtual Double_t GetTemperature() const
Definition: KVMaterial.cpp:730
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)
static KVIonRangeTable * fIonRangeTable
pointer to class used to calculate charged particle ranges & energy losses
Definition: KVMaterial.h:118
void SetDensity(Double_t)
Definition: KVMaterial.cpp:459
virtual TGeoVolume * GetAbsGeoVolume() const
Definition: KVMaterial.h:226
virtual Double_t GetELostByParticle(KVNucleus *, TVector3 *norm=nullptr)
Definition: KVMaterial.cpp:819
Double_t GetEffectiveThickness(const TVector3 &norm, const TVector3 &direction)
Definition: KVMaterial.cpp:750
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:917
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:792
virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc, Double_t dx=0.)
Definition: KVMaterial.cpp:886
virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:954
virtual KVMaterial * GetActiveLayer() const
Definition: KVMaterial.h:203
Double_t GetMass() const
Definition: KVMaterial.cpp:302
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:123
v