#ifndef __JTRIGGER3DSHOWER__ #define __JTRIGGER3DSHOWER__ #include #include "JTools/JConstants.hh" #include "JROOT/JRoot.hh" #include "JTrigger/JTrigger3D.hh" #include "JTrigger/JHitL0.hh" #include "JTrigger/JMatch3G.hh" namespace JTRIGGER { namespace { using JTOOLS::getInverseSpeedOfLight; using JTOOLS::getIndexOfRefraction; } /** * Shower trigger. */ class JTrigger3DShower : public JTrigger3D { public: /** * Trigger parameters. */ class JParameters { public: /** * Default constructor. */ JParameters() { reset(); } /** * Constructor. * * \param number_of_hits minimal number of hits to trigger event * \param Dmax_m maximal distance between PMTs [m] * \param Tmax_ns maximal extra time [ns] * \param factory_limit maximal number of hits to apply trigger logic (above this limit, always trigger) */ JParameters(const int number_of_hits, const double Dmax_m, const double Tmax_ns, const int factory_limit = FACTORY_LIMIT) : numberOfHits(number_of_hits), DMax_m (Dmax_m), TMaxExtra_ns(Tmax_ns), factoryLimit(factory_limit) {} /** * Virtual destructor. */ virtual ~JParameters() {} /** * Reset trigger parameters. */ void reset() { numberOfHits = 5; DMax_m = 250.0; TMaxExtra_ns = 20.0; factoryLimit = 100; } /** * Type conversion operator. * * \return JTrigger3D parameters */ inline operator JTrigger3D::JParameters() const { const double TMaxEvent_ns = DMax_m * getIndexOfRefraction() * getInverseSpeedOfLight(); return JTrigger3D::JParameters(numberOfHits, TMaxEvent_ns + TMaxExtra_ns, JMatch3G(DMax_m, TMaxExtra_ns), factoryLimit); } ClassDef(JParameters,1); int numberOfHits; double DMax_m; double TMaxExtra_ns; int factoryLimit; }; /** * Constructor. * * \param input trigger parameters */ JTrigger3DShower(const JParameters& input = JParameters()) : JTrigger3D(input), parameters(input) {} JParameters parameters; }; /** * Set trigger bit. */ setTriggerBit(JTrigger3DShower, 1); } #endif