REST-for-Physics  v2.3
Rare Event Searches ToolKit for Physics
Public Member Functions | Private Member Functions | Private Attributes
TRestAxionOpticsMirror Class Reference

Detailed Description

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:

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.

mirror->SetMirrorType("Single");
mirror->SetLayerMaterial("C");
mirror->SetLayerThickness("30");
mirror->SetLayerRoughness("0");
mirror->SetSubstrateMaterial("SiO2");
mirror->LoadTables();
A metadata class accessing the Henke database to load reflectivity data.
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,...
void LoadTables()
Loads the reflectivity table.
TRestAxionOpticsMirror()
Default constructor.

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).

Double_t angle = 0.5; // degrees
Double_t energy= 2; // keV
mirror->GetReflectivity( angle, energy );
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).

Alternatively we may use a RML definition and pass some options to the TRestAxionOpticMirror::DrawOpticsProperties to define what it will be drawn.

TRestAxionOpticsMirror *mirror = new TRestAxionOpticMirror("mirror.rml", "default");
mirror->DrawOpticsProperties("[1,4,7,10](0,15):[0.5,1,1.5](0,5)", 1.e-4);
// Between [ ] the curves we want to produce, between ( ) the range, and between { } the legend
// position. The legend position {} is optional.
// It is possible to try calling the method without arguments. Wish you good luck.
mirror->DrawOpticsProperties("[4,7,10](0,9){0.6,0.68,0.9,0.88}:[0.25,0.5,0.75,1](0,10){0.2,0.2,0.45,0.45}",
1.e-9, 1.e-3);

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

Author
Javier Galan javie.nosp@m.r.ga.nosp@m.lan@u.nosp@m.niza.nosp@m.r.es

Definition at line 32 of file TRestAxionOpticsMirror.h.

#include <TRestAxionOpticsMirror.h>

Inheritance diagram for TRestAxionOpticsMirror:
TRestMetadata

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.
 

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

Constructor & Destructor Documentation

◆ TRestAxionOpticsMirror()

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.

Parameters
cfgFileNameA const char* giving the path to an RML file.
nameThe 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.

Member Function Documentation

◆ DownloadHenkeFile()

std::string TRestAxionOpticsMirror::DownloadHenkeFile ( )
private

It downloads the reflectivity file for the present mirror properties defined at the metadata members.

Returns
It returns the location and filename of the downloaded file.

Definition at line 350 of file TRestAxionOpticsMirror.cxx.

◆ DrawOpticsProperties()

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.

[2,5,10](0,45):[1,2,5,15](0,15)

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.

[2,5,10](0,45):[1,2,5,15](0,15){0.15,0.15,0.45,0.45}

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.


The documentation for this class was generated from the following files: