KaliVeda
Toolkit for HIC analysis
KVIonRangeTableMaterial.cpp
1 //Created by KVClassFactory on Fri Sep 28 11:34:14 2012
2 //Author: John Frankland,,,
3 
4 #include "KVIonRangeTableMaterial.h"
5 #include "TF1.h"
6 #include "KVNucleus.h"
7 #include "TGeoManager.h"
8 #include "TGeoMaterial.h"
9 
10 using namespace std;
11 
13 
14 
15 
19  : KVBase(),
20  fTable(0),
21  fState("unknown"),
22  fComposition(0),
23  fCompound(kFALSE),
24  fMixture(kFALSE),
25  fDens(0.),
26  fZmat(0),
27  fAmat(0),
28  fMoleWt(0),
29  fDeltaE(0),
30  fEres(0),
31  fRange(0),
32  fStopping(0)
33 {
34  // Default constructor
35 }
36 
37 
38 
52 
54  const Char_t* state, Double_t density, Double_t Z, Double_t A)
55  : KVBase(name, symbol),
56  fTable(tab),
57  fState(state),
58  fComposition(0),
59  fCompound(kFALSE),
60  fMixture(kFALSE),
61  fDens(density),
62  fZmat(Z),
63  fAmat(A),
64  fMoleWt(0),
65  fDeltaE(0),
66  fEres(0),
67  fRange(0),
68  fStopping(0)
69 {
70  // Create new material with given (long) name and symbol
71  // symbol convention: for elements, use element symbol. for compounds, use chemical formula.
72  // e.g. silicon: name="Silicon" symbol="Si"
73  // C4H10: name="Isobutane", symbol="C4H10"
74  // state="solid", "liquid", "gas"
75  //
76  // Density [g/cm**3] must be given for solid compounds/mixtures.
77  //
78  // Densities of atomic elements are known (gNDTManager->GetValue(z, a, "ElementDensity")), they
79  // will be used automatically, unless a different value is given here.
80  //
81  // Densities of gases are calculated from the molar weight, temperature and pressure.
82 
83  if (density < 0)
84  {
85  fDens = 0;
86  if (Z > 0) {
87  auto d = tab->get_element_density(Z);
88  if (d) fDens = *d;
89  }
90  }
91 }
92 
93 
94 
95 
102 
104  fTable(0),
105  fState("unknown"),
106  fComposition(0),
107  fCompound(kFALSE),
108  fMixture(kFALSE),
109  fDens(0.),
110  fZmat(0),
111  fAmat(0),
112  fMoleWt(0),
113  fDeltaE(0),
114  fEres(0),
115  fRange(0),
116  fStopping(0)
117 {
118  // Copy constructor
119  // This ctor is used to make a copy of an existing object (for example
120  // when a method returns an object), and it is always a good idea to
121  // implement it.
122  // If your class allocates memory in its constructor(s) then it is ESSENTIAL :-)
123 
124  obj.Copy(*this);
125 }
126 
127 
128 
131 
133 {
134  // Destructor
135  SafeDelete(fComposition);
136  SafeDelete(fRange);
137  SafeDelete(fEres);
138  SafeDelete(fDeltaE);
139  SafeDelete(fStopping);
140 }
141 
142 
143 
144 
152 
154 {
155  // This method copies the current state of 'this' object into 'obj'
156  // You should add here any member variables, for example:
157  // (supposing a member variable KVIonRangeTableMaterial::fToto)
158  // CastedObj.fToto = fToto;
159  // or
160  // CastedObj.SetToto( GetToto() );
161 
162  KVBase::Copy(obj);
163  //KVIonRangeTableMaterial& CastedObj = (KVIonRangeTableMaterial&)obj;
164 }
165 
166 
167 
173 
175 {
176  // Add an element to a compound material
177  // Example: to define C3F8 gas:
178  // toto.AddCompoundElement(6,12,3);
179  // toto.AddCompoundElement(9,19,8);
180 
181  fCompound = kTRUE;
182  KVNucleus n(Z, A);
183  Int_t nel = 0;
184  if (!fComposition) {
185  fComposition = new KVList;
186  }
187  else nel = fComposition->GetEntries();
188  KVNameValueList* l = new KVNameValueList(Form("Compound element %d", nel + 1));
189  l->SetValue("Z", Z);
190  l->SetValue("A", A);
191  l->SetValue("Ar", n.GetAtomicMass());
192  l->SetValue("Natoms", Natoms);
193  l->SetValue("Weight", Natoms);
194  l->SetValue("Ar*Weight", n.GetAtomicMass()*Natoms);
195  fComposition->Add(l);
196 }
197 
198 
199 
206 
208 {
209  // Add an element to a mixed material
210  // Example: to define air, assuming 78% nitrogen (N2) and 21% oxygen (O2) and 1% argon (Ar):
211  // toto.AddMixtureElement(7,14, 2, 0.78);
212  // toto.AddMixtureElement(8,16, 2, 0.21);
213  // toto.AddMixtureElement(18, 40, 2, 0.01);
214 
215  fMixture = kTRUE;
216  KVNucleus n(Z, A);
217  Int_t nel = 0;
218  if (!fComposition) fComposition = new KVList;
219  else nel = fComposition->GetEntries();
220  KVNameValueList* l = new KVNameValueList(Form("Mixture element %d", nel + 1));
221  l->SetValue("Z", Z);
222  l->SetValue("A", A);
223  l->SetValue("Ar", n.GetAtomicMass());
224  l->SetValue("Natoms", Natoms);
225  l->SetValue("Proportion", Proportion);
226  l->SetValue("Weight", Proportion * Natoms);
227  l->SetValue("Ar*Weight", n.GetAtomicMass()*Proportion * Natoms);
228  fComposition->Add(l);
229 }
230 
231 
232 
237 
239 {
240  // Correctly initialize material ready for use
241  // For compound or mixed materials, calculate normalised weights of components,
242  // effective Z and A, and molar weight of substance
243 
244  fMoleWt = 0.;
245  if (IsCompound() || IsMixture()) {
246  // mixture or compound
247  // calculate molar weight and effective Z & A
248  fZmat = fAmat = 0;
249  TIter next(fComposition);
250  KVNameValueList* nvl;
251  Double_t totW = 0;
252  while ((nvl = (KVNameValueList*)next())) {
253  Double_t arw = nvl->GetDoubleValue("Ar*Weight");
254  Double_t poid = nvl->GetDoubleValue("Weight");
255  fMoleWt += arw;
256  totW += poid;
257  fZmat += poid * nvl->GetIntValue("Z");
258  fAmat += poid * nvl->GetIntValue("A");
259  }
260  fZmat /= totW;
261  fAmat /= totW;
262  next.Reset();
263  while ((nvl = (KVNameValueList*)next())) {
264  Double_t prop = nvl->GetDoubleValue("Weight");
265  nvl->SetValue("NormWeight", prop / totW);
266  }
267  }
268  else {
269  // isotopically-pure elemental material
270  // get mass of 1 mole of element
271  KVNucleus n(fZmat, fAmat);
272  fMoleWt = n.GetAtomicMass();
273  }
274 }
275 
276 
277 
279 
281 {
282  printf("Material : %s (%s) State : %s\n",
283  GetName(), GetSymbol(), fState.Data());
284 }
285 
286 
287 
289 
291 {
292  printf("Material : %s (%s) State : %s\n",
293  GetName(), GetSymbol(), fState.Data());
294  printf("\tEffective Z=%f, A=%f ", fZmat, fAmat);
295  if (IsGas()) printf(" Molar Weight = %f g.", fMoleWt);
296  else printf(" Density = %f g/cm**3", fDens);
297  printf("\n");
298  if (IsCompound()) printf("\tCompound material:\n");
299  else if (IsMixture()) printf("\tMixed material:\n");
300  if (IsCompound() || IsMixture()) {
301  TIter next(fComposition);
302  KVNameValueList* nvl;
303  while ((nvl = (KVNameValueList*)next())) {
304  KVNucleus n(nvl->GetIntValue("Z"), nvl->GetIntValue("A"));
305  printf("\t\tElement: %s Ar=%f g. Natoms=%d", n.GetSymbol(), n.GetAtomicMass(), nvl->GetIntValue("Natoms"));
306  if (IsMixture()) printf(" Proportion=%f", nvl->GetDoubleValue("Proportion"));
307  printf("\n");
308  }
309  }
310  printf("\n\n");
311 }
312 
313 
314 
315 
322 
324 {
325  // Print range of element (in g/cm**2) as a function of incident energy (in MeV).
326  // For solid elements, print also the linear range (in cm). To change the default units,
327  // set optional argument units (e.g. to have linear range in microns, call with units = KVUnits::um).
328  // For gaseous elements, give the temperature (in degrees) and the pressure (in torr)
329  // in order to print the range in terms of length units.
330 
331  GetRangeFunction(Z, A, isoAmat);
332  printf(" **** %s Range Table ****\n\n", GetTable()->GetName());
333  ls();
334  printf(" Element: Z=%d A=%d\n\n", Z, A);
335  printf("\tENERGY (MeV)\t\tRANGE (g/cm**2)");
336  if (!IsGas() || (IsGas() && T > 0 && P > 0)) printf("\t\tLIN. RANGE");
338  printf("\n\n");
339  for (Double_t e = 0.1; (e <= 1.e+4 && e <= GetEmaxValid(Z, A)); e *= 10) {
340  printf("\t%10.5g\t\t%10.5g", e, fRange->Eval(e));
341  if (!IsGas() || (IsGas() && T > 0 && P > 0)) printf("\t\t\t%10.5g", fRange->Eval(e) / GetDensity() / units);
342  printf("\n");
343  }
344 }
345 
346 
347 
350 
351 void KVIonRangeTableMaterial::PrintComposition(ostream& output) const
352 {
353  // Print to stream the composition of this material, in a format compatible with the VEDALOSS parameter file.
354  if (IsCompound()) output << "COMPOUND";
355  else if (IsMixture()) output << "MIXTURE";
356  else output << "ELEMENT";
357  output << endl;
358  if (IsCompound() || IsMixture()) {
359  output << fComposition->GetEntries() << endl;
360  TIter next(fComposition);
361  KVNameValueList* nvl;
362  while ((nvl = (KVNameValueList*)next())) {
363  KVNucleus n(nvl->GetIntValue("Z"), nvl->GetIntValue("A"));
364  output << n.GetZ() << " " << n.GetA() << " " << nvl->GetIntValue("Natoms");
365  if (IsMixture()) output << " " << nvl->GetDoubleValue("Proportion");
366  output << endl;
367  }
368  }
369 }
370 
371 
372 
376 
378 {
379  // Returns range (in g/cm**2) of ion (Z,A) with energy E (MeV) in material.
380  // Give Amat to change default (isotopic) mass of material,
381 
382  TF1* f = GetRangeFunction(Z, A, isoAmat);
383  return f->Eval(E);
384 }
385 
386 
387 
392 
394 {
395  // Returns range (in cm) of ion (Z,A) with energy E (MeV) in material.
396  // Give Amat to change default (isotopic) mass of material,
397  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
398 
400  if (fDens > 0) return GetRangeOfIon(Z, A, E, isoAmat) / GetDensity();
401  else return 0.;
402 }
403 
404 
405 
409 
411 {
412  // Returns energy lost (in MeV) by ion (Z,A) with energy E (MeV) after thickness e (in g/cm**2).
413  // Give Amat to change default (isotopic) mass of material,
414 
415  TF1* f = GetDeltaEFunction(e, Z, A, isoAmat);
416  return f->Eval(E);
417 }
418 
419 
420 
425 
427  Double_t isoAmat, Double_t T, Double_t P)
428 {
429  // Returns energy lost (in MeV) by ion (Z,A) with energy E (MeV) after thickness e (in cm).
430  // Give Amat to change default (isotopic) mass of material,
431  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
432 
434  e *= GetDensity();
435  return GetDeltaEOfIon(Z, A, E, e, isoAmat);
436 }
437 
438 
439 
443 
445  Double_t isoAmat)
446 {
447  // Returns energy lost (in MeV) by ion (Z,A) with energy E (MeV) after thickness e (in g/cm**2).
448  // Give Amat to change default (isotopic) mass of material,
449 
450  TF1* f = GetEResFunction(e, Z, A, isoAmat);
451  return f->Eval(E);
452 }
453 
454 
455 
460 
462  Double_t isoAmat, Double_t T, Double_t P)
463 {
464  // Returns energy lost (in MeV) by ion (Z,A) with energy E (MeV) after thickness e (in cm).
465  // Give Amat to change default (isotopic) mass of material,
466  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
467 
469  e *= GetDensity();
470  return GetEResOfIon(Z, A, E, e, isoAmat);
471 }
472 
473 
474 
478 
480 {
481  // Calculates incident energy (in MeV) of an ion (Z,A) with residual energy Eres (MeV) after thickness e (in g/cm**2).
482  // Give Amat to change default (isotopic) mass of material,
483  GetRangeFunction(Z, A, isoAmat);
484  Double_t R0 = fRange->Eval(Eres) + e;
485  KVBase::GetX_status status;
486  return ProtectedGetX(fRange,R0,status);
487 }
488 
489 
490 
495 
497  Double_t isoAmat, Double_t T, Double_t P)
498 {
499  // Calculates incident energy (in MeV) of an ion (Z,A) with residual energy Eres (MeV) after thickness e (in cm).
500  // Give Amat to change default (isotopic) mass of material,
501  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
502 
504  e *= GetDensity();
505  return GetEIncFromEResOfIon(Z, A, Eres, e, isoAmat);
506 }
507 
508 
509 
513 
515 {
516  // Calculates incident energy (in MeV) of an ion (Z,A) from energy loss DeltaE (MeV) in thickness e (in g/cm**2).
517  // Give Amat to change default (isotopic) mass of material,
518  GetDeltaEFunction(e, Z, A, isoAmat);
519  Double_t e1, e2;
520  fDeltaE->GetRange(e1, e2);
521  switch (type) {
523  e2 = GetEIncOfMaxDeltaEOfIon(Z, A, e, isoAmat);
524  break;
526  e1 = GetEIncOfMaxDeltaEOfIon(Z, A, e, isoAmat);
527  break;
528  }
529  KVBase::GetX_status status;
530  return ProtectedGetX(fDeltaE,DeltaE,status, e1, e2);
531 }
532 
533 
534 
539 
541  Double_t isoAmat, Double_t T, Double_t P)
542 {
543  // Calculates incident energy (in MeV) of an ion (Z,A) from energy loss DeltaE (MeV) in thickness e (in cm).
544  // Give Amat to change default (isotopic) mass of material,
545  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
546 
548  e *= GetDensity();
549  return GetEIncFromDeltaEOfIon(Z, A, deltaE, e, type, isoAmat);
550 }
551 
552 
553 
559 
561 {
562  // Calculate incident energy (in MeV) for ion (Z,A) for which the range is equal to the
563  // given thickness e (in g/cm**2). At this energy the residual energy of the ion is (just) zero,
564  // for all energies above this energy the residual energy is > 0.
565  // Give Amat to change default (isotopic) mass of material.
566 
567  KVBase::GetX_status status;
568  return ProtectedGetX(GetRangeFunction(Z, A, isoAmat),e,status);
569 }
570 
571 
572 
579 
581 {
582  // Calculate incident energy (in MeV) for ion (Z,A) for which the range is equal to the
583  // given thickness e (in cm). At this energy the residual energy of the ion is (just) zero,
584  // for all energies above this energy the residual energy is > 0.
585  // Give Amat to change default (isotopic) mass of material.
586  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
587 
589  e *= GetDensity();
590  return GetPunchThroughEnergy(Z, A, e, isoAmat);
591 }
592 
593 
594 
598 
600 {
601  // Calculate maximum energy loss (in MeV) of ion (Z,A) in given thickness e (in g/cm**2).
602  // Give Amat to change default (isotopic) mass of material.
603 
604  return GetDeltaEFunction(e, Z, A, isoAmat)->GetMaximum();
605 }
606 
607 
608 
613 
615 {
616  // Calculate incident energy (in MeV) corresponding to maximum energy loss of ion (Z,A)
617  // in given thickness e (in g/cm**2).
618  // Give Amat to change default (isotopic) mass of material.
619 
620  return GetDeltaEFunction(e, Z, A, isoAmat)->GetMaximumX();
621 }
622 
623 
624 
629 
631 {
632  // Calculate maximum energy loss (in MeV) of ion (Z,A) in given thickness e (in cm).
633  // Give Amat to change default (isotopic) mass of material.
634  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
635 
637  e *= GetDensity();
638  return GetMaxDeltaEOfIon(Z, A, e, isoAmat);
639 }
640 
641 
642 
648 
650 {
651  // Calculate incident energy (in MeV) corresponding to maximum energy loss of ion (Z,A)
652  // in given thickness e (in cm).
653  // Give Amat to change default (isotopic) mass of material.
654  // give temperature (degrees C) & pressure (torr) (T,P) for gaseous materials.
655 
657  e *= GetDensity();
658  return GetEIncOfMaxDeltaEOfIon(Z, A, e, isoAmat);
659 }
660 
661 
662 
667 
669 {
670  // Create and return pointer to a TGeoMaterial or TGeoMixture (for compound materials)
671  // with the properties of this material.
672  // gGeoManager must exist.
673 
674  TGeoMaterial* gmat = 0x0;
675  if (!gGeoManager) return gmat;
676  if (IsCompound()) {
677  gmat = new TGeoMixture(GetTitle(), GetComposition()->GetEntries(), GetDensity());
678  TIter next(GetComposition());
679  KVNameValueList* nvl;
680  while ((nvl = (KVNameValueList*)next())) {
681  KVNucleus n(nvl->GetIntValue("Z"), nvl->GetIntValue("A"));
682  TGeoElement* gel = gGeoManager->GetElementTable()->FindElement(n.GetSymbol("EL"));
683  float poids = nvl->GetDoubleValue("NormWeight");
684  ((TGeoMixture*)gmat)->AddElement(gel, poids);
685  }
686  }
687  else {
688  gmat = new TGeoMaterial(GetTitle(), GetMass(), GetZ(), GetDensity());
689  }
690  // set state of material
693  return gmat;
694 }
695 
696 
int Int_t
#define SafeDelete(p)
#define d(i)
#define f(i)
#define e(i)
char Char_t
constexpr Bool_t kFALSE
double Double_t
constexpr Bool_t kTRUE
const char Option_t
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h prop
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
char name[80]
R__EXTERN TGeoManager * gGeoManager
char * Form(const char *fmt,...)
Base class for KaliVeda framework.
Definition: KVBase.h:140
GetX_status
Definition: KVBase.h:329
static Double_t ProtectedGetX(const TF1 *func, Double_t val, GetX_status &status, std::optional< Double_t > xmin={}, std::optional< Double_t > xmax={})
Definition: KVBase.cpp:1622
void Copy(TObject &) const override
Make a copy of this object.
Definition: KVBase.cpp:396
Material for use in energy loss & range calculations.
virtual Double_t GetLinearEIncOfMaxDeltaEOfIon(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
virtual Double_t GetLinearPunchThroughEnergy(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
void Print(Option_t *="") const override
virtual Double_t GetDeltaEOfIon(Int_t Z, Int_t A, Double_t E, Double_t e, Double_t isoAmat=0.)
void AddCompoundElement(Int_t Z, Int_t A, Int_t Natoms)
virtual Double_t GetLinearMaxDeltaEOfIon(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
virtual Double_t GetLinearEIncFromDeltaEOfIon(Int_t Z, Int_t A, Double_t DeltaE, Double_t e, enum KVIonRangeTable::SolType type=KVIonRangeTable::kEmax, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
virtual Double_t GetEResOfIon(Int_t Z, Int_t A, Double_t E, Double_t e, Double_t isoAmat=0.)
virtual Double_t GetLinearRangeOfIon(Int_t Z, Int_t A, Double_t E, Double_t isoAmat=0, Double_t T=-1., Double_t P=-1.)
TGeoMaterial * GetTGeoMaterial() const
const KVIonRangeTable * GetTable() const
virtual TF1 * GetEResFunction(Double_t e, Int_t Z, Int_t A, Double_t isoAmat=0)=0
const Char_t * GetSymbol() const
virtual Float_t GetEmaxValid(Int_t, Int_t) const
virtual TF1 * GetDeltaEFunction(Double_t e, Int_t Z, Int_t A, Double_t isoAmat=0)=0
void AddMixtureElement(Int_t Z, Int_t A, Int_t Natoms, Double_t Proportion)
KVIonRangeTableMaterial()
Default constructor.
virtual Double_t GetEIncFromDeltaEOfIon(Int_t Z, Int_t A, Double_t DeltaE, Double_t e, enum KVIonRangeTable::SolType type=KVIonRangeTable::kEmax, Double_t isoAmat=0.)
virtual Double_t GetLinearDeltaEOfIon(Int_t Z, Int_t A, Double_t E, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
virtual TF1 * GetRangeFunction(Int_t Z, Int_t A, Double_t isoAmat=0)=0
virtual ~KVIonRangeTableMaterial()
Destructor.
void PrintComposition(std::ostream &) const
Print to stream the composition of this material, in a format compatible with the VEDALOSS parameter ...
virtual Double_t GetEIncFromEResOfIon(Int_t Z, Int_t A, Double_t Eres, Double_t e, Double_t isoAmat=0.)
void Copy(TObject &) const override
virtual Double_t GetLinearEResOfIon(Int_t Z, Int_t A, Double_t E, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
void ls(Option_t *="") const override
virtual Double_t GetPunchThroughEnergy(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0.)
virtual Double_t GetLinearEIncFromEResOfIon(Int_t Z, Int_t A, Double_t Eres, Double_t e, Double_t isoAmat=0., Double_t T=-1., Double_t P=-1.)
void SetTemperatureAndPressure(Double_t T, Double_t P)
void PrintRangeTable(Int_t Z, Int_t A, Double_t isoAmat=0, Double_t units=KVUnits::cm, Double_t T=-1, Double_t P=-1)
virtual Double_t GetEIncOfMaxDeltaEOfIon(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0.)
virtual Double_t GetMaxDeltaEOfIon(Int_t Z, Int_t A, Double_t e, Double_t isoAmat=0.)
virtual Double_t GetRangeOfIon(Int_t Z, Int_t A, Double_t E, Double_t isoAmat=0.)
Abstract base class for calculation of range & energy loss of charged particles in matter.
std::optional< double > get_element_density(int z) const
Extended TList class which owns its objects by default.
Definition: KVList.h:22
Handles lists of named parameters with different types, a list of KVNamedParameter objects.
Int_t GetIntValue(const Char_t *name) const
Double_t GetDoubleValue(const Char_t *name) const
void SetValue(const Char_t *name, value_type value)
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:108
void Add(TObject *obj) override
virtual Int_t GetEntries() const
virtual void GetRange(Double_t &xmin, Double_t &xmax) const
virtual Double_t Eval(Double_t x, Double_t y=0, Double_t z=0, Double_t t=0) const
virtual Double_t GetMaximum(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
virtual Double_t GetMaximumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
TGeoElement * FindElement(const char *name) const
TGeoElementTable * GetElementTable()
void SetState(EGeoMaterialState state)
void Reset()
const char * GetName() const override
const char * GetTitle() const override
const char * Data() const
const Int_t n
double T(double x)
constexpr Double_t E()
#define R0(v, w, x, y, z, i)
TLine l
ClassImp(TPyArg)