KaliVeda  1.12/06
Heavy-Ion Analysis Toolkit
KVMaterial.h
Go to the documentation of this file.
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 "RVersion.h"
24 #include "KVBase.h"
25 #include "KVList.h"
26 #include "KVUnits.h"
27 #include "TF1.h"
28 #include "TVector3.h"
29 #include "Riostream.h"
30 class KVIonRangeTable;
31 
32 class KVNucleus;
33 class TGeoMedium;
34 class TGeoVolume;
35 
41 class KVMaterial: public KVBase {
42 
43 protected:
45 
47 
48 public:
49 
50 private:
55  mutable Double_t fELoss;
56 
57 public:
58  enum SolType {
60  kEmin
61  };
62  KVMaterial();
63  KVMaterial(const Char_t* type, const Double_t thick = 0.0);
64  KVMaterial(const Char_t* gas, const Double_t thick, const Double_t pressure, const Double_t temperature = 19.0);
65  KVMaterial(Double_t area_density, const Char_t* type);
66  KVMaterial(const KVMaterial&);
67  ROOT_COPY_ASSIGN_OP(KVMaterial)
68 
70  static KVIonRangeTable* ChangeRangeTable(const Char_t* name);
71 
72  void init();
73  virtual ~ KVMaterial();
74  void SetMass(Double_t a);
75  virtual void SetMaterial(const Char_t* type);
76  Double_t GetMass() const;
77  Double_t GetZ() const;
78  Double_t GetDensity() const;
79  void SetAreaDensity(Double_t dens /* g/cm**2 */);
80  Double_t GetAreaDensity() const;
81  virtual void SetThickness(Double_t thick /* cm */);
82  virtual Double_t GetThickness() const;
85 
86  virtual void DetectParticle(KVNucleus*, TVector3* norm = 0);
87  virtual Double_t GetELostByParticle(KVNucleus*, TVector3* norm = 0);
89 
90  virtual void Print(Option_t* option = "") const;
91  virtual Double_t GetEnergyLoss() const
92  {
93  return fELoss;
94  }
95  virtual void SetEnergyLoss(Double_t e) const
96  {
97  fELoss = e;
98  }
99 
100 #if ROOT_VERSION_CODE >= ROOT_VERSION(3,4,0)
101  virtual void Copy(TObject& obj) const;
102 #else
103  virtual void Copy(TObject& obj);
104 #endif
105  virtual void Clear(Option_t* opt = "");
106 
107  virtual Double_t GetEmaxValid(Int_t Z, Int_t A);
108  virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e =
109  -1.0, enum SolType type = kEmax);
111  virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc);
112  virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres);
113  virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc);
114  virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE =
115  -1.0, enum SolType type = kEmax);
116  virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A);
117  virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A);
118 
119  virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc);
120  virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc);
121 
123 
124  virtual KVMaterial* GetActiveLayer() const
125  {
127  return 0;
128  }
129 
130  virtual void SetPressure(Double_t);
131  virtual void SetTemperature(Double_t);
132 
133  virtual Double_t GetPressure() const;
134  virtual Double_t GetTemperature() const;
135 
136  Bool_t IsIsotopic() const;
137  Bool_t IsNat() const;
138 
139  Bool_t IsGas() const;
140 
141  virtual TGeoMedium* GetGeoMedium(const Char_t* /*med_name*/ = "");
142  virtual void SetAbsGeoVolume(TGeoVolume* v)
143  {
144  fAbsorberVolume = v;
145  }
146  virtual TGeoVolume* GetAbsGeoVolume() const
147  {
149  return fAbsorberVolume;
150  }
151 
152  ClassDef(KVMaterial, 6)// Class describing physical materials used to construct detectors & targets
153 };
154 
155 #endif
int Int_t
#define e(i)
char Char_t
bool Bool_t
double Double_t
const char Option_t
#define ClassDef(name, id)
Base class for KaliVeda framework.
Definition: KVBase.h:135
Abstract base class for calculation of range & energy loss of charged particles in matter.
Description of physical materials used to construct detectors; interface to range tables.
Definition: KVMaterial.h:41
Double_t GetZ() const
Returns atomic number of material.
Definition: KVMaterial.cpp:320
virtual Double_t GetPressure() const
Definition: KVMaterial.cpp:469
virtual void SetPressure(Double_t)
Definition: KVMaterial.cpp:443
virtual void Copy(TObject &obj) const
Copy this to obj.
Definition: KVMaterial.cpp:891
virtual void SetTemperature(Double_t)
Definition: KVMaterial.cpp:489
Double_t GetEffectiveAreaDensity(TVector3 &norm, TVector3 &direction)
Definition: KVMaterial.cpp:553
virtual void SetEnergyLoss(Double_t e) const
Definition: KVMaterial.h:95
virtual void SetThickness(Double_t thick)
Definition: KVMaterial.cpp:354
virtual Double_t GetThickness() const
Definition: KVMaterial.cpp:380
Double_t GetDensity() const
Definition: KVMaterial.cpp:335
Double_t fThick
area density of absorber in g/cm**2
Definition: KVMaterial.h:52
Bool_t IsGas() const
Returns kTRUE for gaseous materials/detectors.
Definition: KVMaterial.cpp:305
virtual TGeoMedium * GetGeoMedium(const Char_t *="")
Definition: KVMaterial.cpp:971
static KVIonRangeTable * GetRangeTable()
Definition: KVMaterial.cpp:153
virtual Double_t GetEnergyLoss() const
Definition: KVMaterial.h:91
virtual void Print(Option_t *option="") const
Show information on this material.
Definition: KVMaterial.cpp:571
Int_t fAmasr
isotopic mass of element
Definition: KVMaterial.h:51
void SetMass(Double_t a)
Definition: KVMaterial.cpp:235
virtual Double_t GetEmaxValid(Int_t Z, Int_t A)
virtual void SetAbsGeoVolume(TGeoVolume *v)
Definition: KVMaterial.h:142
TGeoVolume * fAbsorberVolume
pointer to corresponding volume in ROOT geometry
Definition: KVMaterial.h:46
virtual Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e=-1.0, enum SolType type=kEmax)
Definition: KVMaterial.cpp:788
Double_t fELoss
total of energy lost by all particles traversing absorber
Definition: KVMaterial.h:55
virtual Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A)
Incident energy for which the DE(E) curve has a maximum.
Definition: KVMaterial.cpp:927
virtual Double_t GetPunchThroughEnergy(Int_t Z, Int_t A)
Bool_t IsNat() const
Definition: KVMaterial.cpp:288
void init()
Definition: KVMaterial.cpp:45
virtual Double_t GetEResFromDeltaE(Int_t Z, Int_t A, Double_t dE=-1.0, enum SolType type=kEmax)
Definition: KVMaterial.cpp:750
virtual Double_t GetMaxDeltaE(Int_t Z, Int_t A)
Definition: KVMaterial.cpp:943
static KVIonRangeTable * ChangeRangeTable(const Char_t *name)
Definition: KVMaterial.cpp:170
void SetAreaDensity(Double_t dens)
Definition: KVMaterial.cpp:406
Double_t GetAreaDensity() const
Return area density of material in g/cm**2.
Definition: KVMaterial.cpp:427
Double_t fTemp
gas temperature in degrees celsius
Definition: KVMaterial.h:54
Double_t fPressure
gas pressure in torr
Definition: KVMaterial.h:53
virtual Double_t GetTemperature() const
Definition: KVMaterial.cpp:516
virtual Double_t GetIncidentEnergyFromERes(Int_t Z, Int_t A, Double_t Eres)
Get incident energy from residual energy.
Definition: KVMaterial.cpp:911
virtual void SetMaterial(const Char_t *type)
Definition: KVMaterial.cpp:191
virtual Double_t GetDeltaEFromERes(Int_t Z, Int_t A, Double_t Eres)
Definition: KVMaterial.cpp:717
virtual Double_t GetELostByParticle(KVNucleus *, TVector3 *norm=0)
Definition: KVMaterial.cpp:597
static KVIonRangeTable * fIonRangeTable
pointer to class used to calculate charged particle ranges & energy losses
Definition: KVMaterial.h:44
virtual Double_t GetERes(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:816
virtual TGeoVolume * GetAbsGeoVolume() const
Definition: KVMaterial.h:146
virtual Double_t GetDeltaE(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:662
virtual void Clear(Option_t *opt="")
Reset absorber - set energy lost by particles to zero.
Definition: KVMaterial.cpp:879
virtual ~ KVMaterial()
KVMaterial()
default ctor
Definition: KVMaterial.cpp:70
virtual Double_t GetRange(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:681
virtual void DetectParticle(KVNucleus *, TVector3 *norm=0)
Definition: KVMaterial.cpp:844
Bool_t IsIsotopic() const
Definition: KVMaterial.cpp:269
Double_t GetEffectiveThickness(TVector3 &norm, TVector3 &direction)
Definition: KVMaterial.cpp:533
virtual Double_t GetParticleEIncFromERes(KVNucleus *, TVector3 *norm=0)
Definition: KVMaterial.cpp:632
virtual Double_t GetLinearRange(Int_t Z, Int_t A, Double_t Einc)
Definition: KVMaterial.cpp:699
virtual KVMaterial * GetActiveLayer() const
Definition: KVMaterial.h:124
Double_t GetMass() const
Returns atomic mass of material. Will be isotopic mass if set.
Definition: KVMaterial.cpp:252
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
v