REST-for-Physics  v2.3
Rare Event Searches ToolKit for Physics
Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions
TRestAxionOptics Class Referenceabstract

Detailed Description

An abstract class to define common optics parameters and methods.

TRestAxionOptics is a class that allows to describe the geometrical and mirror properties of an optics focusing device. This metadata class is a pure abstract class used to define common data members and methods to any specific optics class.

Conceptual optics implementation

This class implements a method, TRestAxionOptics::PropagatePhoton, that is used to generate the tracking of a photon given an initial position and direction. The photon propagation is done in different phases, where the photon position and direction is calculated at different optical interfaces (entrance/middle/exit) as it is shown in the following figure.

The transport of the photon in between two interfaces is controlled by two pure virtual methods TRestAxionOptics::FirstMirrorReflection and TRestAxionOptics::SecondMirrorReflection, that must be implemented at the inherited optics class, such as is is done at TRestAxionWolterOptics.

Other pure virtual methods need to be implemented at the inherited class in order to define the limits of the optical device, such as TRestAxionOptics::GetEntrancePositionZ, TRestAxionOptics::GetExitPositionZ or TRestAxionOptics::GetRadialLimits.

Furthermore, this class will define common methods that can be exploited by any optical device, such as TRestAxionOptics::FindFocal or TRestAxionOptics::CalculateSpotSize, which are MonteCarlo based, and can be optionally re-implemented at the inherited class.

Optics metadata description

This class defines generic optics metadata members, that can be further extended at the inherited classes as needed.

We distinguish the following metadata members (which will be stored on disk and that can be initalized through RML).

Optical masks

Each of the optical interfaces (entrance/middle/optics) is associated with an optical mask where we can identify regions. These regions allow to determine if a photon entered by and exited from the same optical cavity or allowed region. The use of 3 masks at the entrance, middle and exit levels permits to create a 3-dimensional constrain of the movement of the photon.

Thus, masks must be constructed by the inherited class using a TRestCombinedMask definition that is instantiated at the TRestAxionOptics level as fEntranceMask, fMiddleMask and fExitMask.

Common drawing methods

This class also defines common drawing methods such as TRestAxionOptics::DrawScatterMaps, TRestAxionOptics::DrawDensityMaps and TRestAxionOptics::DrawParticleTracks. That may help to visualize and debug the tracking of photons by the new implemented optics device.

A pure virtual method TRestAxionOptics::DrawMirrors must be implemented at each class in order to draw the mirrors position, to be visualized on the TRestAxionOptics::DrawParticleTracks method.

The method TRestAxionOptics::DrawParticleTracks is designed to draw few photon tracks and help to debug the correct tracking of light particles. The thickness of the mirror lines representing the mirror shells is proportional to the real thickness, and the color of photons is chosen to match the color of the reflecting mirror. If the photon hits the entrance mask (spider or mirrors) the line will be coloured in black.

Additionally, TRestAxionOptics::DrawParticleTracks will print on screen the result of the tracking for each particle using the method TRestAxionOptics::PrintPhotonTrackingSummary. Additional debuging information can be printed on screen by setting the output level to debug, verboseLevel="debug".


RESTsoft - Software for Rare Event Searches with TPCs

History of developments:

2022-February: First concept and implementation of TRestAxionOptics 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 35 of file TRestAxionOptics.h.

#include <TRestAxionOptics.h>

Inheritance diagram for TRestAxionOptics:
TRestMetadata TRestAxionMCPLOptics TRestAxionTrueWolterOptics TRestAxionWolterOptics

Public Member Functions

Double_t CalculateSpotSize (Double_t energy, Double_t z, Int_t particles=15000)
 It measures the spot size through Monte Carlo at a given plane given by z. If z=0 this method will check for the spot size at the focal point, which is the default behaviour. More...
 
TPad * CreatePad (Int_t nx=1, Int_t ny=1)
 A prototype method to be implemented by specific optics to draw an schematic including the mirrors geometry.
 
TPad * DrawDensityMaps (Double_t z, Double_t energy=0, Double_t deviation=0, Int_t particles=1000, Double_t focalHint=7500)
 It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class. More...
 
virtual TPad * DrawMirrors ()=0
 It draws the mirrors using a TGraph. To be implemented at the inherited class.
 
