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

Detailed Description

A process to introduce the magnetic field profile integration along the track.

This process is designed to work with the most general case of the magnetic field description using the help of TRestAxionMagneticField metadata class. This means that the magnetic field volume can be made of several magnetic field "regions" (as described in the documentation of TRestAxionMagneticField, where each "region" is defined by a separate <addMagnetVolume...> line in its RML configuration file. One such example of generic magnetic field volume description is shown in the following figure, where the volume consists of four regions labeled #1 . . . #4. In the following example the regions appear as connected regions although in general they could be completely unconnected, or isolated regions. Anywhere where no region is defined the field will be equal to zero.

Schematic of the axion trajectory through the magnetic field volumes.

Here, the boundaries of each region are represented by blue lines. Also, in some (or all) regions the magnetic field can be zero in its outer parts in order to define a more complex field shape inside. These parts where $B = 0$ are shown in blue, while the parts of the regions with $B \neq 0$ are shown in green. In this case, it is possible that the particle, right after entering the region, passes through the part where $B = 0$ before traversing the section with $B \neq 0$. Also, just before exiting the region, the particle can again pass through the section with $B = 0$.

This process will use the profile of the transversal magnetic field component at each of the volumes along the path to calculate the probability the particle is in a photon state at the end of the trajectory,

In a first approach this process will be only valid for the axion propagation inside a single magnetic volume, until it is confirmed the process is valid for any number of volumes.

This process requires at least the definition of a magnetic field using a TRestAxionMagneticField metadata definition. Optionally, if the field uses a buffer gas we may define a TRestAxionBufferGas that will include all the necessary gas properties, such as photon mass or absorption.

Two metadata parameters can be defined inside this process:

List of observables generated by this process:

This process can be tested using the RML files found inside the directory /pipeline/ray-tracing/axion-field/. The following commands will generate plots with different distributions containing different axion-photon probability calculations.

restManager --c photonConversion.rml
restManager --c plots.rml --f AxionPhotonProbability.root

The previous commands were used to generate the following plots where a total of 100,000 events were generated.

Ray-tracing distributions of probability, field average and coherence length

RESTsoft - Software for Rare Event Searches with TPCs

History of developments:

2019-March: First prototyping of the process. Javier Galan

2019-July: Implementation of boundaries and magnetic field evaluation. Eve Pachoud

2020-March: Review and validation of this process. Javier Galan and Krešimir Jakovčić

2022-November: Finally including non-homogeneous field integration Javier Galan

Author
Javier Galan javie.nosp@m.r.ga.nosp@m.lan@u.nosp@m.niza.nosp@m.r.es
Krešimir Jakovčić kjako.nosp@m.v@ir.nosp@m.b.hr

Definition at line 35 of file TRestAxionFieldPropagationProcess.h.

#include <TRestAxionFieldPropagationProcess.h>

Inheritance diagram for TRestAxionFieldPropagationProcess:
TRestAxionEventProcess TRestEventProcess TRestMetadata

Public Member Functions

 ClassDefOverride (TRestAxionFieldPropagationProcess, 2)
 
RESTValue GetInputEvent () const override
 Get pointer to input event. Must be implemented in the derived class. More...
 
RESTValue GetOutputEvent () const override
 Get pointer to output event. Must be implemented in the derived class. More...
 
const char * GetProcessName () const override
 Returns the name of this process. More...
 
void InitProcess () override
 Process initialization. Data members that require initialization just before start processing should be initialized here. More...
 
void PrintMetadata () override
 It prints out the process parameters stored in the metadata structure. More...
 
TRestEventProcessEvent (TRestEvent *eventInput) override
 Process one event. More...
 
 TRestAxionFieldPropagationProcess ()
 Default constructor. More...
 
 TRestAxionFieldPropagationProcess (char *cfgFileName)
 Constructor loading data from a config file. More...
 
 ~TRestAxionFieldPropagationProcess ()
 Default destructor. More...
 
- Public Member Functions inherited from TRestAxionEventProcess
virtual void BeginOfEventProcess (TRestEvent *evInput=nullptr) override
 Begin of event process, preparation work. Called right before ProcessEvent() More...
 
 ClassDefOverride (TRestAxionEventProcess, 3)
 
virtual void EndOfEventProcess (TRestEvent *evInput=nullptr) override
 End of event process. Called directly after ProcessEvent() More...
 
RESTValue GetInputEvent () const override
 Get pointer to input event. Must be implemented in the derived class. More...
 
RESTValue GetOutputEvent () const override
 Get pointer to output event. Must be implemented in the derived class. More...
 
virtual void InitProcess () override
 To be executed at the beginning of the run (outside event loop) More...
 
virtual void PrintMetadata () override
 It prints out the process parameters stored in the metadata structure. More...
 
 TRestAxionEventProcess ()
 
 ~TRestAxionEventProcess ()
 
- Public Member Functions inherited from TRestEventProcess
virtual Bool_t AddInputFile (const std::string &file)
 
bool ApplyCut ()
 
virtual void BeginOfEventProcess (TRestEvent *inputEvent=nullptr)
 Begin of event process, preparation work. Called right before ProcessEvent() More...
 
 ClassDefOverride (TRestEventProcess, 3)
 
virtual void EndOfEventProcess (TRestEvent *inputEvent=nullptr)
 End of event process. Nothing to do. Called directly after ProcessEvent() More...
 
virtual void EndProcess ()
 To be executed at the end of the run (outside event loop) More...
 
TRestAnalysisTreeGetAnalysisTree () const
 Return the local analysis tree (dummy) More...
 
TCanvas * GetCanvas () const
 Get canvas. More...
 
TRestAnalysisTreeGetFullAnalysisTree ()
 
virtual RESTValue GetInputEvent () const =0
 Get pointer to input event. Must be implemented in the derived class. More...
 
std::vector< std::string > GetListOfAddedObservables ()
 
virtual RESTValue GetOutputEvent () const =0
 Get pointer to output event. Must be implemented in the derived class. More...
 
virtual const char * GetProcessName () const =0
 
TRestRunGetRunInfo () const
 Return the pointer of the hosting TRestRun object. More...
 
virtual Long64_t GetTotalBytes () const
 
virtual Long64_t GetTotalBytesRead () const
 Interface to external file reading, get the read bytes. To be implemented in external processes. More...
 
virtual void InitFromConfigFile () override
 To make settings from rml file. This method must be implemented in the derived class. More...
 
virtual void InitProcess ()
 To be executed at the beginning of the run (outside event loop) More...
 
Bool_t isExternal () const
 Return whether this process is external process. More...
 
Int_t LoadSectionMetadata () override
 This method does some preparation of xml section. More...
 
virtual void NotifyAnalysisTreeReset ()
 In case the analysis tree is reset(switched to new file), some process needs to have action. More...
 
virtual Bool_t OpenInputFiles (const std::vector< std::string > &files)
 
virtual TRestEventProcessEvent (TRestEvent *inputEvent)=0
 Process one event. More...
 
std::vector< std::string > ReadObservables ()
 
void RegisterAllObservables (Bool_t value=true)
 
virtual Bool_t ResetEntry ()
 
void SetAnalysisTree (TRestAnalysisTree *tree)
 Set analysis tree of this process, then add observables to it.
 
void SetCanvasSize (Int_t x, Int_t y)
 Set canvas size. More...
 
void SetFriendProcess (TRestEventProcess *p)
 Add friendly process to this process.
 
void SetObservableValidation (bool validate)
 
void SetParallelProcess (TRestEventProcess *p)
 Add parallel process to this process.
 
void SetRunInfo (TRestRun *r)
 Set TRestRun for this process. More...
 
Bool_t singleThreadOnly () const
 Return whether this process is single std::thread only. More...
 
 TRestEventProcess ()
 
 ~TRestEventProcess ()
 

Private Member Functions

void Initialize () override
 Function to initialize input/output event members and define the section name. More...
 

Private Attributes

Double_t fAccuracy = 0.1
 The tolerance or accuracy used inside the GSL integrator. More...
 
TRestAxionFieldfAxionField = nullptr
 A pointer to TRestAxionField that implements probability calculations. More...
 
TRestAxionBufferGasfBufferGas = nullptr
 A pointer to TRestBufferGas given to TRestAxionField to perform calculations in a particular gas. More...
 
Double_t fBufferGasAdditionalLength = 0
 The additional length in mm that the converted photon propagates without magnetic field. More...
 
TRestAxionMagneticFieldfMagneticField = nullptr
 A pointer to the magnetic field description stored in TRestRun. More...
 
Int_t fNumIntervals = 100
 Number of intervales used by the GSL integrator. More...
 
Int_t fQawoLevels = 20
 Number of levels used by the GSL integrator to parameterize the cosine integral. More...
 
TVector3 fReMap = TVector3(30, 30, 100)
 It will re-size the cells in the magnetic field (affecting the time required for integral computation) More...
 

Additional Inherited Members

- Protected Types inherited from TRestEventProcess
enum  REST_Process_Output { No_Output , Observable , Internal_Var , Full_Output }
 
- Protected Member Functions inherited from TRestAxionEventProcess
void BeginPrintProcess ()
 Pre-defined printer, can be used at the beginning in the implementation of PrintMetadata() More...
 
void EndPrintProcess ()
 Adds the footer for PrintMetadata. More...
 
TVector3 GetCenter () const
 
- Protected Member Functions inherited from TRestEventProcess
void BeginPrintProcess ()
 [name, cut range]
 
void CreateCanvas ()
 Create the canvas. More...
 
void EndPrintProcess ()
 
TRestEventProcessGetFriend (const std::string &nameOrType)
 
TRestEventProcessGetFriendLive (const std::string &nameOrType)
 
template<class T >
T * GetMetadata ()
 Get a metadata object from the host TRestRun. More...
 
TRestMetadataGetMetadata (const std::string &nameOrType)
 
size_t GetNumberOfParallelProcesses () const
 
template<class T >
GetObservableValue (const std::string &name)
 
TRestEventProcessGetParallel (int i)
 
template<class T >
std::vector< T > GetParallelDataMembers (T *member_of_process)
 Get a list of data members from parallel processes which is same to this process's certain data member. More...
 
template<class T >
void SetObservableValue (const std::string &name, const T &value)
 Set observable value for AnalysisTree. More...
 
- Protected Attributes inherited from TRestAxionEventProcess
TRestAxionEventfAxionEvent
 A pointer to the specific TRestAxionEvent. More...
 
- Protected Attributes inherited from TRestEventProcess
TRestAnalysisTreefAnalysisTree = nullptr
 
TCanvas * fCanvas = nullptr
 < Canvas for some viewer event More...
 
TVector2 fCanvasSize
 Canvas size. More...
 
std::vector< std::pair< std::string, TVector2 > > fCuts
 Stores cut definitions. Any listed observables should be in the range. More...
 
bool fDynamicObs = false
 It defines whether to use added observables only or all the observables appear in the code. More...
 
bool fIsExternal = false
 It defines if the process reads event data from an external source. More...
 
std::map< std::string, int > fObservablesDefined
 Stores the list of all the appeared process observables in the code. More...
 
std::map< std::string, int > fObservablesUpdated
 Stores the list of process observables updated when processing this event. More...
 
bool fReadOnly = false
 not used, keep for compatibility More...
 
TRestRunfRunInfo = nullptr
 < Pointer to TRestRun object where to find metadata. More...
 
bool fSingleThreadOnly = false
 
bool fValidateObservables = false
 It defines if observable names should be added to the validation list. More...
 

Constructor & Destructor Documentation

◆ TRestAxionFieldPropagationProcess() [1/2]

TRestAxionFieldPropagationProcess::TRestAxionFieldPropagationProcess ( )

Default constructor.

Definition at line 129 of file TRestAxionFieldPropagationProcess.cxx.

◆ TRestAxionFieldPropagationProcess() [2/2]

TRestAxionFieldPropagationProcess::TRestAxionFieldPropagationProcess ( char *  cfgFileName)

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.

Definition at line 142 of file TRestAxionFieldPropagationProcess.cxx.

◆ ~TRestAxionFieldPropagationProcess()

TRestAxionFieldPropagationProcess::~TRestAxionFieldPropagationProcess ( )

Default destructor.

Definition at line 147 of file TRestAxionFieldPropagationProcess.cxx.

Member Function Documentation

◆ GetInputEvent()

RESTValue TRestAxionFieldPropagationProcess::GetInputEvent ( ) const
inlineoverridevirtual

Get pointer to input event. Must be implemented in the derived class.

Reimplemented from TRestAxionEventProcess.

Definition at line 66 of file TRestAxionFieldPropagationProcess.h.

◆ GetOutputEvent()

RESTValue TRestAxionFieldPropagationProcess::GetOutputEvent ( ) const
inlineoverridevirtual

Get pointer to output event. Must be implemented in the derived class.

Reimplemented from TRestAxionEventProcess.

Definition at line 67 of file TRestAxionFieldPropagationProcess.h.

◆ GetProcessName()

const char * TRestAxionFieldPropagationProcess::GetProcessName ( ) const
inlineoverridevirtual

Returns the name of this process.

Implements TRestEventProcess.

Definition at line 90 of file TRestAxionFieldPropagationProcess.h.

◆ Initialize()

void TRestAxionFieldPropagationProcess::Initialize ( )
overrideprivatevirtual

Function to initialize input/output event members and define the section name.

Reimplemented from TRestMetadata.

Definition at line 152 of file TRestAxionFieldPropagationProcess.cxx.

◆ InitProcess()

void TRestAxionFieldPropagationProcess::InitProcess ( )
overridevirtual

Process initialization. Data members that require initialization just before start processing should be initialized here.

Reimplemented from TRestAxionEventProcess.

Definition at line 163 of file TRestAxionFieldPropagationProcess.cxx.

◆ PrintMetadata()

void TRestAxionFieldPropagationProcess::PrintMetadata ( )
inlineoverridevirtual

It prints out the process parameters stored in the metadata structure.

Reimplemented from TRestAxionEventProcess.

Definition at line 72 of file TRestAxionFieldPropagationProcess.h.

◆ ProcessEvent()

TRestEvent * TRestAxionFieldPropagationProcess::ProcessEvent ( TRestEvent inputEvent)
overridevirtual

Process one event.

Missing to propagate the axion to the end of magnet bore? May not be necessary, it can be done by TRestAxionTransportProcess if user needs any process that changes direction, this is done for example by optics processes internally

Implements TRestEventProcess.

Definition at line 194 of file TRestAxionFieldPropagationProcess.cxx.

Field Documentation

◆ fAccuracy

Double_t TRestAxionFieldPropagationProcess::fAccuracy = 0.1
private

The tolerance or accuracy used inside the GSL integrator.

Definition at line 41 of file TRestAxionFieldPropagationProcess.h.

◆ fAxionField

TRestAxionField* TRestAxionFieldPropagationProcess::fAxionField = nullptr
private

A pointer to TRestAxionField that implements probability calculations.

Definition at line 56 of file TRestAxionFieldPropagationProcess.h.

◆ fBufferGas

TRestAxionBufferGas* TRestAxionFieldPropagationProcess::fBufferGas = nullptr
private

A pointer to TRestBufferGas given to TRestAxionField to perform calculations in a particular gas.

Definition at line 59 of file TRestAxionFieldPropagationProcess.h.

◆ fBufferGasAdditionalLength

Double_t TRestAxionFieldPropagationProcess::fBufferGasAdditionalLength = 0
private

The additional length in mm that the converted photon propagates without magnetic field.

Definition at line 38 of file TRestAxionFieldPropagationProcess.h.

◆ fMagneticField

TRestAxionMagneticField* TRestAxionFieldPropagationProcess::fMagneticField = nullptr
private

A pointer to the magnetic field description stored in TRestRun.

Definition at line 53 of file TRestAxionFieldPropagationProcess.h.

◆ fNumIntervals

Int_t TRestAxionFieldPropagationProcess::fNumIntervals = 100
private

Number of intervales used by the GSL integrator.

Definition at line 44 of file TRestAxionFieldPropagationProcess.h.

◆ fQawoLevels

Int_t TRestAxionFieldPropagationProcess::fQawoLevels = 20
private

Number of levels used by the GSL integrator to parameterize the cosine integral.

Definition at line 47 of file TRestAxionFieldPropagationProcess.h.

◆ fReMap

TVector3 TRestAxionFieldPropagationProcess::fReMap = TVector3(30, 30, 100)
private

It will re-size the cells in the magnetic field (affecting the time required for integral computation)

Definition at line 50 of file TRestAxionFieldPropagationProcess.h.


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