REST-for-Physics  v2.3
Rare Event Searches ToolKit for Physics
TRestAxionOpticsMirror.h
1/*************************************************************************
2 * This file is part of the REST software framework. *
3 * *
4 * Copyright (C) 2016 GIFNA/TREX (University of Zaragoza) *
5 * For more information see http://gifna.unizar.es/trex *
6 * *
7 * REST is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * REST is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have a copy of the GNU General Public License along with *
18 * REST in $REST_PATH/LICENSE. *
19 * If not, see http://www.gnu.org/licenses/. *
20 * For the list of contributors see $REST_PATH/CREDITS. *
21 *************************************************************************/
22
23#ifndef _TRestAxionOpticsMirror
24#define _TRestAxionOpticsMirror
25
26#include <TCanvas.h>
27#include <TRestMetadata.h>
28
29#include <iostream>
30
33 private:
35 std::string fMirrorType = "Single"; //<
36
38 std::string fLayerTop = "C"; //<
39
41 std::string fLayerThicknessTop = "30"; //<
42
44 std::string fSigmaTop = "0"; //<
45
47 std::string fLayerBottom = ""; //<
48
50 std::string fLayerThicknessBottom = ""; //<
51
53 std::string fSigmaBottom = ""; //<
54
56 std::string fSubstrate = "SiO2"; //<
57
59 std::map<std::string, std::string> fHenkeKeys;
60
62 std::vector<std::vector<Float_t> > fReflectivityTable;
63
65 std::vector<std::vector<Float_t> > fTransmissionTable;
66
68 TCanvas* fCanvas = nullptr;
69
70 std::string DownloadHenkeFile();
71
72 Int_t ExportTables();
73
74 std::string GetReflectivityFilename();
75 std::string GetTransmissionFilename();
76
77 public:
78 void Initialize();
79
80 void SetMirrorType(const std::string& type) { fMirrorType = type; }
81 void SetLayerMaterial(const std::string& layer) { fLayerTop = layer; }
82 void SetLayerThickness(const std::string& thickness) { fLayerThicknessTop = thickness; }
83 void SetLayerRoughness(const std::string& roughness) { fSigmaTop = roughness; }
84 void SetTopLayerMaterial(const std::string& layer) { fLayerTop = layer; }
85 void SetTopLayerThickness(const std::string& thickness) { fLayerThicknessTop = thickness; }
86 void SetTopLayerRoughness(const std::string& roughness) { fSigmaTop = roughness; }
87 void SetBottomLayerMaterial(const std::string& layer) { fLayerBottom = layer; }
88 void SetBottomLayerThickness(const std::string& thickness) { fLayerThicknessBottom = thickness; }
89 void SetBottomLayerRoughness(const std::string& roughness) { fSigmaBottom = roughness; }
90 void SetSubstrateMaterial(const std::string& substrate) { fSubstrate = substrate; }
91
92 void LoadTables();
93
94 Double_t GetReflectivity(const Double_t angle, const Double_t energy);
95
96 Double_t GetTransmission(const Double_t angle, const Double_t energy);
97
98 void PrintMetadata();
99
100 TCanvas* DrawOpticsProperties(std::string options = "", Double_t lowRange = 1.e-9,
101 Double_t lowRange2 = 1.e-3);
102
104 TRestAxionOpticsMirror(const char* cfgFileName, std::string name = "");
106
107 ClassDef(TRestAxionOpticsMirror, 1);
108};
109#endif
A metadata class accessing the Henke database to load reflectivity data.
std::string fSigmaTop
Layer surface roughness in nm.
std::string fLayerThicknessBottom
The bottom layer thickness in nm. Only used for "Bilayer" mirror type.
std::string fSubstrate
The substrate material.
std::string GetTransmissionFilename()
It returns the corresponding transmission filename for the mirror properties defined in the data memb...
std::string fSigmaBottom
Bottom layer surface roughness in nm. Only used for "Bilayer" mirror type.
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).
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,...
std::string fLayerThicknessTop
The layer thickness in nm.
void LoadTables()
Loads the reflectivity table.
void PrintMetadata()
Prints on screen the information about the metadata members of TRestAxionOpticsMirror.
std::vector< std::vector< Float_t > > fReflectivityTable
The reflectivity loaded as a table with angle versus energy.
std::map< std::string, std::string > fHenkeKeys
A set of key-value pairs sent to the Henke website for data request.
Int_t ExportTables()
It is a private method to export the tables to a binary file once the tables have been downloaded fro...
TRestAxionOpticsMirror()
Default constructor.
void Initialize()
Initialization of TRestAxionOpticsMirror members.
std::string fLayerBottom
The mirror bottom layer material (chemical formula). Only used for "Bilayer" mirror type.
TCanvas * fCanvas
A canvas to insert the optic properties drawing.
~TRestAxionOpticsMirror()
Default destructor.
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).
std::string fLayerTop
The mirror layer material (chemical formula).
std::string GetReflectivityFilename()
It returns the corresponding reflectivity filename for the mirror properties defined in the data memb...
std::string fMirrorType
The mirror type (Thick, Single, Bilayer, Multilayer). Only Single/Bilayer is supported now.
std::string DownloadHenkeFile()
It downloads the reflectivity file for the present mirror properties defined at the metadata members.
std::vector< std::vector< Float_t > > fTransmissionTable
The transmission loaded as a table with angle versus energy.
A base class for any REST metadata class.
Definition: TRestMetadata.h:74