TPad * DrawParticleTracks (Double_t deviation=0, Int_t particles=10)
 A method to draw an optics schematic including the mirrors geometry, and few photon tracks. This method is intended for debugging the photon tracking implementation. More...
 
TPad * DrawScatterMaps (Double_t z, Double_t energy=0, Double_t deviation=0, Int_t particles=1000, Double_t focalHint=7500)
 It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class. More...
 
virtual Double_t FindFocal (Double_t from, Double_t to, Double_t energy, Double_t precision=1, Bool_t recalculate=false, Int_t particles=5000)
 It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class. More...
 
virtual Int_t FirstMirrorReflection (const TVector3 &pos, const TVector3 &dir)=0
 It updates the values fFirstInteractionPosition and fMiddleDirection. Returns 0 if is not in region.
 
Double_t GetEntranceAngle ()
 It returns the entrance angle to the optical axis (in radians).
 
TVector3 GetEntranceDirection ()
 Returns the entrance position from the latest propagated photon.
 
TRestCombinedMask *const & GetEntranceMask () const
 Returns a pointer to access directly the entrance mask information.
 
TVector3 GetEntrancePosition ()
 Returns the entrance position from the latest propagated photon.
 
virtual Double_t GetEntrancePositionZ ()=0
 It returns the entrance Z-position defined by the optical axis.
 
TVector3 GetExitDirection ()
 Returns the exit position from the latest propagated photon.
 
TRestCombinedMask *const & GetExitMask () const
 Returns a pointer to access directly the exit mask information.
 
TVector3 GetExitPosition ()
 Returns the exit position from the latest propagated photon.
 
virtual Double_t GetExitPositionZ ()=0
 It returns the exit Z-position defined by the optical axis.
 
TVector3 GetLastGoodDirection ()
 It returns the last valid particle direction known in the particle tracking.
 
TVector3 GetLastGoodPosition ()
 It returns the last valid particle position known in the particle tracking.
 
TVector3 GetMiddleDirection ()
 Returns the middle position from the latest propagated photon.
 
TRestCombinedMask *const & GetMiddleMask () const
 Returns a pointer to access directly the middle mask information.
 
TVector3 GetMiddlePosition ()
 Returns the middle position from the latest propagated photon.
 
TRestAxionOpticsMirror *const & GetMirrorProperties () const
 Returns a pointer to access directly the exit mask information.
 
Int_t GetNumberOfReflections ()
 It returns the total number of reflections. Considering maximum 1-reflection per mirror.
 
virtual std::pair< Double_t, Double_t > GetRadialLimits ()=0
 It returns the lower/higher radius range where photons are allowed.
 
void InitFromConfigFile ()
 Initialization of TRestAxionOptics field members through a RML file.
 
virtual void Initialize ()
 Initialization of TRestAxionOptics members.
 
Bool_t IsFirstMirrorReflection ()
 It returns true if the photon got reflected in the first mirror.
 
Bool_t IsSecondMirrorReflection ()
 It returns true if the photon got reflected in the second mirror.
 
void PrintEntranceMask ()
 Prints on screen the mask used on the entrance optics plane.
 
void PrintExitMask ()
 Prints on screen the mask used on the exit optics plane.
 
void PrintMasks ()
 Prints on screen the 3-optical masks used on the optics planes.
 
void PrintMetadata ()
 Prints on screen the information about the metadata members of TRestAxionOptics.
 
void PrintMiddleMask ()
 Prints on screen the mask used on the middle optics plane.
 
void PrintMirror ()
 Prints on screen the 3-optical masks used on the optics planes.
 
void PrintPhotonTrackingSummary ()
 Prints the positions taken by the photon after ray-tracing that should have been updated using the method PropagatePhoton.
 
Double_t PropagateMonteCarloPhoton (Double_t energy, Double_t deviation)
 It will produce a MonteCarlo photon spatially distributed in XY as defined by the GetRadialLimits method (extended by 50%), and with direction along the Z-axis with a maximum deviation angle fixed by the deviation input parameter. If deviation=0 the photons will always be parallel to the z-axis. The photons will be launched from z=-3*fMirrorLength.
 
Double_t PropagatePhoton (const TVector3 &pos, const TVector3 &dir, Double_t energy)
 Propagating photon. More...
 
