////////////////////////////////////////////////////////////////////
/// \class RAT::DU::Utility
///
/// \brief Return the total transit time given the effective group velocities
///
/// \author Phil G Jones
///
/// REVISION HISTORY:\n
/// - 2014-03-02 : P G Jones - new file
/// - 2016-07-20 : M. Mottram: add ROOT IO constructor for ROOT6 compatibility.
/// - 2017-12-05 : I. Coulter: add ReactorNuOsc
///
/// \details This is the global Utility (data utility) class that
/// contains various useful database derived information classes,
/// e.g. PMT information.
///
/// It can be used in RAT, ROOT or external programs that link to
/// the libRATEvent library.
///
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
/// \namespace RAT::DU
///
/// \brief The Data Utility Namespace
///
/// \details This namespace contains all the classes that make up the
/// data utility. These classes simply ratdb access in both rat and
/// root.
///
////////////////////////////////////////////////////////////////////
#ifndef __RAT_DU_Utility___
#define __RAT_DU_Utility___
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
class TRootIOCtor;
namespace RAT
{
namespace DU
{
class Utility : public TObject
{
public:
/// Singleton accessor
///
/// @return pointer to the Utility instance
inline static Utility* Get();
/// Helper method to load and begin a run.
///
/// This initialises the global database for a run and calls the appropriate
/// BeginOfRun methods. This should be used in the absence of a ROOT file to
/// set the global state up for a specific run.
static void LoadDBAndBeginRun();
/// Called at the beginning of the run to load from the database
void BeginOfRun();
/// Get the PMT information
///
/// @return reference to the PMTInfo
const PMTInfo& GetPMTInfo() const { return fPMTInfo; }
/// Get the Panel information
///
/// @return reference to the PanelInfo
const PanelInfo& GetPanelInfo() const { return fPanelInfo; }
/// Get the channel hardware status info (DQXX)
///
/// @return reference to the ChanHWStatus
const ChanHWStatus& GetChanHWStatus() const { return fChanHWStatus; }
/// Get the PMT calibration status
///
/// @return reference to the PMTCalStatus
const PMTCalStatus& GetPMTCalStatus() const { return fPMTCalStatus; }
/// Get the Reactor Anti-nu oscillation state
///
/// @return reference to the ReactorNuOsc
const ReactorNuOsc& GetReactorNuOsc() const { return fReactorNuOsc; }
/// Get the Segmentor
///
/// @return reference to the Segmentor
Segmentor& GetSegmentor() { return fSegmentor; }
/// Get the Light Path information
///
/// @return copy of the Light Path
LightPathCalculator GetLightPathCalculator() { return fLightPathCalculator; }
/// Get the Group Velocity information
///
/// @return reference to the Group Velocity
const GroupVelocity& GetGroupVelocity() const { return fGroupVelocity; }
/// Get the Effective Velocity information
///
/// @return reference to the Effective Velocity
const EffectiveVelocity& GetEffectiveVelocity() const { return fEffectiveVelocity; }
/// Get the data cleaning bit mnemonics
///
/// @return reference to the Data Cleaning bit info
const DataCleaningBits& GetDataCleaningBits() const { return fDataCleaningBits; }
/// Get the data quality bit mnemonics
///
/// @return reference to the Data Cleaning bit info
const DataQualityBits& GetDataQualityBits() const { return fDataQualityBits; }
/// Get the channel software status utility
///
/// @return reference to the Channel Software Status utility
const ChanSWStatus& GetChanSWStatus() const { return fChanSWStatus; }
/// Get the trigger bit mnemonics
///
/// @return reference to the Trigger bit info
const TrigBits& GetTrigBits() const { return fTrigBits; }
/// Get the shadowing utility
///
/// @return reference to the shadowing utility
const ShadowingCalculator& GetShadowingCalculator() const { return fShadowingCalculator; }
/// Get the energy correction utility
///
/// @return reference to the corrector utility
const ReconCorrector& GetReconCorrector() const { return fReconCorrector; }
/// Get the energy calibration utility
///
/// @return reference to the calibrator utility
const ReconCalibrator& GetReconCalibrator() const { return fReconCalibrator; }
// For ROOT6 build
Utility(TRootIOCtor*) : TObject() { };
// This ROOT macro adds dictionary methods to this class.
// The number is 0 as this class is never, and should never be written to disc.
// It assumes this class has no virtual methods, use ClassDef if change this.
ClassDefNV( Utility, 0 );
private:
PMTInfo fPMTInfo; ///< PMT Information
PanelInfo fPanelInfo; ///< Panel Information
ChanHWStatus fChanHWStatus; ///< Channel Hardware Status information
PMTCalStatus fPMTCalStatus; ///< PMTCal Status information
ReactorNuOsc fReactorNuOsc; ///< Apply reactor anti-nu oscillations
Segmentor fSegmentor; ///< Segmentor
LightPathCalculator fLightPathCalculator; ///< Light Path information
GroupVelocity fGroupVelocity; ///< Group Velocity information
EffectiveVelocity fEffectiveVelocity; ///< Effective Velocity information
DataCleaningBits fDataCleaningBits; ///< Data cleaning bit mnemonics
DataQualityBits fDataQualityBits; ///< Data quality bit mnemonics
ChanSWStatus fChanSWStatus; ///< Channel software status bit mnemonics
TrigBits fTrigBits; ///< Data quality bit mnemonics
ShadowingCalculator fShadowingCalculator; ///< Shadowing utility
ReconCorrector fReconCorrector; ///< EnergyRSP correction
ReconCalibrator fReconCalibrator; ///< Energy calibration functions
/// Prevent usage of methods below
Utility() : TObject() { };
Utility( Utility& ) : TObject() { }
void operator=( Utility& ) { }
};
inline Utility*
Utility::Get()
{
static Utility utility;
return &utility;
}
} // namespace DU
} // namespace RAT
#endif