4#include "KVRangeYanez.h"
5#include "KVRangeYanezMaterial.h"
6#include "KVElementDensity.h"
7#include "KVElementDensityTable.h"
8#include "KVNDTManager.h"
11#include "KVNumberList.h"
12#include <KVSystemDirectory.h>
13#include <KVSystemFile.h>
43 "Interface to Range dE/dx and range library (Ricardo Yanez)")
64 DataFilePaths.
Begin(
" ");
67 while (!DataFilePaths.
End()) {
68 nextPath = DataFilePaths.
Next();
69 if (nextPath == lastPath)
break;
145 printf(
"\nEnergy loss & range tables loaded for 0 materials.\n");
223 Error(
"AddElementalMaterial",
224 "Nuclear data tables have not been initialised");
229 Error(
"AddElementalMaterial",
230 "No element found in ElementDensity NDT-table with Z=%d", z);
234 if (ed->
IsGas()) state =
"gas";
274 if (density > 0) state =
"solid";
277 for (
int i = 0; i < nelem; i++) {
317 if (density > 0) state =
"solid";
320 for (
int i = 0; i < nelem; i++) {
354 Error(
"MakeNaturallyOccuringElementMixture",
355 "Nuclear data tables have not been initialised");
360 Error(
"AddElementalMaterial",
361 "No element found in ElementDensity NDT-table with Z=%d", z);
368 while (!isotopes.
End()) {
377 if (ed->
IsGas()) state =
"gas";
384 while (!isotopes.
End()) {
406 Error(
"ReadPredefinedMaterials",
"Cannot open %s for reading", DataFilePath.
Data());
409 Info(
"ReadPredefinedMaterials",
"Reading materials in file : %s",
filename);
417 while (filestream.good()) {
418 line.ReadLine(filestream);
419 if (filestream.good()) {
420 if (
line.BeginsWith(
"//"))
continue;
421 if (
line.BeginsWith(
"COMPOUND")) {
425 else if (
line.BeginsWith(
"MIXTURE")) {
429 else if (
line.BeginsWith(
"ELEMENT")) {
441 line.ReadLine(filestream);
442 while (filestream.good() && !
line.IsWhitespace() &&
line !=
"\n") {
445 if (next ==
"name")
name =
line.Next();
446 else if (next ==
"symbol") symbol =
line.Next();
447 else if (next ==
"state") state =
line.Next();
448 else if (next ==
"density") density =
line.Next().Atof();
449 else if (next ==
"nelem") {
450 nelem =
line.Next().Atoi();
451 for (
int i = 0; i < nelem; i++) {
452 line.ReadLine(filestream);
454 element[i] =
line.Next();
459 natoms[i] =
line.Next().Atoi();
460 if (mixture) proportion[i] =
line.Next().Atof();
472 line.ReadLine(filestream);
473 while (filestream.good() && !
line.IsWhitespace() &&
line !=
"\n") {
476 if (next ==
"name")
name =
line.Next();
477 else if (next ==
"symbol") symbol =
line.Next();
478 else if (next ==
"state") state =
line.Next();
515 matfilename +=
".dat";
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 filename
char * Form(const char *fmt,...)
R__EXTERN TSystem * gSystem
static const Char_t * GetWORKDIRFilePath(const Char_t *namefile="")
static Bool_t SearchAndOpenKVFile(const Char_t *name, KVSQLite::database &dbfile, const Char_t *kvsubdir="")
virtual const Char_t * GetType() const
Atomic element with name, symbol and density.
const Char_t * GetElementName() const
const Char_t * GetElementSymbol() const
Extended version of ROOT THashList.
Material for use in energy loss & range calculations.
void AddCompoundElement(Int_t Z, Int_t A, Int_t Natoms)
void AddMixtureElement(Int_t Z, Int_t A, Int_t Natoms, Double_t Proportion)
virtual void Initialize()
Abstract base class for calculation of range & energy loss of charged particles in matter.
KVNuclData * GetData(Int_t zz, Int_t aa, const Char_t *name) const
Double_t GetValue() const
Description of properties and kinematics of atomic nuclei.
static Int_t IsMassGiven(const Char_t *)
KVNumberList GetKnownARange(Int_t z=-1, Double_t tmin=0) const
Double_t GetAbundance(Int_t z=-1, Int_t a=-1) const
Int_t GetZ() const
Return the number of proton / atomic number.
Strings used to represent a set of ranges of values.
Description of absorber for the Range dE/dx and range library.
Interface to Range dE/dx and range library.
virtual KVIonRangeTableMaterial * AddMixedMaterial(const Char_t *name, const Char_t *symbol, Int_t nelem, Int_t *z, Int_t *a, Int_t *natoms, Double_t *weight, Double_t density=-1.0) const
Bool_t fDoNotSaveMaterials
TString fLocalMaterialsDirectory
static KVHashList * fMaterials
static list of all currently defined materials
void SaveMaterial(KVIonRangeTableMaterial *mat) const
TObjArray * GetListOfMaterials()
KVIonRangeTableMaterial * GetMaterialWithNameOrType(const Char_t *material) const
void Print(Option_t *="") const
void Copy(TObject &) const
Bool_t ReadMaterials(const Char_t *filename) const
Read materials from file whose name is given.
virtual KVIonRangeTableMaterial * AddCompoundMaterial(const Char_t *name, const Char_t *symbol, Int_t nelem, Int_t *z, Int_t *a, Int_t *natoms, Double_t density=-1.0) const
KVIonRangeTableMaterial * MakeNaturallyOccuringElementMixture(Int_t z, Int_t &a) const
virtual KVIonRangeTableMaterial * AddElementalMaterial(Int_t z, Int_t a=0) const
void CheckMaterialsList() const
virtual TObject * FindObject(const char *name) const
virtual void SetOwner(Bool_t enable=kTRUE)
virtual TObject * FindObjectByType(const Char_t *) const
virtual void Add(TObject *obj)
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
void Begin(TString delim) const
KVString Next(Bool_t strip_whitespace=kFALSE) const
Extension of ROOT TSystemDirectory class, handling browsing directories on disk.
virtual TList * GetListOfFiles() const
Extended ROOT TSystemFile with added info on file size etc.
const Char_t * GetFullPath() const
virtual void Print(Option_t *option, const char *wildcard, Int_t recurse=1) const
void SetName(const char *name)
virtual Int_t GetEntries() const
virtual void SetOwner(Bool_t enable=kTRUE)
virtual const char * GetValue(const char *name, const char *dflt) const
void Copy(TObject &named) const override
const char * GetName() const override
const char * GetTitle() const override
void Add(TObject *obj) override
virtual void Error(const char *method, const char *msgfmt,...) const
virtual void Info(const char *method, const char *msgfmt,...) const
const char * Data() const
TString & ReplaceAll(const char *s1, const char *s2)
virtual int Chmod(const char *file, UInt_t mode)
virtual int mkdir(const char *name, Bool_t recursive=kFALSE)
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)