/////////////////////////////////////////////////////////////////////////////// /// \class RAT::DU::ReactorNuOsc /// /// Processor for applying the neutrino oscillatinos effect to reactor /// antineutrinos. /// /// Author: Stefan-Alexandru Nae /// Ian Coulter /// /// REVISION HISTORY: /// 2017-12-04 : I Coulter - Initial commit based on Stefan's processor /// 2019-04-22 : Logan Lebanowski - Use full three-flavor formula, /// generalize imported set of defaults. /// /// ReactorNuOsc is evaluates if an antineutrino should have oscillated. /// If the antineutrino oscillated, it returns OKFALSE, else it returns OKTRUE. /// /// Requires reactor entries in REACTORS.ratdb to have a "distance" /// entry (label) with values for each core in [km]. "index" entries /// (labels) with values corresponding to reactors found in the .root /// reactor antineutrino events file used as input MUST exist (the /// detabase will throw an error in case the reactor does not exist). /////////////////////////////////////////////////////////////////////////////// #ifndef __RAT_DU_ReactorNuOsc__ #define __RAT_DU_ReactorNuOsc__ #include namespace RAT { namespace DU { class ReactorNuOsc { public: /// Load values and perform base calculations void BeginOfRun(); /// Select whether an anti-nu has oscillated given /// its energy and source reactor /// /// @param[in] kinetic energy of neutrino [MeV] /// name of reactor /// @return oscillation state of neutrino bool ReactorOsc( const double nuKE, std::string coreData ); /// Determine probability of oscillation given the /// kinetic energy and baseline and set it in fOscProb /// /// @param[in] kinetic energy of neutrino [MeV] /// baseline [km] void OscProbability(const double &energy, const double &baseline); /// Return whether the neutrino has oscillated given /// the probability in fOscProb /// /// @return oscillation state of the neutrino bool Sample(); protected: DBLinkPtr fLink; // for REACTORS.ratdb access // for OSCILLATIONS.ratdb access std::vector fLatitude; // std::vector fLongitute; // std::vector fAltitude; // double fOscProb; // OscProbability() value double fDmSqr21; // oscillation parameter double fDmSqr32; // oscillation parameter double fSSqrTheta12; // oscillation parameter double fSSqrTheta13; // oscillation parameter double fSSqr2Theta12; double fSSqr2Theta13; double fS4; double fC4; }; } // ::DU } // namespace RAT #endif