//////////////////////////////////////////////////////////////////////////////// /// \class RAT::LP::LightPathStraightScint /// /// \brief LightPath fitter using straight lines through water and scintillator /// only, in full fill. Esssentially assumes infinitesimally thin AV. /// /// Code optimised for specific situation of quickly fitting straight lines in /// full fill. Public function GetPath can be called to bypass using Light /// Paths and Point3Ds to give faster results. //////////////////////////////////////////////////////////////////////////////// #ifndef __RAT_LP_LightPathStraightScint__ #define __RAT_LP_LightPathStraightScint__ #include #include #include #include namespace RAT { namespace LP { class LightPathStraightScint : public LightPathFitter { public: /// Initialize geometry static void BeginOfRun(); static std::string Name() { return std::string("LightPathStraightScint"); } LightPathStraightScint() { } virtual LightPath& Fit(LightPath& startPath) const; virtual Double_t GetSolidAngle(const LightPath& lightPath, const TVector3& pmtNorm, UInt_t nVal, Double_t& cosThetaAvg) const; static void GetPath(TVector3 fPMTpos, TVector3 fVertex, double &distInWater, double &distInScint); private: static std::vector fAV_offset; static Double_t fAV_offset_z; static Double_t fAVRadiusOuter; // outer radius, 6060 mm static Double_t fAVRadius; // inner radius, 6005 mm static Double_t fBoundary; static Double_t fPSUPRadius; static Double_t fPMTRadius; static std::vector pStart; static Double_t distInTarget; static Double_t distInWater; static RAT::DU::Point3D startPoint; static RAT::DU::Point3D endPoint; static RAT::DU::Point3D interPoint; static TVector3 startVec; static TVector3 endVec; static TVector3 dirVec; }; // class LightPathStraightScint } // namespace LP } // namespace RAT #endif