REST-for-Physics
v2.3
Rare Event Searches ToolKit for Physics
|
A metadata class accessing the Henke database to load reflectivity data.
TRestAxionOpticsMirror is a class that allows to define specific mirror properties, such as the layer material and thickness, the substrate material, or the surface roughness through different class metadata members.
The following metadata parameters are used to define the mirror properties:
Single
and Bilayer
types have been implemented.The metadata members defined will generate a request to the Henke database to retrieve reflectivity and transmission values as a function of the angle and energy of the incident photon. Once the metadata members have been defined, it is necessary to call the method TRestAxionOpticsMirror::LoadTables in order to initialize the reflectivity and transmission tables.
The download process will take a reasonable amount of time, and after all the data files have been downloaded, this class will generate a unique table containning the reflectivity as a function of angle and energy. The tables will be exported to the REST user path so that in future calls these tables will be directly loaded without requiring to download them again.
The data will be downloaded from Henke with a 0.01 degrees and 30 eV precision. Therefore, the tables will contain 901 columns with the angles between 0 and 9 degrees, and 500 rows with energies between 30eV and 15keV.
The main functionality of this class is provided by the TRestAxionOpticsMirror::GetReflectivity and TRestAxionOpticsMirror::GetTransmission methods. Those methods will return the reflectivity or transmission values for the given angle (degrees) and energy (keV) given in the argument.
The following code shows how to define the mirror properties and launch the drawing of few plots showing the reflectivity as a function of incident angle and energy.
Once the mirror data tables have been loaded we may get the reflectivity or transmission at a given angle (in degrees) and energy (in keV).
Alternatively we may use a RML definition and pass some options to the TRestAxionOpticMirror::DrawOpticsProperties to define what it will be drawn.
The previous code will draw the reflectivity as a function of the angle in the 0 to 9 degrees range at three different energies (4,7,10)keV, and as a function of the energy in the 0 to 15 keV range at four different angles (0.25,0.5,0.75,1) degrees. The lower y-axis value will be fixed to 1.e-4. See the method documentation for more details.
RESTsoft - Software for Rare Event Searches with TPCs
History of developments:
2022-April: First concept and implementation of TRestAxionOpticsMirror class. Javier Galan
Definition at line 32 of file TRestAxionOpticsMirror.h.
#include <TRestAxionOpticsMirror.h>
Public Member Functions | |
TCanvas * | DrawOpticsProperties (std::string options="", Double_t lowRange=1.e-9, Double_t lowRange2=1.e-3) |
A method that creates a canvas where the mirror optics properties are drawn. It generates two plots, on the left the reflectivity as a function of the angle, and on the right the reflectivity as a function of the energy. More... | |
Double_t | GetReflectivity (const Double_t angle, const Double_t energy) |
It returns the interpolated reflectivity for a given angle (in degrees) and a given energy (in keV). | |
Double_t | GetTransmission (const Double_t angle, const Double_t energy) |
It returns the interpolated transmission for a given angle (in degrees) and a given energy (in keV). | |
void | Initialize () |
Initialization of TRestAxionOpticsMirror members. | |
void | LoadTables () |
Loads the reflectivity table. | |
void | PrintMetadata () |
Prints on screen the information about the metadata members of TRestAxionOpticsMirror. | |
void | SetBottomLayerMaterial (const std::string &layer) |
void | SetBottomLayerRoughness (const std::string &roughness) |
void | SetBottomLayerThickness (const std::string &thickness) |
void | SetLayerMaterial (const std::string &layer) |
void | SetLayerRoughness (const std::string &roughness) |
void | SetLayerThickness (const std::string &thickness) |
void | SetMirrorType (const std::string &type) |
void | SetSubstrateMaterial (const std::string &substrate) |
void | SetTopLayerMaterial (const std::string &layer) |
void | SetTopLayerRoughness (const std::string &roughness) |
void | SetTopLayerThickness (const std::string &thickness) |
TRestAxionOpticsMirror () | |
Default constructor. | |
TRestAxionOpticsMirror (const char *cfgFileName, std::string name="") | |
Constructor loading data from a config file. More... | |
~TRestAxionOpticsMirror () | |
Default destructor. | |
Public Member Functions inherited from TRestMetadata | |
void | AddLog (std::string log="", bool print=true) |
Add logs to messageBuffer. | |
void | DoNotStore () |
If this method is called the metadata information will not be stored in disk. | |
TVector2 | Get2DVectorParameterWithUnits (std::string parName, TVector2 defaultValue=TVector2(-1, -1)) |
TVector3 | Get3DVectorParameterWithUnits (std::string parName, TVector3 defaultValue=TVector3(-1, -1, -1)) |
TString | GetCommit () |
Returns the REST commit value stored in fCommit. | |
std::string | GetConfigBuffer () |
Returns the config section of this class. | |
std::string | GetDataMemberValue (std::string memberName) |
Get the value of data member as string. More... | |
std::vector< std::string > | GetDataMemberValues (std::string memberName, Int_t precision=0) |
Get the value of datamember as a vector of strings. More... | |
TString | GetDataPath () |
Returns a std::string with the path used for data storage. | |
Double_t | GetDblParameterWithUnits (std::string parName, Double_t defaultValue=PARAMETER_NOT_FOUND_DBL) |
Gets the value of the parameter name parName, after applying unit conversion. More... | |
Bool_t | GetError () const |
It returns true if an error was identified by a derived metadata class. | |
TString | GetErrorMessage () |
Returns a std::string containing the error message. | |
TString | GetLibraryVersion () |
Returns the REST libraty version stored in fLibraryVersion. | |
TString | GetMainDataPath () |
Gets a std::string with the path used for data storage. | |
Int_t | GetNumberOfErrors () const |
Int_t | GetNumberOfWarnings () const |
std::string | GetParameter (std::string parName, TString defaultValue=PARAMETER_NOT_FOUND_STR) |
Returns corresponding REST Metadata parameter from multiple sources. More... | |
std::string | GetSectionName () |
Returns the section name of this class, defined at the beginning of fSectionName. | |
TRestStringOutput::REST_Verbose_Level | GetVerboseLevel () |
returns the verboselevel in type of REST_Verbose_Level enumerator | |
TString | GetVerboseLevelString () |
returns the verbose level in type of TString More... | |
TString | GetVersion () |
Returns the REST version stored in fVersion. | |
Int_t | GetVersionCode () |
UInt_t | GetVersionMajor () const |
UInt_t | GetVersionMinor () const |
UInt_t | GetVersionPatch () const |
Bool_t | GetWarning () const |
It returns true if an error was identified by a derived metadata class. | |
TString | GetWarningMessage () |
Returns a std::string containing the warning message. | |
TRestMetadata * | InstantiateChildMetadata (int index, std::string pattern="") |
This method will retrieve a new TRestMetadata instance of a child element of the present TRestMetadata instance based on the index given by argument, which defines the element order to be retrieved, 0 for first element found, 1 for the second element found, etc. More... | |
TRestMetadata * | InstantiateChildMetadata (std::string pattern="", std::string name="") |
This method will retrieve a new TRestMetadata instance of a child element of the present TRestMetadata instance based on the name given by argument. More... | |
Bool_t | isCleanState () const |
Bool_t | isOfficialRelease () const |
Int_t | LoadConfigFromBuffer () |
Initialize data from a string element buffer. More... | |
Int_t | LoadConfigFromElement (TiXmlElement *eSectional, TiXmlElement *eGlobal, std::map< std::string, std::string > envs={}) |
Main starter method. More... | |
Int_t | LoadConfigFromFile (const std::string &configFilename, const std::string §ionName="") |
Give the file name, find out the corresponding section. Then call the main starter. | |
virtual void | Merge (const TRestMetadata &) |
TRestMetadata & | operator= (const TRestMetadata &) |
void | Print () |
Implementing TObject::Print() method. | |
void | PrintConfigBuffer () |
Print the config xml section stored in the class. More... | |
void | PrintMessageBuffer () |
Print the buffered message. | |
void | PrintTimeStamp (Double_t timeStamp) |
Print the current time on local machine. More... | |
void | SetConfigFile (std::string configFilename) |
set config file path from external | |
void | SetError (std::string message="", bool print=true, int maxPrint=5) |
A metadata class may use this method to signal that something went wrong. | |
void | SetHostmgr (TRestManager *m) |
Set the host manager for this class. | |
void | SetSectionName (std::string sName) |
set the section name, clear the section content | |
void | SetVerboseLevel (TRestStringOutput::REST_Verbose_Level v) |
sets the verbose level | |
void | SetWarning (std::string message="", bool print=true, int maxPrint=5) |
A metadata class may use this method to signal that something went wrong. | |
void | Store () |
If this method is called the metadata information will be stored in disk. | |
TRestMetadata (const TRestMetadata &) | |
virtual void | UpdateMetadataMembers () |
Method to allow implementation of specific metadata members updates at inherited classes. | |
virtual Int_t | Write (const char *name=nullptr, Int_t option=0, Int_t bufsize=0) |
overwriting the write() method with fStore considered | |
void | WriteConfigBuffer (std::string fName) |
Writes the config buffer to a file in append mode. | |
~TRestMetadata () | |
TRestMetadata default destructor. | |
Private Member Functions | |
std::string | DownloadHenkeFile () |
It downloads the reflectivity file for the present mirror properties defined at the metadata members. More... | |
Int_t | ExportTables () |
It is a private method to export the tables to a binary file once the tables have been downloaded from Henke database. | |
std::string | GetReflectivityFilename () |
It returns the corresponding reflectivity filename for the mirror properties defined in the data members. | |
std::string | GetTransmissionFilename () |
It returns the corresponding transmission filename for the mirror properties defined in the data members. | |
Private Attributes | |
TCanvas * | fCanvas = nullptr |
A canvas to insert the optic properties drawing. | |
std::map< std::string, std::string > | fHenkeKeys |
A set of key-value pairs sent to the Henke website for data request. | |
std::string | fLayerBottom = "" |
The mirror bottom layer material (chemical formula). Only used for "Bilayer" mirror type. | |
std::string | fLayerThicknessBottom = "" |
The bottom layer thickness in nm. Only used for "Bilayer" mirror type. | |
std::string | fLayerThicknessTop = "30" |
The layer thickness in nm. | |
std::string | fLayerTop = "C" |
The mirror layer material (chemical formula). | |
std::string | fMirrorType = "Single" |
The mirror type (Thick, Single, Bilayer, Multilayer). Only Single/Bilayer is supported now. | |
std::vector< std::vector< Float_t > > | fReflectivityTable |
The reflectivity loaded as a table with angle versus energy. | |
std::string | fSigmaBottom = "" |
Bottom layer surface roughness in nm. Only used for "Bilayer" mirror type. | |
std::string | fSigmaTop = "0" |
Layer surface roughness in nm. | |
std::string | fSubstrate = "SiO2" |
The substrate material. | |
std::vector< std::vector< Float_t > > | fTransmissionTable |
The transmission loaded as a table with angle versus energy. | |
Additional Inherited Members | |
Protected Member Functions inherited from TRestMetadata | |
std::string | ElementToString (TiXmlElement *ele) |
Convert an TiXmlElement object to string. More... | |
TVector2 | Get2DVectorParameterWithUnits (std::string parName, TiXmlElement *e, TVector2 defaultValue=TVector2(-1, -1)) |
TVector3 | Get3DVectorParameterWithUnits (std::string parName, TiXmlElement *e, TVector3 defaultValue=TVector3(-1, -1, -1)) |
Double_t | GetDblParameterWithUnits (std::string parName, TiXmlElement *e, Double_t defaultVal=PARAMETER_NOT_FOUND_DBL) |
TiXmlElement * | GetElement (std::string eleDeclare, TiXmlElement *e=nullptr) |
Get an xml element from a given parent element, according to its declaration. | |
TiXmlElement * | GetElementFromFile (std::string configFilename, std::string NameOrDecalre="") |
Open an xml encoded file and find its element. More... | |
TiXmlElement * | GetElementWithName (std::string eleDeclare, std::string eleName) |
Get an xml element from the default location, according to its declaration and its field "name". | |
TiXmlElement * | GetElementWithName (std::string eleDeclare, std::string eleName, TiXmlElement *e) |
Get an xml element from a given parent element, according to its declaration and its field "name". | |
std::string | GetFieldValue (std::string fieldName, std::string definition, size_t fromPosition=0) |
Gets field value in an xml element string by parsing it as TiXmlElement. | |
std::string | GetFieldValue (std::string parName, TiXmlElement *e) |
Returns the field value of an xml element which has the specified name. More... | |
std::string | GetKEYDefinition (std::string keyName) |
Gets the first key definition for keyName found inside buffer starting at fromPosition. More... | |
std::string | GetKEYDefinition (std::string keyName, size_t &Position) |
std::string | GetKEYDefinition (std::string keyName, size_t &Position, std::string buffer) |
std::string | GetKEYDefinition (std::string keyName, std::string buffer) |
std::string | GetKEYStructure (std::string keyName) |
Gets the first key structure for keyName found inside buffer after fromPosition. More... | |
std::string | GetKEYStructure (std::string keyName, size_t &Position) |
std::string | GetKEYStructure (std::string keyName, size_t &Position, std::string buffer) |
std::string | GetKEYStructure (std::string keyName, size_t &Position, TiXmlElement *ele) |
std::string | GetKEYStructure (std::string keyName, std::string buffer) |
TiXmlElement * | GetNextElement (TiXmlElement *e) |
Get the next sibling xml element of this element, with same eleDeclare. | |
std::string | GetParameter (std::string parName, size_t &pos, std::string inputString) |
Returns the value for the parameter name parName found in inputString. More... | |
std::string | GetParameter (std::string parName, TiXmlElement *e, TString defaultValue=PARAMETER_NOT_FOUND_STR) |
Returns the value for the parameter named parName in the given section. More... | |
std::pair< std::string, std::string > | GetParameterAndUnits (std::string parname, TiXmlElement *e=nullptr) |
Returns the unit string of the given parameter of the given xml section. More... | |
std::map< std::string, std::string > | GetParametersList () |
It retrieves a map of all parameter:value found in the metadata class. | |
TString | GetSearchPath () |
virtual void | InitFromConfigFile () |
To make settings from rml file. This method must be implemented in the derived class. | |
virtual void | InitFromRootFile () |
Method called after the object is retrieved from root file. | |
virtual Int_t | LoadSectionMetadata () |
This method does some preparation of xml section. More... | |
void | ReadAllParameters () |
Reflection methods, Set value of a datamember in class according to TRestMetadata::fElement. More... | |
void | ReadParametersList (std::map< std::string, std::string > &list) |
It reads a parameter list and associates it to its corresponding metadata member. par0 --> fPar0. | |
std::string | ReplaceConstants (const std::string buffer) |
Identifies "constants" in the input buffer, and replace them with corresponding value. More... | |
std::string | ReplaceVariables (const std::string buffer) |
Identifies environmental variable replacing marks in the input buffer, and replace them with corresponding value. More... | |
void | ReSetVersion () |
Resets the version of TRestRun to REST_RELEASE. Only TRestRun is allowed to update version. | |
std::string | SearchFile (std::string filename) |
Search files in current directory and directories specified in "searchPath" section. More... | |
void | SetLibraryVersion (TString version) |
Set the library version of this metadata class. | |
TiXmlElement * | StringToElement (std::string definition) |
Parsing a string into TiXmlElement object. More... | |
TRestMetadata () | |
TRestMetadata default constructor. | |
TRestMetadata (const char *configFilename) | |
constructor | |
void | UnSetVersion () |
Resets the version of TRestRun to -1, in case the file is old REST file. Only TRestRun is allowed to update version. | |
Protected Attributes inherited from TRestMetadata | |
std::string | configBuffer |
The buffer where the corresponding metadata section is stored. Filled only during Write() | |
std::string | fConfigFileName |
Full name of the rml file. More... | |
std::map< std::string, std::string > | fConstants |
Saving a list of rml constants. name-value std::pair. Constants are temporary for this class only. | |
TiXmlElement * | fElement |
Saving the sectional element together with global element. | |
TiXmlElement * | fElementGlobal |
Saving the global element, to be passed to the resident class, if necessary. | |
Bool_t | fError = false |
It can be used as a way to identify that something went wrong using SetError method. | |
TString | fErrorMessage = "" |
A std::string to store an optional error message through method SetError. | |
TRestManager * | fHostmgr |
All metadata classes can be initialized and managed by TRestManager. | |
Int_t | fNErrors = 0 |
It counts the number of errors notified. | |
Int_t | fNWarnings = 0 |
It counts the number of warnings notified. | |
std::string | fSectionName |
Section name given in the constructor of the derived metadata class. | |
Bool_t | fStore |
This variable is used to determine if the metadata structure should be stored in the ROOT file. | |
std::map< std::string, std::string > | fVariables |
Saving a list of rml variables. name-value std::pair. | |
TRestStringOutput::REST_Verbose_Level | fVerboseLevel |
Verbose level used to print debug info. | |
Bool_t | fWarning = false |
It can be used as a way to identify that something went wrong using SetWarning method. | |
TString | fWarningMessage = "" |
It can be used as a way to identify that something went wrong using SetWarning method. | |
std::string | messageBuffer |
The buffer to store the output message through TRestStringOutput in this class. | |
endl_t | RESTendl |
Termination flag object for TRestStringOutput. | |
TRestAxionOpticsMirror::TRestAxionOpticsMirror | ( | const char * | cfgFileName, |
std::string | name = "" |
||
) |
Constructor loading data from a config file.
If no configuration path is defined using TRestMetadata::SetConfigFilePath the path to the config file must be specified using full path, absolute or relative.
The default behaviour is that the config file must be specified with full path, absolute or relative.
cfgFileName | A const char* giving the path to an RML file. |
name | The name of the specific metadata. It will be used to find the corresponding TRestAxionMagneticField section inside the RML. |
Definition at line 160 of file TRestAxionOpticsMirror.cxx.
|
private |
It downloads the reflectivity file for the present mirror properties defined at the metadata members.
Definition at line 350 of file TRestAxionOpticsMirror.cxx.
TCanvas * TRestAxionOpticsMirror::DrawOpticsProperties | ( | std::string | options = "" , |
Double_t | lowRange = 1.e-9 , |
||
Double_t | lowRange2 = 1.e-3 |
||
) |
A method that creates a canvas where the mirror optics properties are drawn. It generates two plots, on the left the reflectivity as a function of the angle, and on the right the reflectivity as a function of the energy.
The first argument is a string where we may specify the energies and angles to be plotted against the angle and energy. Between square brackets [ ] we define the values that will be plotted, while between parenthesis we define the range of the x-axis to be plotted.
For example the following definition will produce a plot with 3 energies (2,5,10) keV as a function of the angle, in the range 0 to 45 degrees, and a second plot with 4 angles (1,2,5,15) degrees in the energy range 0 to 15keV.
Optionally we may define the legend position for each plot by adding {x1,y1,x2,y2}, where x1,y1,x2,y2 are values between 0 and 1 defining the region box that the legend will occupate at the pad. See also ROOT TLegend documentation.
We may add the position to any of the two plots, or to both of them. Here we define it for the second plot to be placed at the bottom-left.
If we define legend positions only for the first plot, those values will also be used for the second plot. If no legend positions are given, the default positions will be used.
Two additional double arguments allow to set the low y-range of each of the plots.
Drawing a main title
Definition at line 526 of file TRestAxionOpticsMirror.cxx.