//////////////////////////////////////////////////////////////////////// /// \class RAT::PDFs::MultiPDFPartial /// /// \brief 8 Effective time 1d pdfs, split by pmt and event position /// based on ET1D /// /// \author name Will Parker /// /// /// REVISION HISTORY:\n /// 05/10/2020 : W Parker - New file \n /// /// 17/03/2021 : W Parker Use straight line approximation instead of /// full light path calculator /// /// \details Returns probabilities for one of 8 1d pdfs using the effective velocity /// transit time routine. The pdfs are split by pmt z as follows: z<-1.5m; /// -1.51.5, and by event positions as follows (r relative /// to centre of fill level): r<1.5m; r>1.5m. /// //////////////////////////////////////////////////////////////////////// #ifndef __RAT_PDF_MultiPDFPartial__ #define __RAT_PDF_MultiPDFPartial__ #include #include class G4PhysicsOrderedFreeVector; namespace RAT { class FitterPMT; namespace DS { class FitVertex; } namespace PDFs { class MultiPDFPartial : public PDF { public: MultiPDFPartial(); virtual ~MultiPDFPartial() {} double GetProbability( const FitterPMT& pmt, const DS::FitVertex& vertex ); std::string GetName() const { return Name(); } static std::string Name() { return std::string( "multiPDFPartial" ); } /// 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 ); protected: std::string fIndex; //Database index std::vector fProbability; ///< PDF in a convenient interpolating structure unsigned int fNumPDFs; // Number of pdf tables bool fUsePosDep; //determine if using position dependent pdfs or not std::vector > fPMTZRange; // range of PMT postions each pdf applies to std::vector > fVertexPosRange; // range of vertex postions each pdf applies to double fFillLevel; std::vector fAV_offset; double fAV_offset_z; TVector3 fFillLevelCentre;//center of fill level }; } //::PDFs } //::RAT #endif