// // \class RAT::Classifiers::SkyShine // // \brief Classifier to identify noise from the top of the neck // // \author Jeff Tseng // // REVISION HISTORY:\n // 7/8/18: J Tseng - new file\n // 14/3/24: J Tseng - correction to sideFraction to handle divide-by-zero\n // // \details A simple check of counting hits in z windows. // If noise originates from the top of the neck, there should be // a lot of hits near the bottom of the detector, and few // higher up. (Based on a suggestion from M Chen) // // Classifier results: // neckCount = number of neck PMT's (from UnCalPMTs::GetNeckCount()) // topOWLCount = number of owl PMT's above owlLowZ // sideFraction = number of side PMT's / number of low-Z PMT's // if the number of low-Z PMT's = 0, sideFraction is set to // the number of side PMT's, as if the number of low-Z PMT's was 1. // validity = true if sideFraction uses number of low-Z PMT's, // false if the number of low-Z PMT's is 0. // (neckCount and topOWLCount always contain valid results) // #ifndef __RAT_Classifiers_SkyShine #define __RAT_Classifiers_SkyShine #include #include #include namespace RAT { namespace DS { class Run; class EV; } namespace Classifiers { class SkyShine : public Classifier { public: SkyShine() : fSignalHighZ(-1000.0), fSideLowZ(-1000.0), fSideHighZ(8000.0), fOWLLowZ(8000.0) {} virtual std::string GetName() const { return SkyShine::Name(); } static std::string Name() { return std::string("skyshine"); } void Initialise(const std::string&) {} void BeginOfRun(DS::Run& run); void EndOfRun(DS::Run&) {} virtual DS::ClassifierResult GetClassification(); protected: double fSignalHighZ; // max z for signal region double fSideLowZ; // min z for background region double fSideHighZ; // max z for background region double fOWLLowZ; // min z for owl tube count }; } // Classifiers } // RAT #endif