//////////////////////////////////////////////////////////////////////// /// \class RAT::PDFs::MultiPDFFull /// /// \brief Effective time 1d pdfs /// /// \author name Will Parker /// /// /// REVISION HISTORY:\n /// 17/03/2021 : W Parker - New file \n /// /// 16/01/2024 : W Parker - Set radial shell from method (by seed) /// and use one of multiple PDFs per event /// /// \details Returns probabilities for 1d pdfs using the effective /// velocity transit time routine. The pdfs can be split by seed /// vertex radius. /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_PDF_MultiPDFFill__ #define __RAT_PDF_MultiPDFFill__ #include #include class G4PhysicsOrderedFreeVector; namespace RAT { class FitterPMT; namespace DS { class FitVertex; } namespace PDFs { class MultiPDFFull : public PDF { public: double GetProbability( const FitterPMT& pmt, const DS::FitVertex& vertex ); std::string GetName() const { return Name(); } static std::string Name() { return std::string( "multiPDFFull" ); } /// Initialise the PDF void Initialise( const std::string& param ); void BeginOfRun( DS::Run& run ); void EndOfRun( DS::Run& run ); void SetI( const std::string& param, const int val ); void SetS( const std::string& param, const std::string& value ); void SetD( const std::string& param, const double val ); protected: std::string fIndex; // Database index std::vector fProbability; /// < PDF in a convenient interpolating structure unsigned int fNumPDFs; // Number of pdf tables double fSeedRadius; // Seed radius of current event unsigned int fPDFNum; // PDF to use for current event bool fUsePosDep; // Determine if using position dependent pdfs or not std::vector < std::pair > fVertexRange; // Range of seed vertex radii each pdf applies to int fNhits = DS::INVALID; // Nhits of event std::vector fAV_offset; double fAV_offset_z; }; } //::PDFs } //::RAT #endif