REST-for-Physics
v2.3
Rare Event Searches ToolKit for Physics
|
A metadata class to load tabulated solar axion fluxes. Mass independent.
TRestAxionSolarQCDFlux will use a file in ASCII or binary format to initialize a solar flux table that will describe the solar flux spectrum as a function of the solar radius.
This class may serve to load any generic flux definition that is independent from the axion mass. However, since the design of the class was motivated to reproduce the standard QCD axion flux, therefore the name of the class.
Another scenario arises when the axion or an axion-like particle production mechanism depends on its mass, and we may need to introduce a flux description as the given in the class TRestAxionSolarHiddenPhotonFlux. Both classes are prototyped by a pure base class TRestAxionSolarFlux that defines common methods used to evaluate the flux, and generate Monte-Carlo events inside TRestAxionGeneratorProcess.
Once the class has been initialized, the main use of this class will be provided by the method TRestAxionSolarQCDFlux::GetRandomEnergyAndRadius. This method will return a random axion energy and position inside the solar radius following the distributions given by the solar flux tables.
Description of the specific parameters accepted by this metadata class.
.dat
extension, or it might be a binary table using .N200f
extension.Additionally this class will be able to read .flux
files that are the original files produced in 3-columns format (inner radius [solar units] / energy [keV] / flux [cm-2 s-1 keV-1]). The .flux
files may contain the full information, continuum and spectral components. Those components will be splited into two independent contributions by TRestAxionSolarQCDFlux::ReadFluxFile to be managed internally. Two additional parameters will be required to translate the .flux
files into the tables that are understood by this class.
.flux
file and inside the histogram used for monochromatic lines identification..flux
file and the average flux calculated in the peak surroundings. If the flux ratio is higher than this value, the flux at that particular bin will be considered a peak.Optionally, if we want to consider a different binning on the monochromatic/continuum histogram used internally for the calculation we may specify optionally a new parameter. In that case, fBinSize
will be the binning of the internal histogram, while the new parameter will be the binning given inside the .flux
file.
.flux
table.Pre-generated solar axion flux tables will be available at the axionlib-data repository. The different RML flux definitions used to load those tables will be found at the fluxes.rml file found at the axionlib-data repository.
Inside a local REST installation, the fluxes.rml
file will be found at the REST installation directory, and it will be located automatically by the TRestMetadata::SearchFile method.
The following definition integrates an axion-photon component with a continuum spectrum using a Primakoff production model, and a dummy spectrum file that includes two monocrhomatic lines at different solar disk radius positions.
restRoot
interactive shell, or inside a macro or script, after metadata initialization, it is necessary to call the method TRestAxionSolarQCDFlux::LoadTables to trigger the tables initialization.In order to test the response of different solar flux definitions we may use the script solarPlot.py
found at pipeline/metadata/solarFlux/
. This script will generate a number of particles and it will assign to each particle an energy and solar disk location with the help of the method TRestAxionSolarQCDFlux::GetRandomEnergyAndRadius.
By default, it will load the flux definition found at fluxes.rml
from the axionlib-data
repository, and generate a png
image with the resuts from the Monte Carlo execution.
.flux
filesIn a similar way we may initialize the class using a .flux
file. The .flux
described previously will contain a high definition flux table measured in cm-2 s-1 keV-1
as a function of the energy (from 0 to 20keV) and the inner solar radius (from 0 to 1). The binning of this table will be typically between 1eV and 10eV.
The class TRestAxionSolarQCDFlux will be initialized directly using the .flux
file provided under the fluxDataFile
parameter. During the initialization, the flux will be splitted into two independent flux components. One smooth continuum component integrated in 100 eV steps, and a monochromatic peak components.
In order to help with the identification of peaks we need to define the binSize
used in the .flux
table and the peakSigma
defining the number of sigmas over the average for a bin to be considered a peak.
We will be able to load this file as usual, using the following recipe inside restRoot
,
will generate the following figure.
On top of that, we will be able to export those tables to the TRestAxionSolarQCDFlux standard format to be used in later occasions.
which will produce two files, a binary table .N200f
with the continuum flux, and an ASCII table containning the .spt
monochromatic lines. The filename root will be extracted from the original .flux
file. Optionally we may export the continuum flux to an ASCII file by indicating it at the TRestAxionSolarQCDFlux::ExportTables method call. The files will be placed at the REST user space, at $HOME/.rest/export/
directory.
TODO Implement the method TRestAxionSolarQCDFlux::InitializeSolarTable using a solar model description by TRestAxionSolarModel.
TODO Perhaps it would be interesting to replace fFluxTable for a TH2D
RESTsoft - Software for Rare Event Searches with TPCs
History of developments:
2023-May: Specific methods extracted from TRestAxionSolarFlux Javier Galan
Definition at line 30 of file TRestAxionSolarQCDFlux.h.
#include <TRestAxionSolarQCDFlux.h>
Public Member Functions | |
ClassDefOverride (TRestAxionSolarQCDFlux, 1) | |
virtual TCanvas * | DrawSolarFlux () override |
It draws the contents of a .flux file. This method just receives the. | |
void | ExportTables (Bool_t ascii=false) override |
It will create files with the continuum and spectral flux components to be used in a later ocasion. | |
TH1F * | GetContinuumSpectrum () |
It builds a histogram with the continuum spectrum component. The flux will be expressed in cm-2 s-1 keV-1. Binned in 100eV steps. | |
TH1F * | GetEnergySpectrum (Double_t m=0) override |
It returns an energy integrated spectrum in cm-2 s-1 keV-1. | |
TH1F * | GetMonochromaticSpectrum () |
It builds a histogram with the monochromatic spectrum component. The flux will be expressed in cm-2 s-1 eV-1. Binned in 1eV steps. | |
std::pair< Double_t, Double_t > | GetRandomEnergyAndRadius (TVector2 eRange=TVector2(-1, -1), Double_t mass=0) override |
It defines how to generate Monte Carlo energy and radius values to reproduce the flux. More... | |
Double_t | GetTotalFlux (Double_t mass=0) override |
It returns the total integrated flux at earth in cm-2 s-1. | |
TH1F * | GetTotalSpectrum () |
It builds a histogram adding the continuum and the monochromatic spectrum component. The flux will be expressed in cm-2 s-1 keV-1. Binned in 1eV steps. | |
void | InitializeSolarTable (TRestAxionSolarModel *model) |
Tables might be loaded using a solar model description by TRestAxionSolarModel. | |
Double_t | IntegrateFluxInRange (TVector2 eRange=TVector2(-1, -1), Double_t mass=0) override |
It returns the integrated flux at earth in cm-2 s-1 for the given energy range. | |
Bool_t | isSolarSpectrumLoaded () |
It returns true if monochromatic flux spectra was loaded. | |
Bool_t | isSolarTableLoaded () |
It returns true if continuum flux spectra was loaded. | |
Bool_t | LoadTables () override |
It defines how to read the solar tables at the inhereted class. More... | |
void | PrintContinuumSolarTable () |
It prints on screen the table that has been loaded in memory. | |
void | PrintIntegratedRingFlux () |
It prints on screen the integrated solar flux per solar ring. | |
void | PrintMetadata () override |
Prints on screen the information about the metadata members of TRestAxionSolarQCDFlux. | |
void | PrintMonoChromaticFlux () |
It prints on screen the spectral lines loaded in memory. | |
TRestAxionSolarQCDFlux () | |
Default constructor. | |
TRestAxionSolarQCDFlux (const char *cfgFileName, std::string name="") | |
Constructor loading data from a config file. More... | |
~TRestAxionSolarQCDFlux () | |
Default destructor. | |
Public Member Functions inherited from TRestAxionSolarFlux | |
Bool_t | AreTablesLoaded () |
TCanvas * | DrawFluxFile (std::string fname, Double_t binSize=0.01) |
It draws the contents of a .flux file. This method just receives the name of the .flux file and it works stand-alone. | |
TH1F * | GetFluxHistogram (std::string fname, Double_t binSize=0.01) |
It builds a histogram using the contents of the .flux file given in the argument. | |
void | Initialize () |
It is required in order to load solar flux tables into memory. More... | |
~TRestAxionSolarFlux () | |
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 | |
void | IntegrateSolarFluxes () |
A helper method to initialize the internal class data members with the integrated flux for each solar ring. It will be called by TRestAxionSolarQCDFlux::Initialize. | |
void | LoadContinuumFluxTable () |
A helper method to load the data file containning continuum spectra as a function of the solar radius. It will be called by TRestAxionSolarQCDFlux::Initialize. | |
void | LoadMonoChromaticFluxTable () |
A helper method to load the data file containning monochromatic spectral lines as a function of the solar radius. It will be called by TRestAxionSolarQCDFlux::Initialize. | |
void | ReadFluxFile () |
It loads a .flux file. It will split continuum and monochromatic peaks, loading both internal flux tables. | |
Private Attributes | |
Double_t | fBinSize = 0 |
It will be used when loading .flux files to define the input file energy binsize in eV. | |
TH1F * | fContinuumHist = nullptr |
A pointer to the continuum spectrum histogram. | |
std::string | fFluxDataFile = "" |
The filename containning the solar flux table with continuum spectrum. | |
std::vector< Double_t > | fFluxLineIntegrals |
Accumulative integrated solar flux for each monochromatic energy (renormalized to unity) | |
std::map< Double_t, TH1F * > | fFluxLines |
The tabulated solar flux in cm-2 s-1 for a number of monochromatic energies versus solar radius. | |
Double_t | fFluxRatio = 0 |
The ratio between monochromatic and total flux. | |
std::string | fFluxSptFile = "" |
The filename containning the solar flux spectra for monochromatic spectrum. | |
std::vector< TH1F * > | fFluxTable |
The tabulated solar flux continuum spectra TH1F(200,0,20)keV in cm-2 s-1 keV-1 versus solar radius. | |
std::vector< Double_t > | fFluxTableIntegrals |
Accumulative integrated solar flux for each solar ring for continuum spectrum (renormalized to unity) | |
TH1F * | fMonoHist = nullptr |
A pointer to the monochromatic spectrum histogram. | |
Double_t | fPeakSigma = 0 |
It will be used when loading .flux files to define the threshold for peak identification. | |
Double_t | fTotalContinuumFlux = 0 |
Total solar flux for monochromatic contributions. | |
TH1F * | fTotalHist = nullptr |
A pointer to the superposed monochromatic and continuum spectrum histogram. | |
Double_t | fTotalMonochromaticFlux = 0 |
Total solar flux for monochromatic contributions. | |
Additional Inherited Members | |
Protected Member Functions inherited from TRestAxionSolarFlux | |
TRestAxionSolarFlux () | |
Default constructor. | |
TRestAxionSolarFlux (const char *cfgFileName, std::string name="") | |
Constructor loading data from a config file. More... | |
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 TRestAxionSolarFlux | |
TCanvas * | fCanvas = nullptr |
A canvas pointer for drawing. | |
TRandom3 * | fRandom = nullptr |
Random number generator. | |
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. | |
TRestAxionSolarQCDFlux::TRestAxionSolarQCDFlux | ( | 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 236 of file TRestAxionSolarQCDFlux.cxx.
|
overridevirtual |
It defines how to generate Monte Carlo energy and radius values to reproduce the flux.
It returns a random solar radius position and energy according to the flux distributions defined inside the solar tables loaded in the class.
Implements TRestAxionSolarFlux.
Definition at line 661 of file TRestAxionSolarQCDFlux.cxx.
|
overridevirtual |
It defines how to read the solar tables at the inhereted class.
It will load the tables in memory by using the filename information provided inside the metadata members.
Implements TRestAxionSolarFlux.
Definition at line 252 of file TRestAxionSolarQCDFlux.cxx.