virtual Int_t SecondMirrorReflection (const TVector3 &pos, const TVector3 &dir)=0
 It updates the values fSecondInteractionPosition and fExitDirection. Returns 0 if is not in region.
 
 ~TRestAxionOptics ()
 Default destructor.
 

Protected Member Functions

Int_t GetMirror ()
 It returns the mirror index to be used in the photon reflection.
 
virtual void SetMirror ()=0
 It must be implemented at the inherited optics, making use of fEntrancePosition.
 
Int_t TransportToEntrance (const TVector3 &pos, const TVector3 &dir)
 It moves the incoming particle at the entrance of the optics plane and returns the region number where the particle is entering. More...
 
Int_t TransportToExit (const TVector3 &pos, const TVector3 &dir)
 It moves the incoming particle to the exit of the optics plane and returns the region number where the particle is entering. More...
 
Int_t TransportToMiddle (const TVector3 &pos, const TVector3 &dir)
 It moves the incoming particle to the middle of the optics plane and returns the region number where the particle is entering. More...
 
 TRestAxionOptics ()
 Default constructor.
 
 TRestAxionOptics (const char *cfgFileName, std::string name="")
 Constructor loading data from a config file. More...
 

Protected Attributes

Int_t fCurrentMirror = -1
 During the photon propagation it keeps track of the active mirror shell.
 
TVector3 fEntranceDirection
 The particle position at the optics plane entrance.
 
TRestCombinedMaskfEntranceMask = nullptr
 The entrance optical mask that defines a pattern with regions identified with a number.
 
TVector3 fEntrancePosition
 The particle position at the optics plane entrance.
 
TVector3 fExitDirection
 The particle position at the optics plane exit.
 
TRestCombinedMaskfExitMask = nullptr
 The exit optical mask that defines a pattern with regions identified with a number.
 
TVector3 fExitPosition
 The particle position at the optics plane exit.
 
Bool_t fFirstInteraction = false
 During the photon propagation it tells us if the photon interacted in the first mirror.
 
TVector3 fFirstInteractionPosition
 The particle position at the front mirror interaction point.
 
Double_t fFocal = -1
 The calculated focal in mm. It is updated by the method TRestAxionOptics::FindFocal.
 
TVector3 fMiddleDirection
 The particle position at the optics plane middle.
 
TRestCombinedMaskfMiddleMask = nullptr
 The middle optical mask that defines a pattern with regions identified with a number.
 
TVector3 fMiddlePosition
 The particle position at the optics plane middle.
 
Double_t fMirrorLength = 0
 The mirror length. If all mirrors got the same length. Otherwise will be zero.
 
TRestAxionOpticsMirrorfMirrorProperties = nullptr
 The mirror properties.
 
std::vector< std::vector< Double_t > > fOpticsData
 The optics data table extracted from fOpticsFile.
 
std::string fOpticsFile = ""
 An optics file that contains all the specific optics parameters.
 
TVector3 fOriginPosition
 The particle position at the origin.
 
TPad * fPad = nullptr
 A pad pointer to be used by the drawing methods.
 
TRandom3 * fRandom = nullptr
 Random number generator.
 
Bool_t fSecondInteraction = false
 During the photon propagation it tells us if the photon interacted in the second mirror.
 
TVector3 fSecondInteractionPosition
 The particle position at the back mirror interaction point.
 

Private Member Functions

Double_t GetPhotonReflectivity (Double_t energy)
 A prototype method to be implemented by specific optics to draw an schematic including the mirrors geometry.
 
void ResetPositions ()
 It reinitializes particle positions and directions at the different optical regions.
 

Constructor & Destructor Documentation

◆ TRestAxionOptics()

TRestAxionOptics::TRestAxionOptics ( const char *  cfgFileName,
std::string  name = "" 
)
protected

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 TRestAxionOptics section inside the RML.

Definition at line 172 of file TRestAxionOptics.cxx.

Member Function Documentation

◆ CalculateSpotSize()

Double_t TRestAxionOptics::CalculateSpotSize ( Double_t  energy,
Double_t  z,
Int_t  particles = 15000 
)

It measures the spot size through Monte Carlo at a given plane given by z. If z=0 this method will check for the spot size at the focal point, which is the default behaviour.

