//////////////////////////////////////////////////////////////////////// /// \class RAT::ScintFitter /// /// \brief Scintillator phase fitter /// /// \author Phil Jones \n /// \author Matt Mottram < m.mottram@qmul.ac.uk> -- contact person /// /// REVISION HISTORY: /// - 27/04/2011 : P.Jones - First Revision, new file. /// - 2014-03-29 : P G Jones - Updated lifetime, added BeginOfRun method /// - 2014-07-20 : A Soerenson - Added muon fitting. /// - 2014-09-16 : K Majumdar - Changed energy fitting from Lookup to Functional Form /// - 2014-12-09 : P G Jones - Allow chained PMTSelectors /// - 2015-04-08 : M Mottram - Added BerkeleyAlphaBeta classifier and BiPo classifiers /// - 2015-08-03 : M Mottram - Bug fix for Muon fitters /// - 2016-01-14 : M Mottram - Add SetFOMs /// - 2016-05-19 : M Mottram - Update energy to EnergyRThetaFunctional /// - 2016-07-20 : M Mottram - add nearAVAngular and positionANN /// - 2018-10-05 : T Kroupa - Add Ext0NuCosTheta and Ext0NuTimeRes classifiers /// /// \details Best (as defined by reconstruction group) scint phase fitter /// combination. /// Will FAIL if either position/time or energy components /// throw. /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_ScintFitter__ #define __RAT_ScintFitter__ #include namespace RAT { namespace DS { class EV; } namespace Methods { class Method; } namespace PDFs { class PDF; } namespace Optimisers { class Optimiser; } namespace PMTSelectors { class PMTSelector; } namespace Classifiers { class Classifier; } namespace DS{ class FitResult; } class ScintFitter : public Processor { public: ScintFitter(); virtual ~ScintFitter(); /// Called at the beginning of runs to setup the scintFitter /// /// @param[in] run void BeginOfRun( DS::Run& run ); /// Called to invoke the scintFitter /// /// @param[in, out] run Data structure for the run /// @param[in, out] ds Data structure for the event virtual Processor::Result DSEvent( DS::Run& run, DS::Entry& ds ); /// Called at the end of runs /// /// @param[in] run void EndOfRun( DS::Run& run ); protected: virtual Processor::Result Event( DS::Run& run, DS::EV& ev ); // Sets 'scintFitter' result in EV data structure Processor::Result SetResult( DS::FitResult& scintResult, DS::EV& ev, size_t currentPass ); // Sets 'scintFitter' result in EV data structure for muons (includes direction fit) Processor::Result SetMuonResult( DS::FitResult& scintResult, DS::EV& ev, size_t currentPass ); // Default fitters may have subroutines that set the same FOM name for different parameters // Add a prefix for the FOM name in the final result to distinguish them. void SetFOMs( DS::FitResult& fitResult, const DS::FitResult& partialResult, const std::string& prefix ); Methods::Method* fQuadSeed; Methods::Method* fPositionTime; Methods::Method* fMuonWater; Methods::Method* fMuonScintillator; Methods::Method* fPositionANN; Optimisers::Optimiser* fPowell; Optimisers::Optimiser* fBiPoLikelihoodDiffOptimiser; Optimisers::Optimiser* fGridOptimiser; PMTSelectors::PMTSelector* fNullSelector; PDFs::PDF* fET1D; Methods::Method* fEnergyMethod; Classifiers::Classifier* fITR; Classifiers::Classifier* fQPDT; Classifiers::Classifier* fTimingPeaks; Classifiers::Classifier* fMeanTime; Classifiers::Classifier* fPreTriggerHits; Classifiers::Classifier* fIsoRegions; Classifiers::Classifier* fEarlyTime; Classifiers::Classifier* fBiPoCumulTimeResid; Classifiers::Classifier* fBiPo212LikelihoodDiff; Classifiers::Classifier* fBiPo214LikelihoodDiff; Classifiers::Classifier* fBiPo212Classifier; Classifiers::Classifier* fBiPo214Classifier; Classifiers::Classifier* fBerkeleyAlphaBeta; Classifiers::Classifier* fMuonClassifier; Classifiers::Classifier* fNearAVAngular; Classifiers::Classifier* fExt0NuCosThetaTl208AV; Classifiers::Classifier* fExt0NuCosThetaTl208Hdropes; Classifiers::Classifier* fExt0NuCosThetaTl208Exwater; Classifiers::Classifier* fExt0NuCosThetaPMTbg; Classifiers::Classifier* fExt0NuTimeResTl208AV; Classifiers::Classifier* fExt0NuTimeResTl208Hdropes; Classifiers::Classifier* fExt0NuTimeResTl208Exwater; Classifiers::Classifier* fExt0NuTimeResPMTbg; Classifiers::Classifier* fExt0NuTimeResNaiveTl208AV; Classifiers::Classifier* fExt0NuTimeResNaiveTl208Hdropes; Classifiers::Classifier* fExt0NuTimeResNaiveTl208Exwater; Classifiers::Classifier* fExt0NuTimeResNaivePMTbg; Classifiers::Classifier* fExt0NuTimeResOffsetTl208AV; Classifiers::Classifier* fExt0NuTimeResOffsetTl208Hdropes; size_t fCutOff; ///< Lower limit to which the quad method is an acceptable seed }; } // ::RAT #endif