15#ifndef ALICEO2_BASE_MATERIALMANAGER_H_
16#define ALICEO2_BASE_MATERIALMANAGER_H_
20#include <unordered_map>
21#include <initializer_list>
81 void Medium(
const char* modname, Int_t numed,
const char*
name, Int_t nmat, Int_t isvol, Int_t ifield,
Float_t fieldm,
102 const std::initializer_list<std::pair<EProc, int>>& parIDValMap)
104 int globalindex =
getMediumID(modname, localindex);
105 if (globalindex != -1) {
117 void DefaultCuts(
const std::initializer_list<std::pair<ECut, Float_t>>& parIDValMap)
125 void SpecialCuts(
const char* modname,
int localindex,
126 const std::initializer_list<std::pair<ECut, Float_t>>& parIDValMap);
154 int getMediumID(
const char* modname,
int imed)
const;
157 TGeoMedium*
getTGeoMedium(
const std::string& modname,
int localid);
185 void getDefaultCuts(std::vector<std::pair<ECut, Float_t>>& cutVector);
188 void getSpecialProcesses(
int globalindex, std::vector<std::pair<EProc, int>>& processVector);
191 void getSpecialProcesses(
const char* modname,
int localindex, std::vector<std::pair<EProc, int>>& processVector);
194 void getSpecialCuts(
int globalindex, std::vector<std::pair<ECut, Float_t>>& cutVector);
197 void getSpecialCuts(
const char* modname,
int localindex, std::vector<std::pair<ECut, Float_t>>& cutVector);
217 bool mDensityMapInitialized =
false;
218 std::unordered_map<std::string, float> mDensityMap;
220 void initDensityMap();
221 float getDensity(std::string
const& modname);
225 void Processes(
ESpecial special,
int globalindex,
const std::initializer_list<std::pair<EProc, int>>& parIDValMap);
226 void Cuts(
ESpecial special,
int globalindex,
const std::initializer_list<std::pair<ECut, Float_t>>& parIDValMap);
231 void insertMaterialName(
const char* uniquename,
int index);
232 void insertMediumName(
const char* uniquename,
int index);
233 void insertTGeoMedium(std::string modname,
int localindex);
236 std::map<std::string, std::map<int, int>>
238 std::map<std::string, std::map<int, int>> mMediumMap;
240 std::map<int, std::map<EProc, int>> mMediumProcessMap;
241 std::map<int, std::map<ECut, Float_t>> mMediumCutMap;
242 std::map<ECut, Float_t> mDefaultCutMap;
243 std::map<EProc, int> mDefaultProcessMap;
246 std::map<std::pair<std::string, int>, TGeoMedium*> mTGeoMediumMap;
250 std::map<std::string, int> mMaterialNameToGlobalIndexMap;
251 std::map<std::string, int> mMediumNameToGlobalIndexMap;
263 const static std::unordered_map<ECut, const char*> mCutIDToName;
265 const static std::unordered_map<EProc, const char*> mProcessIDToName;
268 bool mApplySpecialProcesses =
true;
269 bool mApplySpecialCuts =
true;
271 bool mLowNeut =
false;
279 auto it = mProcessIDToName.find(
process);
280 if (it != mProcessIDToName.end()) {
288 auto it = mCutIDToName.find(cut);
289 if (it != mCutIDToName.end()) {
void printCuts(std::ostream &stream) const
Print all cuts for all media as well as defaults.
void SpecialProcesses(const char *modname, int localindex, const std::initializer_list< std::pair< EProc, int > > &parIDValMap)
void getSpecialCuts(int globalindex, std::vector< std::pair< ECut, Float_t > > &cutVector)
Get special cuts for global medium ID.
void SpecialCuts(const char *modname, int localindex, const std::initializer_list< std::pair< ECut, Float_t > > &parIDValMap)
const char * getCutName(ECut cut) const
void getMediumIDMappingAsVector(const char *modname, std::vector< int > &mapping) const
void getDefaultProcesses(std::vector< std::pair< EProc, int > > &processVector)
Fill vector with default processes.
void printProcesses(std::ostream &stream) const
Print all processes for all media as well as defaults.
void enableSpecialCuts(bool val=true)
void writeCutsAndProcessesToJSON(std::string const &filename="")
void loadCutsAndProcessesFromFile(const char *modname, const char *filename)
load cuts and process flags from a data file (like AliRoot did)
void loadCutsAndProcessesFromJSON(ESpecial special=ESpecial::kFALSE, std::string const &filename="")
void getMediaWithSpecialProcess(EProc process, std::vector< int > &mediumProcessVector) const
get global medium IDs where special process is set along with process value
int getMediumID(const char *modname, int imed) const
bool specialProcessesEnabled() const
void getSpecialProcesses(int globalindex, std::vector< std::pair< EProc, int > > &processVector)
Get special processes for global medium ID.
static MaterialManager & Instance()
ClassDefNV(MaterialManager, 0)
const char * getMediumNameFromMediumID(int globalindex) const
Get medium name from global medium ID.
void DefaultCuts(const std::initializer_list< std::pair< ECut, Float_t > > &parIDValMap)
void getMediaWithSpecialCut(ECut cut, std::vector< Float_t > &mediumCutVector) const
get global medium IDs where special cut is set along with cut value
static void printContainingMedia(std::string const &volumename)
bool specialCutsEnabled() const
void Mixture(const char *modname, Int_t imat, const char *name, Float_t *a, Float_t *z, Float_t dens, Int_t nlmat, Float_t *wmat)
void SpecialProcess(const char *modname, int localindex, EProc parID, int val)
Custom setting of process or cut given parameter name and value.
void printMaterials() const
void DefaultCut(ECut parID, Float_t val)
set default cut
void Medium(const char *modname, Int_t numed, const char *name, Int_t nmat, Int_t isvol, Int_t ifield, Float_t fieldm, Float_t tmaxfd, Float_t stemax, Float_t deemax, Float_t epsil, Float_t stmin, Float_t *ubuf=nullptr, Int_t nbuf=0)
void DefaultProcess(EProc parID, int val)
set default process
const char * getProcessName(EProc process) const
Get the names of processes and cuts providing an respective enum member.
void SpecialCut(const char *modname, int localindex, ECut parID, Float_t val)
Custom setting of process or cut given parameter name and value.
void SetLowEnergyNeutronTransport(bool flag)
Set flag fro low energy neutron transport.
void Material(const char *modname, Int_t imat, const char *name, Float_t a, Float_t z, Float_t dens, Float_t radl, Float_t absl, Float_t *buf=nullptr, Int_t nwbuf=0)
void enableSpecialProcesses(bool val=true)
Set flags whether to use special cuts and process settings.
const char * getModuleFromMediumID(int globalindex) const
Get module name which has medium of a certain global medium ID.
ESpecial
scoped enum to decide whether settings are done globally or for a certain medium
int getMaterialID(const char *modname, int imat) const
void getDefaultCuts(std::vector< std::pair< ECut, Float_t > > &cutVector)
Fill vector with default cuts.
TGeoMedium * getTGeoMedium(const std::string &modname, int localid)
void DefaultProcesses(const std::initializer_list< std::pair< EProc, int > > &parIDValMap)
GLuint const GLchar * name
GLboolean GLboolean GLboolean GLboolean a
GLenum GLuint GLenum GLsizei const GLchar * buf
GLdouble GLdouble GLdouble z
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...