The spot is assumed to be centered at (0,0). We are describing a perfectly aligned optics device.

The Monte Carlo generated photons are also considered to be perfectly aligned with the z-axis.

Definition at line 739 of file TRestAxionOptics.cxx.

◆ DrawDensityMaps()

TPad * TRestAxionOptics::DrawDensityMaps ( Double_t  z,
Double_t  energy = 0,
Double_t  deviation = 0,
Int_t  particles = 1000,
Double_t  focalHint = 7500 
)

It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class.

Focal position will be searched around focalHint within half a meter range.

Definition at line 919 of file TRestAxionOptics.cxx.

◆ DrawParticleTracks()

TPad * TRestAxionOptics::DrawParticleTracks ( Double_t  deviation = 0,
Int_t  particles = 10 
)

A method to draw an optics schematic including the mirrors geometry, and few photon tracks. This method is intended for debugging the photon tracking implementation.

Two optional parameters are allowed:

  • deviation: It controls the maximum random X and Y direction. 0 by default.
  • particles: The number of particles to be launched. 10 by default.

Definition at line 608 of file TRestAxionOptics.cxx.

◆ DrawScatterMaps()

TPad * TRestAxionOptics::DrawScatterMaps ( Double_t  z,
Double_t  energy = 0,
Double_t  deviation = 0,
Int_t  particles = 1000,
Double_t  focalHint = 7500 
)

It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class.

Focal position will be searched around focalHint within half a meter range.

Definition at line 800 of file TRestAxionOptics.cxx.

◆ FindFocal()

Double_t TRestAxionOptics::FindFocal ( Double_t  from,
Double_t  to,
Double_t  energy,
Double_t  precision = 1,
Bool_t  recalculate = false,
Int_t  particles = 5000 
)
virtual

It implements a generic method to identify the optimum focal point. It can be reimplemented at each specific optics class.

It is a statistical method, thus the result contains an implicit statistical error.

It receives 4 arguments.

  • from and to: They define the range where the focal will be searched for.
  • precision: It defines the accuracy required
  • recalculate: If false it will reuse a previous focal point calculation. If true it will force to recalculate the focal point.
  • particles: Number of particles to be launched in order to calculate the spot size.

Definition at line 695 of file TRestAxionOptics.cxx.

◆ PropagatePhoton()

Double_t TRestAxionOptics::PropagatePhoton ( const TVector3 &  pos,
const TVector3 &  dir,
Double_t  energy 
)

Propagating photon.

We move the particle to the entrance optics plane. We update fEntrancePosition

Now that we are placed at the optics entrance plane. We define the current active mirror (same array index for front and back)

We update the position and direction at the first mirror. We update fFirstInteractionPosition and fMiddleDirection

We move the particle to the entrance optics plane. We update fEntrancePosition

We update the position and direction at the second mirror. We update fSecondInteractionPosition and fExitDirection

Definition at line 382 of file TRestAxionOptics.cxx.

◆ TransportToEntrance()

Int_t TRestAxionOptics::TransportToEntrance ( const TVector3 &  pos,
const TVector3 &  dir 
)
protected

It moves the incoming particle at the entrance of the optics plane and returns the region number where the particle is entering.

It updates the value of fEntrancePosition and fEntranceDirection.

If the region is 0, the particle has hit an opaque region and the photon will be lost.

Definition at line 251 of file TRestAxionOptics.cxx.

◆ TransportToExit()

Int_t TRestAxionOptics::TransportToExit ( const TVector3 &  pos,
const TVector3 &  dir 
)
protected

It moves the incoming particle to the exit of the optics plane and returns the region number where the particle is entering.

It updates the value of fExitPosition and fExitDirection.

If the region is 0, the particle has hit an opaque region and the photon will be lost.

Definition at line 311 of file TRestAxionOptics.cxx.

◆ TransportToMiddle()

Int_t TRestAxionOptics::TransportToMiddle ( const TVector3 &  pos,
const TVector3 &  dir 
)
protected

It moves the incoming particle to the middle of the optics plane and returns the region number where the particle is entering.

It updates the value of fMiddlePosition and fMiddleDirection.

If the region is 0, the particle has hit an opaque region and the photon will be lost.

Definition at line 280 of file TRestAxionOptics.cxx.


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